From d700897e0a9e5eac060b12a687d55606535ca5e9 Mon Sep 17 00:00:00 2001 From: Brock Allen Date: Mon, 19 Jul 2021 10:32:11 -0400 Subject: [PATCH] 1.11.6-beta.1 --- dist/oidc-client.js | 4 ++-- dist/oidc-client.min.js | 2 +- dist/oidc-client.rsa256.slim.js | 4 ++-- dist/oidc-client.rsa256.slim.min.js | 2 +- dist/oidc-client.slim.js | 4 ++-- dist/oidc-client.slim.min.js | 2 +- lib/oidc-client.js | 4 ++-- lib/oidc-client.min.js | 2 +- lib/oidc-client.rsa256.js | 4 ++-- lib/oidc-client.rsa256.min.js | 2 +- package.json | 2 +- version.js | 2 +- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/dist/oidc-client.js b/dist/oidc-client.js index c9bc2ef7..be3c1c2d 100644 --- a/dist/oidc-client.js +++ b/dist/oidc-client.js @@ -24375,7 +24375,7 @@ module.exports = exports['default']; Object.defineProperty(exports, "__esModule", { value: true }); -var Version = "1.11.5";exports.Version = Version; +var Version = "1.11.6-beta.1";exports.Version = Version; /***/ }), @@ -24393,4 +24393,4 @@ module.exports = __webpack_require__(/*! ./index.js */"./index.js"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tdG8tanNvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbnZva2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZm9yY2VkLXBhbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZXBsYWNlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcmVwZWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VzZXItYWdlbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1leHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY29zaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2luaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ibGluay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmltdWxoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9BY2Nlc3NUb2tlbkV2ZW50cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0Nsb2NrU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFJRnJhbWVOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhUG9wdXBOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9FcnJvclJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvRXZlbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9HbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9JRnJhbWVOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9JRnJhbWVXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Kb3NlVXRpbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pvc2VVdGlsSW1wbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pzb25TZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvTG9nLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvTWV0YWRhdGFTZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvT2lkY0NsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL09pZGNDbGllbnRTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1BvcHVwTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUG9wdXBXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9SZWRpcmVjdE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Jlc3BvbnNlVmFsaWRhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2Vzc2lvbk1vbml0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5SZXF1ZXN0LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5TdGF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25vdXRSZXF1ZXN0LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbm91dFJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lsZW50UmVuZXdTZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU3RhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9UaW1lci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Rva2VuQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXJsVXRpbGl0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VySW5mb1NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyRXZlbnRzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXJTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvY3J5cHRvL2pzcnNhc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL3JhbmRvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vdmVyc2lvbi5qcyJdLCJuYW1lcyI6WyJWZXJzaW9uIiwiTG9nIiwiT2lkY0NsaWVudCIsIk9pZGNDbGllbnRTZXR0aW5ncyIsIldlYlN0b3JhZ2VTdGF0ZVN0b3JlIiwiSW5NZW1vcnlXZWJTdG9yYWdlIiwiVXNlck1hbmFnZXIiLCJBY2Nlc3NUb2tlbkV2ZW50cyIsIk1ldGFkYXRhU2VydmljZSIsIkNvcmRvdmFQb3B1cE5hdmlnYXRvciIsIkNvcmRvdmFJRnJhbWVOYXZpZ2F0b3IiLCJDaGVja1Nlc3Npb25JRnJhbWUiLCJUb2tlblJldm9jYXRpb25DbGllbnQiLCJTZXNzaW9uTW9uaXRvciIsIkdsb2JhbCIsIlVzZXIiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ3aW5kb3ciLCJDcnlwdG9KUyIsImUiLCJnIiwiYSIsImIiLCJsaWIiLCJqIiwiQmFzZSIsIm4iLCJleHRlbmQiLCJwIiwicHJvdG90eXBlIiwibyIsIm1peEluIiwiaGFzT3duUHJvcGVydHkiLCJpbml0IiwiJHN1cGVyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjcmVhdGUiLCJ0b1N0cmluZyIsImNsb25lIiwibCIsIldvcmRBcnJheSIsIndvcmRzIiwic2lnQnl0ZXMiLCJsZW5ndGgiLCJoIiwic3RyaW5naWZ5IiwiY29uY2F0IiwidCIsInEiLCJzIiwiY2xhbXAiLCJyIiwiY2VpbCIsImNhbGwiLCJzbGljZSIsInJhbmRvbSIsInB1c2giLCJtIiwiZW5jIiwiSGV4Iiwiam9pbiIsInBhcnNlIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJkIiwiTGF0aW4xIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsImMiLCJVdGY4IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiRXJyb3IiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImkiLCJCdWZmZXJlZEJsb2NrQWxnb3JpdGhtIiwicmVzZXQiLCJfZGF0YSIsIl9uRGF0YUJ5dGVzIiwiX2FwcGVuZCIsIl9wcm9jZXNzIiwidyIsIngiLCJibG9ja1NpemUiLCJ2IiwidSIsIm1heCIsIl9taW5CdWZmZXJTaXplIiwibWluIiwiX2RvUHJvY2Vzc0Jsb2NrIiwic3BsaWNlIiwiZiIsIkhhc2hlciIsImNmZyIsIl9kb1Jlc2V0IiwidXBkYXRlIiwiZmluYWxpemUiLCJfZG9GaW5hbGl6ZSIsIl9jcmVhdGVIZWxwZXIiLCJfY3JlYXRlSG1hY0hlbHBlciIsImsiLCJITUFDIiwiYWxnbyIsIk1hdGgiLCJ4NjQiLCJXb3JkIiwiaGlnaCIsImxvdyIsInRvWDMyIiwiQmFzZTY0IiwiX21hcCIsImNoYXJBdCIsImluZGV4T2YiLCJzcXJ0IiwicG93IiwiU0hBMjU2IiwiX2hhc2giLCJmbG9vciIsIkhtYWNTSEEyNTYiLCJUIiwiZWEiLCJTSEE1MTIiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIlgiLCJLIiwiWSIsIkwiLCJaIiwiTSIsIiQiLCJOIiwiYWEiLCJPIiwiYmEiLCJQIiwiY2EiLCJRIiwieiIsIkEiLCJ5IiwiVSIsIkIiLCJSIiwiQyIsIlMiLCJEIiwiViIsIkUiLCJXIiwiZmEiLCJkYSIsIkhtYWNTSEE1MTIiLCJTSEEzODQiLCJIbWFjU0hBMzg0IiwiYjY0bWFwIiwiYjY0cGFkIiwiaGV4MmI2NCIsInN1YnN0cmluZyIsImI2NHRvaGV4IiwiaW50MmNoYXIiLCJiNjR0b0JBIiwiQXJyYXkiLCJkYml0cyIsImNhbmFyeSIsImpfbG0iLCJCaWdJbnRlZ2VyIiwiZnJvbU51bWJlciIsImZyb21TdHJpbmciLCJuYmkiLCJhbTEiLCJhbTIiLCJhbTMiLCJhcHBOYW1lIiwiYW0iLCJEQiIsIkRNIiwiRFYiLCJCSV9GUCIsIkZWIiwiRjEiLCJGMiIsIkJJX1JNIiwiQklfUkMiLCJyciIsInZ2IiwiaW50QXQiLCJibnBDb3B5VG8iLCJibnBGcm9tSW50IiwibmJ2IiwiZnJvbUludCIsImJucEZyb21TdHJpbmciLCJmcm9tUmFkaXgiLCJaRVJPIiwic3ViVG8iLCJibnBDbGFtcCIsImJuVG9TdHJpbmciLCJuZWdhdGUiLCJ0b1JhZGl4IiwiYm5OZWdhdGUiLCJibkFicyIsImJuQ29tcGFyZVRvIiwibmJpdHMiLCJibkJpdExlbmd0aCIsImJucERMU2hpZnRUbyIsImJucERSU2hpZnRUbyIsImJucExTaGlmdFRvIiwiYm5wUlNoaWZ0VG8iLCJibnBTdWJUbyIsImJucE11bHRpcGx5VG8iLCJhYnMiLCJibnBTcXVhcmVUbyIsImJucERpdlJlbVRvIiwiY29weVRvIiwibFNoaWZ0VG8iLCJkbFNoaWZ0VG8iLCJjb21wYXJlVG8iLCJPTkUiLCJkclNoaWZ0VG8iLCJyU2hpZnRUbyIsImJuTW9kIiwiZGl2UmVtVG8iLCJDbGFzc2ljIiwiY0NvbnZlcnQiLCJtb2QiLCJjUmV2ZXJ0IiwiY1JlZHVjZSIsImNNdWxUbyIsIm11bHRpcGx5VG8iLCJyZWR1Y2UiLCJjU3FyVG8iLCJzcXVhcmVUbyIsImNvbnZlcnQiLCJyZXZlcnQiLCJtdWxUbyIsInNxclRvIiwiYm5wSW52RGlnaXQiLCJNb250Z29tZXJ5IiwibXAiLCJpbnZEaWdpdCIsIm1wbCIsIm1waCIsInVtIiwibXQyIiwibW9udENvbnZlcnQiLCJtb250UmV2ZXJ0IiwibW9udFJlZHVjZSIsIm1vbnRTcXJUbyIsIm1vbnRNdWxUbyIsImJucElzRXZlbiIsImJucEV4cCIsImJuTW9kUG93SW50IiwiaXNFdmVuIiwiZXhwIiwiYml0TGVuZ3RoIiwibW9kUG93SW50IiwiYm5DbG9uZSIsImJuSW50VmFsdWUiLCJibkJ5dGVWYWx1ZSIsImJuU2hvcnRWYWx1ZSIsImJucENodW5rU2l6ZSIsIkxOMiIsImxvZyIsImJuU2lnTnVtIiwiYm5wVG9SYWRpeCIsInNpZ251bSIsImNodW5rU2l6ZSIsImludFZhbHVlIiwiYm5wRnJvbVJhZGl4IiwiZE11bHRpcGx5IiwiZEFkZE9mZnNldCIsImJucEZyb21OdW1iZXIiLCJ0ZXN0Qml0IiwiYml0d2lzZVRvIiwic2hpZnRMZWZ0Iiwib3Bfb3IiLCJpc1Byb2JhYmxlUHJpbWUiLCJuZXh0Qnl0ZXMiLCJiblRvQnl0ZUFycmF5IiwiYm5FcXVhbHMiLCJibk1pbiIsImJuTWF4IiwiYm5wQml0d2lzZVRvIiwib3BfYW5kIiwiYm5BbmQiLCJibk9yIiwib3BfeG9yIiwiYm5Yb3IiLCJvcF9hbmRub3QiLCJibkFuZE5vdCIsImJuTm90IiwiYm5TaGlmdExlZnQiLCJiblNoaWZ0UmlnaHQiLCJsYml0IiwiYm5HZXRMb3dlc3RTZXRCaXQiLCJjYml0IiwiYm5CaXRDb3VudCIsImJuVGVzdEJpdCIsImJucENoYW5nZUJpdCIsImJuU2V0Qml0IiwiY2hhbmdlQml0IiwiYm5DbGVhckJpdCIsImJuRmxpcEJpdCIsImJucEFkZFRvIiwiYm5BZGQiLCJhZGRUbyIsImJuU3VidHJhY3QiLCJibk11bHRpcGx5IiwiYm5TcXVhcmUiLCJibkRpdmlkZSIsImJuUmVtYWluZGVyIiwiYm5EaXZpZGVBbmRSZW1haW5kZXIiLCJibnBETXVsdGlwbHkiLCJibnBEQWRkT2Zmc2V0IiwiTnVsbEV4cCIsIm5Ob3AiLCJuTXVsVG8iLCJuU3FyVG8iLCJiblBvdyIsImJucE11bHRpcGx5TG93ZXJUbyIsImJucE11bHRpcGx5VXBwZXJUbyIsIkJhcnJldHQiLCJyMiIsInEzIiwibXUiLCJkaXZpZGUiLCJiYXJyZXR0Q29udmVydCIsImJhcnJldHRSZXZlcnQiLCJiYXJyZXR0UmVkdWNlIiwibXVsdGlwbHlVcHBlclRvIiwibXVsdGlwbHlMb3dlclRvIiwiYmFycmV0dFNxclRvIiwiYmFycmV0dE11bFRvIiwiYm5Nb2RQb3ciLCJibkdDRCIsImdldExvd2VzdFNldEJpdCIsImJucE1vZEludCIsImJuTW9kSW52ZXJzZSIsInN1YnRyYWN0IiwiYWRkIiwibG93cHJpbWVzIiwibHBsaW0iLCJibklzUHJvYmFibGVQcmltZSIsIm1vZEludCIsIm1pbGxlclJhYmluIiwiYm5wTWlsbGVyUmFiaW4iLCJzaGlmdFJpZ2h0IiwibW9kUG93IiwiYnl0ZVZhbHVlIiwic2hvcnRWYWx1ZSIsInRvQnl0ZUFycmF5IiwiZXF1YWxzIiwiYW5kIiwib3IiLCJ4b3IiLCJhbmROb3QiLCJub3QiLCJiaXRDb3VudCIsInNldEJpdCIsImNsZWFyQml0IiwiZmxpcEJpdCIsIm11bHRpcGx5IiwicmVtYWluZGVyIiwiZGl2aWRlQW5kUmVtYWluZGVyIiwibW9kSW52ZXJzZSIsImdjZCIsInNxdWFyZSIsIkFyY2ZvdXIiLCJBUkM0aW5pdCIsIkFSQzRuZXh0IiwibmV4dCIsInBybmdfbmV3c3RhdGUiLCJybmdfcHNpemUiLCJybmdfc3RhdGUiLCJybmdfcG9vbCIsInJuZ19wcHRyIiwicm5nX3NlZWRfaW50Iiwicm5nX3NlZWRfdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwidW5kZWZpbmVkIiwiY3J5cHRvIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJ1YSIsIlVpbnQ4QXJyYXkiLCJhcHBWZXJzaW9uIiwicm5nX2dldF9ieXRlIiwicm5nX2dldF9ieXRlcyIsIlNlY3VyZVJhbmRvbSIsInBhcnNlQmlnSW50IiwibGluZWJyayIsImJ5dGUySGV4IiwicGtjczFwYWQyIiwib2FlcF9tZ2YxX2FyciIsIm9hZXBfcGFkIiwiS0pVUiIsIk1lc3NhZ2VEaWdlc3QiLCJVdGlsIiwiZ2V0Q2Fub25pY2FsQWxnTmFtZSIsImdldEhhc2hMZW5ndGgiLCJoZXh0b3JzdHIiLCJoYXNoSGV4IiwicnN0cnRvaGV4IiwiUlNBS2V5IiwiZG1wMSIsImRtcTEiLCJjb2VmZiIsIlJTQVNldFB1YmxpYyIsImlzUHVibGljIiwiaXNQcml2YXRlIiwiUlNBRG9QdWJsaWMiLCJSU0FFbmNyeXB0IiwiZG9QdWJsaWMiLCJSU0FFbmNyeXB0T0FFUCIsInNldFB1YmxpYyIsImVuY3J5cHQiLCJlbmNyeXB0T0FFUCIsInR5cGUiLCJFQ0ZpZWxkRWxlbWVudEZwIiwiZmVGcEVxdWFscyIsImZlRnBUb0JpZ0ludGVnZXIiLCJmZUZwTmVnYXRlIiwiZmVGcEFkZCIsInRvQmlnSW50ZWdlciIsImZlRnBTdWJ0cmFjdCIsImZlRnBNdWx0aXBseSIsImZlRnBTcXVhcmUiLCJmZUZwRGl2aWRlIiwiRUNQb2ludEZwIiwiY3VydmUiLCJ6aW52IiwicG9pbnRGcEdldFgiLCJmcm9tQmlnSW50ZWdlciIsInBvaW50RnBHZXRZIiwicG9pbnRGcEVxdWFscyIsImlzSW5maW5pdHkiLCJwb2ludEZwSXNJbmZpbml0eSIsInBvaW50RnBOZWdhdGUiLCJwb2ludEZwQWRkIiwidHdpY2UiLCJnZXRJbmZpbml0eSIsInBvaW50RnBUd2ljZSIsInBvaW50RnBNdWx0aXBseSIsInBvaW50RnBNdWx0aXBseVR3byIsImdldFgiLCJnZXRZIiwibXVsdGlwbHlUd28iLCJFQ0N1cnZlRnAiLCJpbmZpbml0eSIsImN1cnZlRnBHZXRRIiwiY3VydmVGcEdldEEiLCJjdXJ2ZUZwR2V0QiIsImN1cnZlRnBFcXVhbHMiLCJjdXJ2ZUZwR2V0SW5maW5pdHkiLCJjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIiLCJjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgiLCJnZXRRIiwiZ2V0QSIsImdldEIiLCJkZWNvZGVQb2ludEhleCIsImdldEJ5dGVMZW5ndGgiLCJnZXRFbmNvZGVkIiwidG9CeXRlQXJyYXlVbnNpZ25lZCIsInVuc2hpZnQiLCJkZWNvZGVGcm9tIiwiZGVjb2RlRnJvbUhleCIsImFkZDJEIiwidHdpY2UyRCIsInZhbHVlT2YiLCJtdWx0aXBseTJEIiwiaXNPbkN1cnZlIiwidmFsaWRhdGUiLCJqc29uUGFyc2UiLCJSZWdFeHAiLCJPYmplY3QiLCJtYXRjaCIsInJlcGxhY2UiLCJzaGlmdCIsImFzbjEiLCJBU04xVXRpbCIsImludGVnZXJUb0J5dGVIZXgiLCJiaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleCIsImdldFBFTVN0cmluZ0Zyb21IZXgiLCJoZXh0b3BlbSIsIm5ld09iamVjdCIsIkFTTjFPYmplY3QiLCJERVJCb29sZWFuIiwiREVSSW50ZWdlciIsIkRFUkJpdFN0cmluZyIsIkRFUk9jdGV0U3RyaW5nIiwiREVSTnVsbCIsIkRFUk9iamVjdElkZW50aWZpZXIiLCJERVJFbnVtZXJhdGVkIiwiREVSVVRGOFN0cmluZyIsIkRFUk51bWVyaWNTdHJpbmciLCJERVJQcmludGFibGVTdHJpbmciLCJERVJUZWxldGV4U3RyaW5nIiwiREVSSUE1U3RyaW5nIiwiREVSVVRDVGltZSIsIkRFUkdlbmVyYWxpemVkVGltZSIsIkRFUlZpc2libGVTdHJpbmciLCJERVJCTVBTdHJpbmciLCJERVJTZXF1ZW5jZSIsIkRFUlNldCIsIkRFUlRhZ2dlZE9iamVjdCIsImtleXMiLCJhcnJheSIsInRhZyIsImV4cGxpY2l0Iiwib2JqIiwianNvblRvQVNOMUhFWCIsImdldEVuY29kZWRIZXgiLCJvaWRIZXhUb0ludCIsIm9pZEludFRvSGV4Iiwic3BsaXQiLCJwYXJhbXMiLCJnZXRMZW5ndGhIZXhGcm9tVmFsdWUiLCJoViIsImhUTFYiLCJpc01vZGlmaWVkIiwiZ2V0RnJlc2hWYWx1ZUhleCIsImhMIiwiaFQiLCJnZXRWYWx1ZUhleCIsInNldEJ5UGFyYW0iLCJ0bHYiLCJERVJBYnN0cmFjdFN0cmluZyIsInN1cGVyY2xhc3MiLCJjb25zdHJ1Y3RvciIsImdldFN0cmluZyIsInNldFN0cmluZyIsInV0Zjh0b2hleCIsInRvTG93ZXJDYXNlIiwic2V0U3RyaW5nSGV4Iiwic3RyIiwiaGV4IiwiZXh0ZW5kQ2xhc3MiLCJERVJBYnN0cmFjdFRpbWUiLCJsb2NhbERhdGVUb1VUQyIsImdldFRpbWV6b25lT2Zmc2V0IiwiZm9ybWF0RGF0ZSIsInplcm9QYWRkaW5nIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwic3RvaGV4Iiwic2V0QnlEYXRlVmFsdWUiLCJVVEMiLCJzZXRCeURhdGUiLCJERVJBYnN0cmFjdFN0cnVjdHVyZWQiLCJzZXRCeUFTTjFPYmplY3RBcnJheSIsImFzbjFBcnJheSIsImFwcGVuZEFTTjFPYmplY3QiLCJzZXRCeUJpZ0ludGVnZXIiLCJzZXRCeUludGVnZXIiLCJzZXRWYWx1ZUhleCIsImJpZ2ludCIsInNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyIsInNldFVudXNlZEJpdHNBbmRIZXhWYWx1ZSIsInNldEJ5QmluYXJ5U3RyaW5nIiwic2V0QnlCb29sZWFuQXJyYXkiLCJuZXdGYWxzZUFycmF5IiwiYmluIiwic2V0VmFsdWVPaWRTdHJpbmciLCJvaWR0b2hleCIsInNldFZhbHVlTmFtZSIsIng1MDkiLCJPSUQiLCJuYW1lMm9pZCIsInNldFZhbHVlTmFtZU9yT2lkIiwib2lkIiwibmFtZSIsImRhdGUiLCJ3aXRoTWlsbGlzIiwibWlsbGlzIiwic29ydEZsYWciLCJzb3J0Iiwic29ydGZsYWciLCJpc0V4cGxpY2l0IiwiYXNuMU9iamVjdCIsInNldEFTTjFPYmplY3QiLCJ0YWdlIiwidGFnaSIsIkFTTjFIRVgiLCJnZXRMYmxlbiIsImdldEwiLCJnZXRWYmxlbiIsImdldFZpZHgiLCJnZXRWIiwiZ2V0VExWIiwiZ2V0VExWYmxlbiIsImdldE5leHRTaWJsaW5nSWR4IiwiZ2V0Q2hpbGRJZHgiLCJnZXROdGhDaGlsZElkeCIsImdldElkeGJ5TGlzdCIsImdldElkeGJ5TGlzdEV4IiwiaXNDb250ZXh0VGFnIiwiZ2V0VExWYnlMaXN0IiwiZ2V0VExWYnlMaXN0RXgiLCJnZXRWYnlMaXN0IiwiZ2V0VmJ5TGlzdEV4IiwiZ2V0SW50IiwiYml0c3RydG9pbnQiLCJnZXRPSUQiLCJoZXh0b29pZCIsImdldE9JRE5hbWUiLCJvaWQybmFtZSIsImhleHRvb2lkc3RyIiwiZHVtcCIsIm9tbWl0X2xvbmdfb2N0ZXQiLCJpc0FTTjFIRVgiLCJoZXh0b3V0ZjgiLCJ1Y3MyaGV4dG91dGY4Iiwib2lkbmFtZSIsIkpTT04iLCJ4NTA5RXh0TmFtZSIsImNoZWNrU3RyaWN0REVSIiwibGFuZyIsImlzSGV4IiwiQmFzZTY0eCIsInN0b0JBIiwiQkF0b3MiLCJCQXRvaGV4Iiwic3RvYjY0Iiwic3RvYjY0dSIsImI2NHRvYjY0dSIsImI2NHV0b3MiLCJiNjR1dG9iNjQiLCJoZXh0b2I2NHUiLCJiNjR1dG9oZXgiLCJ1dGY4dG9iNjR1IiwiYjY0dXRvdXRmOCIsIkJ1ZmZlciIsImZyb20iLCJ1cmljbXB0b2hleCIsImVuY29kZVVSSUNvbXBvbmVudEFsbCIsImhleHRvdXJpY21wIiwidXRmOHRvYjY0IiwiYjY0dG91dGY4IiwiaGV4dG9iNjQiLCJoZXh0b2I2NG5sIiwiYjY0bmx0b2hleCIsInBlbXRvaGV4IiwiaGV4dG9BcnJheUJ1ZmZlciIsIkFycmF5QnVmZmVyIiwiRGF0YVZpZXciLCJzZXRVaW50OCIsIkFycmF5QnVmZmVydG9oZXgiLCJieXRlTGVuZ3RoIiwiZ2V0VWludDgiLCJ6dWx1dG9tc2VjIiwienVsdXRvc2VjIiwienVsdXRvZGF0ZSIsImRhdGV0b3p1bHUiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJpcHY2dG9oZXgiLCJyZXBlYXQiLCJoZXh0b2lwdjYiLCJoZXh0b2lwIiwiaXB0b2hleCIsIm1hcCIsIm5ld2xpbmVfdG9Vbml4IiwibmV3bGluZV90b0RvcyIsImlzSW50ZWdlciIsImlzaGV4IiwiaXNCYXNlNjQiLCJpc0Jhc2U2NFVSTCIsImlzSW50ZWdlckFycmF5IiwiaXNQcmludGFibGUiLCJpc0lBNSIsImlzTWFpbCIsImhleHRvcG9zaGV4IiwiaW50YXJ5c3RydG9oZXgiLCJzdHJkaWZmaWR4Iiwic3RycGFkIiwiaW50dG9iaXRzdHIiLCJOdW1iZXIiLCJESUdFU1RJTkZPSEVBRCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJERUZBVUxUUFJPVklERVIiLCJobWFjbWQ1IiwiaG1hY3NoYTEiLCJobWFjc2hhMjI0IiwiaG1hY3NoYTI1NiIsImhtYWNzaGEzODQiLCJobWFjc2hhNTEyIiwiaG1hY3JpcGVtZDE2MCIsIk1ENXdpdGhSU0EiLCJTSEExd2l0aFJTQSIsIlNIQTIyNHdpdGhSU0EiLCJTSEEyNTZ3aXRoUlNBIiwiU0hBMzg0d2l0aFJTQSIsIlNIQTUxMndpdGhSU0EiLCJSSVBFTUQxNjB3aXRoUlNBIiwiTUQ1d2l0aEVDRFNBIiwiU0hBMXdpdGhFQ0RTQSIsIlNIQTIyNHdpdGhFQ0RTQSIsIlNIQTI1NndpdGhFQ0RTQSIsIlNIQTM4NHdpdGhFQ0RTQSIsIlNIQTUxMndpdGhFQ0RTQSIsIlJJUEVNRDE2MHdpdGhFQ0RTQSIsIlNIQTF3aXRoRFNBIiwiU0hBMjI0d2l0aERTQSIsIlNIQTI1NndpdGhEU0EiLCJNRDV3aXRoUlNBYW5kTUdGMSIsIlNIQXdpdGhSU0FhbmRNR0YxIiwiU0hBMXdpdGhSU0FhbmRNR0YxIiwiU0hBMjI0d2l0aFJTQWFuZE1HRjEiLCJTSEEyNTZ3aXRoUlNBYW5kTUdGMSIsIlNIQTM4NHdpdGhSU0FhbmRNR0YxIiwiU0hBNTEyd2l0aFJTQWFuZE1HRjEiLCJSSVBFTUQxNjB3aXRoUlNBYW5kTUdGMSIsIkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUUiLCJNRDUiLCJTSEExIiwiU0hBMjI0IiwiUklQRU1EMTYwIiwiZ2V0RGlnZXN0SW5mb0hleCIsImdldFBhZGRlZERpZ2VzdEluZm9IZXgiLCJoYXNoU3RyaW5nIiwiYWxnIiwiZGlnZXN0U3RyaW5nIiwiZGlnZXN0SGV4Iiwic2hhMjU2SGV4Iiwic2hhNTEySGV4IiwiaXNLZXkiLCJEU0EiLCJFQ0RTQSIsInByb3YiLCJTRUNVUkVSQU5ET01HRU4iLCJnZXRSYW5kb21IZXhPZk5ieXRlcyIsImdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcyIsImdldFJhbmRvbUhleE9mTmJpdHMiLCJnZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyIsImdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgiLCJnZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXgiLCJzZXRBbGdBbmRQcm92aWRlciIsIm1kIiwidXBkYXRlU3RyaW5nIiwidXBkYXRlSGV4IiwiZGlnZXN0Iiwic2pjbCIsImhhc2giLCJjb2RlYyIsInRvQml0cyIsImZyb21CaXRzIiwiYWxnTmFtZSIsInByb3ZOYW1lIiwiSEFTSExFTkdUSCIsIk1hYyIsImFsZ1Byb3YiLCJtYWMiLCJwYXNzIiwiZG9GaW5hbCIsImRvRmluYWxTdHJpbmciLCJkb0ZpbmFsSGV4Iiwic2V0UGFzc3dvcmQiLCJ1dGY4IiwicnN0ciIsImI2NCIsImI2NHUiLCJTaWduYXR1cmUiLCJfc2V0QWxnTmFtZXMiLCJtZEFsZ05hbWUiLCJwdWJrZXlBbGdOYW1lIiwiX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUiLCJLRVlVVElMIiwiZ2V0S2V5IiwicHJ2S2V5Iiwic3RhdGUiLCJwdWJLZXkiLCJzaWduIiwic0hhc2hIZXgiLCJlY3BydmhleCIsImVjY3VydmVuYW1lIiwicHJ2IiwiaFNpZ24iLCJzaWduV2l0aE1lc3NhZ2VIYXNoUFNTIiwicHNzU2FsdExlbiIsInNpZ25XaXRoTWVzc2FnZUhhc2giLCJzaWduU3RyaW5nIiwic2lnbkhleCIsInZlcmlmeSIsImVjcHViaGV4IiwicHViIiwidmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTIiwidmVyaWZ5V2l0aE1lc3NhZ2VIYXNoIiwiYWxnUHJvdk5hbWUiLCJpbml0UGFyYW1zIiwicHNzc2FsdGxlbiIsInBydmtleXBlbSIsInBydmtleXBhcyIsIkNpcGhlciIsImdldEFsZ0J5S2V5QW5kTmFtZSIsImRlY3J5cHQiLCJkZWNyeXB0T0FFUCIsIm9pZGhleDJuYW1lIiwiRUNQYXJhbWV0ZXJEQiIsImdldE5hbWUiLCJnZXRCaWdSYW5kb20iLCJzZXROYW1lZEN1cnZlIiwiZWNwYXJhbXMiLCJnZXRCeU5hbWUiLCJwcnZLZXlIZXgiLCJwdWJLZXlIZXgiLCJjdXJ2ZU5hbWUiLCJzZXRQcml2YXRlS2V5SGV4Iiwic2V0UHVibGljS2V5SGV4IiwiZ2V0UHVibGljS2V5WFlIZXgiLCJrZXlsZW4iLCJnZXRTaG9ydE5JU1RQQ3VydmVOYW1lIiwiZ2VuZXJhdGVLZXlQYWlySGV4IiwiYmlSU1NpZ1RvQVNOMVNpZyIsImZyb21CeXRlQXJyYXlVbnNpZ25lZCIsInNlcmlhbGl6ZVNpZyIsInZlcmlmeUhleCIsInBhcnNlU2lnSGV4IiwidmVyaWZ5UmF3IiwiQml0Y29pbiIsImlzQXJyYXkiLCJwYXJzZVNpZyIsInRvQnl0ZUFycmF5U2lnbmVkIiwicGFyc2VTaWdDb21wYWN0IiwicmVhZFBLQ1M1UHJ2S2V5SGV4IiwicmVhZFBLQ1M4UHJ2S2V5SGV4IiwicmVhZFBLQ1M4UHViS2V5SGV4IiwicmVhZENlcnRQdWJLZXlIZXgiLCJwYXJzZVNpZ0hleEluSGV4UlMiLCJhc24xU2lnVG9Db25jYXRTaWciLCJjb25jYXRTaWdUb0FTTjFTaWciLCJoZXhSU1NpZ1RvQVNOMVNpZyIsInJlZ2lzdCIsIkFFUyIsIlRyaXBsZURFUyIsIkRFUyIsImtleSIsIml2IiwiY2lwaGVydGV4dCIsInByb2MiLCJlcHJvYyIsIml2bGVuIiwiY2lwaGVyIiwiaXZzYWx0IiwiZGF0YSIsImtleWhleCIsIml2aGV4IiwidmVyc2lvbiIsInBhcnNlUEtDUzVQRU0iLCJnZXRLZXlBbmRVbnVzZWRJdkJ5UGFzc2NvZGVBbmRJdnNhbHQiLCJkZWNyeXB0S2V5QjY0IiwiZ2V0RGVjcnlwdGVkS2V5SGV4IiwiZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4IiwidG9VcHBlckNhc2UiLCJwYXJzZUhleE9mRW5jcnlwdGVkUEtDUzgiLCJlbmNyeXB0aW9uU2NoZW1lQWxnIiwiZW5jcnlwdGlvblNjaGVtZUlWIiwicGJrZGYyU2FsdCIsInBia2RmMkl0ZXIiLCJnZXRQQktERjJLZXlIZXhGcm9tUGFyYW0iLCJQQktERjIiLCJrZXlTaXplIiwiaXRlcmF0aW9ucyIsIl9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNIiwiZ2V0S2V5RnJvbUVuY3J5cHRlZFBLQ1M4UEVNIiwiZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4IiwicGFyc2VQbGFpblByaXZhdGVQS0NTOEhleCIsImFsZ3BhcmFtIiwiYWxnb2lkIiwia2V5aWR4IiwiZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNIiwiX2dldEtleUZyb21QdWJsaWNQS0NTOEhleCIsInBhcnNlUHVibGljUmF3UlNBS2V5SGV4IiwicGFyc2VQdWJsaWNQS0NTOEhleCIsInh5Iiwia3R5IiwiZHAiLCJkcSIsImNvIiwicWkiLCJzZXRQcml2YXRlRXgiLCJzZXRQcml2YXRlIiwiY3J2IiwiWDUwOSIsImdldFB1YmxpY0tleUZyb21DZXJ0SGV4IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRQRU0iLCJnZW5lcmF0ZUtleXBhaXIiLCJnZW5lcmF0ZSIsInBydktleU9iaiIsInB1YktleU9iaiIsImdldFBFTSIsIlN1YmplY3RQdWJsaWNLZXlJbmZvIiwic2VxIiwib2N0c3RyIiwiYml0c3RyIiwiZ2V0S2V5RnJvbUNTUlBFTSIsImdldEtleUZyb21DU1JIZXgiLCJwYXJzZUNTUkhleCIsInA4cHVia2V5aGV4IiwiZ2V0S2V5SUQiLCJnZXRKV0tGcm9tS2V5IiwiZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsImdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsInJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZyIsInJlYWRQS0NTNVB1YktleUhleCIsInJlYWRDZXJ0SGV4IiwiZ2V0UHVibGljS2V5SGV4IiwiX1JFX0hFWERFQ09OTFkiLCJfcnNhc2lnbl9nZXRIZXhQYWRkZWREaWdlc3RJbmZvRm9yU3RyaW5nIiwiZG9Qcml2YXRlIiwicHNzX21nZjFfc3RyIiwic2lnblBTUyIsIl9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSSIsIl9yc2FzaWduX2dldEhleERpZ2VzdEluZm9Gcm9tU2lnIiwiX3JzYXNpZ25fZ2V0QWxnTmFtZUFuZEhhc2hGcm9tSGV4RGlzZ2VzdEluZm8iLCJ2ZXJpZnlQU1MiLCJTQUxUX0xFTl9ITEVOIiwiU0FMVF9MRU5fTUFYIiwiU0FMVF9MRU5fUkVDT1ZFUiIsIkFsZ29yaXRobUlkZW50aWZpZXIiLCJQU1NOQU1FMkFTTjFUTFYiLCJIRVgyU1RBRyIsImZvZmZzZXQiLCJhRXh0SW5mbyIsImdldFZlcnNpb24iLCJnZXRTZXJpYWxOdW1iZXJIZXgiLCJnZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCIsImdldEFsZ29yaXRobUlkZW50aWZpZXJOYW1lIiwiZ2V0SXNzdWVyIiwiZ2V0WDUwME5hbWUiLCJnZXRJc3N1ZXJIZXgiLCJnZXRJc3N1ZXJTdHJpbmciLCJnZXRTdWJqZWN0IiwiZ2V0U3ViamVjdEhleCIsImdldFN1YmplY3RTdHJpbmciLCJnZXROb3RCZWZvcmUiLCJnZXROb3RBZnRlciIsImdldFB1YmxpY0tleUlkeCIsImdldFB1YmxpY0tleUNvbnRlbnRJZHgiLCJnZXRQdWJsaWNLZXkiLCJnZXRTaWduYXR1cmVBbGdvcml0aG1OYW1lIiwiZ2V0U2lnbmF0dXJlVmFsdWVIZXgiLCJ2ZXJpZnlTaWduYXR1cmUiLCJwYXJzZUV4dCIsImNyaXRpY2FsIiwidmlkeCIsImdldEV4dEluZm8iLCJnZXRFeHRCYXNpY0NvbnN0cmFpbnRzIiwiZXh0bmFtZSIsImNBIiwicGF0aExlbiIsImdldEV4dEtleVVzYWdlIiwibmFtZXMiLCJnZXRFeHRLZXlVc2FnZVN0cmluZyIsImdldEV4dEtleVVzYWdlQmluIiwiS0VZVVNBR0VfTkFNRSIsImdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyIiwia2lkIiwiZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllciIsImdldEdlbmVyYWxOYW1lcyIsImlzc3VlciIsInNuIiwiZ2V0RXh0RXh0S2V5VXNhZ2UiLCJnZXRFeHRFeHRLZXlVc2FnZU5hbWUiLCJnZXRFeHRTdWJqZWN0QWx0TmFtZSIsImdldEV4dElzc3VlckFsdE5hbWUiLCJnZXRHZW5lcmFsTmFtZSIsInJmYzgyMiIsImRucyIsInVyaSIsImlwIiwiZG4iLCJnZXRFeHRTdWJqZWN0QWx0TmFtZTIiLCJoZXgyZG4iLCJnZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHMiLCJnZXREaXN0cmlidXRpb25Qb2ludCIsImRwbmFtZSIsImdldERpc3RyaWJ1dGlvblBvaW50TmFtZSIsImZ1bGwiLCJnZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkkiLCJnZXRFeHRBSUFJbmZvIiwib2NzcCIsImNhaXNzdWVyIiwiZ2V0RXh0QXV0aG9yaXR5SW5mb0FjY2VzcyIsImdldEV4dENlcnRpZmljYXRlUG9saWNpZXMiLCJnZXRQb2xpY3lJbmZvcm1hdGlvbiIsInBvbGljeW9pZCIsImdldFBvbGljeVF1YWxpZmllckluZm8iLCJjcHMiLCJ1bm90aWNlIiwiZ2V0VXNlck5vdGljZSIsImV4cHRleHQiLCJnZXREaXNwbGF5VGV4dCIsImdldEV4dENSTE51bWJlciIsIm51bSIsImdldEV4dENSTFJlYXNvbiIsImNvZGUiLCJnZXRFeHRPY3NwTm9uY2UiLCJnZXRFeHRPY3NwTm9DaGVjayIsImdldEV4dEFkb2JlVGltZVN0YW1wIiwicmVxYXV0aCIsImdldFg1MDBOYW1lUnVsZSIsImRzIiwidmFsdWUiLCJnZXRYNTAwTmFtZUFycmF5IiwiZG5hcnJheXRvc3RyIiwiZ2V0UkROIiwiZ2V0QXR0clR5cGVBbmRWYWx1ZSIsIm9pZDJhdHlwZSIsInJlYWRDZXJ0UEVNIiwiZ2V0UGFyYW0iLCJzZXJpYWwiLCJzaWdhbGciLCJub3RiZWZvcmUiLCJub3RhZnRlciIsInN1YmplY3QiLCJzYmpwdWJrZXkiLCJleHQiLCJnZXRFeHRQYXJhbUFycmF5Iiwic2lnaGV4IiwiZ2V0RXh0UGFyYW0iLCJleHRuIiwiZmluZEV4dCIsInVwZGF0ZUV4dENEUEZ1bGxVUkkiLCJ1cGRhdGVFeHRBSUFPQ1NQIiwidXBkYXRlRXh0QUlBQ0FJc3N1ZXIiLCJnZXRJbmZvIiwiZG5hbWUiLCJoZXgycmRuIiwiaGV4MmF0dHJUeXBlVmFsdWUiLCJnZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTSIsImp3cyIsIkpXUyIsImlzU2FmZUpTT05TdHJpbmciLCJwYXJzZUpXUyIsInBhcnNlZEpXUyIsInNpZ3ZhbEgiLCJoZWFkQjY0VSIsInBheWxvYWRCNjRVIiwic2lndmFsQjY0VSIsInNpIiwic2lndmFsQkkiLCJoZWFkUyIsInBheWxvYWRTIiwicmVhZFNhZmVKU09OU3RyaW5nIiwiandzYWxnMnNpZ2FsZyIsImhlYWRlck9iaiIsInBheWxvYWRPYmoiLCJoZWFkZXJQUCIsInBheWxvYWRQUCIsInNpZ0hleCIsInZlcmlmeUpXVCIsImluQXJyYXkiLCJpbmNsdWRlZEFycmF5IiwiaXNzIiwic3ViIiwiYXVkIiwiSW50RGF0ZSIsImdldE5vdyIsInZlcmlmeUF0IiwiZ3JhY2VQZXJpb2QiLCJuYmYiLCJpYXQiLCJqdGkiLCJIUzI1NiIsIkhTMzg0IiwiSFM1MTIiLCJSUzI1NiIsIlJTMzg0IiwiUlM1MTIiLCJFUzI1NiIsIkVTMzg0IiwiUFMyNTYiLCJQUzM4NCIsIlBTNTEyIiwibm9uZSIsImdldEVuY29kZWRTaWduYXR1cmVWYWx1ZUZyb21KV1MiLCJnZXRKV0t0aHVtYnByaW50IiwiZ2V0IiwiZ2V0WnVsdSIsImludERhdGUyVVRDU3RyaW5nIiwidG9VVENTdHJpbmciLCJpbnREYXRlMlp1bHUiLCJFRFNBIiwiX2NyeXB0byIsIkRlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSIsImFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyIiwiVGltZXIiLCJhY2Nlc3NUb2tlbkV4cGlyZWRUaW1lciIsIl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSIsIl9hY2Nlc3NUb2tlbkV4cGlyaW5nIiwiX2FjY2Vzc1Rva2VuRXhwaXJlZCIsImxvYWQiLCJjb250YWluZXIiLCJhY2Nlc3NfdG9rZW4iLCJleHBpcmVzX2luIiwiZHVyYXRpb24iLCJkZWJ1ZyIsImV4cGlyaW5nIiwiY2FuY2VsIiwiZXhwaXJlZCIsInVubG9hZCIsImFkZEFjY2Vzc1Rva2VuRXhwaXJpbmciLCJjYiIsImFkZEhhbmRsZXIiLCJyZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nIiwicmVtb3ZlSGFuZGxlciIsImFkZEFjY2Vzc1Rva2VuRXhwaXJlZCIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZCIsIkRlZmF1bHRJbnRlcnZhbCIsImNhbGxiYWNrIiwiY2xpZW50X2lkIiwidXJsIiwiaW50ZXJ2YWwiLCJzdG9wT25FcnJvciIsIl9jYWxsYmFjayIsIl9jbGllbnRfaWQiLCJfdXJsIiwiX2ludGVydmFsIiwiX3N0b3BPbkVycm9yIiwiaWR4IiwiX2ZyYW1lX29yaWdpbiIsIl9mcmFtZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwidmlzaWJpbGl0eSIsInBvc2l0aW9uIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0Iiwic3JjIiwiUHJvbWlzZSIsInJlc29sdmUiLCJvbmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJfYm91bmRNZXNzYWdlRXZlbnQiLCJfbWVzc2FnZSIsImJpbmQiLCJhZGRFdmVudExpc3RlbmVyIiwib3JpZ2luIiwic291cmNlIiwiY29udGVudFdpbmRvdyIsImVycm9yIiwic3RvcCIsInN0YXJ0Iiwic2Vzc2lvbl9zdGF0ZSIsIl9zZXNzaW9uX3N0YXRlIiwic2VuZCIsInBvc3RNZXNzYWdlIiwiX3RpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiQ2xvY2tTZXJ2aWNlIiwiZ2V0RXBvY2hUaW1lIiwibm93IiwicHJlcGFyZSIsInBvcHVwV2luZG93RmVhdHVyZXMiLCJwb3B1cCIsIkNvcmRvdmFQb3B1cFdpbmRvdyIsIkRlZmF1bHRQb3B1cEZlYXR1cmVzIiwiRGVmYXVsdFBvcHVwVGFyZ2V0IiwiX3Byb21pc2UiLCJyZWplY3QiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJmZWF0dXJlcyIsInRhcmdldCIsInBvcHVwV2luZG93VGFyZ2V0IiwicmVkaXJlY3RfdXJpIiwic3RhcnRVcmwiLCJfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQiLCJjb3Jkb3ZhTWV0YWRhdGEiLCJzb21lIiwibmF2aWdhdGUiLCJfZXJyb3IiLCJjb3Jkb3ZhIiwicmVxdWlyZSIsIm1ldGFkYXRhIiwiX3BvcHVwIiwiSW5BcHBCcm93c2VyIiwib3BlbiIsIl9leGl0Q2FsbGJhY2tFdmVudCIsIl9leGl0Q2FsbGJhY2siLCJfbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCIsIl9sb2FkU3RhcnRDYWxsYmFjayIsInByb21pc2UiLCJldmVudCIsIl9zdWNjZXNzIiwibWVzc2FnZSIsIl9jbGVhbnVwIiwiY2xvc2UiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiRXJyb3JSZXNwb25zZSIsImVycm9yX2Rlc2NyaXB0aW9uIiwiZXJyb3JfdXJpIiwiRXZlbnQiLCJfbmFtZSIsIl9jYWxsYmFja3MiLCJmaW5kSW5kZXgiLCJpdGVtIiwicmFpc2UiLCJ0aW1lciIsImhhbmRsZSIsInRlc3RpbmciLCJyZXF1ZXN0IiwiX3Rlc3RpbmciLCJzZXRYTUxIdHRwUmVxdWVzdCIsIm5ld1JlcXVlc3QiLCJsb2NhdGlvbiIsImxvY2FsU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiWE1MSHR0cFJlcXVlc3QiLCJJRnJhbWVOYXZpZ2F0b3IiLCJmcmFtZSIsIklGcmFtZVdpbmRvdyIsIm5vdGlmeVBhcmVudCIsIkRlZmF1bHRUaW1lb3V0IiwidGltZW91dCIsInNpbGVudFJlcXVlc3RUaW1lb3V0Iiwic2V0VGltZW91dCIsIl90aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJfb3JpZ2luIiwic3RhcnRzV2l0aCIsImhyZWYiLCJwYXJlbnQiLCJwcm90b2NvbCIsImhvc3QiLCJnZXRJdGVtIiwic2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsImdldE93blByb3BlcnR5TmFtZXMiLCJKb3NlVXRpbCIsIktleVV0aWwiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJnZXRKb3NlVXRpbCIsInBhcnNlSnd0Iiwiand0IiwidG9rZW4iLCJoZWFkZXIiLCJwYXlsb2FkIiwidmFsaWRhdGVKd3QiLCJhdWRpZW5jZSIsImNsb2NrU2tldyIsInRpbWVJbnNlbnNpdGl2ZSIsIng1YyIsIl92YWxpZGF0ZUp3dCIsInZhbGlkYXRlSnd0QXR0cmlidXRlcyIsInZhbGlkQXVkaWVuY2UiLCJhenAiLCJsb3dlck5vdyIsInVwcGVyTm93IiwidGhlbiIsImhleFRvQmFzZTY0VXJsIiwiSnNvblNlcnZpY2UiLCJhZGRpdGlvbmFsQ29udGVudFR5cGVzIiwiWE1MSHR0cFJlcXVlc3RDdG9yIiwiand0SGFuZGxlciIsIl9jb250ZW50VHlwZXMiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJvbmVycm9yIiwic2V0UmVxdWVzdEhlYWRlciIsInBvc3RGb3JtIiwiYmFzaWNBdXRoIiwiYnRvYSIsIm5vcExvZ2dlciIsImluZm8iLCJ3YXJuIiwiTk9ORSIsIkVSUk9SIiwiV0FSTiIsIklORk8iLCJERUJVRyIsImxvZ2dlciIsImxldmVsIiwiYXJncyIsIk9pZGNNZXRhZGF0YVVybFBhdGgiLCJzZXR0aW5ncyIsIkpzb25TZXJ2aWNlQ3RvciIsIl9zZXR0aW5ncyIsIl9qc29uU2VydmljZSIsInJlc2V0U2lnbmluZ0tleXMiLCJzaWduaW5nS2V5cyIsImdldE1ldGFkYXRhIiwibWV0YWRhdGFVcmwiLCJzZWVkIiwibWV0YWRhdGFTZWVkIiwiYXNzaWduIiwiX2dldE1ldGFkYXRhUHJvcGVydHkiLCJnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQiLCJnZXRVc2VySW5mb0VuZHBvaW50IiwiZ2V0VG9rZW5FbmRwb2ludCIsIm9wdGlvbmFsIiwiZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lIiwiZ2V0RW5kU2Vzc2lvbkVuZHBvaW50IiwiZ2V0UmV2b2NhdGlvbkVuZHBvaW50IiwiZ2V0S2V5c0VuZHBvaW50IiwiZ2V0U2lnbmluZ0tleXMiLCJqd2tzX3VyaSIsImtleVNldCIsIl9tZXRhZGF0YVVybCIsImF1dGhvcml0eSIsImNyZWF0ZVNpZ25pblJlcXVlc3QiLCJyZXNwb25zZV90eXBlIiwic2NvcGUiLCJwcm9tcHQiLCJtYXhfYWdlIiwidWlfbG9jYWxlcyIsImlkX3Rva2VuX2hpbnQiLCJsb2dpbl9oaW50IiwiYWNyX3ZhbHVlcyIsInJlc291cmNlIiwicmVxdWVzdF91cmkiLCJyZXNwb25zZV9tb2RlIiwiZXh0cmFRdWVyeVBhcmFtcyIsImV4dHJhVG9rZW5QYXJhbXMiLCJyZXF1ZXN0X3R5cGUiLCJza2lwVXNlckluZm8iLCJzdGF0ZVN0b3JlIiwiU2lnbmluUmVxdWVzdCIsImlzQ29kZSIsIl9tZXRhZGF0YVNlcnZpY2UiLCJzaWduaW5SZXF1ZXN0IiwiY2xpZW50X3NlY3JldCIsInNpZ25pblN0YXRlIiwiX3N0YXRlU3RvcmUiLCJzZXQiLCJpZCIsInRvU3RvcmFnZVN0cmluZyIsInJlYWRTaWduaW5SZXNwb25zZVN0YXRlIiwicmVtb3ZlU3RhdGUiLCJ1c2VRdWVyeSIsImRlbGltaXRlciIsInJlc3BvbnNlIiwiU2lnbmluUmVzcG9uc2UiLCJzdGF0ZUFwaSIsInJlbW92ZSIsInN0b3JlZFN0YXRlU3RyaW5nIiwiU2lnbmluU3RhdGUiLCJmcm9tU3RvcmFnZVN0cmluZyIsInByb2Nlc3NTaWduaW5SZXNwb25zZSIsIl92YWxpZGF0b3IiLCJ2YWxpZGF0ZVNpZ25pblJlc3BvbnNlIiwiY3JlYXRlU2lnbm91dFJlcXVlc3QiLCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJTaWdub3V0UmVxdWVzdCIsInNpZ25vdXRTdGF0ZSIsInJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSIsIlNpZ25vdXRSZXNwb25zZSIsInN0YXRlS2V5IiwiU3RhdGUiLCJwcm9jZXNzU2lnbm91dFJlc3BvbnNlIiwidmFsaWRhdGVTaWdub3V0UmVzcG9uc2UiLCJjbGVhclN0YWxlU3RhdGUiLCJzdGFsZVN0YXRlQWdlIiwidmFsaWRhdG9yIiwibWV0YWRhdGFTZXJ2aWNlIiwiRGVmYXVsdFJlc3BvbnNlVHlwZSIsIkRlZmF1bHRTY29wZSIsIkRlZmF1bHRDbGllbnRBdXRoZW50aWNhdGlvbiIsIkRlZmF1bHRTdGFsZVN0YXRlQWdlIiwiRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyIsImNsaWVudF9hdXRoZW50aWNhdGlvbiIsImZpbHRlclByb3RvY29sQ2xhaW1zIiwibG9hZFVzZXJJbmZvIiwiY2xvY2tTZXJ2aWNlIiwidXNlckluZm9Kd3RJc3N1ZXIiLCJtZXJnZUNsYWltcyIsIlJlc3BvbnNlVmFsaWRhdG9yQ3RvciIsIlJlc3BvbnNlVmFsaWRhdG9yIiwiTWV0YWRhdGFTZXJ2aWNlQ3RvciIsIl9hdXRob3JpdHkiLCJfbWV0YWRhdGEiLCJfbWV0YWRhdGFTZWVkIiwiX3NpZ25pbmdLZXlzIiwiX2NsaWVudF9zZWNyZXQiLCJfcmVzcG9uc2VfdHlwZSIsIl9zY29wZSIsIl9yZWRpcmVjdF91cmkiLCJfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX2NsaWVudF9hdXRoZW50aWNhdGlvbiIsIl9wcm9tcHQiLCJfZGlzcGxheSIsIl9tYXhfYWdlIiwiX3VpX2xvY2FsZXMiLCJfYWNyX3ZhbHVlcyIsIl9yZXNvdXJjZSIsIl9yZXNwb25zZV9tb2RlIiwiX2ZpbHRlclByb3RvY29sQ2xhaW1zIiwiX2xvYWRVc2VySW5mbyIsIl9zdGFsZVN0YXRlQWdlIiwiX2Nsb2NrU2tldyIsIl9jbG9ja1NlcnZpY2UiLCJfdXNlckluZm9Kd3RJc3N1ZXIiLCJfbWVyZ2VDbGFpbXMiLCJfZXh0cmFRdWVyeVBhcmFtcyIsIl9leHRyYVRva2VuUGFyYW1zIiwiUG9wdXBOYXZpZ2F0b3IiLCJQb3B1cFdpbmRvdyIsImtlZXBPcGVuIiwibm90aWZ5T3BlbmVyIiwiQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsIiwiX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkIiwiX2lkIiwiZm9jdXMiLCJjbG9zZWQiLCJvcGVuZXIiLCJVcmxVdGlsaXR5IiwicGFyc2VVcmxGcmFnbWVudCIsIlJlZGlyZWN0TmF2aWdhdG9yIiwidXNlUmVwbGFjZVRvTmF2aWdhdGUiLCJQcm90b2NvbENsYWltcyIsIlVzZXJJbmZvU2VydmljZUN0b3IiLCJVc2VySW5mb1NlcnZpY2UiLCJqb3NlVXRpbCIsIlRva2VuQ2xpZW50Q3RvciIsIlRva2VuQ2xpZW50IiwiX3VzZXJJbmZvU2VydmljZSIsIl9qb3NlVXRpbCIsIl90b2tlbkNsaWVudCIsIl9wcm9jZXNzU2lnbmluUGFyYW1zIiwiX3ZhbGlkYXRlVG9rZW5zIiwiX3Byb2Nlc3NDbGFpbXMiLCJub25jZSIsImlkX3Rva2VuIiwiY29kZV92ZXJpZmllciIsImlzT3BlbklkQ29ubmVjdCIsInByb2ZpbGUiLCJnZXRDbGFpbXMiLCJjbGFpbXMiLCJjbGFpbXMxIiwiY2xhaW1zMiIsInJlc3VsdCIsInZhbHVlcyIsImZvckVhY2giLCJfcHJvY2Vzc0NvZGUiLCJfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4iLCJfdmFsaWRhdGVJZFRva2VuIiwiZXhjaGFuZ2VDb2RlIiwidG9rZW5SZXNwb25zZSIsIl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzIiwiY2xvY2tTa2V3SW5TZWNvbmRzIiwiX3ZhbGlkYXRlQWNjZXNzVG9rZW4iLCJfZ2V0U2lnbmluZ0tleUZvckp3dCIsIl9maWx0ZXJCeUFsZyIsImZpbHRlciIsIl9nZXRTaWduaW5nS2V5Rm9ySnd0V2l0aFNpbmdsZVJldHJ5IiwiYXRfaGFzaCIsImhhc2hBbGciLCJoYXNoQml0cyIsInNoYSIsImxlZnQiLCJsZWZ0X2I2NHUiLCJ1c2VyTWFuYWdlciIsIkNoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJfdXNlck1hbmFnZXIiLCJfQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciIsImV2ZW50cyIsImFkZFVzZXJMb2FkZWQiLCJfc3RhcnQiLCJhZGRVc2VyVW5sb2FkZWQiLCJfc3RvcCIsImdldFVzZXIiLCJ1c2VyIiwibW9uaXRvckFub255bW91c1Nlc3Npb24iLCJxdWVyeVNlc3Npb25TdGF0dXMiLCJ0bXBVc2VyIiwic2Vzc2lvbiIsInNpZCIsImNhdGNoIiwiZXJyIiwiX3N1YiIsIl9zaWQiLCJfY2hlY2tTZXNzaW9uSUZyYW1lIiwiX2NoZWNrU2Vzc2lvbkludGVydmFsIiwiX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yIiwidGltZXJIYW5kbGUiLCJyYWlzZUV2ZW50IiwiX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkIiwiX3JhaXNlVXNlclNpZ25lZE91dCIsIl9yYWlzZVVzZXJTaWduZWRJbiIsImNoZWNrU2Vzc2lvbkludGVydmFsIiwic3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IiLCJvaWRjIiwiaXNPaWRjIiwiYWRkUXVlcnlQYXJhbSIsImNvZGVfY2hhbGxlbmdlIiwiaXNPQXV0aCIsIk9pZGNTY29wZSIsInRva2VuX3R5cGUiLCJleHBpcmVzX2F0Iiwic2NvcGVzIiwiX25vbmNlIiwiX2NvZGVfdmVyaWZpZXIiLCJfY29kZV9jaGFsbGVuZ2UiLCJfc2tpcFVzZXJJbmZvIiwiY3JlYXRlZCIsInN0b3JhZ2VTdHJpbmciLCJTaWxlbnRSZW5ld1NlcnZpY2UiLCJfdG9rZW5FeHBpcmluZyIsInNpZ25pblNpbGVudCIsIl9yYWlzZVNpbGVudFJlbmV3RXJyb3IiLCJfY3JlYXRlZCIsIl9yZXF1ZXN0X3R5cGUiLCJzdG9yYWdlIiwiYWdlIiwiY3V0b2ZmIiwiZ2V0QWxsS2V5cyIsInByb21pc2VzIiwiYWxsIiwiVGltZXJEdXJhdGlvbiIsIm5vd0Z1bmMiLCJfbm93RnVuYyIsImV4cGlyYXRpb24iLCJfdGltZXJIYW5kbGUiLCJfZXhwaXJhdGlvbiIsInRpbWVyRHVyYXRpb24iLCJkaWZmIiwiZ3JhbnRfdHlwZSIsImV4Y2hhbmdlUmVmcmVzaFRva2VuIiwicmVmcmVzaF90b2tlbiIsIkFjY2Vzc1Rva2VuVHlwZUhpbnQiLCJSZWZyZXNoVG9rZW5UeXBlSGludCIsIl9YTUxIdHRwUmVxdWVzdEN0b3IiLCJyZXZva2UiLCJyZXF1aXJlZCIsIl9yZXZva2UiLCJ4aHIiLCJnbG9iYWwiLCJsYXN0SW5kZXhPZiIsInJlZ2V4IiwiY291bnRlciIsImV4ZWMiLCJwcm9wIiwiX2dldENsYWltc0Zyb21Kd3QiLCJpc3N1ZXJQcm9taXNlIiwiU2lsZW50UmVuZXdTZXJ2aWNlQ3RvciIsIlNlc3Npb25Nb25pdG9yQ3RvciIsIlRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IiLCJVc2VyTWFuYWdlclNldHRpbmdzIiwiX2V2ZW50cyIsIlVzZXJNYW5hZ2VyRXZlbnRzIiwiX3NpbGVudFJlbmV3U2VydmljZSIsImF1dG9tYXRpY1NpbGVudFJlbmV3Iiwic3RhcnRTaWxlbnRSZW5ldyIsIm1vbml0b3JTZXNzaW9uIiwiX3Nlc3Npb25Nb25pdG9yIiwiX3Rva2VuUmV2b2NhdGlvbkNsaWVudCIsIl9sb2FkVXNlciIsInJlbW92ZVVzZXIiLCJzdG9yZVVzZXIiLCJzaWduaW5SZWRpcmVjdCIsIm5hdlBhcmFtcyIsIl9zaWduaW5TdGFydCIsIl9yZWRpcmVjdE5hdmlnYXRvciIsInNpZ25pblJlZGlyZWN0Q2FsbGJhY2siLCJfc2lnbmluRW5kIiwic2lnbmluUG9wdXAiLCJwb3B1cF9yZWRpcmVjdF91cmkiLCJfc2lnbmluIiwiX3BvcHVwTmF2aWdhdG9yIiwic2lnbmluUG9wdXBDYWxsYmFjayIsIl9zaWduaW5DYWxsYmFjayIsIl91c2VSZWZyZXNoVG9rZW4iLCJpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXciLCJ2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXciLCJjdXJyZW50X3N1YiIsIl9zaWduaW5TaWxlbnRJZnJhbWUiLCJpZFRva2VuVmFsaWRhdGlvbiIsIl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4iLCJhdXRoX3RpbWUiLCJzaWxlbnRfcmVkaXJlY3RfdXJpIiwiX2lmcmFtZU5hdmlnYXRvciIsInNpZ25pblNpbGVudENhbGxiYWNrIiwic2lnbmluQ2FsbGJhY2siLCJzaWdub3V0Q2FsbGJhY2siLCJzaWdub3V0UmVkaXJlY3RDYWxsYmFjayIsInNpZ25vdXRQb3B1cENhbGxiYWNrIiwicXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUiLCJuYXZSZXNwb25zZSIsInNpZ25pblJlc3BvbnNlIiwibmF2aWdhdG9yUGFyYW1zIiwic2lnbm91dFJlZGlyZWN0IiwicG9zdExvZ291dFJlZGlyZWN0VXJpIiwiX3NpZ25vdXRTdGFydCIsIl9zaWdub3V0RW5kIiwic2lnbm91dFBvcHVwIiwicG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3NpZ25vdXQiLCJyZXZva2VQcm9taXNlIiwicmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQiLCJfcmV2b2tlSW50ZXJuYWwiLCJzaWdub3V0UmVxdWVzdCIsInNpZ25vdXRSZXNwb25zZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwic3VjY2VzcyIsIl9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsIiwiX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsIiwiYXRTdWNjZXNzIiwicnRTdWNjZXNzIiwic3RvcFNpbGVudFJlbmV3IiwiX3VzZXJTdG9yZSIsIl91c2VyU3RvcmVLZXkiLCJyZWRpcmVjdE5hdmlnYXRvciIsInBvcHVwTmF2aWdhdG9yIiwiaWZyYW1lTmF2aWdhdG9yIiwidXNlclN0b3JlIiwiX3VzZXJMb2FkZWQiLCJfdXNlclVubG9hZGVkIiwiX3NpbGVudFJlbmV3RXJyb3IiLCJfdXNlclNpZ25lZEluIiwiX3VzZXJTaWduZWRPdXQiLCJfdXNlclNlc3Npb25DaGFuZ2VkIiwicmVtb3ZlVXNlckxvYWRlZCIsInJlbW92ZVVzZXJVbmxvYWRlZCIsImFkZFNpbGVudFJlbmV3RXJyb3IiLCJyZW1vdmVTaWxlbnRSZW5ld0Vycm9yIiwiYWRkVXNlclNpZ25lZEluIiwicmVtb3ZlVXNlclNpZ25lZEluIiwiYWRkVXNlclNpZ25lZE91dCIsInJlbW92ZVVzZXJTaWduZWRPdXQiLCJhZGRVc2VyU2Vzc2lvbkNoYW5nZWQiLCJyZW1vdmVVc2VyU2Vzc2lvbkNoYW5nZWQiLCJEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJzdG9yZSIsIl9wb3B1cF9yZWRpcmVjdF91cmkiLCJfcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3BvcHVwV2luZG93RmVhdHVyZXMiLCJfcG9wdXBXaW5kb3dUYXJnZXQiLCJfc2lsZW50X3JlZGlyZWN0X3VyaSIsIl9zaWxlbnRSZXF1ZXN0VGltZW91dCIsIl9hdXRvbWF0aWNTaWxlbnRSZW5ldyIsIl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXciLCJfaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3IiwiX21vbml0b3JTZXNzaW9uIiwiX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uIiwiX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlIiwiX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0IiwicHJlZml4IiwiX3N0b3JlIiwiX3ByZWZpeCIsIl9jcnlwdG9VdWlkdjQiLCJfdXVpZHY0IiwiaGFzQ3J5cHRvIiwiaGFzUmFuZG9tVmFsdWVzIiwidXVpZCJdLCJtYXBwaW5ncyI6Ijs7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QTROLEdBQTVOLEVBQWdPLEdBQWhPLEVBQW9PLEdBQXBPLEVBQXdPLEdBQXhPLEVBQTRPLEdBQTVPLEVBQWdQLEdBQWhQLEVBQW9QLEdBQXBQLEVBQXdQLEdBQXhQLEVBQTRQLEdBQTVQLEVBQWdRLEdBQWhRLEVBQW9RLEdBQXBRLEVBQXdRLEdBQXhRLEVBQTRRLEdBQTVRLEVBQWdSLEdBQWhSLEVBQW9SLEdBQXBSLEVBQXdSLEdBQXhSLEVBQTRSLEdBQTVSLEVBQWdTLEdBQWhTLEVBQW9TLEdBQXBTLEVBQXdTLEdBQXhTLEVBQTRTLEdBQTVTLEVBQWdULEdBQWhULEVBQW9ULEdBQXBULEVBQXdULEdBQXhULEVBQTRULEdBQTVULEVBQWdVLEdBQWhVLEVBQW9VLEdBQXBVLEVBQXdVLEdBQXhVLEVBQTRVLEdBQTVVLEVBQWdWLEdBQWhWLEVBQW9WLEdBQXBWLEVBQXdWLEdBQXhWLEVBQTRWLEdBQTVWLEVBQWdXLEdBQWhXLEVBQW9XLEdBQXBXLEVBQXdXLEdBQXhXLEVBQTRXLEdBQTVXLEVBQWdYLEdBQWhYLEVBQW9YLEdBQXBYLEVBQXdYLEdBQXhYLEVBQTRYLEdBQTVYLEVBQWdZLEdBQWhZLEVBQW9ZLEdBQXBZLEVBQXdZLEdBQXhZLEVBQTRZLEdBQTVZLEVBQWdaLEdBQWhaLEVBQW9aLEdBQXBaLEVBQXdaLEdBQXhaLEVBQTRaLEdBQTVaLEVBQWdhLEdBQWhhLEVBQW9hLEdBQXBhLEVBQXdhLEdBQXhhLEVBQTRhLEdBQTVhLEVBQWdiLEdBQWhiLEVBQW9iLEdBQXBiLEVBQXdiLEdBQXhiLEVBQTRiLEdBQTViLEVBQWdjLEdBQWhjLEVBQW9jLEdBQXBjLEVBQXdjLEdBQXhjLEVBQTRjLEdBQTVjLEVBQWdkLEdBQWhkLEVBQW9kLEdBQXBkLEVBQXdkLEdBQXhkLEVBQTRkLEdBQTVkLEVBQWdlLEdBQWhlLEVBQW9lLEdBQXBlLEVBQXdlLEdBQXhlLEVBQTRlLEdBQTVlLEVBQWdmLEdBQWhmLEVBQW9mLEdBQXBmLEVBQXdmLEdBQXhmLEVBQTRmLEdBQTVmLEVBQWdnQixHQUFoZ0IsRUFBb2dCLEdBQXBn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Q0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztB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Q0FBQyxzSUFBc0M7QUFDOUMsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyw4SkFBa0Q7QUFDMUQsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvSkFBNkM7QUFDckQsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw0SUFBeUM7QUFDakQsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxvSUFBcUM7QUFDN0MsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSUFBc0M7QUFDOUMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzSUFBc0M7QUFDOUMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyx3R0FBdUI7QUFDL0IsbUJBQU8sQ0FBQyxnR0FBbUI7QUFDM0IsbUJBQU8sQ0FBQyxnR0FBbUI7QUFDM0IsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw0SUFBeUM7QUFDakQsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnS0FBbUQ7QUFDM0QsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvSUFBcUM7QUFDN0MsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw4SUFBMEM7QUFDbEQsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvSUFBcUM7QUFDN0MsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxnS0FBbUQ7QUFDM0QsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyw0SUFBeUM7QUFDakQsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyxvSkFBNkM7QUFDckQsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsaUJBQWlCLG1CQUFPLENBQUMsNEZBQWlCOzs7Ozs7Ozs7Ozs7QUNyTTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQy90Qlk7O0FBRVo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyxTQUFTO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsVUFBVTtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDckpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVZOztBQUVaLGFBQWEsbUJBQU8sQ0FBQyxvREFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsZ0RBQVM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLGdEQUFTOztBQUUvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1EQUFtRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxFQUFFO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0EscUJBQXFCLGVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LFNBQU8sQ0FBQyxDQUFDLEdBQUQsSUFBTSxDQUFDLEdBQVAsR0FBVyxDQUFDLEdBQVosR0FBZ0IsQ0FBQyxHQUFqQixHQUFxQixDQUFDLElBQXZCLEVBQTZCL3FDLE9BQTdCLENBQXFDLFFBQXJDLEVBQStDO0FBQUEsV0FDdEQsQ0FBQzdaLElBQUlvQyxLQUFLbEQsTUFBTCxLQUFnQixFQUFoQixJQUFzQmMsSUFBSSxDQUEvQixFQUFrQ2hDLFFBQWxDLENBQTJDLEVBQTNDLENBRHNEO0FBQUEsR0FBL0MsQ0FBUDtBQUdIOztBQUVjLFNBQVNrQixNQUFULEdBQWtCO0FBQy9CLE1BQUkybEQsWUFBWWh4QyxVQUFVLFdBQVYsSUFBeUJBLFdBQVcsSUFBcEQ7QUFDQSxNQUFJaXhDLGtCQUFrQkQsYUFBYyxPQUFPaHhDLE9BQU9FLGVBQWQsSUFBa0MsV0FBdEU7QUFDQSxNQUFJZ3hDLE9BQU9ELGtCQUFrQkgsYUFBbEIsR0FBa0NDLE9BQTdDO0FBQ0EsU0FBT0csT0FBT2xyQyxPQUFQLENBQWUsSUFBZixFQUFxQixFQUFyQixDQUFQO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZCRCxJQUFNcGUsVUFBVSxRQUFoQixDLFFBQWtDQSxPLEdBQUFBLE8iLCJmaWxlIjoib2lkYy1jbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL3NyYy9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudC5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vc3JjL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBJbk1lbW9yeVdlYlN0b3JhZ2UgfSBmcm9tICcuL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlciB9IGZyb20gJy4vc3JjL1VzZXJNYW5hZ2VyLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL3NyYy9BY2Nlc3NUb2tlbkV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cE5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9zcmMvVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL3NyYy9TZXNzaW9uTW9uaXRvci5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vc3JjL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3NyYy9Vc2VyLmpzJztcclxuXHJcbmltcG9ydCB7IFZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24uanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgVmVyc2lvbixcclxuICAgIExvZyxcclxuICAgIE9pZGNDbGllbnQsXHJcbiAgICBPaWRjQ2xpZW50U2V0dGluZ3MsXHJcbiAgICBXZWJTdG9yYWdlU3RhdGVTdG9yZSxcclxuICAgIEluTWVtb3J5V2ViU3RvcmFnZSxcclxuICAgIFVzZXJNYW5hZ2VyLFxyXG4gICAgQWNjZXNzVG9rZW5FdmVudHMsXHJcbiAgICBNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IsXHJcbiAgICBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLFxyXG4gICAgQ2hlY2tTZXNzaW9uSUZyYW1lLFxyXG4gICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxyXG4gICAgU2Vzc2lvbk1vbml0b3IsXHJcbiAgICBHbG9iYWwsXHJcbiAgICBVc2VyXHJcbn07XHJcbiIsIi8qXHJcbiAqIGpzcnNhc2lnbihhbGwpIDguMC4xMiAoMjAxOC0wNC0yMikgKGMpIDIwMTAtMjAxOCBLZW5qaSBVcnVzaGltYSB8IGtqdXIuZ2l0aHViLmNvbS9qc3JzYXNpZ24vbGljZW5zZVxyXG4gKi9cclxuXHJcbnZhciBuYXZpZ2F0b3IgPSB7fTtcclxubmF2aWdhdG9yLnVzZXJBZ2VudCA9IGZhbHNlO1xyXG5cclxudmFyIHdpbmRvdyA9IHt9O1xyXG5cbi8qISBDcnlwdG9KUyB2My4xLjIgY29yZS1maXguanNcclxuICogY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbiAqIChjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBjb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiAqIFRISVMgSVMgRklYIG9mICdjb3JlLmpzJyB0byBmaXggSG1hYyBpc3N1ZS5cclxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvaXNzdWVzL2RldGFpbD9pZD04NFxyXG4gKiBodHRwczovL2NyeXB0by1qcy5nb29nbGVjb2RlLmNvbS9zdm4taGlzdG9yeS9yNjY3L2JyYW5jaGVzLzMueC9zcmMvY29yZS5qc1xyXG4gKi9cclxudmFyIENyeXB0b0pTPUNyeXB0b0pTfHwoZnVuY3Rpb24oZSxnKXt2YXIgYT17fTt2YXIgYj1hLmxpYj17fTt2YXIgaj1iLkJhc2U9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKHApe24ucHJvdG90eXBlPXRoaXM7dmFyIG89bmV3IG4oKTtpZihwKXtvLm1peEluKHApfWlmKCFvLmhhc093blByb3BlcnR5KFwiaW5pdFwiKSl7by5pbml0PWZ1bmN0aW9uKCl7by4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fW8uaW5pdC5wcm90b3R5cGU9bztvLiRzdXBlcj10aGlzO3JldHVybiBvfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmV4dGVuZCgpO28uaW5pdC5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIG99LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKHApe2Zvcih2YXIgbyBpbiBwKXtpZihwLmhhc093blByb3BlcnR5KG8pKXt0aGlzW29dPXBbb119fWlmKHAuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSl7dGhpcy50b1N0cmluZz1wLnRvU3RyaW5nfX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fX0oKSk7dmFyIGw9Yi5Xb3JkQXJyYXk9ai5leHRlbmQoe2luaXQ6ZnVuY3Rpb24obyxuKXtvPXRoaXMud29yZHM9b3x8W107aWYobiE9Zyl7dGhpcy5zaWdCeXRlcz1ufWVsc2V7dGhpcy5zaWdCeXRlcz1vLmxlbmd0aCo0fX0sdG9TdHJpbmc6ZnVuY3Rpb24obil7cmV0dXJuKG58fGgpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBxPXRoaXMud29yZHM7dmFyIHA9dC53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO3ZhciBzPXQuc2lnQnl0ZXM7dGhpcy5jbGFtcCgpO2lmKG4lNCl7Zm9yKHZhciByPTA7cjxzO3IrKyl7dmFyIG89KHBbcj4+PjJdPj4+KDI0LShyJTQpKjgpKSYyNTU7cVsobityKT4+PjJdfD1vPDwoMjQtKChuK3IpJTQpKjgpfX1lbHNle2Zvcih2YXIgcj0wO3I8cztyKz00KXtxWyhuK3IpPj4+Ml09cFtyPj4+Ml19fXRoaXMuc2lnQnl0ZXMrPXM7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO29bbj4+PjJdJj00Mjk0OTY3Mjk1PDwoMzItKG4lNCkqOCk7by5sZW5ndGg9ZS5jZWlsKG4vNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24ud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKTtyZXR1cm4gbn0scmFuZG9tOmZ1bmN0aW9uKHApe3ZhciBvPVtdO2Zvcih2YXIgbj0wO248cDtuKz00KXtvLnB1c2goKGUucmFuZG9tKCkqNDI5NDk2NzI5Nil8MCl9cmV0dXJuIG5ldyBsLmluaXQobyxwKX19KTt2YXIgbT1hLmVuYz17fTt2YXIgaD1tLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKHApe3ZhciByPXAud29yZHM7dmFyIG89cC5zaWdCeXRlczt2YXIgcT1bXTtmb3IodmFyIG49MDtuPG87bisrKXt2YXIgcz0ocltuPj4+Ml0+Pj4oMjQtKG4lNCkqOCkpJjI1NTtxLnB1c2goKHM+Pj40KS50b1N0cmluZygxNikpO3EucHVzaCgocyYxNSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcS5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihwKXt2YXIgbj1wLmxlbmd0aDt2YXIgcT1bXTtmb3IodmFyIG89MDtvPG47bys9Mil7cVtvPj4+M118PXBhcnNlSW50KHAuc3Vic3RyKG8sMiksMTYpPDwoMjQtKG8lOCkqNCl9cmV0dXJuIG5ldyBsLmluaXQocSxuLzIpfX07dmFyIGQ9bS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihxKXt2YXIgcj1xLndvcmRzO3ZhciBwPXEuc2lnQnl0ZXM7dmFyIG49W107Zm9yKHZhciBvPTA7bzxwO28rKyl7dmFyIHM9KHJbbz4+PjJdPj4+KDI0LShvJTQpKjgpKSYyNTU7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocykpfXJldHVybiBuLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKHApe3ZhciBuPXAubGVuZ3RoO3ZhciBxPVtdO2Zvcih2YXIgbz0wO288bjtvKyspe3Fbbz4+PjJdfD0ocC5jaGFyQ29kZUF0KG8pJjI1NSk8PCgyNC0obyU0KSo4KX1yZXR1cm4gbmV3IGwuaW5pdChxLG4pfX07dmFyIGM9bS5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24obil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGQuc3RyaW5naWZ5KG4pKSl9Y2F0Y2gobyl7dGhyb3cgbmV3IEVycm9yKFwiTWFsZm9ybWVkIFVURi04IGRhdGFcIil9fSxwYXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gZC5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQobikpKX19O3ZhciBpPWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1qLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBsLmluaXQoKTt0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24obil7aWYodHlwZW9mIG49PVwic3RyaW5nXCIpe249Yy5wYXJzZShuKX10aGlzLl9kYXRhLmNvbmNhdChuKTt0aGlzLl9uRGF0YUJ5dGVzKz1uLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih3KXt2YXIgcT10aGlzLl9kYXRhO3ZhciB4PXEud29yZHM7dmFyIG49cS5zaWdCeXRlczt2YXIgdD10aGlzLmJsb2NrU2l6ZTt2YXIgdj10KjQ7dmFyIHU9bi92O2lmKHcpe3U9ZS5jZWlsKHUpfWVsc2V7dT1lLm1heCgodXwwKS10aGlzLl9taW5CdWZmZXJTaXplLDApfXZhciBzPXUqdDt2YXIgcj1lLm1pbihzKjQsbik7aWYocyl7Zm9yKHZhciBwPTA7cDxzO3ArPXQpe3RoaXMuX2RvUHJvY2Vzc0Jsb2NrKHgscCl9dmFyIG89eC5zcGxpY2UoMCxzKTtxLnNpZ0J5dGVzLT1yfXJldHVybiBuZXcgbC5pbml0KG8scil9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24uX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpO3JldHVybiBufSxfbWluQnVmZmVyU2l6ZTowfSk7dmFyIGY9Yi5IYXNoZXI9aS5leHRlbmQoe2NmZzpqLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24obil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKG4pO3RoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtpLnJlc2V0LmNhbGwodGhpcyk7dGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24obil7dGhpcy5fYXBwZW5kKG4pO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24obil7aWYobil7dGhpcy5fYXBwZW5kKG4pfXZhciBvPXRoaXMuX2RvRmluYWxpemUoKTtyZXR1cm4gb30sYmxvY2tTaXplOjUxMi8zMixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihwLG8pe3JldHVybiBuZXcgbi5pbml0KG8pLmZpbmFsaXplKHApfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHAsbyl7cmV0dXJuIG5ldyBrLkhNQUMuaW5pdChuLG8pLmZpbmFsaXplKHApfX19KTt2YXIgaz1hLmFsZ289e307cmV0dXJuIGF9KE1hdGgpKTtcbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiB4NjQtY29yZS1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihnKXt2YXIgYT1DcnlwdG9KUyxmPWEubGliLGU9Zi5CYXNlLGg9Zi5Xb3JkQXJyYXksYT1hLng2ND17fTthLldvcmQ9ZS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oYixjKXt0aGlzLmhpZ2g9Yjt0aGlzLmxvdz1jfX0pO2EuV29yZEFycmF5PWUuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKGIsYyl7Yj10aGlzLndvcmRzPWJ8fFtdO3RoaXMuc2lnQnl0ZXM9YyE9Zz9jOjgqYi5sZW5ndGh9LHRvWDMyOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMud29yZHMsYz1iLmxlbmd0aCxhPVtdLGQ9MDtkPGM7ZCsrKXt2YXIgZT1iW2RdO2EucHVzaChlLmhpZ2gpO2EucHVzaChlLmxvdyl9cmV0dXJuIGguY3JlYXRlKGEsdGhpcy5zaWdCeXRlcyl9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWUuY2xvbmUuY2FsbCh0aGlzKSxjPWIud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxhPWMubGVuZ3RoLGQ9MDtkPGE7ZCsrKWNbZF09Y1tkXS5jbG9uZSgpO3JldHVybiBifX0pfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgZW5jLWJhc2U2NC5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGg9Q3J5cHRvSlMsaj1oLmxpYi5Xb3JkQXJyYXk7aC5lbmMuQmFzZTY0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oYil7dmFyIGU9Yi53b3JkcyxmPWIuc2lnQnl0ZXMsYz10aGlzLl9tYXA7Yi5jbGFtcCgpO2I9W107Zm9yKHZhciBhPTA7YTxmO2ErPTMpZm9yKHZhciBkPShlW2E+Pj4yXT4+PjI0LTgqKGElNCkmMjU1KTw8MTZ8KGVbYSsxPj4+Ml0+Pj4yNC04KigoYSsxKSU0KSYyNTUpPDw4fGVbYSsyPj4+Ml0+Pj4yNC04KigoYSsyKSU0KSYyNTUsZz0wOzQ+ZyYmYSswLjc1Kmc8ZjtnKyspYi5wdXNoKGMuY2hhckF0KGQ+Pj42KigzLWcpJjYzKSk7aWYoZT1jLmNoYXJBdCg2NCkpZm9yKDtiLmxlbmd0aCU0OyliLnB1c2goZSk7cmV0dXJuIGIuam9pbihcIlwiKX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIGU9Yi5sZW5ndGgsZj10aGlzLl9tYXAsYz1mLmNoYXJBdCg2NCk7YyYmKGM9Yi5pbmRleE9mKGMpLC0xIT1jJiYoZT1jKSk7Zm9yKHZhciBjPVtdLGE9MCxkPTA7ZDxcclxuZTtkKyspaWYoZCU0KXt2YXIgZz1mLmluZGV4T2YoYi5jaGFyQXQoZC0xKSk8PDIqKGQlNCksaD1mLmluZGV4T2YoYi5jaGFyQXQoZCkpPj4+Ni0yKihkJTQpO2NbYT4+PjJdfD0oZ3xoKTw8MjQtOCooYSU0KTthKyt9cmV0dXJuIGouY3JlYXRlKGMsYSl9LF9tYXA6XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwifX0pKCk7XHJcblxuLypcclxuQ3J5cHRvSlMgdjMuMS4yIHNoYTI1Ni1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihrKXtmb3IodmFyIGc9Q3J5cHRvSlMsaD1nLmxpYix2PWguV29yZEFycmF5LGo9aC5IYXNoZXIsaD1nLmFsZ28scz1bXSx0PVtdLHU9ZnVuY3Rpb24ocSl7cmV0dXJuIDQyOTQ5NjcyOTYqKHEtKHF8MCkpfDB9LGw9MixiPTA7NjQ+Yjspe3ZhciBkO2E6e2Q9bDtmb3IodmFyIHc9ay5zcXJ0KGQpLHI9MjtyPD13O3IrKylpZighKGQlcikpe2Q9ITE7YnJlYWsgYX1kPSEwfWQmJig4PmImJihzW2JdPXUoay5wb3cobCwwLjUpKSksdFtiXT11KGsucG93KGwsMS8zKSksYisrKTtsKyt9dmFyIG49W10saD1oLlNIQTI1Nj1qLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB2LmluaXQocy5zbGljZSgwKSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihxLGgpe2Zvcih2YXIgYT10aGlzLl9oYXNoLndvcmRzLGM9YVswXSxkPWFbMV0sYj1hWzJdLGs9YVszXSxmPWFbNF0sZz1hWzVdLGo9YVs2XSxsPWFbN10sZT0wOzY0PmU7ZSsrKXtpZigxNj5lKW5bZV09XHJcbnFbaCtlXXwwO2Vsc2V7dmFyIG09bltlLTE1XSxwPW5bZS0yXTtuW2VdPSgobTw8MjV8bT4+PjcpXihtPDwxNHxtPj4+MTgpXm0+Pj4zKStuW2UtN10rKChwPDwxNXxwPj4+MTcpXihwPDwxM3xwPj4+MTkpXnA+Pj4xMCkrbltlLTE2XX1tPWwrKChmPDwyNnxmPj4+NileKGY8PDIxfGY+Pj4xMSleKGY8PDd8Zj4+PjI1KSkrKGYmZ15+ZiZqKSt0W2VdK25bZV07cD0oKGM8PDMwfGM+Pj4yKV4oYzw8MTl8Yz4+PjEzKV4oYzw8MTB8Yz4+PjIyKSkrKGMmZF5jJmJeZCZiKTtsPWo7aj1nO2c9ZjtmPWsrbXwwO2s9YjtiPWQ7ZD1jO2M9bStwfDB9YVswXT1hWzBdK2N8MDthWzFdPWFbMV0rZHwwO2FbMl09YVsyXStifDA7YVszXT1hWzNdK2t8MDthWzRdPWFbNF0rZnwwO2FbNV09YVs1XStnfDA7YVs2XT1hWzZdK2p8MDthWzddPWFbN10rbHwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuX2RhdGEsYj1kLndvcmRzLGE9OCp0aGlzLl9uRGF0YUJ5dGVzLGM9OCpkLnNpZ0J5dGVzO1xyXG5iW2M+Pj41XXw9MTI4PDwyNC1jJTMyO2JbKGMrNjQ+Pj45PDw0KSsxNF09ay5mbG9vcihhLzQyOTQ5NjcyOTYpO2JbKGMrNjQ+Pj45PDw0KSsxNV09YTtkLnNpZ0J5dGVzPTQqYi5sZW5ndGg7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzLl9oYXNofSxjbG9uZTpmdW5jdGlvbigpe3ZhciBiPWouY2xvbmUuY2FsbCh0aGlzKTtiLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYn19KTtnLlNIQTI1Nj1qLl9jcmVhdGVIZWxwZXIoaCk7Zy5IbWFjU0hBMjU2PWouX2NyZWF0ZUhtYWNIZWxwZXIoaCl9KShNYXRoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhNTEyLW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3JldHVybiBkLmNyZWF0ZS5hcHBseShkLGFyZ3VtZW50cyl9Zm9yKHZhciBuPUNyeXB0b0pTLHI9bi5saWIuSGFzaGVyLGU9bi54NjQsZD1lLldvcmQsVD1lLldvcmRBcnJheSxlPW4uYWxnbyxlYT1bYSgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLGEoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLGEoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxhKDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksYSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksYSgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLGEoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxhKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksYSgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLGEoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLGEoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLGEoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxhKDE5MjUwNzgzODgsNDA2ODE4MjM4MyksYSgyMTYyMDc4MjA2LDk5MTMzNjExMyksYSgyNjE0ODg4MTAzLDYzMzgwMzMxNyksXHJcbmEoMzI0ODIyMjU4MCwzNDc5Nzc0ODY4KSxhKDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCksYSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksYSgyNjQzNDcwNzgsMjM0MTI2Mjc3MyksYSg2MDQ4MDc2MjgsMjAwNzgwMDkzMyksYSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksYSgxMjQ5MTUwMTIyLDE4NTY0MzEyMzUpLGEoMTU1NTA4MTY5MiwzMTc1MjE4MTMyKSxhKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksYSgyNTU0MjIwODgyLDM5OTk3MTkzMzkpLGEoMjgyMTgzNDM0OSw3NjY3ODQwMTYpLGEoMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxhKDMyMTAzMTM2NzEsMzIwMzMzNzk1NiksYSgzMzM2NTcxODkxLDEwMzQ0NTcwMjYpLGEoMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxhKDExMzkyNjk5MywzNzU4MzI2MzgzKSxhKDMzODI0MTg5NSwxNjg3MTc5MzYpLGEoNjY2MzA3MjA1LDExODgxNzk5NjQpLGEoNzczNTI5OTEyLDE1NDYwNDU3MzQpLGEoMTI5NDc1NzM3MiwxNTIyODA1NDg1KSxhKDEzOTYxODIyOTEsXHJcbjI2NDM4MzM4MjMpLGEoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxhKDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCksYSgyMTc3MDI2MzUwLDEyMDY3NTkxNDIpLGEoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLGEoMjczMDQ4NTkyMSwxMjkwODYzNDYwKSxhKDI4MjAzMDI0MTEsMzE1ODQ1NDI3MyksYSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLGEoMzM0NTc2NDc3MSwxMDYyMTcwMDgpLGEoMzUxNjA2NTgxNywzNjA2MDA4MzQ0KSxhKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksYSg0MDk0NTcxOTA5LDE0NjcwMzE1OTQpLGEoMjc1NDIzMzQ0LDg1MTE2OTcyMCksYSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksYSg1MDY5NDg2MTYsMTM2MzI1ODE5NSksYSg2NTkwNjA1NTYsMzc1MDY4NTU5MyksYSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksYSg5NTgxMzk1NzEsMzMxODMwNzQyNyksYSgxMzIyODIyMjE4LDM4MTI3MjM0MDMpLGEoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxhKDE3NDc4NzM3NzksMzYwMjAzNjg5OSksXHJcbmEoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxhKDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksYSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLGEoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLGEoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLGEoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxhKDMyMDQwMzE0NzksMjk5OTM1MTU3MyksYSgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLGEoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxhKDM1MTUyNjcyNzEsNTY2MjgwNzExKSxhKDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksYSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLGEoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLGEoMTc0MjkyNDIxLDI3MzEwNTUyNzApLGEoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLGEoNDYwMzkzMjY5LDMyMDYyMDMxNSksYSg2ODU0NzE3MzMsNTg3NDk2ODM2KSxhKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxhKDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxhKDExMjYwMDA1ODAsMjYxODI5NzY3NiksYSgxMjg4MDMzNDcwLFxyXG4zNDA5ODU1MTU4KSxhKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksYSgxNjA3MTY3OTE1LDk4NzE2NzQ2OCksYSgxODE2NDAyMzE2LDEyNDYxODk1OTEpXSx2PVtdLHc9MDs4MD53O3crKyl2W3ddPWEoKTtlPWUuU0hBNTEyPXIuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IFQuaW5pdChbbmV3IGQuaW5pdCgxNzc5MDMzNzAzLDQwODkyMzU3MjApLG5ldyBkLmluaXQoMzE0NDEzNDI3NywyMjI3ODczNTk1KSxuZXcgZC5pbml0KDEwMTM5MDQyNDIsNDI3MTE3NTcyMyksbmV3IGQuaW5pdCgyNzczNDgwNzYyLDE1OTU3NTAxMjkpLG5ldyBkLmluaXQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KSxuZXcgZC5pbml0KDI2MDA4MjI5MjQsNzI1NTExMTk5KSxuZXcgZC5pbml0KDUyODczNDYzNSw0MjE1Mzg5NTQ3KSxuZXcgZC5pbml0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KV0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oYSxkKXtmb3IodmFyIGY9dGhpcy5faGFzaC53b3JkcyxcclxuRj1mWzBdLGU9ZlsxXSxuPWZbMl0scj1mWzNdLEc9Zls0XSxIPWZbNV0sST1mWzZdLGY9Zls3XSx3PUYuaGlnaCxKPUYubG93LFg9ZS5oaWdoLEs9ZS5sb3csWT1uLmhpZ2gsTD1uLmxvdyxaPXIuaGlnaCxNPXIubG93LCQ9Ry5oaWdoLE49Ry5sb3csYWE9SC5oaWdoLE89SC5sb3csYmE9SS5oaWdoLFA9SS5sb3csY2E9Zi5oaWdoLFE9Zi5sb3csaz13LGc9Six6PVgseD1LLEE9WSx5PUwsVT1aLEI9TSxsPSQsaD1OLFI9YWEsQz1PLFM9YmEsRD1QLFY9Y2EsRT1RLG09MDs4MD5tO20rKyl7dmFyIHM9dlttXTtpZigxNj5tKXZhciBqPXMuaGlnaD1hW2QrMiptXXwwLGI9cy5sb3c9YVtkKzIqbSsxXXwwO2Vsc2V7dmFyIGo9dlttLTE1XSxiPWouaGlnaCxwPWoubG93LGo9KGI+Pj4xfHA8PDMxKV4oYj4+Pjh8cDw8MjQpXmI+Pj43LHA9KHA+Pj4xfGI8PDMxKV4ocD4+Pjh8Yjw8MjQpXihwPj4+N3xiPDwyNSksdT12W20tMl0sYj11LmhpZ2gsYz11Lmxvdyx1PShiPj4+MTl8Yzw8MTMpXihiPDxcclxuM3xjPj4+MjkpXmI+Pj42LGM9KGM+Pj4xOXxiPDwxMyleKGM8PDN8Yj4+PjI5KV4oYz4+PjZ8Yjw8MjYpLGI9dlttLTddLFc9Yi5oaWdoLHQ9dlttLTE2XSxxPXQuaGlnaCx0PXQubG93LGI9cCtiLmxvdyxqPWorVysoYj4+PjA8cD4+PjA/MTowKSxiPWIrYyxqPWordSsoYj4+PjA8Yz4+PjA/MTowKSxiPWIrdCxqPWorcSsoYj4+PjA8dD4+PjA/MTowKTtzLmhpZ2g9ajtzLmxvdz1ifXZhciBXPWwmUl5+bCZTLHQ9aCZDXn5oJkQscz1rJnpeayZBXnomQSxUPWcmeF5nJnleeCZ5LHA9KGs+Pj4yOHxnPDw0KV4oazw8MzB8Zz4+PjIpXihrPDwyNXxnPj4+NyksdT0oZz4+PjI4fGs8PDQpXihnPDwzMHxrPj4+MileKGc8PDI1fGs+Pj43KSxjPWVhW21dLGZhPWMuaGlnaCxkYT1jLmxvdyxjPUUrKChoPj4+MTR8bDw8MTgpXihoPj4+MTh8bDw8MTQpXihoPDwyM3xsPj4+OSkpLHE9VisoKGw+Pj4xNHxoPDwxOCleKGw+Pj4xOHxoPDwxNCleKGw8PDIzfGg+Pj45KSkrKGM+Pj4wPEU+Pj4wPzE6XHJcbjApLGM9Yyt0LHE9cStXKyhjPj4+MDx0Pj4+MD8xOjApLGM9YytkYSxxPXErZmErKGM+Pj4wPGRhPj4+MD8xOjApLGM9YytiLHE9cStqKyhjPj4+MDxiPj4+MD8xOjApLGI9dStULHM9cCtzKyhiPj4+MDx1Pj4+MD8xOjApLFY9UyxFPUQsUz1SLEQ9QyxSPWwsQz1oLGg9QitjfDAsbD1VK3ErKGg+Pj4wPEI+Pj4wPzE6MCl8MCxVPUEsQj15LEE9eix5PXgsej1rLHg9ZyxnPWMrYnwwLGs9cStzKyhnPj4+MDxjPj4+MD8xOjApfDB9Sj1GLmxvdz1KK2c7Ri5oaWdoPXcraysoSj4+PjA8Zz4+PjA/MTowKTtLPWUubG93PUsreDtlLmhpZ2g9WCt6KyhLPj4+MDx4Pj4+MD8xOjApO0w9bi5sb3c9TCt5O24uaGlnaD1ZK0ErKEw+Pj4wPHk+Pj4wPzE6MCk7TT1yLmxvdz1NK0I7ci5oaWdoPVorVSsoTT4+PjA8Qj4+PjA/MTowKTtOPUcubG93PU4raDtHLmhpZ2g9JCtsKyhOPj4+MDxoPj4+MD8xOjApO089SC5sb3c9TytDO0guaGlnaD1hYStSKyhPPj4+MDxDPj4+MD8xOjApO1A9SS5sb3c9UCtEO1xyXG5JLmhpZ2g9YmErUysoUD4+PjA8RD4+PjA/MTowKTtRPWYubG93PVErRTtmLmhpZ2g9Y2ErVisoUT4+PjA8RT4+PjA/MTowKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9kYXRhLGQ9YS53b3JkcyxmPTgqdGhpcy5fbkRhdGFCeXRlcyxlPTgqYS5zaWdCeXRlcztkW2U+Pj41XXw9MTI4PDwyNC1lJTMyO2RbKGUrMTI4Pj4+MTA8PDUpKzMwXT1NYXRoLmZsb29yKGYvNDI5NDk2NzI5Nik7ZFsoZSsxMjg+Pj4xMDw8NSkrMzFdPWY7YS5zaWdCeXRlcz00KmQubGVuZ3RoO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpcy5faGFzaC50b1gzMigpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBhPXIuY2xvbmUuY2FsbCh0aGlzKTthLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYX0sYmxvY2tTaXplOjMyfSk7bi5TSEE1MTI9ci5fY3JlYXRlSGVscGVyKGUpO24uSG1hY1NIQTUxMj1yLl9jcmVhdGVIbWFjSGVscGVyKGUpfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhMzg0LW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGM9Q3J5cHRvSlMsYT1jLng2NCxiPWEuV29yZCxlPWEuV29yZEFycmF5LGE9Yy5hbGdvLGQ9YS5TSEE1MTIsYT1hLlNIQTM4ND1kLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBlLmluaXQoW25ldyBiLmluaXQoMzQxODA3MDM2NSwzMjM4MzcxMDMyKSxuZXcgYi5pbml0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKSxuZXcgYi5pbml0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KSxuZXcgYi5pbml0KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KSxuZXcgYi5pbml0KDE3MzE0MDU0MTUsNDI5MDc3NTg1NyksbmV3IGIuaW5pdCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpLG5ldyBiLmluaXQoMzY3NTAwODUyNSwxNjk0MDc2ODM5KSxuZXcgYi5pbml0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCldKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT1kLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7YS5zaWdCeXRlcy09MTY7cmV0dXJuIGF9fSk7Yy5TSEEzODQ9XHJcbmQuX2NyZWF0ZUhlbHBlcihhKTtjLkhtYWNTSEEzODQ9ZC5fY3JlYXRlSG1hY0hlbHBlcihhKX0pKCk7XHJcblxuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG52YXIgYjY0bWFwPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO3ZhciBiNjRwYWQ9XCI9XCI7ZnVuY3Rpb24gaGV4MmI2NChkKXt2YXIgYjt2YXIgZTt2YXIgYT1cIlwiO2ZvcihiPTA7YiszPD1kLmxlbmd0aDtiKz0zKXtlPXBhcnNlSW50KGQuc3Vic3RyaW5nKGIsYiszKSwxNik7YSs9YjY0bWFwLmNoYXJBdChlPj42KStiNjRtYXAuY2hhckF0KGUmNjMpfWlmKGIrMT09ZC5sZW5ndGgpe2U9cGFyc2VJbnQoZC5zdWJzdHJpbmcoYixiKzEpLDE2KTthKz1iNjRtYXAuY2hhckF0KGU8PDIpfWVsc2V7aWYoYisyPT1kLmxlbmd0aCl7ZT1wYXJzZUludChkLnN1YnN0cmluZyhiLGIrMiksMTYpO2ErPWI2NG1hcC5jaGFyQXQoZT4+MikrYjY0bWFwLmNoYXJBdCgoZSYzKTw8NCl9fWlmKGI2NHBhZCl7d2hpbGUoKGEubGVuZ3RoJjMpPjApe2ErPWI2NHBhZH19cmV0dXJuIGF9ZnVuY3Rpb24gYjY0dG9oZXgoZil7dmFyIGQ9XCJcIjt2YXIgZTt2YXIgYj0wO3ZhciBjO3ZhciBhO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe2lmKGYuY2hhckF0KGUpPT1iNjRwYWQpe2JyZWFrfWE9YjY0bWFwLmluZGV4T2YoZi5jaGFyQXQoZSkpO2lmKGE8MCl7Y29udGludWV9aWYoYj09MCl7ZCs9aW50MmNoYXIoYT4+Mik7Yz1hJjM7Yj0xfWVsc2V7aWYoYj09MSl7ZCs9aW50MmNoYXIoKGM8PDIpfChhPj40KSk7Yz1hJjE1O2I9Mn1lbHNle2lmKGI9PTIpe2QrPWludDJjaGFyKGMpO2QrPWludDJjaGFyKGE+PjIpO2M9YSYzO2I9M31lbHNle2QrPWludDJjaGFyKChjPDwyKXwoYT4+NCkpO2QrPWludDJjaGFyKGEmMTUpO2I9MH19fX1pZihiPT0xKXtkKz1pbnQyY2hhcihjPDwyKX1yZXR1cm4gZH1mdW5jdGlvbiBiNjR0b0JBKGUpe3ZhciBkPWI2NHRvaGV4KGUpO3ZhciBjO3ZhciBiPW5ldyBBcnJheSgpO2ZvcihjPTA7MipjPGQubGVuZ3RoOysrYyl7YltjXT1wYXJzZUludChkLnN1YnN0cmluZygyKmMsMipjKzIpLDE2KX1yZXR1cm4gYn07XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBkYml0czt2YXIgY2FuYXJ5PTI0NDgzNzgxNDA5NDU5MDt2YXIgal9sbT0oKGNhbmFyeSYxNjc3NzIxNSk9PTE1NzE1MDcwKTtmdW5jdGlvbiBCaWdJbnRlZ2VyKGUsZCxmKXtpZihlIT1udWxsKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7dGhpcy5mcm9tTnVtYmVyKGUsZCxmKX1lbHNle2lmKGQ9PW51bGwmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXt0aGlzLmZyb21TdHJpbmcoZSwyNTYpfWVsc2V7dGhpcy5mcm9tU3RyaW5nKGUsZCl9fX19ZnVuY3Rpb24gbmJpKCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpfWZ1bmN0aW9uIGFtMShmLGEsYixlLGgsZyl7d2hpbGUoLS1nPj0wKXt2YXIgZD1hKnRoaXNbZisrXStiW2VdK2g7aD1NYXRoLmZsb29yKGQvNjcxMDg4NjQpO2JbZSsrXT1kJjY3MTA4ODYzfXJldHVybiBofWZ1bmN0aW9uIGFtMihmLHEscixlLG8sYSl7dmFyIGs9cSYzMjc2NyxwPXE+PjE1O3doaWxlKC0tYT49MCl7dmFyIGQ9dGhpc1tmXSYzMjc2Nzt2YXIgZz10aGlzW2YrK10+PjE1O3ZhciBiPXAqZCtnKms7ZD1rKmQrKChiJjMyNzY3KTw8MTUpK3JbZV0rKG8mMTA3Mzc0MTgyMyk7bz0oZD4+PjMwKSsoYj4+PjE1KStwKmcrKG8+Pj4zMCk7cltlKytdPWQmMTA3Mzc0MTgyM31yZXR1cm4gb31mdW5jdGlvbiBhbTMoZixxLHIsZSxvLGEpe3ZhciBrPXEmMTYzODMscD1xPj4xNDt3aGlsZSgtLWE+PTApe3ZhciBkPXRoaXNbZl0mMTYzODM7dmFyIGc9dGhpc1tmKytdPj4xNDt2YXIgYj1wKmQrZyprO2Q9aypkKygoYiYxNjM4Myk8PDE0KStyW2VdK287bz0oZD4+MjgpKyhiPj4xNCkrcCpnO3JbZSsrXT1kJjI2ODQzNTQ1NX1yZXR1cm4gb31pZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWU9PVwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIpKXtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbT1hbTI7ZGJpdHM9MzB9ZWxzZXtpZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWUhPVwiTmV0c2NhcGVcIikpe0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMTtkYml0cz0yNn1lbHNle0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMztkYml0cz0yOH19QmlnSW50ZWdlci5wcm90b3R5cGUuREI9ZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRE09KCgxPDxkYml0cyktMSk7QmlnSW50ZWdlci5wcm90b3R5cGUuRFY9KDE8PGRiaXRzKTt2YXIgQklfRlA9NTI7QmlnSW50ZWdlci5wcm90b3R5cGUuRlY9TWF0aC5wb3coMixCSV9GUCk7QmlnSW50ZWdlci5wcm90b3R5cGUuRjE9QklfRlAtZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRjI9MipkYml0cy1CSV9GUDt2YXIgQklfUk09XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjt2YXIgQklfUkM9bmV3IEFycmF5KCk7dmFyIHJyLHZ2O3JyPVwiMFwiLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTA7dnY8PTk7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJhXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJBXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9ZnVuY3Rpb24gaW50MmNoYXIoYSl7cmV0dXJuIEJJX1JNLmNoYXJBdChhKX1mdW5jdGlvbiBpbnRBdChiLGEpe3ZhciBkPUJJX1JDW2IuY2hhckNvZGVBdChhKV07cmV0dXJuKGQ9PW51bGwpPy0xOmR9ZnVuY3Rpb24gYm5wQ29weVRvKGIpe2Zvcih2YXIgYT10aGlzLnQtMTthPj0wOy0tYSl7YlthXT10aGlzW2FdfWIudD10aGlzLnQ7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBGcm9tSW50KGEpe3RoaXMudD0xO3RoaXMucz0oYTwwKT8tMTowO2lmKGE+MCl7dGhpc1swXT1hfWVsc2V7aWYoYTwtMSl7dGhpc1swXT1hK3RoaXMuRFZ9ZWxzZXt0aGlzLnQ9MH19fWZ1bmN0aW9uIG5idihhKXt2YXIgYj1uYmkoKTtiLmZyb21JbnQoYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhoLGMpe3ZhciBlO2lmKGM9PTE2KXtlPTR9ZWxzZXtpZihjPT04KXtlPTN9ZWxzZXtpZihjPT0yNTYpe2U9OH1lbHNle2lmKGM9PTIpe2U9MX1lbHNle2lmKGM9PTMyKXtlPTV9ZWxzZXtpZihjPT00KXtlPTJ9ZWxzZXt0aGlzLmZyb21SYWRpeChoLGMpO3JldHVybn19fX19fXRoaXMudD0wO3RoaXMucz0wO3ZhciBnPWgubGVuZ3RoLGQ9ZmFsc2UsZj0wO3doaWxlKC0tZz49MCl7dmFyIGE9KGU9PTgpP2hbZ10mMjU1OmludEF0KGgsZyk7aWYoYTwwKXtpZihoLmNoYXJBdChnKT09XCItXCIpe2Q9dHJ1ZX1jb250aW51ZX1kPWZhbHNlO2lmKGY9PTApe3RoaXNbdGhpcy50KytdPWF9ZWxzZXtpZihmK2U+dGhpcy5EQil7dGhpc1t0aGlzLnQtMV18PShhJigoMTw8KHRoaXMuREItZikpLTEpKTw8Zjt0aGlzW3RoaXMudCsrXT0oYT4+KHRoaXMuREItZikpfWVsc2V7dGhpc1t0aGlzLnQtMV18PWE8PGZ9fWYrPWU7aWYoZj49dGhpcy5EQil7Zi09dGhpcy5EQn19aWYoZT09OCYmKGhbMF0mMTI4KSE9MCl7dGhpcy5zPS0xO2lmKGY+MCl7dGhpc1t0aGlzLnQtMV18PSgoMTw8KHRoaXMuREItZikpLTEpPDxmfX10aGlzLmNsYW1wKCk7aWYoZCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIGJucENsYW1wKCl7dmFyIGE9dGhpcy5zJnRoaXMuRE07d2hpbGUodGhpcy50PjAmJnRoaXNbdGhpcy50LTFdPT1hKXstLXRoaXMudH19ZnVuY3Rpb24gYm5Ub1N0cmluZyhjKXtpZih0aGlzLnM8MCl7cmV0dXJuXCItXCIrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhjKX12YXIgZTtpZihjPT0xNil7ZT00fWVsc2V7aWYoYz09OCl7ZT0zfWVsc2V7aWYoYz09Mil7ZT0xfWVsc2V7aWYoYz09MzIpe2U9NX1lbHNle2lmKGM9PTQpe2U9Mn1lbHNle3JldHVybiB0aGlzLnRvUmFkaXgoYyl9fX19fXZhciBnPSgxPDxlKS0xLGwsYT1mYWxzZSxoPVwiXCIsZj10aGlzLnQ7dmFyIGo9dGhpcy5EQi0oZip0aGlzLkRCKSVlO2lmKGYtLT4wKXtpZihqPHRoaXMuREImJihsPXRoaXNbZl0+PmopPjApe2E9dHJ1ZTtoPWludDJjaGFyKGwpfXdoaWxlKGY+PTApe2lmKGo8ZSl7bD0odGhpc1tmXSYoKDE8PGopLTEpKTw8KGUtaik7bHw9dGhpc1stLWZdPj4oais9dGhpcy5EQi1lKX1lbHNle2w9KHRoaXNbZl0+PihqLT1lKSkmZztpZihqPD0wKXtqKz10aGlzLkRCOy0tZn19aWYobD4wKXthPXRydWV9aWYoYSl7aCs9aW50MmNoYXIobCl9fX1yZXR1cm4gYT9oOlwiMFwifWZ1bmN0aW9uIGJuTmVnYXRlKCl7dmFyIGE9bmJpKCk7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5BYnMoKXtyZXR1cm4odGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpc31mdW5jdGlvbiBibkNvbXBhcmVUbyhiKXt2YXIgZD10aGlzLnMtYi5zO2lmKGQhPTApe3JldHVybiBkfXZhciBjPXRoaXMudDtkPWMtYi50O2lmKGQhPTApe3JldHVybih0aGlzLnM8MCk/LWQ6ZH13aGlsZSgtLWM+PTApe2lmKChkPXRoaXNbY10tYltjXSkhPTApe3JldHVybiBkfX1yZXR1cm4gMH1mdW5jdGlvbiBuYml0cyhhKXt2YXIgYz0xLGI7aWYoKGI9YT4+PjE2KSE9MCl7YT1iO2MrPTE2fWlmKChiPWE+PjgpIT0wKXthPWI7Yys9OH1pZigoYj1hPj40KSE9MCl7YT1iO2MrPTR9aWYoKGI9YT4+MikhPTApe2E9YjtjKz0yfWlmKChiPWE+PjEpIT0wKXthPWI7Yys9MX1yZXR1cm4gY31mdW5jdGlvbiBibkJpdExlbmd0aCgpe2lmKHRoaXMudDw9MCl7cmV0dXJuIDB9cmV0dXJuIHRoaXMuREIqKHRoaXMudC0xKStuYml0cyh0aGlzW3RoaXMudC0xXV4odGhpcy5zJnRoaXMuRE0pKX1mdW5jdGlvbiBibnBETFNoaWZ0VG8oYyxiKXt2YXIgYTtmb3IoYT10aGlzLnQtMTthPj0wOy0tYSl7YlthK2NdPXRoaXNbYV19Zm9yKGE9Yy0xO2E+PTA7LS1hKXtiW2FdPTB9Yi50PXRoaXMudCtjO2Iucz10aGlzLnN9ZnVuY3Rpb24gYm5wRFJTaGlmdFRvKGMsYil7Zm9yKHZhciBhPWM7YTx0aGlzLnQ7KythKXtiW2EtY109dGhpc1thXX1iLnQ9TWF0aC5tYXgodGhpcy50LWMsMCk7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBMU2hpZnRUbyhqLGUpe3ZhciBiPWoldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGc9KDE8PGEpLTE7dmFyIGY9TWF0aC5mbG9vcihqL3RoaXMuREIpLGg9KHRoaXMuczw8YikmdGhpcy5ETSxkO2ZvcihkPXRoaXMudC0xO2Q+PTA7LS1kKXtlW2QrZisxXT0odGhpc1tkXT4+YSl8aDtoPSh0aGlzW2RdJmcpPDxifWZvcihkPWYtMTtkPj0wOy0tZCl7ZVtkXT0wfWVbZl09aDtlLnQ9dGhpcy50K2YrMTtlLnM9dGhpcy5zO2UuY2xhbXAoKX1mdW5jdGlvbiBibnBSU2hpZnRUbyhnLGQpe2Qucz10aGlzLnM7dmFyIGU9TWF0aC5mbG9vcihnL3RoaXMuREIpO2lmKGU+PXRoaXMudCl7ZC50PTA7cmV0dXJufXZhciBiPWcldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGY9KDE8PGIpLTE7ZFswXT10aGlzW2VdPj5iO2Zvcih2YXIgYz1lKzE7Yzx0aGlzLnQ7KytjKXtkW2MtZS0xXXw9KHRoaXNbY10mZik8PGE7ZFtjLWVdPXRoaXNbY10+PmJ9aWYoYj4wKXtkW3RoaXMudC1lLTFdfD0odGhpcy5zJmYpPDxhfWQudD10aGlzLnQtZTtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wU3ViVG8oZCxmKXt2YXIgZT0wLGc9MCxiPU1hdGgubWluKGQudCx0aGlzLnQpO3doaWxlKGU8Yil7Zys9dGhpc1tlXS1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9aWYoZC50PHRoaXMudCl7Zy09ZC5zO3doaWxlKGU8dGhpcy50KXtnKz10aGlzW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9dGhpcy5zfWVsc2V7Zys9dGhpcy5zO3doaWxlKGU8ZC50KXtnLT1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zy09ZC5zfWYucz0oZzwwKT8tMTowO2lmKGc8LTEpe2ZbZSsrXT10aGlzLkRWK2d9ZWxzZXtpZihnPjApe2ZbZSsrXT1nfX1mLnQ9ZTtmLmNsYW1wKCl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhjLGUpe3ZhciBiPXRoaXMuYWJzKCksZj1jLmFicygpO3ZhciBkPWIudDtlLnQ9ZCtmLnQ7d2hpbGUoLS1kPj0wKXtlW2RdPTB9Zm9yKGQ9MDtkPGYudDsrK2Qpe2VbZCtiLnRdPWIuYW0oMCxmW2RdLGUsZCwwLGIudCl9ZS5zPTA7ZS5jbGFtcCgpO2lmKHRoaXMucyE9Yy5zKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8oZSxlKX19ZnVuY3Rpb24gYm5wU3F1YXJlVG8oZCl7dmFyIGE9dGhpcy5hYnMoKTt2YXIgYj1kLnQ9MiphLnQ7d2hpbGUoLS1iPj0wKXtkW2JdPTB9Zm9yKGI9MDtiPGEudC0xOysrYil7dmFyIGU9YS5hbShiLGFbYl0sZCwyKmIsMCwxKTtpZigoZFtiK2EudF0rPWEuYW0oYisxLDIqYVtiXSxkLDIqYisxLGUsYS50LWItMSkpPj1hLkRWKXtkW2IrYS50XS09YS5EVjtkW2IrYS50KzFdPTF9fWlmKGQudD4wKXtkW2QudC0xXSs9YS5hbShiLGFbYl0sZCwyKmIsMCwxKX1kLnM9MDtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wRGl2UmVtVG8obixoLGcpe3ZhciB3PW4uYWJzKCk7aWYody50PD0wKXtyZXR1cm59dmFyIGs9dGhpcy5hYnMoKTtpZihrLnQ8dy50KXtpZihoIT1udWxsKXtoLmZyb21JbnQoMCl9aWYoZyE9bnVsbCl7dGhpcy5jb3B5VG8oZyl9cmV0dXJufWlmKGc9PW51bGwpe2c9bmJpKCl9dmFyIGQ9bmJpKCksYT10aGlzLnMsbD1uLnM7dmFyIHY9dGhpcy5EQi1uYml0cyh3W3cudC0xXSk7aWYodj4wKXt3LmxTaGlmdFRvKHYsZCk7ay5sU2hpZnRUbyh2LGcpfWVsc2V7dy5jb3B5VG8oZCk7ay5jb3B5VG8oZyl9dmFyIHA9ZC50O3ZhciBiPWRbcC0xXTtpZihiPT0wKXtyZXR1cm59dmFyIG89YiooMTw8dGhpcy5GMSkrKChwPjEpP2RbcC0yXT4+dGhpcy5GMjowKTt2YXIgQT10aGlzLkZWL28sej0oMTw8dGhpcy5GMSkvbyx4PTE8PHRoaXMuRjI7dmFyIHU9Zy50LHM9dS1wLGY9KGg9PW51bGwpP25iaSgpOmg7ZC5kbFNoaWZ0VG8ocyxmKTtpZihnLmNvbXBhcmVUbyhmKT49MCl7Z1tnLnQrK109MTtnLnN1YlRvKGYsZyl9QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHAsZik7Zi5zdWJUbyhkLGQpO3doaWxlKGQudDxwKXtkW2QudCsrXT0wfXdoaWxlKC0tcz49MCl7dmFyIGM9KGdbLS11XT09Yik/dGhpcy5ETTpNYXRoLmZsb29yKGdbdV0qQSsoZ1t1LTFdK3gpKnopO2lmKChnW3VdKz1kLmFtKDAsYyxnLHMsMCxwKSk8Yyl7ZC5kbFNoaWZ0VG8ocyxmKTtnLnN1YlRvKGYsZyk7d2hpbGUoZ1t1XTwtLWMpe2cuc3ViVG8oZixnKX19fWlmKGghPW51bGwpe2cuZHJTaGlmdFRvKHAsaCk7aWYoYSE9bCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKGgsaCl9fWcudD1wO2cuY2xhbXAoKTtpZih2PjApe2cuclNoaWZ0VG8odixnKX1pZihhPDApe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyhnLGcpfX1mdW5jdGlvbiBibk1vZChiKXt2YXIgYz1uYmkoKTt0aGlzLmFicygpLmRpdlJlbVRvKGIsbnVsbCxjKTtpZih0aGlzLnM8MCYmYy5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXtiLnN1YlRvKGMsYyl9cmV0dXJuIGN9ZnVuY3Rpb24gQ2xhc3NpYyhhKXt0aGlzLm09YX1mdW5jdGlvbiBjQ29udmVydChhKXtpZihhLnM8MHx8YS5jb21wYXJlVG8odGhpcy5tKT49MCl7cmV0dXJuIGEubW9kKHRoaXMubSl9ZWxzZXtyZXR1cm4gYX19ZnVuY3Rpb24gY1JldmVydChhKXtyZXR1cm4gYX1mdW5jdGlvbiBjUmVkdWNlKGEpe2EuZGl2UmVtVG8odGhpcy5tLG51bGwsYSl9ZnVuY3Rpb24gY011bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBjU3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfUNsYXNzaWMucHJvdG90eXBlLmNvbnZlcnQ9Y0NvbnZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0PWNSZXZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmVkdWNlPWNSZWR1Y2U7Q2xhc3NpYy5wcm90b3R5cGUubXVsVG89Y011bFRvO0NsYXNzaWMucHJvdG90eXBlLnNxclRvPWNTcXJUbztmdW5jdGlvbiBibnBJbnZEaWdpdCgpe2lmKHRoaXMudDwxKXtyZXR1cm4gMH12YXIgYT10aGlzWzBdO2lmKChhJjEpPT0wKXtyZXR1cm4gMH12YXIgYj1hJjM7Yj0oYiooMi0oYSYxNSkqYikpJjE1O2I9KGIqKDItKGEmMjU1KSpiKSkmMjU1O2I9KGIqKDItKCgoYSY2NTUzNSkqYikmNjU1MzUpKSkmNjU1MzU7Yj0oYiooMi1hKmIldGhpcy5EVikpJXRoaXMuRFY7cmV0dXJuKGI+MCk/dGhpcy5EVi1iOi1ifWZ1bmN0aW9uIE1vbnRnb21lcnkoYSl7dGhpcy5tPWE7dGhpcy5tcD1hLmludkRpZ2l0KCk7dGhpcy5tcGw9dGhpcy5tcCYzMjc2Nzt0aGlzLm1waD10aGlzLm1wPj4xNTt0aGlzLnVtPSgxPDwoYS5EQi0xNSkpLTE7dGhpcy5tdDI9MiphLnR9ZnVuY3Rpb24gbW9udENvbnZlcnQoYSl7dmFyIGI9bmJpKCk7YS5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQsYik7Yi5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxiKTtpZihhLnM8MCYmYi5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXt0aGlzLm0uc3ViVG8oYixiKX1yZXR1cm4gYn1mdW5jdGlvbiBtb250UmV2ZXJ0KGEpe3ZhciBiPW5iaSgpO2EuY29weVRvKGIpO3RoaXMucmVkdWNlKGIpO3JldHVybiBifWZ1bmN0aW9uIG1vbnRSZWR1Y2UoYSl7d2hpbGUoYS50PD10aGlzLm10Mil7YVthLnQrK109MH1mb3IodmFyIGM9MDtjPHRoaXMubS50OysrYyl7dmFyIGI9YVtjXSYzMjc2Nzt2YXIgZD0oYip0aGlzLm1wbCsoKChiKnRoaXMubXBoKyhhW2NdPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJmEuRE07Yj1jK3RoaXMubS50O2FbYl0rPXRoaXMubS5hbSgwLGQsYSxjLDAsdGhpcy5tLnQpO3doaWxlKGFbYl0+PWEuRFYpe2FbYl0tPWEuRFY7YVsrK2JdKyt9fWEuY2xhbXAoKTthLmRyU2hpZnRUbyh0aGlzLm0udCxhKTtpZihhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gbW9udFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBtb250TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfU1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQ9bW9udENvbnZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0PW1vbnRSZXZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmVkdWNlPW1vbnRSZWR1Y2U7TW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG89bW9udE11bFRvO01vbnRnb21lcnkucHJvdG90eXBlLnNxclRvPW1vbnRTcXJUbztmdW5jdGlvbiBibnBJc0V2ZW4oKXtyZXR1cm4oKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpPT0wfWZ1bmN0aW9uIGJucEV4cChoLGope2lmKGg+NDI5NDk2NzI5NXx8aDwxKXtyZXR1cm4gQmlnSW50ZWdlci5PTkV9dmFyIGY9bmJpKCksYT1uYmkoKSxkPWouY29udmVydCh0aGlzKSxjPW5iaXRzKGgpLTE7ZC5jb3B5VG8oZik7d2hpbGUoLS1jPj0wKXtqLnNxclRvKGYsYSk7aWYoKGgmKDE8PGMpKT4wKXtqLm11bFRvKGEsZCxmKX1lbHNle3ZhciBiPWY7Zj1hO2E9Yn19cmV0dXJuIGoucmV2ZXJ0KGYpfWZ1bmN0aW9uIGJuTW9kUG93SW50KGIsYSl7dmFyIGM7aWYoYjwyNTZ8fGEuaXNFdmVuKCkpe2M9bmV3IENsYXNzaWMoYSl9ZWxzZXtjPW5ldyBNb250Z29tZXJ5KGEpfXJldHVybiB0aGlzLmV4cChiLGMpfUJpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbz1ibnBDb3B5VG87QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludD1ibnBGcm9tSW50O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmc9Ym5wRnJvbVN0cmluZztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGFtcD1ibnBDbGFtcDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG89Ym5wRExTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbz1ibnBEUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG89Ym5wTFNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG89Ym5wUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG89Ym5wU3ViVG87QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbz1ibnBNdWx0aXBseVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvPWJucFNxdWFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvPWJucERpdlJlbVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmludkRpZ2l0PWJucEludkRpZ2l0O0JpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbj1ibnBJc0V2ZW47QmlnSW50ZWdlci5wcm90b3R5cGUuZXhwPWJucEV4cDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZz1iblRvU3RyaW5nO0JpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZT1ibk5lZ2F0ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hYnM9Ym5BYnM7QmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvPWJuQ29tcGFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aD1ibkJpdExlbmd0aDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2Q9Ym5Nb2Q7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50PWJuTW9kUG93SW50O0JpZ0ludGVnZXIuWkVSTz1uYnYoMCk7QmlnSW50ZWdlci5PTkU9bmJ2KDEpO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBibkNsb25lKCl7dmFyIGE9bmJpKCk7dGhpcy5jb3B5VG8oYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5JbnRWYWx1ZSgpe2lmKHRoaXMuczwwKXtpZih0aGlzLnQ9PTEpe3JldHVybiB0aGlzWzBdLXRoaXMuRFZ9ZWxzZXtpZih0aGlzLnQ9PTApe3JldHVybiAtMX19fWVsc2V7aWYodGhpcy50PT0xKXtyZXR1cm4gdGhpc1swXX1lbHNle2lmKHRoaXMudD09MCl7cmV0dXJuIDB9fX1yZXR1cm4oKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXX1mdW5jdGlvbiBibkJ5dGVWYWx1ZSgpe3JldHVybih0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNH1mdW5jdGlvbiBiblNob3J0VmFsdWUoKXtyZXR1cm4odGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTZ9ZnVuY3Rpb24gYm5wQ2h1bmtTaXplKGEpe3JldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2coYSkpfWZ1bmN0aW9uIGJuU2lnTnVtKCl7aWYodGhpcy5zPDApe3JldHVybiAtMX1lbHNle2lmKHRoaXMudDw9MHx8KHRoaXMudD09MSYmdGhpc1swXTw9MCkpe3JldHVybiAwfWVsc2V7cmV0dXJuIDF9fX1mdW5jdGlvbiBibnBUb1JhZGl4KGMpe2lmKGM9PW51bGwpe2M9MTB9aWYodGhpcy5zaWdudW0oKT09MHx8YzwyfHxjPjM2KXtyZXR1cm5cIjBcIn12YXIgZj10aGlzLmNodW5rU2l6ZShjKTt2YXIgZT1NYXRoLnBvdyhjLGYpO3ZhciBpPW5idihlKSxqPW5iaSgpLGg9bmJpKCksZz1cIlwiO3RoaXMuZGl2UmVtVG8oaSxqLGgpO3doaWxlKGouc2lnbnVtKCk+MCl7Zz0oZStoLmludFZhbHVlKCkpLnRvU3RyaW5nKGMpLnN1YnN0cigxKStnO2ouZGl2UmVtVG8oaSxqLGgpfXJldHVybiBoLmludFZhbHVlKCkudG9TdHJpbmcoYykrZ31mdW5jdGlvbiBibnBGcm9tUmFkaXgobSxoKXt0aGlzLmZyb21JbnQoMCk7aWYoaD09bnVsbCl7aD0xMH12YXIgZj10aGlzLmNodW5rU2l6ZShoKTt2YXIgZz1NYXRoLnBvdyhoLGYpLGU9ZmFsc2UsYT0wLGw9MDtmb3IodmFyIGM9MDtjPG0ubGVuZ3RoOysrYyl7dmFyIGs9aW50QXQobSxjKTtpZihrPDApe2lmKG0uY2hhckF0KGMpPT1cIi1cIiYmdGhpcy5zaWdudW0oKT09MCl7ZT10cnVlfWNvbnRpbnVlfWw9aCpsK2s7aWYoKythPj1mKXt0aGlzLmRNdWx0aXBseShnKTt0aGlzLmRBZGRPZmZzZXQobCwwKTthPTA7bD0wfX1pZihhPjApe3RoaXMuZE11bHRpcGx5KE1hdGgucG93KGgsYSkpO3RoaXMuZEFkZE9mZnNldChsLDApfWlmKGUpe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpfX1mdW5jdGlvbiBibnBGcm9tTnVtYmVyKGYsZSxoKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoZjwyKXt0aGlzLmZyb21JbnQoMSl9ZWxzZXt0aGlzLmZyb21OdW1iZXIoZixoKTtpZighdGhpcy50ZXN0Qml0KGYtMSkpe3RoaXMuYml0d2lzZVRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLG9wX29yLHRoaXMpfWlmKHRoaXMuaXNFdmVuKCkpe3RoaXMuZEFkZE9mZnNldCgxLDApfXdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShlKSl7dGhpcy5kQWRkT2Zmc2V0KDIsMCk7aWYodGhpcy5iaXRMZW5ndGgoKT5mKXt0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLHRoaXMpfX19fWVsc2V7dmFyIGQ9bmV3IEFycmF5KCksZz1mJjc7ZC5sZW5ndGg9KGY+PjMpKzE7ZS5uZXh0Qnl0ZXMoZCk7aWYoZz4wKXtkWzBdJj0oKDE8PGcpLTEpfWVsc2V7ZFswXT0wfXRoaXMuZnJvbVN0cmluZyhkLDI1Nil9fWZ1bmN0aW9uIGJuVG9CeXRlQXJyYXkoKXt2YXIgYj10aGlzLnQsYz1uZXcgQXJyYXkoKTtjWzBdPXRoaXMuczt2YXIgZT10aGlzLkRCLShiKnRoaXMuREIpJTgsZixhPTA7aWYoYi0tPjApe2lmKGU8dGhpcy5EQiYmKGY9dGhpc1tiXT4+ZSkhPSh0aGlzLnMmdGhpcy5ETSk+PmUpe2NbYSsrXT1mfCh0aGlzLnM8PCh0aGlzLkRCLWUpKX13aGlsZShiPj0wKXtpZihlPDgpe2Y9KHRoaXNbYl0mKCgxPDxlKS0xKSk8PCg4LWUpO2Z8PXRoaXNbLS1iXT4+KGUrPXRoaXMuREItOCl9ZWxzZXtmPSh0aGlzW2JdPj4oZS09OCkpJjI1NTtpZihlPD0wKXtlKz10aGlzLkRCOy0tYn19aWYoKGYmMTI4KSE9MCl7Znw9LTI1Nn1pZihhPT0wJiYodGhpcy5zJjEyOCkhPShmJjEyOCkpeysrYX1pZihhPjB8fGYhPXRoaXMucyl7Y1thKytdPWZ9fX1yZXR1cm4gY31mdW5jdGlvbiBibkVxdWFscyhiKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYik9PTApfWZ1bmN0aW9uIGJuTWluKGIpe3JldHVybih0aGlzLmNvbXBhcmVUbyhiKTwwKT90aGlzOmJ9ZnVuY3Rpb24gYm5NYXgoYil7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGIpPjApP3RoaXM6Yn1mdW5jdGlvbiBibnBCaXR3aXNlVG8oYyxoLGUpe3ZhciBkLGcsYj1NYXRoLm1pbihjLnQsdGhpcy50KTtmb3IoZD0wO2Q8YjsrK2Qpe2VbZF09aCh0aGlzW2RdLGNbZF0pfWlmKGMudDx0aGlzLnQpe2c9Yy5zJnRoaXMuRE07Zm9yKGQ9YjtkPHRoaXMudDsrK2Qpe2VbZF09aCh0aGlzW2RdLGcpfWUudD10aGlzLnR9ZWxzZXtnPXRoaXMucyZ0aGlzLkRNO2ZvcihkPWI7ZDxjLnQ7KytkKXtlW2RdPWgoZyxjW2RdKX1lLnQ9Yy50fWUucz1oKHRoaXMucyxjLnMpO2UuY2xhbXAoKX1mdW5jdGlvbiBvcF9hbmQoYSxiKXtyZXR1cm4gYSZifWZ1bmN0aW9uIGJuQW5kKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfYW5kLGMpO3JldHVybiBjfWZ1bmN0aW9uIG9wX29yKGEsYil7cmV0dXJuIGF8Yn1mdW5jdGlvbiBibk9yKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3Bfb3IsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gb3BfeG9yKGEsYil7cmV0dXJuIGFeYn1mdW5jdGlvbiBiblhvcihiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX3hvcixjKTtyZXR1cm4gY31mdW5jdGlvbiBvcF9hbmRub3QoYSxiKXtyZXR1cm4gYSZ+Yn1mdW5jdGlvbiBibkFuZE5vdChiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX2FuZG5vdCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibk5vdCgpe3ZhciBiPW5iaSgpO2Zvcih2YXIgYT0wO2E8dGhpcy50OysrYSl7YlthXT10aGlzLkRNJn50aGlzW2FdfWIudD10aGlzLnQ7Yi5zPX50aGlzLnM7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5TaGlmdExlZnQoYil7dmFyIGE9bmJpKCk7aWYoYjwwKXt0aGlzLnJTaGlmdFRvKC1iLGEpfWVsc2V7dGhpcy5sU2hpZnRUbyhiLGEpfXJldHVybiBhfWZ1bmN0aW9uIGJuU2hpZnRSaWdodChiKXt2YXIgYT1uYmkoKTtpZihiPDApe3RoaXMubFNoaWZ0VG8oLWIsYSl9ZWxzZXt0aGlzLnJTaGlmdFRvKGIsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gbGJpdChhKXtpZihhPT0wKXtyZXR1cm4gLTF9dmFyIGI9MDtpZigoYSY2NTUzNSk9PTApe2E+Pj0xNjtiKz0xNn1pZigoYSYyNTUpPT0wKXthPj49ODtiKz04fWlmKChhJjE1KT09MCl7YT4+PTQ7Yis9NH1pZigoYSYzKT09MCl7YT4+PTI7Yis9Mn1pZigoYSYxKT09MCl7KytifXJldHVybiBifWZ1bmN0aW9uIGJuR2V0TG93ZXN0U2V0Qml0KCl7Zm9yKHZhciBhPTA7YTx0aGlzLnQ7KythKXtpZih0aGlzW2FdIT0wKXtyZXR1cm4gYSp0aGlzLkRCK2xiaXQodGhpc1thXSl9fWlmKHRoaXMuczwwKXtyZXR1cm4gdGhpcy50KnRoaXMuREJ9cmV0dXJuIC0xfWZ1bmN0aW9uIGNiaXQoYSl7dmFyIGI9MDt3aGlsZShhIT0wKXthJj1hLTE7KytifXJldHVybiBifWZ1bmN0aW9uIGJuQml0Q291bnQoKXt2YXIgYz0wLGE9dGhpcy5zJnRoaXMuRE07Zm9yKHZhciBiPTA7Yjx0aGlzLnQ7KytiKXtjKz1jYml0KHRoaXNbYl1eYSl9cmV0dXJuIGN9ZnVuY3Rpb24gYm5UZXN0Qml0KGIpe3ZhciBhPU1hdGguZmxvb3IoYi90aGlzLkRCKTtpZihhPj10aGlzLnQpe3JldHVybih0aGlzLnMhPTApfXJldHVybigodGhpc1thXSYoMTw8KGIldGhpcy5EQikpKSE9MCl9ZnVuY3Rpb24gYm5wQ2hhbmdlQml0KGMsYil7dmFyIGE9QmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGMpO3RoaXMuYml0d2lzZVRvKGEsYixhKTtyZXR1cm4gYX1mdW5jdGlvbiBiblNldEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9vcil9ZnVuY3Rpb24gYm5DbGVhckJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9hbmRub3QpfWZ1bmN0aW9uIGJuRmxpcEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF94b3IpfWZ1bmN0aW9uIGJucEFkZFRvKGQsZil7dmFyIGU9MCxnPTAsYj1NYXRoLm1pbihkLnQsdGhpcy50KTt3aGlsZShlPGIpe2crPXRoaXNbZV0rZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWlmKGQudDx0aGlzLnQpe2crPWQuczt3aGlsZShlPHRoaXMudCl7Zys9dGhpc1tlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPXRoaXMuc31lbHNle2crPXRoaXMuczt3aGlsZShlPGQudCl7Zys9ZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPWQuc31mLnM9KGc8MCk/LTE6MDtpZihnPjApe2ZbZSsrXT1nfWVsc2V7aWYoZzwtMSl7ZltlKytdPXRoaXMuRFYrZ319Zi50PWU7Zi5jbGFtcCgpfWZ1bmN0aW9uIGJuQWRkKGIpe3ZhciBjPW5iaSgpO3RoaXMuYWRkVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBiblN1YnRyYWN0KGIpe3ZhciBjPW5iaSgpO3RoaXMuc3ViVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBibk11bHRpcGx5KGIpe3ZhciBjPW5iaSgpO3RoaXMubXVsdGlwbHlUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuU3F1YXJlKCl7dmFyIGE9bmJpKCk7dGhpcy5zcXVhcmVUbyhhKTtyZXR1cm4gYX1mdW5jdGlvbiBibkRpdmlkZShiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsYyxudWxsKTtyZXR1cm4gY31mdW5jdGlvbiBiblJlbWFpbmRlcihiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsbnVsbCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihiKXt2YXIgZD1uYmkoKSxjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixkLGMpO3JldHVybiBuZXcgQXJyYXkoZCxjKX1mdW5jdGlvbiBibnBETXVsdGlwbHkoYSl7dGhpc1t0aGlzLnRdPXRoaXMuYW0oMCxhLTEsdGhpcywwLDAsdGhpcy50KTsrK3RoaXMudDt0aGlzLmNsYW1wKCl9ZnVuY3Rpb24gYm5wREFkZE9mZnNldChiLGEpe2lmKGI9PTApe3JldHVybn13aGlsZSh0aGlzLnQ8PWEpe3RoaXNbdGhpcy50KytdPTB9dGhpc1thXSs9Yjt3aGlsZSh0aGlzW2FdPj10aGlzLkRWKXt0aGlzW2FdLT10aGlzLkRWO2lmKCsrYT49dGhpcy50KXt0aGlzW3RoaXMudCsrXT0wfSsrdGhpc1thXX19ZnVuY3Rpb24gTnVsbEV4cCgpe31mdW5jdGlvbiBuTm9wKGEpe3JldHVybiBhfWZ1bmN0aW9uIG5NdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYil9ZnVuY3Rpb24gblNxclRvKGEsYil7YS5zcXVhcmVUbyhiKX1OdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUubXVsVG89bk11bFRvO051bGxFeHAucHJvdG90eXBlLnNxclRvPW5TcXJUbztmdW5jdGlvbiBiblBvdyhhKXtyZXR1cm4gdGhpcy5leHAoYSxuZXcgTnVsbEV4cCgpKX1mdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYixmLGUpe3ZhciBkPU1hdGgubWluKHRoaXMudCtiLnQsZik7ZS5zPTA7ZS50PWQ7d2hpbGUoZD4wKXtlWy0tZF09MH12YXIgYztmb3IoYz1lLnQtdGhpcy50O2Q8YzsrK2Qpe2VbZCt0aGlzLnRdPXRoaXMuYW0oMCxiW2RdLGUsZCwwLHRoaXMudCl9Zm9yKGM9TWF0aC5taW4oYi50LGYpO2Q8YzsrK2Qpe3RoaXMuYW0oMCxiW2RdLGUsZCwwLGYtZCl9ZS5jbGFtcCgpfWZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhiLGUsZCl7LS1lO3ZhciBjPWQudD10aGlzLnQrYi50LWU7ZC5zPTA7d2hpbGUoLS1jPj0wKXtkW2NdPTB9Zm9yKGM9TWF0aC5tYXgoZS10aGlzLnQsMCk7YzxiLnQ7KytjKXtkW3RoaXMudCtjLWVdPXRoaXMuYW0oZS1jLGJbY10sZCwwLDAsdGhpcy50K2MtZSl9ZC5jbGFtcCgpO2QuZHJTaGlmdFRvKDEsZCl9ZnVuY3Rpb24gQmFycmV0dChhKXt0aGlzLnIyPW5iaSgpO3RoaXMucTM9bmJpKCk7QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKDIqYS50LHRoaXMucjIpO3RoaXMubXU9dGhpcy5yMi5kaXZpZGUoYSk7dGhpcy5tPWF9ZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoYSl7aWYoYS5zPDB8fGEudD4yKnRoaXMubS50KXtyZXR1cm4gYS5tb2QodGhpcy5tKX1lbHNle2lmKGEuY29tcGFyZVRvKHRoaXMubSk8MCl7cmV0dXJuIGF9ZWxzZXt2YXIgYj1uYmkoKTthLmNvcHlUbyhiKTt0aGlzLnJlZHVjZShiKTtyZXR1cm4gYn19fWZ1bmN0aW9uIGJhcnJldHRSZXZlcnQoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gYmFycmV0dFJlZHVjZShhKXthLmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO2lmKGEudD50aGlzLm0udCsxKXthLnQ9dGhpcy5tLnQrMTthLmNsYW1wKCl9dGhpcy5tdS5tdWx0aXBseVVwcGVyVG8odGhpcy5yMix0aGlzLm0udCsxLHRoaXMucTMpO3RoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO3doaWxlKGEuY29tcGFyZVRvKHRoaXMucjIpPDApe2EuZEFkZE9mZnNldCgxLHRoaXMubS50KzEpfWEuc3ViVG8odGhpcy5yMixhKTt3aGlsZShhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gYmFycmV0dFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBiYXJyZXR0TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfUJhcnJldHQucHJvdG90eXBlLmNvbnZlcnQ9YmFycmV0dENvbnZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0PWJhcnJldHRSZXZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmVkdWNlPWJhcnJldHRSZWR1Y2U7QmFycmV0dC5wcm90b3R5cGUubXVsVG89YmFycmV0dE11bFRvO0JhcnJldHQucHJvdG90eXBlLnNxclRvPWJhcnJldHRTcXJUbztmdW5jdGlvbiBibk1vZFBvdyhxLGYpe3ZhciBvPXEuYml0TGVuZ3RoKCksaCxiPW5idigxKSx2O2lmKG88PTApe3JldHVybiBifWVsc2V7aWYobzwxOCl7aD0xfWVsc2V7aWYobzw0OCl7aD0zfWVsc2V7aWYobzwxNDQpe2g9NH1lbHNle2lmKG88NzY4KXtoPTV9ZWxzZXtoPTZ9fX19fWlmKG88OCl7dj1uZXcgQ2xhc3NpYyhmKX1lbHNle2lmKGYuaXNFdmVuKCkpe3Y9bmV3IEJhcnJldHQoZil9ZWxzZXt2PW5ldyBNb250Z29tZXJ5KGYpfX12YXIgcD1uZXcgQXJyYXkoKSxkPTMscz1oLTEsYT0oMTw8aCktMTtwWzFdPXYuY29udmVydCh0aGlzKTtpZihoPjEpe3ZhciBBPW5iaSgpO3Yuc3FyVG8ocFsxXSxBKTt3aGlsZShkPD1hKXtwW2RdPW5iaSgpO3YubXVsVG8oQSxwW2QtMl0scFtkXSk7ZCs9Mn19dmFyIGw9cS50LTEseCx1PXRydWUsYz1uYmkoKSx5O289bmJpdHMocVtsXSktMTt3aGlsZShsPj0wKXtpZihvPj1zKXt4PShxW2xdPj4oby1zKSkmYX1lbHNle3g9KHFbbF0mKCgxPDwobysxKSktMSkpPDwocy1vKTtpZihsPjApe3h8PXFbbC0xXT4+KHRoaXMuREIrby1zKX19ZD1oO3doaWxlKCh4JjEpPT0wKXt4Pj49MTstLWR9aWYoKG8tPWQpPDApe28rPXRoaXMuREI7LS1sfWlmKHUpe3BbeF0uY29weVRvKGIpO3U9ZmFsc2V9ZWxzZXt3aGlsZShkPjEpe3Yuc3FyVG8oYixjKTt2LnNxclRvKGMsYik7ZC09Mn1pZihkPjApe3Yuc3FyVG8oYixjKX1lbHNle3k9YjtiPWM7Yz15fXYubXVsVG8oYyxwW3hdLGIpfXdoaWxlKGw+PTAmJihxW2xdJigxPDxvKSk9PTApe3Yuc3FyVG8oYixjKTt5PWI7Yj1jO2M9eTtpZigtLW88MCl7bz10aGlzLkRCLTE7LS1sfX19cmV0dXJuIHYucmV2ZXJ0KGIpfWZ1bmN0aW9uIGJuR0NEKGMpe3ZhciBiPSh0aGlzLnM8MCk/dGhpcy5uZWdhdGUoKTp0aGlzLmNsb25lKCk7dmFyIGg9KGMuczwwKT9jLm5lZ2F0ZSgpOmMuY2xvbmUoKTtpZihiLmNvbXBhcmVUbyhoKTwwKXt2YXIgZT1iO2I9aDtoPWV9dmFyIGQ9Yi5nZXRMb3dlc3RTZXRCaXQoKSxmPWguZ2V0TG93ZXN0U2V0Qml0KCk7aWYoZjwwKXtyZXR1cm4gYn1pZihkPGYpe2Y9ZH1pZihmPjApe2IuclNoaWZ0VG8oZixiKTtoLnJTaGlmdFRvKGYsaCl9d2hpbGUoYi5zaWdudW0oKT4wKXtpZigoZD1iLmdldExvd2VzdFNldEJpdCgpKT4wKXtiLnJTaGlmdFRvKGQsYil9aWYoKGQ9aC5nZXRMb3dlc3RTZXRCaXQoKSk+MCl7aC5yU2hpZnRUbyhkLGgpfWlmKGIuY29tcGFyZVRvKGgpPj0wKXtiLnN1YlRvKGgsYik7Yi5yU2hpZnRUbygxLGIpfWVsc2V7aC5zdWJUbyhiLGgpO2guclNoaWZ0VG8oMSxoKX19aWYoZj4wKXtoLmxTaGlmdFRvKGYsaCl9cmV0dXJuIGh9ZnVuY3Rpb24gYm5wTW9kSW50KGUpe2lmKGU8PTApe3JldHVybiAwfXZhciBjPXRoaXMuRFYlZSxiPSh0aGlzLnM8MCk/ZS0xOjA7aWYodGhpcy50PjApe2lmKGM9PTApe2I9dGhpc1swXSVlfWVsc2V7Zm9yKHZhciBhPXRoaXMudC0xO2E+PTA7LS1hKXtiPShjKmIrdGhpc1thXSklZX19fXJldHVybiBifWZ1bmN0aW9uIGJuTW9kSW52ZXJzZShmKXt2YXIgaj1mLmlzRXZlbigpO2lmKCh0aGlzLmlzRXZlbigpJiZqKXx8Zi5zaWdudW0oKT09MCl7cmV0dXJuIEJpZ0ludGVnZXIuWkVST312YXIgaT1mLmNsb25lKCksaD10aGlzLmNsb25lKCk7dmFyIGc9bmJ2KDEpLGU9bmJ2KDApLGw9bmJ2KDApLGs9bmJ2KDEpO3doaWxlKGkuc2lnbnVtKCkhPTApe3doaWxlKGkuaXNFdmVuKCkpe2kuclNoaWZ0VG8oMSxpKTtpZihqKXtpZighZy5pc0V2ZW4oKXx8IWUuaXNFdmVuKCkpe2cuYWRkVG8odGhpcyxnKTtlLnN1YlRvKGYsZSl9Zy5yU2hpZnRUbygxLGcpfWVsc2V7aWYoIWUuaXNFdmVuKCkpe2Uuc3ViVG8oZixlKX19ZS5yU2hpZnRUbygxLGUpfXdoaWxlKGguaXNFdmVuKCkpe2guclNoaWZ0VG8oMSxoKTtpZihqKXtpZighbC5pc0V2ZW4oKXx8IWsuaXNFdmVuKCkpe2wuYWRkVG8odGhpcyxsKTtrLnN1YlRvKGYsayl9bC5yU2hpZnRUbygxLGwpfWVsc2V7aWYoIWsuaXNFdmVuKCkpe2suc3ViVG8oZixrKX19ay5yU2hpZnRUbygxLGspfWlmKGkuY29tcGFyZVRvKGgpPj0wKXtpLnN1YlRvKGgsaSk7aWYoail7Zy5zdWJUbyhsLGcpfWUuc3ViVG8oayxlKX1lbHNle2guc3ViVG8oaSxoKTtpZihqKXtsLnN1YlRvKGcsbCl9ay5zdWJUbyhlLGspfX1pZihoLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTApe3JldHVybiBCaWdJbnRlZ2VyLlpFUk99aWYoay5jb21wYXJlVG8oZik+PTApe3JldHVybiBrLnN1YnRyYWN0KGYpfWlmKGsuc2lnbnVtKCk8MCl7ay5hZGRUbyhmLGspfWVsc2V7cmV0dXJuIGt9aWYoay5zaWdudW0oKTwwKXtyZXR1cm4gay5hZGQoZil9ZWxzZXtyZXR1cm4ga319dmFyIGxvd3ByaW1lcz1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTt2YXIgbHBsaW09KDE8PDI2KS9sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXTtmdW5jdGlvbiBibklzUHJvYmFibGVQcmltZShlKXt2YXIgZCxiPXRoaXMuYWJzKCk7aWYoYi50PT0xJiZiWzBdPD1sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSl7Zm9yKGQ9MDtkPGxvd3ByaW1lcy5sZW5ndGg7KytkKXtpZihiWzBdPT1sb3dwcmltZXNbZF0pe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9aWYoYi5pc0V2ZW4oKSl7cmV0dXJuIGZhbHNlfWQ9MTt3aGlsZShkPGxvd3ByaW1lcy5sZW5ndGgpe3ZhciBhPWxvd3ByaW1lc1tkXSxjPWQrMTt3aGlsZShjPGxvd3ByaW1lcy5sZW5ndGgmJmE8bHBsaW0pe2EqPWxvd3ByaW1lc1tjKytdfWE9Yi5tb2RJbnQoYSk7d2hpbGUoZDxjKXtpZihhJWxvd3ByaW1lc1tkKytdPT0wKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gYi5taWxsZXJSYWJpbihlKX1mdW5jdGlvbiBibnBNaWxsZXJSYWJpbihmKXt2YXIgZz10aGlzLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTt2YXIgYz1nLmdldExvd2VzdFNldEJpdCgpO2lmKGM8PTApe3JldHVybiBmYWxzZX12YXIgaD1nLnNoaWZ0UmlnaHQoYyk7Zj0oZisxKT4+MTtpZihmPmxvd3ByaW1lcy5sZW5ndGgpe2Y9bG93cHJpbWVzLmxlbmd0aH12YXIgYj1uYmkoKTtmb3IodmFyIGU9MDtlPGY7KytlKXtiLmZyb21JbnQobG93cHJpbWVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsb3dwcmltZXMubGVuZ3RoKV0pO3ZhciBsPWIubW9kUG93KGgsdGhpcyk7aWYobC5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpIT0wJiZsLmNvbXBhcmVUbyhnKSE9MCl7dmFyIGQ9MTt3aGlsZShkKys8YyYmbC5jb21wYXJlVG8oZykhPTApe2w9bC5tb2RQb3dJbnQoMix0aGlzKTtpZihsLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk9PTApe3JldHVybiBmYWxzZX19aWYobC5jb21wYXJlVG8oZykhPTApe3JldHVybiBmYWxzZX19fXJldHVybiB0cnVlfUJpZ0ludGVnZXIucHJvdG90eXBlLmNodW5rU2l6ZT1ibnBDaHVua1NpemU7QmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeD1ibnBUb1JhZGl4O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeD1ibnBGcm9tUmFkaXg7QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbU51bWJlcj1ibnBGcm9tTnVtYmVyO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbz1ibnBCaXR3aXNlVG87QmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0PWJucENoYW5nZUJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGRUbz1ibnBBZGRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHk9Ym5wRE11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQ9Ym5wREFkZE9mZnNldDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseUxvd2VyVG89Ym5wTXVsdGlwbHlMb3dlclRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbz1ibnBNdWx0aXBseVVwcGVyVG87QmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50PWJucE1vZEludDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5taWxsZXJSYWJpbj1ibnBNaWxsZXJSYWJpbjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZT1ibkNsb25lO0JpZ0ludGVnZXIucHJvdG90eXBlLmludFZhbHVlPWJuSW50VmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlPWJuQnl0ZVZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWU9Ym5TaG9ydFZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNpZ251bT1iblNpZ051bTtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheT1iblRvQnl0ZUFycmF5O0JpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscz1ibkVxdWFscztCaWdJbnRlZ2VyLnByb3RvdHlwZS5taW49Ym5NaW47QmlnSW50ZWdlci5wcm90b3R5cGUubWF4PWJuTWF4O0JpZ0ludGVnZXIucHJvdG90eXBlLmFuZD1ibkFuZDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5vcj1ibk9yO0JpZ0ludGVnZXIucHJvdG90eXBlLnhvcj1iblhvcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3Q9Ym5BbmROb3Q7QmlnSW50ZWdlci5wcm90b3R5cGUubm90PWJuTm90O0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdD1iblNoaWZ0TGVmdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0PWJuU2hpZnRSaWdodDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5nZXRMb3dlc3RTZXRCaXQ9Ym5HZXRMb3dlc3RTZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQ9Ym5CaXRDb3VudDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0PWJuVGVzdEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zZXRCaXQ9Ym5TZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQ9Ym5DbGVhckJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0PWJuRmxpcEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGQ9Ym5BZGQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3Q9Ym5TdWJ0cmFjdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseT1ibk11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdmlkZT1ibkRpdmlkZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXI9Ym5SZW1haW5kZXI7QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyPWJuRGl2aWRlQW5kUmVtYWluZGVyO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvdz1ibk1vZFBvdztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlPWJuTW9kSW52ZXJzZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3c9Ym5Qb3c7QmlnSW50ZWdlci5wcm90b3R5cGUuZ2NkPWJuR0NEO0JpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZT1ibklzUHJvYmFibGVQcmltZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmU9Ym5TcXVhcmU7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbmZ1bmN0aW9uIEFyY2ZvdXIoKXt0aGlzLmk9MDt0aGlzLmo9MDt0aGlzLlM9bmV3IEFycmF5KCl9ZnVuY3Rpb24gQVJDNGluaXQoZCl7dmFyIGMsYSxiO2ZvcihjPTA7YzwyNTY7KytjKXt0aGlzLlNbY109Y31hPTA7Zm9yKGM9MDtjPDI1NjsrK2Mpe2E9KGErdGhpcy5TW2NdK2RbYyVkLmxlbmd0aF0pJjI1NTtiPXRoaXMuU1tjXTt0aGlzLlNbY109dGhpcy5TW2FdO3RoaXMuU1thXT1ifXRoaXMuaT0wO3RoaXMuaj0wfWZ1bmN0aW9uIEFSQzRuZXh0KCl7dmFyIGE7dGhpcy5pPSh0aGlzLmkrMSkmMjU1O3RoaXMuaj0odGhpcy5qK3RoaXMuU1t0aGlzLmldKSYyNTU7YT10aGlzLlNbdGhpcy5pXTt0aGlzLlNbdGhpcy5pXT10aGlzLlNbdGhpcy5qXTt0aGlzLlNbdGhpcy5qXT1hO3JldHVybiB0aGlzLlNbKGErdGhpcy5TW3RoaXMuaV0pJjI1NV19QXJjZm91ci5wcm90b3R5cGUuaW5pdD1BUkM0aW5pdDtBcmNmb3VyLnByb3RvdHlwZS5uZXh0PUFSQzRuZXh0O2Z1bmN0aW9uIHBybmdfbmV3c3RhdGUoKXtyZXR1cm4gbmV3IEFyY2ZvdXIoKX12YXIgcm5nX3BzaXplPTI1Njtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxudmFyIHJuZ19zdGF0ZTt2YXIgcm5nX3Bvb2w7dmFyIHJuZ19wcHRyO2Z1bmN0aW9uIHJuZ19zZWVkX2ludChhKXtybmdfcG9vbFtybmdfcHB0cisrXV49YSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj44KSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj4xNikmMjU1O3JuZ19wb29sW3JuZ19wcHRyKytdXj0oYT4+MjQpJjI1NTtpZihybmdfcHB0cj49cm5nX3BzaXplKXtybmdfcHB0ci09cm5nX3BzaXplfX1mdW5jdGlvbiBybmdfc2VlZF90aW1lKCl7cm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKX1pZihybmdfcG9vbD09bnVsbCl7cm5nX3Bvb2w9bmV3IEFycmF5KCk7cm5nX3BwdHI9MDt2YXIgdDtpZih3aW5kb3chPT11bmRlZmluZWQmJih3aW5kb3cuY3J5cHRvIT09dW5kZWZpbmVkfHx3aW5kb3cubXNDcnlwdG8hPT11bmRlZmluZWQpKXt2YXIgY3J5cHRvPXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0bztpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgdWE9bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXModWEpO2Zvcih0PTA7dDwzMjsrK3Qpe3JuZ19wb29sW3JuZ19wcHRyKytdPXVhW3RdfX1lbHNle2lmKG5hdmlnYXRvci5hcHBOYW1lPT1cIk5ldHNjYXBlXCImJm5hdmlnYXRvci5hcHBWZXJzaW9uPFwiNVwiKXt2YXIgej13aW5kb3cuY3J5cHRvLnJhbmRvbSgzMik7Zm9yKHQ9MDt0PHoubGVuZ3RoOysrdCl7cm5nX3Bvb2xbcm5nX3BwdHIrK109ei5jaGFyQ29kZUF0KHQpJjI1NX19fX13aGlsZShybmdfcHB0cjxybmdfcHNpemUpe3Q9TWF0aC5mbG9vcig2NTUzNipNYXRoLnJhbmRvbSgpKTtybmdfcG9vbFtybmdfcHB0cisrXT10Pj4+ODtybmdfcG9vbFtybmdfcHB0cisrXT10JjI1NX1ybmdfcHB0cj0wO3JuZ19zZWVkX3RpbWUoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGUoKXtpZihybmdfc3RhdGU9PW51bGwpe3JuZ19zZWVkX3RpbWUoKTtybmdfc3RhdGU9cHJuZ19uZXdzdGF0ZSgpO3JuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtmb3Iocm5nX3BwdHI9MDtybmdfcHB0cjxybmdfcG9vbC5sZW5ndGg7KytybmdfcHB0cil7cm5nX3Bvb2xbcm5nX3BwdHJdPTB9cm5nX3BwdHI9MH1yZXR1cm4gcm5nX3N0YXRlLm5leHQoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGIpe3ZhciBhO2ZvcihhPTA7YTxiLmxlbmd0aDsrK2Epe2JbYV09cm5nX2dldF9ieXRlKCl9fWZ1bmN0aW9uIFNlY3VyZVJhbmRvbSgpe31TZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcz1ybmdfZ2V0X2J5dGVzO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUJpZ0ludChiLGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihiLGEpfWZ1bmN0aW9uIGxpbmVicmsoYyxkKXt2YXIgYT1cIlwiO3ZhciBiPTA7d2hpbGUoYitkPGMubGVuZ3RoKXthKz1jLnN1YnN0cmluZyhiLGIrZCkrXCJcXG5cIjtiKz1kfXJldHVybiBhK2Muc3Vic3RyaW5nKGIsYy5sZW5ndGgpfWZ1bmN0aW9uIGJ5dGUySGV4KGEpe2lmKGE8MTYpe3JldHVyblwiMFwiK2EudG9TdHJpbmcoMTYpfWVsc2V7cmV0dXJuIGEudG9TdHJpbmcoMTYpfX1mdW5jdGlvbiBwa2NzMXBhZDIoZSxoKXtpZihoPGUubGVuZ3RoKzExKXt0aHJvd1wiTWVzc2FnZSB0b28gbG9uZyBmb3IgUlNBXCI7cmV0dXJuIG51bGx9dmFyIGc9bmV3IEFycmF5KCk7dmFyIGQ9ZS5sZW5ndGgtMTt3aGlsZShkPj0wJiZoPjApe3ZhciBmPWUuY2hhckNvZGVBdChkLS0pO2lmKGY8MTI4KXtnWy0taF09Zn1lbHNle2lmKChmPjEyNykmJihmPDIwNDgpKXtnWy0taF09KGYmNjMpfDEyODtnWy0taF09KGY+PjYpfDE5Mn1lbHNle2dbLS1oXT0oZiY2Myl8MTI4O2dbLS1oXT0oKGY+PjYpJjYzKXwxMjg7Z1stLWhdPShmPj4xMil8MjI0fX19Z1stLWhdPTA7dmFyIGI9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBhPW5ldyBBcnJheSgpO3doaWxlKGg+Mil7YVswXT0wO3doaWxlKGFbMF09PTApe2IubmV4dEJ5dGVzKGEpfWdbLS1oXT1hWzBdfWdbLS1oXT0yO2dbLS1oXT0wO3JldHVybiBuZXcgQmlnSW50ZWdlcihnKX1mdW5jdGlvbiBvYWVwX21nZjFfYXJyKGMsYSxlKXt2YXIgYj1cIlwiLGQ9MDt3aGlsZShiLmxlbmd0aDxhKXtiKz1lKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGMuY29uY2F0KFsoZCY0Mjc4MTkwMDgwKT4+MjQsKGQmMTY3MTE2ODApPj4xNiwoZCY2NTI4MCk+PjgsZCYyNTVdKSkpO2QrPTF9cmV0dXJuIGJ9ZnVuY3Rpb24gb2FlcF9wYWQocSxhLGYsbCl7dmFyIGM9S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdDt2YXIgbz1LSlVSLmNyeXB0by5VdGlsO3ZhciBiPW51bGw7aWYoIWYpe2Y9XCJzaGExXCJ9aWYodHlwZW9mIGY9PT1cInN0cmluZ1wiKXtiPWMuZ2V0Q2Fub25pY2FsQWxnTmFtZShmKTtsPWMuZ2V0SGFzaExlbmd0aChiKTtmPWZ1bmN0aW9uKGkpe3JldHVybiBoZXh0b3JzdHIoby5oYXNoSGV4KHJzdHJ0b2hleChpKSxiKSl9fWlmKHEubGVuZ3RoKzIqbCsyPmEpe3Rocm93XCJNZXNzYWdlIHRvbyBsb25nIGZvciBSU0FcIn12YXIgaz1cIlwiLGU7Zm9yKGU9MDtlPGEtcS5sZW5ndGgtMipsLTI7ZSs9MSl7ays9XCJcXHgwMFwifXZhciBoPWYoXCJcIikraytcIlxceDAxXCIrcTt2YXIgZz1uZXcgQXJyYXkobCk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhnKTt2YXIgaj1vYWVwX21nZjFfYXJyKGcsaC5sZW5ndGgsZik7dmFyIHA9W107Zm9yKGU9MDtlPGgubGVuZ3RoO2UrPTEpe3BbZV09aC5jaGFyQ29kZUF0KGUpXmouY2hhckNvZGVBdChlKX12YXIgbT1vYWVwX21nZjFfYXJyKHAsZy5sZW5ndGgsZik7dmFyIGQ9WzBdO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKz0xKXtkW2UrMV09Z1tlXV5tLmNoYXJDb2RlQXQoZSl9cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGQuY29uY2F0KHApKX1mdW5jdGlvbiBSU0FLZXkoKXt0aGlzLm49bnVsbDt0aGlzLmU9MDt0aGlzLmQ9bnVsbDt0aGlzLnA9bnVsbDt0aGlzLnE9bnVsbDt0aGlzLmRtcDE9bnVsbDt0aGlzLmRtcTE9bnVsbDt0aGlzLmNvZWZmPW51bGx9ZnVuY3Rpb24gUlNBU2V0UHVibGljKGIsYSl7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMuaXNQcml2YXRlPWZhbHNlO2lmKHR5cGVvZiBiIT09XCJzdHJpbmdcIil7dGhpcy5uPWI7dGhpcy5lPWF9ZWxzZXtpZihiIT1udWxsJiZhIT1udWxsJiZiLmxlbmd0aD4wJiZhLmxlbmd0aD4wKXt0aGlzLm49cGFyc2VCaWdJbnQoYiwxNik7dGhpcy5lPXBhcnNlSW50KGEsMTYpfWVsc2V7dGhyb3dcIkludmFsaWQgUlNBIHB1YmxpYyBrZXlcIn19fWZ1bmN0aW9uIFJTQURvUHVibGljKGEpe3JldHVybiBhLm1vZFBvd0ludCh0aGlzLmUsdGhpcy5uKX1mdW5jdGlvbiBSU0FFbmNyeXB0KGQpe3ZhciBhPXBrY3MxcGFkMihkLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMpO2lmKGE9PW51bGwpe3JldHVybiBudWxsfXZhciBlPXRoaXMuZG9QdWJsaWMoYSk7aWYoZT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGI9ZS50b1N0cmluZygxNik7aWYoKGIubGVuZ3RoJjEpPT0wKXtyZXR1cm4gYn1lbHNle3JldHVyblwiMFwiK2J9fWZ1bmN0aW9uIFJTQUVuY3J5cHRPQUVQKGYsZSxiKXt2YXIgYT1vYWVwX3BhZChmLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMsZSxiKTtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgZz10aGlzLmRvUHVibGljKGEpO2lmKGc9PW51bGwpe3JldHVybiBudWxsfXZhciBkPWcudG9TdHJpbmcoMTYpO2lmKChkLmxlbmd0aCYxKT09MCl7cmV0dXJuIGR9ZWxzZXtyZXR1cm5cIjBcIitkfX1SU0FLZXkucHJvdG90eXBlLmRvUHVibGljPVJTQURvUHVibGljO1JTQUtleS5wcm90b3R5cGUuc2V0UHVibGljPVJTQVNldFB1YmxpYztSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQ9UlNBRW5jcnlwdDtSU0FLZXkucHJvdG90eXBlLmVuY3J5cHRPQUVQPVJTQUVuY3J5cHRPQUVQO1JTQUtleS5wcm90b3R5cGUudHlwZT1cIlJTQVwiO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBFQ0ZpZWxkRWxlbWVudEZwKGIsYSl7dGhpcy54PWE7dGhpcy5xPWJ9ZnVuY3Rpb24gZmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLnguZXF1YWxzKGEueCkpfWZ1bmN0aW9uIGZlRnBUb0JpZ0ludGVnZXIoKXtyZXR1cm4gdGhpcy54fWZ1bmN0aW9uIGZlRnBOZWdhdGUoKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5uZWdhdGUoKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcEFkZChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5hZGQoYS50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBTdWJ0cmFjdChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5zdWJ0cmFjdChhLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcE11bHRpcGx5KGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54Lm11bHRpcGx5KGEudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwU3F1YXJlKCl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguc3F1YXJlKCkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBEaXZpZGUoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubXVsdGlwbHkoYS50b0JpZ0ludGVnZXIoKS5tb2RJbnZlcnNlKHRoaXMucSkpLm1vZCh0aGlzLnEpKX1FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5lcXVhbHM9ZmVGcEVxdWFscztFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS50b0JpZ0ludGVnZXI9ZmVGcFRvQmlnSW50ZWdlcjtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5uZWdhdGU9ZmVGcE5lZ2F0ZTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5hZGQ9ZmVGcEFkZDtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zdWJ0cmFjdD1mZUZwU3VidHJhY3Q7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubXVsdGlwbHk9ZmVGcE11bHRpcGx5O0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnNxdWFyZT1mZUZwU3F1YXJlO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmRpdmlkZT1mZUZwRGl2aWRlO2Z1bmN0aW9uIEVDUG9pbnRGcChjLGEsZCxiKXt0aGlzLmN1cnZlPWM7dGhpcy54PWE7dGhpcy55PWQ7aWYoYj09bnVsbCl7dGhpcy56PUJpZ0ludGVnZXIuT05FfWVsc2V7dGhpcy56PWJ9dGhpcy56aW52PW51bGx9ZnVuY3Rpb24gcG9pbnRGcEdldFgoKXtpZih0aGlzLnppbnY9PW51bGwpe3RoaXMuemludj10aGlzLnoubW9kSW52ZXJzZSh0aGlzLmN1cnZlLnEpfXJldHVybiB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnppbnYpLm1vZCh0aGlzLmN1cnZlLnEpKX1mdW5jdGlvbiBwb2ludEZwR2V0WSgpe2lmKHRoaXMuemludj09bnVsbCl7dGhpcy56aW52PXRoaXMuei5tb2RJbnZlcnNlKHRoaXMuY3VydmUucSl9cmV0dXJuIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMuemludikubW9kKHRoaXMuY3VydmUucSkpfWZ1bmN0aW9uIHBvaW50RnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiBhLmlzSW5maW5pdHkoKX1pZihhLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpfXZhciBjLGI7Yz1hLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYS56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoIWMuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpe3JldHVybiBmYWxzZX1iPWEueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShhLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gYi5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwSXNJbmZpbml0eSgpe2lmKCh0aGlzLng9PW51bGwpJiYodGhpcy55PT1udWxsKSl7cmV0dXJuIHRydWV9cmV0dXJuIHRoaXMuei5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSYmIXRoaXMueS50b0JpZ0ludGVnZXIoKS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwTmVnYXRlKCl7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLngsdGhpcy55Lm5lZ2F0ZSgpLHRoaXMueil9ZnVuY3Rpb24gcG9pbnRGcEFkZChsKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGx9aWYobC5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfXZhciBwPWwueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShsLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgbz1sLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkobC56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhvKSl7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhwKSl7cmV0dXJuIHRoaXMudHdpY2UoKX1yZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBqPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgZT10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIG49dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBjPWwueC50b0JpZ0ludGVnZXIoKTt2YXIgaz1sLnkudG9CaWdJbnRlZ2VyKCk7dmFyIG09by5zcXVhcmUoKTt2YXIgaT1tLm11bHRpcGx5KG8pO3ZhciBkPWUubXVsdGlwbHkobSk7dmFyIGc9cC5zcXVhcmUoKS5tdWx0aXBseSh0aGlzLnopO3ZhciBhPWcuc3VidHJhY3QoZC5zaGlmdExlZnQoMSkpLm11bHRpcGx5KGwueikuc3VidHJhY3QoaSkubXVsdGlwbHkobykubW9kKHRoaXMuY3VydmUucSk7dmFyIGg9ZC5tdWx0aXBseShqKS5tdWx0aXBseShwKS5zdWJ0cmFjdChuLm11bHRpcGx5KGkpKS5zdWJ0cmFjdChnLm11bHRpcGx5KHApKS5tdWx0aXBseShsLnopLmFkZChwLm11bHRpcGx5KGkpKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1pLm11bHRpcGx5KHRoaXMueikubXVsdGlwbHkobC56KS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoYSksdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihoKSxmKX1mdW5jdGlvbiBwb2ludEZwVHdpY2UoKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgYz10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBlPWgubXVsdGlwbHkodGhpcy56KTt2YXIgaj1lLm11bHRpcGx5KGgpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBpPXRoaXMuY3VydmUuYS50b0JpZ0ludGVnZXIoKTt2YXIgaz1jLnNxdWFyZSgpLm11bHRpcGx5KGcpO2lmKCFCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKGkpKXtrPWsuYWRkKHRoaXMuei5zcXVhcmUoKS5tdWx0aXBseShpKSl9az1rLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBiPWsuc3F1YXJlKCkuc3VidHJhY3QoYy5zaGlmdExlZnQoMykubXVsdGlwbHkoaikpLnNoaWZ0TGVmdCgxKS5tdWx0aXBseShlKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1rLm11bHRpcGx5KGcpLm11bHRpcGx5KGMpLnN1YnRyYWN0KGouc2hpZnRMZWZ0KDEpKS5zaGlmdExlZnQoMikubXVsdGlwbHkoaikuc3VidHJhY3Qoay5zcXVhcmUoKS5tdWx0aXBseShrKSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGQ9ZS5zcXVhcmUoKS5tdWx0aXBseShlKS5zaGlmdExlZnQoMykubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGIpLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoZiksZCl9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5KGQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZihkLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBtPWQ7dmFyIGw9bS5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBiPXRoaXMubmVnYXRlKCk7dmFyIGo9dGhpczt2YXIgcT10aGlzLmN1cnZlLnEuc3VidHJhY3QoZCk7dmFyIG89cS5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBjPW5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLngsdGhpcy55KTt2YXIgYT1jLm5lZ2F0ZSgpO3ZhciBnO2ZvcihnPWwuYml0TGVuZ3RoKCktMjtnPjA7LS1nKXtqPWoudHdpY2UoKTt2YXIgbj1sLnRlc3RCaXQoZyk7dmFyIGY9bS50ZXN0Qml0KGcpO2lmKG4hPWYpe2o9ai5hZGQobj90aGlzOmIpfX1mb3IoZz1vLmJpdExlbmd0aCgpLTI7Zz4wOy0tZyl7Yz1jLnR3aWNlKCk7dmFyIHA9by50ZXN0Qml0KGcpO3ZhciByPXEudGVzdEJpdChnKTtpZihwIT1yKXtjPWMuYWRkKHA/YzphKX19cmV0dXJuIGp9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5VHdvKGMsYSxiKXt2YXIgZDtpZihjLmJpdExlbmd0aCgpPmIuYml0TGVuZ3RoKCkpe2Q9Yy5iaXRMZW5ndGgoKS0xfWVsc2V7ZD1iLmJpdExlbmd0aCgpLTF9dmFyIGY9dGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpO3ZhciBlPXRoaXMuYWRkKGEpO3doaWxlKGQ+PTApe2Y9Zi50d2ljZSgpO2lmKGMudGVzdEJpdChkKSl7aWYoYi50ZXN0Qml0KGQpKXtmPWYuYWRkKGUpfWVsc2V7Zj1mLmFkZCh0aGlzKX19ZWxzZXtpZihiLnRlc3RCaXQoZCkpe2Y9Zi5hZGQoYSl9fS0tZH1yZXR1cm4gZn1FQ1BvaW50RnAucHJvdG90eXBlLmdldFg9cG9pbnRGcEdldFg7RUNQb2ludEZwLnByb3RvdHlwZS5nZXRZPXBvaW50RnBHZXRZO0VDUG9pbnRGcC5wcm90b3R5cGUuZXF1YWxzPXBvaW50RnBFcXVhbHM7RUNQb2ludEZwLnByb3RvdHlwZS5pc0luZmluaXR5PXBvaW50RnBJc0luZmluaXR5O0VDUG9pbnRGcC5wcm90b3R5cGUubmVnYXRlPXBvaW50RnBOZWdhdGU7RUNQb2ludEZwLnByb3RvdHlwZS5hZGQ9cG9pbnRGcEFkZDtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlPXBvaW50RnBUd2ljZTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5PXBvaW50RnBNdWx0aXBseTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5VHdvPXBvaW50RnBNdWx0aXBseVR3bztmdW5jdGlvbiBFQ0N1cnZlRnAoZSxkLGMpe3RoaXMucT1lO3RoaXMuYT10aGlzLmZyb21CaWdJbnRlZ2VyKGQpO3RoaXMuYj10aGlzLmZyb21CaWdJbnRlZ2VyKGMpO3RoaXMuaW5maW5pdHk9bmV3IEVDUG9pbnRGcCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gY3VydmVGcEdldFEoKXtyZXR1cm4gdGhpcy5xfWZ1bmN0aW9uIGN1cnZlRnBHZXRBKCl7cmV0dXJuIHRoaXMuYX1mdW5jdGlvbiBjdXJ2ZUZwR2V0Qigpe3JldHVybiB0aGlzLmJ9ZnVuY3Rpb24gY3VydmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLmEuZXF1YWxzKGEuYSkmJnRoaXMuYi5lcXVhbHMoYS5iKSl9ZnVuY3Rpb24gY3VydmVGcEdldEluZmluaXR5KCl7cmV0dXJuIHRoaXMuaW5maW5pdHl9ZnVuY3Rpb24gY3VydmVGcEZyb21CaWdJbnRlZ2VyKGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsYSl9ZnVuY3Rpb24gY3VydmVGcERlY29kZVBvaW50SGV4KGQpe3N3aXRjaChwYXJzZUludChkLnN1YnN0cigwLDIpLDE2KSl7Y2FzZSAwOnJldHVybiB0aGlzLmluZmluaXR5O2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG51bGw7Y2FzZSA0OmNhc2UgNjpjYXNlIDc6dmFyIGE9KGQubGVuZ3RoLTIpLzI7dmFyIGM9ZC5zdWJzdHIoMixhKTt2YXIgYj1kLnN1YnN0cihhKzIsYSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcyx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGMsMTYpKSx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGIsMTYpKSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRRPWN1cnZlRnBHZXRRO0VDQ3VydmVGcC5wcm90b3R5cGUuZ2V0QT1jdXJ2ZUZwR2V0QTtFQ0N1cnZlRnAucHJvdG90eXBlLmdldEI9Y3VydmVGcEdldEI7RUNDdXJ2ZUZwLnByb3RvdHlwZS5lcXVhbHM9Y3VydmVGcEVxdWFscztFQ0N1cnZlRnAucHJvdG90eXBlLmdldEluZmluaXR5PWN1cnZlRnBHZXRJbmZpbml0eTtFQ0N1cnZlRnAucHJvdG90eXBlLmZyb21CaWdJbnRlZ2VyPWN1cnZlRnBGcm9tQmlnSW50ZWdlcjtFQ0N1cnZlRnAucHJvdG90eXBlLmRlY29kZVBvaW50SGV4PWN1cnZlRnBEZWNvZGVQb2ludEhleDtcbi8qISAoYykgU3RlZmFuIFRob21hcyB8IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYml0Y29pbmpzLWxpYlxyXG4gKi9cclxuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZ2V0Qnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKCh0aGlzLnRvQmlnSW50ZWdlcigpLmJpdExlbmd0aCgpKzcpLzgpfTtFQ1BvaW50RnAucHJvdG90eXBlLmdldEVuY29kZWQ9ZnVuY3Rpb24oYyl7dmFyIGQ9ZnVuY3Rpb24oaCxmKXt2YXIgZz1oLnRvQnl0ZUFycmF5VW5zaWduZWQoKTtpZihmPGcubGVuZ3RoKXtnPWcuc2xpY2UoZy5sZW5ndGgtZil9ZWxzZXt3aGlsZShmPmcubGVuZ3RoKXtnLnVuc2hpZnQoMCl9fXJldHVybiBnfTt2YXIgYT10aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgZT10aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgYj1kKGEsMzIpO2lmKGMpe2lmKGUuaXNFdmVuKCkpe2IudW5zaGlmdCgyKX1lbHNle2IudW5zaGlmdCgzKX19ZWxzZXtiLnVuc2hpZnQoNCk7Yj1iLmNvbmNhdChkKGUsMzIpKX1yZXR1cm4gYn07RUNQb2ludEZwLmRlY29kZUZyb209ZnVuY3Rpb24oZyxjKXt2YXIgZj1jWzBdO3ZhciBlPWMubGVuZ3RoLTE7dmFyIGQ9Yy5zbGljZSgxLDErZS8yKTt2YXIgYj1jLnNsaWNlKDErZS8yLDErZSk7ZC51bnNoaWZ0KDApO2IudW5zaGlmdCgwKTt2YXIgYT1uZXcgQmlnSW50ZWdlcihkKTt2YXIgaD1uZXcgQmlnSW50ZWdlcihiKTtyZXR1cm4gbmV3IEVDUG9pbnRGcChnLGcuZnJvbUJpZ0ludGVnZXIoYSksZy5mcm9tQmlnSW50ZWdlcihoKSl9O0VDUG9pbnRGcC5kZWNvZGVGcm9tSGV4PWZ1bmN0aW9uKGcsYyl7dmFyIGY9Yy5zdWJzdHIoMCwyKTt2YXIgZT1jLmxlbmd0aC0yO3ZhciBkPWMuc3Vic3RyKDIsZS8yKTt2YXIgYj1jLnN1YnN0cigyK2UvMixlLzIpO3ZhciBhPW5ldyBCaWdJbnRlZ2VyKGQsMTYpO3ZhciBoPW5ldyBCaWdJbnRlZ2VyKGIsMTYpO3JldHVybiBuZXcgRUNQb2ludEZwKGcsZy5mcm9tQmlnSW50ZWdlcihhKSxnLmZyb21CaWdJbnRlZ2VyKGgpKX07RUNQb2ludEZwLnByb3RvdHlwZS5hZGQyRD1mdW5jdGlvbihjKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGN9aWYoYy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueC5lcXVhbHMoYy54KSl7aWYodGhpcy55LmVxdWFscyhjLnkpKXtyZXR1cm4gdGhpcy50d2ljZSgpfXJldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9Yy54LnN1YnRyYWN0KHRoaXMueCk7dmFyIGU9Yy55LnN1YnRyYWN0KHRoaXMueSk7dmFyIGE9ZS5kaXZpZGUoZyk7dmFyIGQ9YS5zcXVhcmUoKS5zdWJ0cmFjdCh0aGlzLngpLnN1YnRyYWN0KGMueCk7dmFyIGY9YS5tdWx0aXBseSh0aGlzLnguc3VidHJhY3QoZCkpLnN1YnRyYWN0KHRoaXMueSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSxkLGYpfTtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlMkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBiPXRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKDIpKTt2YXIgZT10aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZigzKSk7dmFyIGE9dGhpcy54LnNxdWFyZSgpLm11bHRpcGx5KGUpLmFkZCh0aGlzLmN1cnZlLmEpLmRpdmlkZSh0aGlzLnkubXVsdGlwbHkoYikpO3ZhciBjPWEuc3F1YXJlKCkuc3VidHJhY3QodGhpcy54Lm11bHRpcGx5KGIpKTt2YXIgZD1hLm11bHRpcGx5KHRoaXMueC5zdWJ0cmFjdChjKSkuc3VidHJhY3QodGhpcy55KTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLGMsZCl9O0VDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHkyRD1mdW5jdGlvbihiKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYoYi5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1iO3ZhciBmPWcubXVsdGlwbHkobmV3IEJpZ0ludGVnZXIoXCIzXCIpKTt2YXIgbD10aGlzLm5lZ2F0ZSgpO3ZhciBkPXRoaXM7dmFyIGM7Zm9yKGM9Zi5iaXRMZW5ndGgoKS0yO2M+MDstLWMpe2Q9ZC50d2ljZSgpO3ZhciBhPWYudGVzdEJpdChjKTt2YXIgaj1nLnRlc3RCaXQoYyk7aWYoYSE9ail7ZD1kLmFkZDJEKGE/dGhpczpsKX19cmV0dXJuIGR9O0VDUG9pbnRGcC5wcm90b3R5cGUuaXNPbkN1cnZlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGY9dGhpcy5jdXJ2ZS5nZXRBKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGM9dGhpcy5jdXJ2ZS5nZXRCKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy5jdXJ2ZS5nZXRRKCk7dmFyIGU9aS5tdWx0aXBseShpKS5tb2QoaCk7dmFyIGc9ZC5tdWx0aXBseShkKS5tdWx0aXBseShkKS5hZGQoZi5tdWx0aXBseShkKSkuYWRkKGMpLm1vZChoKTtyZXR1cm4gZS5lcXVhbHMoZyl9O0VDUG9pbnRGcC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIihcIit0aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpK1wiLFwiK3RoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkrXCIpXCJ9O0VDUG9pbnRGcC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmN1cnZlLmdldFEoKTtpZih0aGlzLmlzSW5maW5pdHkoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgYXQgaW5maW5pdHkuXCIpfXZhciBhPXRoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBiPXRoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO2lmKGEuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxhLmNvbXBhcmVUbyhjLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSk+MCl7dGhyb3cgbmV3IEVycm9yKFwieCBjb29yZGluYXRlIG91dCBvZiBib3VuZHNcIil9aWYoYi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGIuY29tcGFyZVRvKGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKT4wKXt0aHJvdyBuZXcgRXJyb3IoXCJ5IGNvb3JkaW5hdGUgb3V0IG9mIGJvdW5kc1wiKX1pZighdGhpcy5pc09uQ3VydmUoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgbm90IG9uIHRoZSBjdXJ2ZS5cIil9aWYodGhpcy5tdWx0aXBseShjKS5pc0luZmluaXR5KCkpe3Rocm93IG5ldyBFcnJvcihcIlBvaW50IGlzIG5vdCBhIHNjYWxhciBtdWx0aXBsZSBvZiBHLlwiKX1yZXR1cm4gdHJ1ZX07XG4vKiEgTWlrZSBTYW11ZWwgKGMpIDIwMDkgfCBjb2RlLmdvb2dsZS5jb20vcC9qc29uLXNhbnMtZXZhbFxyXG4gKi9cclxudmFyIGpzb25QYXJzZT0oZnVuY3Rpb24oKXt2YXIgZT1cIig/Oi0/XFxcXGIoPzowfFsxLTldWzAtOV0qKSg/OlxcXFwuWzAtOV0rKT8oPzpbZUVdWystXT9bMC05XSspP1xcXFxiKVwiO3ZhciBqPScoPzpbXlxcXFwwLVxcXFx4MDhcXFxceDBhLVxcXFx4MWZcIlxcXFxcXFxcXXxcXFxcXFxcXCg/OltcIi9cXFxcXFxcXGJmbnJ0XXx1WzAtOUEtRmEtZl17NH0pKSc7dmFyIGk9Jyg/OlwiJytqKycqXCIpJzt2YXIgZD1uZXcgUmVnRXhwKFwiKD86ZmFsc2V8dHJ1ZXxudWxsfFtcXFxce1xcXFx9XFxcXFtcXFxcXV18XCIrZStcInxcIitpK1wiKVwiLFwiZ1wiKTt2YXIgaz1uZXcgUmVnRXhwKFwiXFxcXFxcXFwoPzooW151XSl8dSguezR9KSlcIixcImdcIik7dmFyIGc9eydcIic6J1wiJyxcIi9cIjpcIi9cIixcIlxcXFxcIjpcIlxcXFxcIixiOlwiXFxiXCIsZjpcIlxcZlwiLG46XCJcXG5cIixyOlwiXFxyXCIsdDpcIlxcdFwifTtmdW5jdGlvbiBoKGwsbSxuKXtyZXR1cm4gbT9nW21dOlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobiwxNikpfXZhciBjPW5ldyBTdHJpbmcoXCJcIik7dmFyIGE9XCJcXFxcXCI7dmFyIGY9e1wie1wiOk9iamVjdCxcIltcIjpBcnJheX07dmFyIGI9T2JqZWN0Lmhhc093blByb3BlcnR5O3JldHVybiBmdW5jdGlvbih1LHEpe3ZhciBwPXUubWF0Y2goZCk7dmFyIHg7dmFyIHY9cFswXTt2YXIgbD1mYWxzZTtpZihcIntcIj09PXYpe3g9e319ZWxzZXtpZihcIltcIj09PXYpe3g9W119ZWxzZXt4PVtdO2w9dHJ1ZX19dmFyIHQ7dmFyIHI9W3hdO2Zvcih2YXIgbz0xLWwsbT1wLmxlbmd0aDtvPG07KytvKXt2PXBbb107dmFyIHc7c3dpdGNoKHYuY2hhckNvZGVBdCgwKSl7ZGVmYXVsdDp3PXJbMF07d1t0fHx3Lmxlbmd0aF09Kyh2KTt0PXZvaWQgMDticmVhaztjYXNlIDM0OnY9di5zdWJzdHJpbmcoMSx2Lmxlbmd0aC0xKTtpZih2LmluZGV4T2YoYSkhPT0tMSl7dj12LnJlcGxhY2UoayxoKX13PXJbMF07aWYoIXQpe2lmKHcgaW5zdGFuY2VvZiBBcnJheSl7dD13Lmxlbmd0aH1lbHNle3Q9dnx8YzticmVha319d1t0XT12O3Q9dm9pZCAwO2JyZWFrO2Nhc2UgOTE6dz1yWzBdO3IudW5zaGlmdCh3W3R8fHcubGVuZ3RoXT1bXSk7dD12b2lkIDA7YnJlYWs7Y2FzZSA5MzpyLnNoaWZ0KCk7YnJlYWs7Y2FzZSAxMDI6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPWZhbHNlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTEwOnc9clswXTt3W3R8fHcubGVuZ3RoXT1udWxsO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTE2Onc9clswXTt3W3R8fHcubGVuZ3RoXT10cnVlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTIzOnc9clswXTtyLnVuc2hpZnQod1t0fHx3Lmxlbmd0aF09e30pO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTI1OnIuc2hpZnQoKTticmVha319aWYobCl7aWYoci5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoKX14PXhbMF19ZWxzZXtpZihyLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCl9fWlmKHEpe3ZhciBzPWZ1bmN0aW9uKEMsQil7dmFyIEQ9Q1tCXTtpZihEJiZ0eXBlb2YgRD09PVwib2JqZWN0XCIpe3ZhciBuPW51bGw7Zm9yKHZhciB6IGluIEQpe2lmKGIuY2FsbChELHopJiZEIT09Qyl7dmFyIHk9cyhELHopO2lmKHkhPT12b2lkIDApe0Rbel09eX1lbHNle2lmKCFuKXtuPVtdfW4ucHVzaCh6KX19fWlmKG4pe2Zvcih2YXIgQT1uLmxlbmd0aDstLUE+PTA7KXtkZWxldGUgRFtuW0FdXX19fXJldHVybiBxLmNhbGwoQyxCLEQpfTt4PXMoe1wiXCI6eH0sXCJcIil9cmV0dXJuIHh9fSkoKTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5hc24xPT1cInVuZGVmaW5lZFwifHwhS0pVUi5hc24xKXtLSlVSLmFzbjE9e319S0pVUi5hc24xLkFTTjFVdGlsPW5ldyBmdW5jdGlvbigpe3RoaXMuaW50ZWdlclRvQnl0ZUhleD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKDE2KTtpZigoYi5sZW5ndGglMik9PTEpe2I9XCIwXCIrYn1yZXR1cm4gYn07dGhpcy5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleD1mdW5jdGlvbihqKXt2YXIgZj1qLnRvU3RyaW5nKDE2KTtpZihmLnN1YnN0cigwLDEpIT1cIi1cIil7aWYoZi5sZW5ndGglMj09MSl7Zj1cIjBcIitmfWVsc2V7aWYoIWYubWF0Y2goL15bMC03XS8pKXtmPVwiMDBcIitmfX19ZWxzZXt2YXIgYT1mLnN1YnN0cigxKTt2YXIgZT1hLmxlbmd0aDtpZihlJTI9PTEpe2UrPTF9ZWxzZXtpZighZi5tYXRjaCgvXlswLTddLykpe2UrPTJ9fXZhciBnPVwiXCI7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Zys9XCJmXCJ9dmFyIGM9bmV3IEJpZ0ludGVnZXIoZywxNik7dmFyIGI9Yy54b3IoaikuYWRkKEJpZ0ludGVnZXIuT05FKTtmPWIudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14tLyxcIlwiKX1yZXR1cm4gZn07dGhpcy5nZXRQRU1TdHJpbmdGcm9tSGV4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGhleHRvcGVtKGEsYil9O3RoaXMubmV3T2JqZWN0PWZ1bmN0aW9uKGspe3ZhciBGPUtKVVIsbz1GLmFzbjEsdj1vLkFTTjFPYmplY3QsQj1vLkRFUkJvb2xlYW4sZT1vLkRFUkludGVnZXIsdD1vLkRFUkJpdFN0cmluZyxoPW8uREVST2N0ZXRTdHJpbmcseD1vLkRFUk51bGwseT1vLkRFUk9iamVjdElkZW50aWZpZXIsbT1vLkRFUkVudW1lcmF0ZWQsZz1vLkRFUlVURjhTdHJpbmcsZj1vLkRFUk51bWVyaWNTdHJpbmcsQT1vLkRFUlByaW50YWJsZVN0cmluZyx3PW8uREVSVGVsZXRleFN0cmluZyxxPW8uREVSSUE1U3RyaW5nLEU9by5ERVJVVENUaW1lLGo9by5ERVJHZW5lcmFsaXplZFRpbWUsYj1vLkRFUlZpc2libGVTdHJpbmcsbD1vLkRFUkJNUFN0cmluZyxuPW8uREVSU2VxdWVuY2UsYz1vLkRFUlNldCxzPW8uREVSVGFnZ2VkT2JqZWN0LHA9by5BU04xVXRpbC5uZXdPYmplY3Q7aWYoayBpbnN0YW5jZW9mIG8uQVNOMU9iamVjdCl7cmV0dXJuIGt9dmFyIHU9T2JqZWN0LmtleXMoayk7aWYodS5sZW5ndGghPTEpe3Rocm93IG5ldyBFcnJvcihcImtleSBvZiBwYXJhbSBzaGFsbCBiZSBvbmx5IG9uZS5cIil9dmFyIEg9dVswXTtpZihcIjphc24xOmJvb2w6aW50OmJpdHN0cjpvY3RzdHI6bnVsbDpvaWQ6ZW51bTp1dGY4c3RyOm51bXN0cjpwcm5zdHI6dGVsc3RyOmlhNXN0cjp1dGN0aW1lOmdlbnRpbWU6dmlzc3RyOmJtcHN0cjpzZXE6c2V0OnRhZzpcIi5pbmRleE9mKFwiOlwiK0grXCI6XCIpPT0tMSl7dGhyb3cgbmV3IEVycm9yKFwidW5kZWZpbmVkIGtleTogXCIrSCl9aWYoSD09XCJib29sXCIpe3JldHVybiBuZXcgQihrW0hdKX1pZihIPT1cImludFwiKXtyZXR1cm4gbmV3IGUoa1tIXSl9aWYoSD09XCJiaXRzdHJcIil7cmV0dXJuIG5ldyB0KGtbSF0pfWlmKEg9PVwib2N0c3RyXCIpe3JldHVybiBuZXcgaChrW0hdKX1pZihIPT1cIm51bGxcIil7cmV0dXJuIG5ldyB4KGtbSF0pfWlmKEg9PVwib2lkXCIpe3JldHVybiBuZXcgeShrW0hdKX1pZihIPT1cImVudW1cIil7cmV0dXJuIG5ldyBtKGtbSF0pfWlmKEg9PVwidXRmOHN0clwiKXtyZXR1cm4gbmV3IGcoa1tIXSl9aWYoSD09XCJudW1zdHJcIil7cmV0dXJuIG5ldyBmKGtbSF0pfWlmKEg9PVwicHJuc3RyXCIpe3JldHVybiBuZXcgQShrW0hdKX1pZihIPT1cInRlbHN0clwiKXtyZXR1cm4gbmV3IHcoa1tIXSl9aWYoSD09XCJpYTVzdHJcIil7cmV0dXJuIG5ldyBxKGtbSF0pfWlmKEg9PVwidXRjdGltZVwiKXtyZXR1cm4gbmV3IEUoa1tIXSl9aWYoSD09XCJnZW50aW1lXCIpe3JldHVybiBuZXcgaihrW0hdKX1pZihIPT1cInZpc3N0clwiKXtyZXR1cm4gbmV3IGIoa1tIXSl9aWYoSD09XCJibXBzdHJcIil7cmV0dXJuIG5ldyBsKGtbSF0pfWlmKEg9PVwiYXNuMVwiKXtyZXR1cm4gbmV3IHYoa1tIXSl9aWYoSD09XCJzZXFcIil7dmFyIGQ9a1tIXTt2YXIgRz1bXTtmb3IodmFyIHo9MDt6PGQubGVuZ3RoO3orKyl7dmFyIEQ9cChkW3pdKTtHLnB1c2goRCl9cmV0dXJuIG5ldyBuKHthcnJheTpHfSl9aWYoSD09XCJzZXRcIil7dmFyIGQ9a1tIXTt2YXIgRz1bXTtmb3IodmFyIHo9MDt6PGQubGVuZ3RoO3orKyl7dmFyIEQ9cChkW3pdKTtHLnB1c2goRCl9cmV0dXJuIG5ldyBjKHthcnJheTpHfSl9aWYoSD09XCJ0YWdcIil7dmFyIEM9a1tIXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQyk9PT1cIltvYmplY3QgQXJyYXldXCImJkMubGVuZ3RoPT0zKXt2YXIgcj1wKENbMl0pO3JldHVybiBuZXcgcyh7dGFnOkNbMF0sZXhwbGljaXQ6Q1sxXSxvYmo6cn0pfWVsc2V7cmV0dXJuIG5ldyBzKEMpfX19O3RoaXMuanNvblRvQVNOMUhFWD1mdW5jdGlvbihiKXt2YXIgYT10aGlzLm5ld09iamVjdChiKTtyZXR1cm4gYS5nZXRFbmNvZGVkSGV4KCl9fTtLSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQ9ZnVuY3Rpb24oYSl7dmFyIGo9XCJcIjt2YXIgaz1wYXJzZUludChhLnN1YnN0cigwLDIpLDE2KTt2YXIgZD1NYXRoLmZsb29yKGsvNDApO3ZhciBjPWslNDA7dmFyIGo9ZCtcIi5cIitjO3ZhciBlPVwiXCI7Zm9yKHZhciBmPTI7ZjxhLmxlbmd0aDtmKz0yKXt2YXIgZz1wYXJzZUludChhLnN1YnN0cihmLDIpLDE2KTt2YXIgaD0oXCIwMDAwMDAwMFwiK2cudG9TdHJpbmcoMikpLnNsaWNlKC04KTtlPWUraC5zdWJzdHIoMSw3KTtpZihoLnN1YnN0cigwLDEpPT1cIjBcIil7dmFyIGI9bmV3IEJpZ0ludGVnZXIoZSwyKTtqPWorXCIuXCIrYi50b1N0cmluZygxMCk7ZT1cIlwifX1yZXR1cm4gan07S0pVUi5hc24xLkFTTjFVdGlsLm9pZEludFRvSGV4PWZ1bmN0aW9uKGYpe3ZhciBlPWZ1bmN0aW9uKGEpe3ZhciBrPWEudG9TdHJpbmcoMTYpO2lmKGsubGVuZ3RoPT0xKXtrPVwiMFwiK2t9cmV0dXJuIGt9O3ZhciBkPWZ1bmN0aW9uKG8pe3ZhciBuPVwiXCI7dmFyIGs9bmV3IEJpZ0ludGVnZXIobywxMCk7dmFyIGE9ay50b1N0cmluZygyKTt2YXIgbD03LWEubGVuZ3RoJTc7aWYobD09Nyl7bD0wfXZhciBxPVwiXCI7Zm9yKHZhciBtPTA7bTxsO20rKyl7cSs9XCIwXCJ9YT1xK2E7Zm9yKHZhciBtPTA7bTxhLmxlbmd0aC0xO20rPTcpe3ZhciBwPWEuc3Vic3RyKG0sNyk7aWYobSE9YS5sZW5ndGgtNyl7cD1cIjFcIitwfW4rPWUocGFyc2VJbnQocCwyKSl9cmV0dXJuIG59O2lmKCFmLm1hdGNoKC9eWzAtOS5dKyQvKSl7dGhyb3dcIm1hbGZvcm1lZCBvaWQgc3RyaW5nOiBcIitmfXZhciBnPVwiXCI7dmFyIGI9Zi5zcGxpdChcIi5cIik7dmFyIGo9cGFyc2VJbnQoYlswXSkqNDArcGFyc2VJbnQoYlsxXSk7Zys9ZShqKTtiLnNwbGljZSgwLDIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXtnKz1kKGJbY10pfXJldHVybiBnfTtLSlVSLmFzbjEuQVNOMU9iamVjdD1mdW5jdGlvbihlKXt2YXIgYz10cnVlO3ZhciBiPW51bGw7dmFyIGQ9XCIwMFwiO3ZhciBmPVwiMDBcIjt2YXIgYT1cIlwiO3RoaXMucGFyYW1zPW51bGw7dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWU9ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5oVj09XCJ1bmRlZmluZWRcInx8dGhpcy5oVj09bnVsbCl7dGhyb3cgbmV3IEVycm9yKFwidGhpcy5oViBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKX1pZih0aGlzLmhWLmxlbmd0aCUyPT0xKXt0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBoZXggbXVzdCBiZSBldmVuIGxlbmd0aDogbj1cIithLmxlbmd0aCtcIix2PVwiK3RoaXMuaFYpfXZhciBqPXRoaXMuaFYubGVuZ3RoLzI7dmFyIGk9ai50b1N0cmluZygxNik7aWYoaS5sZW5ndGglMj09MSl7aT1cIjBcIitpfWlmKGo8MTI4KXtyZXR1cm4gaX1lbHNle3ZhciBoPWkubGVuZ3RoLzI7aWYoaD4xNSl7dGhyb3dcIkFTTi4xIGxlbmd0aCB0b28gbG9uZyB0byByZXByZXNlbnQgYnkgOHg6IG4gPSBcIitqLnRvU3RyaW5nKDE2KX12YXIgZz0xMjgraDtyZXR1cm4gZy50b1N0cmluZygxNikraX19O3RoaXMuZ2V0RW5jb2RlZEhleD1mdW5jdGlvbigpe2lmKHRoaXMuaFRMVj09bnVsbHx8dGhpcy5pc01vZGlmaWVkKXt0aGlzLmhWPXRoaXMuZ2V0RnJlc2hWYWx1ZUhleCgpO3RoaXMuaEw9dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWUoKTt0aGlzLmhUTFY9dGhpcy5oVCt0aGlzLmhMK3RoaXMuaFY7dGhpcy5pc01vZGlmaWVkPWZhbHNlfXJldHVybiB0aGlzLmhUTFZ9O3RoaXMuZ2V0VmFsdWVIZXg9ZnVuY3Rpb24oKXt0aGlzLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gdGhpcy5oVn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn07dGhpcy5zZXRCeVBhcmFtPWZ1bmN0aW9uKGcpe3RoaXMucGFyYW1zPWd9O2lmKGUhPXVuZGVmaW5lZCl7aWYoZS50bHYhPXVuZGVmaW5lZCl7dGhpcy5oVExWPWUudGx2O3RoaXMuaXNNb2RpZmllZD1mYWxzZX19fTtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmc9ZnVuY3Rpb24oYyl7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYj1udWxsO3ZhciBhPW51bGw7dGhpcy5nZXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfTt0aGlzLnNldFN0cmluZz1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9ZDt0aGlzLmhWPXV0Zjh0b2hleCh0aGlzLnMpLnRvTG93ZXJDYXNlKCl9O3RoaXMuc2V0U3RyaW5nSGV4PWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9ZH07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBjIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYz09XCJzdHJpbmdcIil7dGhpcy5zZXRTdHJpbmcoYyl9ZWxzZXtpZih0eXBlb2YgYy5zdHIhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0U3RyaW5nKGMuc3RyKX1lbHNle2lmKHR5cGVvZiBjLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRTdHJpbmdIZXgoYy5oZXgpfX19fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lPWZ1bmN0aW9uKGMpe0tKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt0aGlzLmxvY2FsRGF0ZVRvVVRDPWZ1bmN0aW9uKGcpe3ZhciBlPWcuZ2V0VGltZSgpKyhnLmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDApO3ZhciBmPW5ldyBEYXRlKGUpO3JldHVybiBmfTt0aGlzLmZvcm1hdERhdGU9ZnVuY3Rpb24obSxvLGUpe3ZhciBnPXRoaXMuemVyb1BhZGRpbmc7dmFyIG49dGhpcy5sb2NhbERhdGVUb1VUQyhtKTt2YXIgcD1TdHJpbmcobi5nZXRGdWxsWWVhcigpKTtpZihvPT1cInV0Y1wiKXtwPXAuc3Vic3RyKDIsMil9dmFyIGw9ZyhTdHJpbmcobi5nZXRNb250aCgpKzEpLDIpO3ZhciBxPWcoU3RyaW5nKG4uZ2V0RGF0ZSgpKSwyKTt2YXIgaD1nKFN0cmluZyhuLmdldEhvdXJzKCkpLDIpO3ZhciBpPWcoU3RyaW5nKG4uZ2V0TWludXRlcygpKSwyKTt2YXIgaj1nKFN0cmluZyhuLmdldFNlY29uZHMoKSksMik7dmFyIHI9cCtsK3EraCtpK2o7aWYoZT09PXRydWUpe3ZhciBmPW4uZ2V0TWlsbGlzZWNvbmRzKCk7aWYoZiE9MCl7dmFyIGs9ZyhTdHJpbmcoZiksMyk7az1rLnJlcGxhY2UoL1swXSskLyxcIlwiKTtyPXIrXCIuXCIra319cmV0dXJuIHIrXCJaXCJ9O3RoaXMuemVyb1BhZGRpbmc9ZnVuY3Rpb24oZSxkKXtpZihlLmxlbmd0aD49ZCl7cmV0dXJuIGV9cmV0dXJuIG5ldyBBcnJheShkLWUubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2V9O3RoaXMuZ2V0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc307dGhpcy5zZXRTdHJpbmc9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPWQ7dGhpcy5oVj1zdG9oZXgoZCl9O3RoaXMuc2V0QnlEYXRlVmFsdWU9ZnVuY3Rpb24oaCxqLGUsZCxmLGcpe3ZhciBpPW5ldyBEYXRlKERhdGUuVVRDKGgsai0xLGUsZCxmLGcsMCkpO3RoaXMuc2V0QnlEYXRlKGkpfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQ9ZnVuY3Rpb24oYil7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYT1udWxsO3RoaXMuc2V0QnlBU04xT2JqZWN0QXJyYXk9ZnVuY3Rpb24oYyl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5hc24xQXJyYXk9Y307dGhpcy5hcHBlbmRBU04xT2JqZWN0PWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuYXNuMUFycmF5LnB1c2goYyl9O3RoaXMuYXNuMUFycmF5PW5ldyBBcnJheSgpO2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYi5hcnJheSE9XCJ1bmRlZmluZWRcIil7dGhpcy5hc24xQXJyYXk9Yi5hcnJheX19fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQm9vbGVhbj1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSQm9vbGVhbi5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjAxXCI7aWYoYT09ZmFsc2Upe3RoaXMuaFRMVj1cIjAxMDEwMFwifWVsc2V7dGhpcy5oVExWPVwiMDEwMWZmXCJ9fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSQm9vbGVhbixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkludGVnZXI9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkludGVnZXIuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwMlwiO3RoaXMuc2V0QnlCaWdJbnRlZ2VyPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9S0pVUi5hc24xLkFTTjFVdGlsLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4KGIpfTt0aGlzLnNldEJ5SW50ZWdlcj1mdW5jdGlvbihjKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihTdHJpbmcoYyksMTApO3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGIpfTt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFY9Yn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5iaWdpbnQhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGEuYmlnaW50KX1lbHNle2lmKHR5cGVvZiBhW1wiaW50XCJdIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5SW50ZWdlcihhW1wiaW50XCJdKX1lbHNle2lmKHR5cGVvZiBhPT1cIm51bWJlclwiKXt0aGlzLnNldEJ5SW50ZWdlcihhKX1lbHNle2lmKHR5cGVvZiBhLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRWYWx1ZUhleChhLmhleCl9fX19fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkludGVnZXIsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJCaXRTdHJpbmc9ZnVuY3Rpb24oYil7aWYoYiE9PXVuZGVmaW5lZCYmdHlwZW9mIGIub2JqIT09XCJ1bmRlZmluZWRcIil7dmFyIGE9S0pVUi5hc24xLkFTTjFVdGlsLm5ld09iamVjdChiLm9iaik7Yi5oZXg9XCIwMFwiK2EuZ2V0RW5jb2RlZEhleCgpfUtKVVIuYXNuMS5ERVJCaXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwM1wiO3RoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzPWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9Y307dGhpcy5zZXRVbnVzZWRCaXRzQW5kSGV4VmFsdWU9ZnVuY3Rpb24oYyxlKXtpZihjPDB8fDc8Yyl7dGhyb3dcInVudXNlZCBiaXRzIHNoYWxsIGJlIGZyb20gMCB0byA3OiB1ID0gXCIrY312YXIgZD1cIjBcIitjO3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9ZCtlfTt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nPWZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKC8wKyQvLFwiXCIpO3ZhciBmPTgtZS5sZW5ndGglODtpZihmPT04KXtmPTB9Zm9yKHZhciBnPTA7Zzw9ZjtnKyspe2UrPVwiMFwifXZhciBqPVwiXCI7Zm9yKHZhciBnPTA7ZzxlLmxlbmd0aC0xO2crPTgpe3ZhciBkPWUuc3Vic3RyKGcsOCk7dmFyIGM9cGFyc2VJbnQoZCwyKS50b1N0cmluZygxNik7aWYoYy5sZW5ndGg9PTEpe2M9XCIwXCIrY31qKz1jfXRoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9XCIwXCIrZitqfTt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5PWZ1bmN0aW9uKGUpe3ZhciBkPVwiXCI7Zm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe2lmKGVbY109PXRydWUpe2QrPVwiMVwifWVsc2V7ZCs9XCIwXCJ9fXRoaXMuc2V0QnlCaW5hcnlTdHJpbmcoZCl9O3RoaXMubmV3RmFsc2VBcnJheT1mdW5jdGlvbihlKXt2YXIgYz1uZXcgQXJyYXkoZSk7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Y1tkXT1mYWxzZX1yZXR1cm4gY307dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYj09XCJzdHJpbmdcIiYmYi50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eWzAtOWEtZl0rJC8pKXt0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyhiKX1lbHNle2lmKHR5cGVvZiBiLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHMoYi5oZXgpfWVsc2V7aWYodHlwZW9mIGIuYmluIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nKGIuYmluKX1lbHNle2lmKHR5cGVvZiBiLmFycmF5IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5KGIuYXJyYXkpfX19fX19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPY3RldFN0cmluZz1mdW5jdGlvbihiKXtpZihiIT09dW5kZWZpbmVkJiZ0eXBlb2YgYi5vYmohPT1cInVuZGVmaW5lZFwiKXt2YXIgYT1LSlVSLmFzbjEuQVNOMVV0aWwubmV3T2JqZWN0KGIub2JqKTtiLmhleD1hLmdldEVuY29kZWRIZXgoKX1LSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYik7dGhpcy5oVD1cIjA0XCJ9O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJPY3RldFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJOdWxsPWZ1bmN0aW9uKCl7S0pVUi5hc24xLkRFUk51bGwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwNVwiO3RoaXMuaFRMVj1cIjA1MDBcIn07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUk51bGwsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDZcIjt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9Yn07dGhpcy5zZXRWYWx1ZU9pZFN0cmluZz1mdW5jdGlvbihiKXt2YXIgYz1vaWR0b2hleChiKTtpZihjPT1udWxsKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgb2lkIHN0cmluZzogXCIrYil9dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPW51bGw7dGhpcy5oVj1jfTt0aGlzLnNldFZhbHVlTmFtZT1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmFzbjEueDUwOS5PSUQubmFtZTJvaWQoYyk7aWYoYiE9PVwiXCIpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYil9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoXCJERVJPYmplY3RJZGVudGlmaWVyIG9pZE5hbWUgdW5kZWZpbmVkOiBcIitjKX19O3RoaXMuc2V0VmFsdWVOYW1lT3JPaWQ9ZnVuY3Rpb24oYil7aWYoYi5tYXRjaCgvXlswLTJdLlswLTkuXSskLykpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYil9ZWxzZXt0aGlzLnNldFZhbHVlTmFtZShiKX19O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTt0aGlzLnNldEJ5UGFyYW09ZnVuY3Rpb24oYil7aWYodHlwZW9mIGI9PT1cInN0cmluZ1wiKXt0aGlzLnNldFZhbHVlTmFtZU9yT2lkKGIpfWVsc2V7aWYoYi5vaWQhPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVOYW1lT3JPaWQoYi5vaWQpfWVsc2V7aWYoYi5uYW1lIT09dW5kZWZpbmVkKXt0aGlzLnNldFZhbHVlTmFtZU9yT2lkKGIubmFtZSl9ZWxzZXtpZihiLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRWYWx1ZUhleChiLmhleCl9fX19fTtpZihhIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5UGFyYW0oYSl9fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllcixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkVudW1lcmF0ZWQ9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkVudW1lcmF0ZWQuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwYVwiO3RoaXMuc2V0QnlCaWdJbnRlZ2VyPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9S0pVUi5hc24xLkFTTjFVdGlsLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4KGIpfTt0aGlzLnNldEJ5SW50ZWdlcj1mdW5jdGlvbihjKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihTdHJpbmcoYyksMTApO3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGIpfTt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFY9Yn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYVtcImludFwiXSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUludGVnZXIoYVtcImludFwiXSl9ZWxzZXtpZih0eXBlb2YgYT09XCJudW1iZXJcIil7dGhpcy5zZXRCeUludGVnZXIoYSl9ZWxzZXtpZih0eXBlb2YgYS5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0VmFsdWVIZXgoYS5oZXgpfX19fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkVudW1lcmF0ZWQsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJVVEY4U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJVVEY4U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIwY1wifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSVVRGOFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxMlwifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSTnVtZXJpY1N0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTNcIn07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxNFwifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJJQTVTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUklBNVN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTZcIn07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUklBNVN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJWaXNpYmxlU3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJJQTVTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjFhXCJ9O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJWaXNpYmxlU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUkJNUFN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSQk1QU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxZVwifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSQk1QU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlVUQ1RpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlVUQ1RpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE3XCI7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMuZGF0ZT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMucz09XCJ1bmRlZmluZWRcIil7dGhpcy5kYXRlPW5ldyBEYXRlKCk7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTJ9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fX19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJVVENUaW1lLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUpO0tKVVIuYXNuMS5ERVJHZW5lcmFsaXplZFRpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMThcIjt0aGlzLndpdGhNaWxsaXM9ZmFsc2U7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJnZW5cIix0aGlzLndpdGhNaWxsaXMpO3RoaXMuaFY9c3RvaGV4KHRoaXMucyl9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe2lmKHRoaXMuZGF0ZT09PXVuZGVmaW5lZCYmdGhpcy5zPT09dW5kZWZpbmVkKXt0aGlzLmRhdGU9bmV3IERhdGUoKTt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcImdlblwiLHRoaXMud2l0aE1pbGxpcyk7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTR9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fWlmKGEubWlsbGlzPT09dHJ1ZSl7dGhpcy53aXRoTWlsbGlzPXRydWV9fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZSxLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lKTtLSlVSLmFzbjEuREVSU2VxdWVuY2U9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlNlcXVlbmNlLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMFwiO3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3ZhciBjPVwiXCI7Zm9yKHZhciBiPTA7Yjx0aGlzLmFzbjFBcnJheS5sZW5ndGg7YisrKXt2YXIgZD10aGlzLmFzbjFBcnJheVtiXTtjKz1kLmdldEVuY29kZWRIZXgoKX10aGlzLmhWPWM7cmV0dXJuIHRoaXMuaFZ9fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSU2VxdWVuY2UsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZCk7S0pVUi5hc24xLkRFUlNldD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSU2V0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMVwiO3RoaXMuc29ydEZsYWc9dHJ1ZTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPHRoaXMuYXNuMUFycmF5Lmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuYXNuMUFycmF5W2NdO2IucHVzaChkLmdldEVuY29kZWRIZXgoKSl9aWYodGhpcy5zb3J0RmxhZz09dHJ1ZSl7Yi5zb3J0KCl9dGhpcy5oVj1iLmpvaW4oXCJcIik7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5zb3J0ZmxhZyE9XCJ1bmRlZmluZWRcIiYmYS5zb3J0ZmxhZz09ZmFsc2Upe3RoaXMuc29ydEZsYWc9ZmFsc2V9fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUlNldCxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0PWZ1bmN0aW9uKGIpe0tKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3Quc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBhPUtKVVIuYXNuMTt0aGlzLmhUPVwiYTBcIjt0aGlzLmhWPVwiXCI7dGhpcy5pc0V4cGxpY2l0PXRydWU7dGhpcy5hc24xT2JqZWN0PW51bGw7dGhpcy5zZXRBU04xT2JqZWN0PWZ1bmN0aW9uKGMsZCxlKXt0aGlzLmhUPWQ7dGhpcy5pc0V4cGxpY2l0PWM7dGhpcy5hc24xT2JqZWN0PWU7aWYodGhpcy5pc0V4cGxpY2l0KXt0aGlzLmhWPXRoaXMuYXNuMU9iamVjdC5nZXRFbmNvZGVkSGV4KCk7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWV9ZWxzZXt0aGlzLmhWPW51bGw7dGhpcy5oVExWPWUuZ2V0RW5jb2RlZEhleCgpO3RoaXMuaFRMVj10aGlzLmhUTFYucmVwbGFjZSgvXi4uLyxkKTt0aGlzLmlzTW9kaWZpZWQ9ZmFsc2V9fTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07dGhpcy5zZXRCeVBhcmFtPWZ1bmN0aW9uKGMpe2lmKGMudGFnIT11bmRlZmluZWQpe3RoaXMuaFQ9Yy50YWd9aWYoYy5leHBsaWNpdCE9dW5kZWZpbmVkKXt0aGlzLmlzRXhwbGljaXQ9Yy5leHBsaWNpdH1pZihjLnRhZ2UhPXVuZGVmaW5lZCl7dGhpcy5oVD1jLnRhZ2U7dGhpcy5pc0V4cGxpY2l0PXRydWV9aWYoYy50YWdpIT11bmRlZmluZWQpe3RoaXMuaFQ9Yy50YWdpO3RoaXMuaXNFeHBsaWNpdD1mYWxzZX1pZihjLm9iaiE9dW5kZWZpbmVkKXtpZihjLm9iaiBpbnN0YW5jZW9mIGEuQVNOMU9iamVjdCl7dGhpcy5hc24xT2JqZWN0PWMub2JqO3RoaXMuc2V0QVNOMU9iamVjdCh0aGlzLmlzRXhwbGljaXQsdGhpcy5oVCx0aGlzLmFzbjFPYmplY3QpfWVsc2V7aWYodHlwZW9mIGMub2JqPT1cIm9iamVjdFwiKXt0aGlzLmFzbjFPYmplY3Q9YS5BU04xVXRpbC5uZXdPYmplY3QoYy5vYmopO3RoaXMuc2V0QVNOMU9iamVjdCh0aGlzLmlzRXhwbGljaXQsdGhpcy5oVCx0aGlzLmFzbjFPYmplY3QpfX19fTtpZihiIT11bmRlZmluZWQpe3RoaXMuc2V0QnlQYXJhbShiKX19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3QsS0pVUi5hc24xLkFTTjFPYmplY3QpO1xudmFyIEFTTjFIRVg9bmV3IGZ1bmN0aW9uKCl7fTtBU04xSEVYLmdldExibGVuPWZ1bmN0aW9uKGMsYSl7aWYoYy5zdWJzdHIoYSsyLDEpIT1cIjhcIil7cmV0dXJuIDF9dmFyIGI9cGFyc2VJbnQoYy5zdWJzdHIoYSszLDEpKTtpZihiPT0wKXtyZXR1cm4gLTF9aWYoMDxiJiZiPDEwKXtyZXR1cm4gYisxfXJldHVybiAtMn07QVNOMUhFWC5nZXRMPWZ1bmN0aW9uKGMsYil7dmFyIGE9QVNOMUhFWC5nZXRMYmxlbihjLGIpO2lmKGE8MSl7cmV0dXJuXCJcIn1yZXR1cm4gYy5zdWJzdHIoYisyLGEqMil9O0FTTjFIRVguZ2V0VmJsZW49ZnVuY3Rpb24oZCxhKXt2YXIgYyxiO2M9QVNOMUhFWC5nZXRMKGQsYSk7aWYoYz09XCJcIil7cmV0dXJuIC0xfWlmKGMuc3Vic3RyKDAsMSk9PT1cIjhcIil7Yj1uZXcgQmlnSW50ZWdlcihjLnN1YnN0cigyKSwxNil9ZWxzZXtiPW5ldyBCaWdJbnRlZ2VyKGMsMTYpfXJldHVybiBiLmludFZhbHVlKCl9O0FTTjFIRVguZ2V0VmlkeD1mdW5jdGlvbihjLGIpe3ZhciBhPUFTTjFIRVguZ2V0TGJsZW4oYyxiKTtpZihhPDApe3JldHVybiBhfXJldHVybiBiKyhhKzEpKjJ9O0FTTjFIRVguZ2V0Vj1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gZC5zdWJzdHIoYyxiKjIpfTtBU04xSEVYLmdldFRMVj1mdW5jdGlvbihiLGEpe3JldHVybiBiLnN1YnN0cihhLDIpK0FTTjFIRVguZ2V0TChiLGEpK0FTTjFIRVguZ2V0VihiLGEpfTtBU04xSEVYLmdldFRMVmJsZW49ZnVuY3Rpb24oYixhKXtyZXR1cm4gMitBU04xSEVYLmdldExibGVuKGIsYSkqMitBU04xSEVYLmdldFZibGVuKGIsYSkqMn07QVNOMUhFWC5nZXROZXh0U2libGluZ0lkeD1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gYytiKjJ9O0FTTjFIRVguZ2V0Q2hpbGRJZHg9ZnVuY3Rpb24oZSxrKXt2YXIgbD1BU04xSEVYO3ZhciBqPVtdO3ZhciBjLGYsZztjPWwuZ2V0VmlkeChlLGspO2Y9bC5nZXRWYmxlbihlLGspKjI7aWYoZS5zdWJzdHIoaywyKT09XCIwM1wiKXtjKz0yO2YtPTJ9Zz0wO3ZhciBkPWM7d2hpbGUoZzw9Zil7dmFyIGI9bC5nZXRUTFZibGVuKGUsZCk7Zys9YjtpZihnPD1mKXtqLnB1c2goZCl9ZCs9YjtpZihnPj1mKXticmVha319cmV0dXJuIGp9O0FTTjFIRVguZ2V0TnRoQ2hpbGRJZHg9ZnVuY3Rpb24oZCxiLGUpe3ZhciBjPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZCxiKTtyZXR1cm4gY1tlXX07QVNOMUhFWC5nZXRJZHhieUxpc3Q9ZnVuY3Rpb24oZSxkLGMsaSl7dmFyIGc9QVNOMUhFWDt2YXIgZixiO2lmKGMubGVuZ3RoPT0wKXtpZihpIT09dW5kZWZpbmVkKXtpZihlLnN1YnN0cihkLDIpIT09aSl7cmV0dXJuIC0xfX1yZXR1cm4gZH1mPWMuc2hpZnQoKTtiPWcuZ2V0Q2hpbGRJZHgoZSxkKTtpZihmPj1iLmxlbmd0aCl7cmV0dXJuIC0xfXJldHVybiBnLmdldElkeGJ5TGlzdChlLGJbZl0sYyxpKX07QVNOMUhFWC5nZXRJZHhieUxpc3RFeD1mdW5jdGlvbihmLGssYixnKXt2YXIgbT1BU04xSEVYO3ZhciBkLGw7aWYoYi5sZW5ndGg9PTApe2lmKGchPT11bmRlZmluZWQpe2lmKGYuc3Vic3RyKGssMikhPT1nKXtyZXR1cm4gLTF9fXJldHVybiBrfWQ9Yi5zaGlmdCgpO2w9bS5nZXRDaGlsZElkeChmLGspO3ZhciBqPTA7Zm9yKHZhciBlPTA7ZTxsLmxlbmd0aDtlKyspe3ZhciBjPWYuc3Vic3RyKGxbZV0sMik7aWYoKHR5cGVvZiBkPT1cIm51bWJlclwiJiYoIW0uaXNDb250ZXh0VGFnKGMpKSYmaj09ZCl8fCh0eXBlb2YgZD09XCJzdHJpbmdcIiYmbS5pc0NvbnRleHRUYWcoYyxkKSkpe3JldHVybiBtLmdldElkeGJ5TGlzdEV4KGYsbFtlXSxiLGcpfWlmKCFtLmlzQ29udGV4dFRhZyhjKSl7aisrfX1yZXR1cm4gLTF9O0FTTjFIRVguZ2V0VExWYnlMaXN0PWZ1bmN0aW9uKGQsYyxiLGYpe3ZhciBlPUFTTjFIRVg7dmFyIGE9ZS5nZXRJZHhieUxpc3QoZCxjLGIsZik7aWYoYT09LTEpe3JldHVybiBudWxsfWlmKGE+PWQubGVuZ3RoKXtyZXR1cm4gbnVsbH1yZXR1cm4gZS5nZXRUTFYoZCxhKX07QVNOMUhFWC5nZXRUTFZieUxpc3RFeD1mdW5jdGlvbihkLGMsYixmKXt2YXIgZT1BU04xSEVYO3ZhciBhPWUuZ2V0SWR4YnlMaXN0RXgoZCxjLGIsZik7aWYoYT09LTEpe3JldHVybiBudWxsfXJldHVybiBlLmdldFRMVihkLGEpfTtBU04xSEVYLmdldFZieUxpc3Q9ZnVuY3Rpb24oZSxjLGIsZyxpKXt2YXIgZj1BU04xSEVYO3ZhciBhLGQ7YT1mLmdldElkeGJ5TGlzdChlLGMsYixnKTtpZihhPT0tMSl7cmV0dXJuIG51bGx9aWYoYT49ZS5sZW5ndGgpe3JldHVybiBudWxsfWQ9Zi5nZXRWKGUsYSk7aWYoaT09PXRydWUpe2Q9ZC5zdWJzdHIoMil9cmV0dXJuIGR9O0FTTjFIRVguZ2V0VmJ5TGlzdEV4PWZ1bmN0aW9uKGIsZSxhLGQsZil7dmFyIGo9QVNOMUhFWDt2YXIgZyxjLGk7Zz1qLmdldElkeGJ5TGlzdEV4KGIsZSxhLGQpO2lmKGc9PS0xKXtyZXR1cm4gbnVsbH1pPWouZ2V0VihiLGcpO2lmKGIuc3Vic3RyKGcsMik9PVwiMDNcIiYmZiE9PWZhbHNlKXtpPWkuc3Vic3RyKDIpfXJldHVybiBpfTtBU04xSEVYLmdldEludD1mdW5jdGlvbihlLGIsZil7aWYoZj09dW5kZWZpbmVkKXtmPS0xfXRyeXt2YXIgYz1lLnN1YnN0cihiLDIpO2lmKGMhPVwiMDJcIiYmYyE9XCIwM1wiKXtyZXR1cm4gZn12YXIgYT1BU04xSEVYLmdldFYoZSxiKTtpZihjPT1cIjAyXCIpe3JldHVybiBwYXJzZUludChhLDE2KX1lbHNle3JldHVybiBiaXRzdHJ0b2ludChhKX19Y2F0Y2goZCl7cmV0dXJuIGZ9fTtBU04xSEVYLmdldE9JRD1mdW5jdGlvbihjLGEsZCl7aWYoZD09dW5kZWZpbmVkKXtkPW51bGx9dHJ5e2lmKGMuc3Vic3RyKGEsMikhPVwiMDZcIil7cmV0dXJuIGR9dmFyIGU9QVNOMUhFWC5nZXRWKGMsYSk7cmV0dXJuIGhleHRvb2lkKGUpfWNhdGNoKGIpe3JldHVybiBkfX07QVNOMUhFWC5nZXRPSUROYW1lPWZ1bmN0aW9uKGQsYSxmKXtpZihmPT11bmRlZmluZWQpe2Y9bnVsbH10cnl7dmFyIGU9QVNOMUhFWC5nZXRPSUQoZCxhLGYpO2lmKGU9PWYpe3JldHVybiBmfXZhciBiPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQybmFtZShlKTtpZihiPT1cIlwiKXtyZXR1cm4gZX1yZXR1cm4gYn1jYXRjaChjKXtyZXR1cm4gZn19O0FTTjFIRVguZ2V0U3RyaW5nPWZ1bmN0aW9uKGQsYixlKXtpZihlPT11bmRlZmluZWQpe2U9bnVsbH10cnl7dmFyIGE9QVNOMUhFWC5nZXRWKGQsYik7cmV0dXJuIGhleHRvcnN0cihhKX1jYXRjaChjKXtyZXR1cm4gZX19O0FTTjFIRVguaGV4dG9vaWRzdHI9ZnVuY3Rpb24oZSl7dmFyIGg9ZnVuY3Rpb24oYixhKXtpZihiLmxlbmd0aD49YSl7cmV0dXJuIGJ9cmV0dXJuIG5ldyBBcnJheShhLWIubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2J9O3ZhciBsPVtdO3ZhciBvPWUuc3Vic3RyKDAsMik7dmFyIGY9cGFyc2VJbnQobywxNik7bFswXT1uZXcgU3RyaW5nKE1hdGguZmxvb3IoZi80MCkpO2xbMV09bmV3IFN0cmluZyhmJTQwKTt2YXIgbT1lLnN1YnN0cigyKTt2YXIgaz1bXTtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoLzI7ZysrKXtrLnB1c2gocGFyc2VJbnQobS5zdWJzdHIoZyoyLDIpLDE2KSl9dmFyIGo9W107dmFyIGQ9XCJcIjtmb3IodmFyIGc9MDtnPGsubGVuZ3RoO2crKyl7aWYoa1tnXSYxMjgpe2Q9ZCtoKChrW2ddJjEyNykudG9TdHJpbmcoMiksNyl9ZWxzZXtkPWQraCgoa1tnXSYxMjcpLnRvU3RyaW5nKDIpLDcpO2oucHVzaChuZXcgU3RyaW5nKHBhcnNlSW50KGQsMikpKTtkPVwiXCJ9fXZhciBuPWwuam9pbihcIi5cIik7aWYoai5sZW5ndGg+MCl7bj1uK1wiLlwiK2ouam9pbihcIi5cIil9cmV0dXJuIG59O0FTTjFIRVguZHVtcD1mdW5jdGlvbih0LGMsbCxnKXt2YXIgcD1BU04xSEVYO3ZhciBqPXAuZ2V0Vjt2YXIgeT1wLmR1bXA7dmFyIHc9cC5nZXRDaGlsZElkeDt2YXIgZT10O2lmKHQgaW5zdGFuY2VvZiBLSlVSLmFzbjEuQVNOMU9iamVjdCl7ZT10LmdldEVuY29kZWRIZXgoKX12YXIgcT1mdW5jdGlvbihBLGkpe2lmKEEubGVuZ3RoPD1pKjIpe3JldHVybiBBfWVsc2V7dmFyIHY9QS5zdWJzdHIoMCxpKStcIi4uKHRvdGFsIFwiK0EubGVuZ3RoLzIrXCJieXRlcykuLlwiK0Euc3Vic3RyKEEubGVuZ3RoLWksaSk7cmV0dXJuIHZ9fTtpZihjPT09dW5kZWZpbmVkKXtjPXtvbW1pdF9sb25nX29jdGV0OjMyfX1pZihsPT09dW5kZWZpbmVkKXtsPTB9aWYoZz09PXVuZGVmaW5lZCl7Zz1cIlwifXZhciB4PWMub21taXRfbG9uZ19vY3RldDt2YXIgej1lLnN1YnN0cihsLDIpO2lmKHo9PVwiMDFcIil7dmFyIGg9aihlLGwpO2lmKGg9PVwiMDBcIil7cmV0dXJuIGcrXCJCT09MRUFOIEZBTFNFXFxuXCJ9ZWxzZXtyZXR1cm4gZytcIkJPT0xFQU4gVFJVRVxcblwifX1pZih6PT1cIjAyXCIpe3ZhciBoPWooZSxsKTtyZXR1cm4gZytcIklOVEVHRVIgXCIrcShoLHgpK1wiXFxuXCJ9aWYoej09XCIwM1wiKXt2YXIgaD1qKGUsbCk7aWYocC5pc0FTTjFIRVgoaC5zdWJzdHIoMikpKXt2YXIgaz1nK1wiQklUU1RSSU5HLCBlbmNhcHN1bGF0ZXNcXG5cIjtrPWsreShoLnN1YnN0cigyKSxjLDAsZytcIiAgXCIpO3JldHVybiBrfWVsc2V7cmV0dXJuIGcrXCJCSVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9fWlmKHo9PVwiMDRcIil7dmFyIGg9aihlLGwpO2lmKHAuaXNBU04xSEVYKGgpKXt2YXIgaz1nK1wiT0NURVRTVFJJTkcsIGVuY2Fwc3VsYXRlc1xcblwiO2s9ayt5KGgsYywwLGcrXCIgIFwiKTtyZXR1cm4ga31lbHNle3JldHVybiBnK1wiT0NURVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9fWlmKHo9PVwiMDVcIil7cmV0dXJuIGcrXCJOVUxMXFxuXCJ9aWYoej09XCIwNlwiKXt2YXIgbT1qKGUsbCk7dmFyIGI9S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50KG0pO3ZhciBvPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQybmFtZShiKTt2YXIgYT1iLnJlcGxhY2UoL1xcLi9nLFwiIFwiKTtpZihvIT1cIlwiKXtyZXR1cm4gZytcIk9iamVjdElkZW50aWZpZXIgXCIrbytcIiAoXCIrYStcIilcXG5cIn1lbHNle3JldHVybiBnK1wiT2JqZWN0SWRlbnRpZmllciAoXCIrYStcIilcXG5cIn19aWYoej09XCIwYVwiKXtyZXR1cm4gZytcIkVOVU1FUkFURUQgXCIrcGFyc2VJbnQoaihlLGwpKStcIlxcblwifWlmKHo9PVwiMGNcIil7cmV0dXJuIGcrXCJVVEY4U3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZih6PT1cIjEzXCIpe3JldHVybiBnK1wiUHJpbnRhYmxlU3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZih6PT1cIjE0XCIpe3JldHVybiBnK1wiVGVsZXRleFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoej09XCIxNlwiKXtyZXR1cm4gZytcIklBNVN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoej09XCIxN1wiKXtyZXR1cm4gZytcIlVUQ1RpbWUgXCIraGV4dG91dGY4KGooZSxsKSkrXCJcXG5cIn1pZih6PT1cIjE4XCIpe3JldHVybiBnK1wiR2VuZXJhbGl6ZWRUaW1lIFwiK2hleHRvdXRmOChqKGUsbCkpK1wiXFxuXCJ9aWYoej09XCIxYVwiKXtyZXR1cm4gZytcIlZpc3VhbFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoej09XCIxZVwiKXtyZXR1cm4gZytcIkJNUFN0cmluZyAnXCIrdWNzMmhleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKHo9PVwiMzBcIil7aWYoZS5zdWJzdHIobCw0KT09XCIzMDAwXCIpe3JldHVybiBnK1wiU0VRVUVOQ0Uge31cXG5cIn12YXIgaz1nK1wiU0VRVUVOQ0VcXG5cIjt2YXIgZD13KGUsbCk7dmFyIGY9YztpZigoZC5sZW5ndGg9PTJ8fGQubGVuZ3RoPT0zKSYmZS5zdWJzdHIoZFswXSwyKT09XCIwNlwiJiZlLnN1YnN0cihkW2QubGVuZ3RoLTFdLDIpPT1cIjA0XCIpe3ZhciBvPXAub2lkbmFtZShqKGUsZFswXSkpO3ZhciByPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpO3IueDUwOUV4dE5hbWU9bztmPXJ9Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsZixkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga31pZih6PT1cIjMxXCIpe3ZhciBrPWcrXCJTRVRcXG5cIjt2YXIgZD13KGUsbCk7Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsYyxkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga312YXIgej1wYXJzZUludCh6LDE2KTtpZigoeiYxMjgpIT0wKXt2YXIgbj16JjMxO2lmKCh6JjMyKSE9MCl7dmFyIGs9ZytcIltcIituK1wiXVxcblwiO3ZhciBkPXcoZSxsKTtmb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxjLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfWVsc2V7dmFyIGg9aihlLGwpO2lmKEFTTjFIRVguaXNBU04xSEVYKGgpKXt2YXIgaz1nK1wiW1wiK24rXCJdXFxuXCI7az1rK3koaCxjLDAsZytcIiAgXCIpO3JldHVybiBrfWVsc2V7aWYoaC5zdWJzdHIoMCw4KT09XCI2ODc0NzQ3MFwiKXtoPWhleHRvdXRmOChoKX1lbHNle2lmKGMueDUwOUV4dE5hbWU9PT1cInN1YmplY3RBbHROYW1lXCImJm49PTIpe2g9aGV4dG91dGY4KGgpfX19dmFyIGs9ZytcIltcIituK1wiXSBcIitoK1wiXFxuXCI7cmV0dXJuIGt9fXJldHVybiBnK1wiVU5LTk9XTihcIit6K1wiKSBcIitqKGUsbCkrXCJcXG5cIn07QVNOMUhFWC5pc0NvbnRleHRUYWc9ZnVuY3Rpb24oYyxiKXtjPWMudG9Mb3dlckNhc2UoKTt2YXIgZixlO3RyeXtmPXBhcnNlSW50KGMsMTYpfWNhdGNoKGQpe3JldHVybiAtMX1pZihiPT09dW5kZWZpbmVkKXtpZigoZiYxOTIpPT0xMjgpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX10cnl7dmFyIGE9Yi5tYXRjaCgvXlxcW1swLTldK1xcXSQvKTtpZihhPT1udWxsKXtyZXR1cm4gZmFsc2V9ZT1wYXJzZUludChiLnN1YnN0cigxLGIubGVuZ3RoLTEpLDEwKTtpZihlPjMxKXtyZXR1cm4gZmFsc2V9aWYoKChmJjE5Mik9PTEyOCkmJigoZiYzMSk9PWUpKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9Y2F0Y2goZCl7cmV0dXJuIGZhbHNlfX07QVNOMUhFWC5pc0FTTjFIRVg9ZnVuY3Rpb24oZSl7dmFyIGQ9QVNOMUhFWDtpZihlLmxlbmd0aCUyPT0xKXtyZXR1cm4gZmFsc2V9dmFyIGM9ZC5nZXRWYmxlbihlLDApO3ZhciBiPWUuc3Vic3RyKDAsMik7dmFyIGY9ZC5nZXRMKGUsMCk7dmFyIGE9ZS5sZW5ndGgtYi5sZW5ndGgtZi5sZW5ndGg7aWYoYT09YyoyKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O0FTTjFIRVguY2hlY2tTdHJpY3RERVI9ZnVuY3Rpb24oZyxvLGQsYyxyKXt2YXIgcz1BU04xSEVYO2lmKGQ9PT11bmRlZmluZWQpe2lmKHR5cGVvZiBnIT1cInN0cmluZ1wiKXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgaGV4IHN0cmluZ1wiKX1nPWcudG9Mb3dlckNhc2UoKTtpZighS0pVUi5sYW5nLlN0cmluZy5pc0hleChnKSl7dGhyb3cgbmV3IEVycm9yKFwibm90IGhleCBzdHJpbmdcIil9ZD1nLmxlbmd0aDtjPWcubGVuZ3RoLzI7aWYoYzwxMjgpe3I9MX1lbHNle3I9TWF0aC5jZWlsKGMudG9TdHJpbmcoMTYpKSsxfX12YXIgaz1zLmdldEwoZyxvKTtpZihrLmxlbmd0aD5yKjIpe3Rocm93IG5ldyBFcnJvcihcIkwgb2YgVExWIHRvbyBsb25nOiBpZHg9XCIrbyl9dmFyIG49cy5nZXRWYmxlbihnLG8pO2lmKG4+Yyl7dGhyb3cgbmV3IEVycm9yKFwidmFsdWUgb2YgTCB0b28gbG9uZyB0aGFuIGhleDogaWR4PVwiK28pfXZhciBxPXMuZ2V0VExWKGcsbyk7dmFyIGY9cS5sZW5ndGgtMi1zLmdldEwoZyxvKS5sZW5ndGg7aWYoZiE9PShuKjIpKXt0aHJvdyBuZXcgRXJyb3IoXCJWIHN0cmluZyBsZW5ndGggYW5kIEwncyB2YWx1ZSBub3QgdGhlIHNhbWU6XCIrZitcIi9cIisobioyKSl9aWYobz09PTApe2lmKGcubGVuZ3RoIT1xLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKFwidG90YWwgbGVuZ3RoIGFuZCBUTFYgbGVuZ3RoIHVubWF0Y2g6XCIrZy5sZW5ndGgrXCIhPVwiK3EubGVuZ3RoKX19dmFyIGI9Zy5zdWJzdHIobywyKTtpZihiPT09XCIwMlwiKXt2YXIgYT1zLmdldFZpZHgoZyxvKTtpZihnLnN1YnN0cihhLDIpPT1cIjAwXCImJmcuY2hhckNvZGVBdChhKzIpPDU2KXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgbGVhc3QgemVyb3MgZm9yIERFUiBJTlRFR0VSXCIpfX1pZihwYXJzZUludChiLDE2KSYzMil7dmFyIHA9cy5nZXRWYmxlbihnLG8pO3ZhciBtPTA7dmFyIGw9cy5nZXRDaGlsZElkeChnLG8pO2Zvcih2YXIgZT0wO2U8bC5sZW5ndGg7ZSsrKXt2YXIgaj1zLmdldFRMVihnLGxbZV0pO20rPWoubGVuZ3RoO3MuY2hlY2tTdHJpY3RERVIoZyxsW2VdLGQsYyxyKX1pZigocCoyKSE9bSl7dGhyb3cgbmV3IEVycm9yKFwic3VtIG9mIGNoaWxkcmVuJ3MgVExWIGxlbmd0aCBhbmQgTCB1bm1hdGNoOiBcIisocCoyKStcIiE9XCIrbSl9fX07QVNOMUhFWC5vaWRuYW1lPWZ1bmN0aW9uKGEpe3ZhciBjPUtKVVIuYXNuMTtpZihLSlVSLmxhbmcuU3RyaW5nLmlzSGV4KGEpKXthPWMuQVNOMVV0aWwub2lkSGV4VG9JbnQoYSl9dmFyIGI9Yy54NTA5Lk9JRC5vaWQybmFtZShhKTtpZihiPT09XCJcIil7Yj1hfXJldHVybiBifTtcbnZhciBLSlVSO2lmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5sYW5nPT1cInVuZGVmaW5lZFwifHwhS0pVUi5sYW5nKXtLSlVSLmxhbmc9e319S0pVUi5sYW5nLlN0cmluZz1mdW5jdGlvbigpe307ZnVuY3Rpb24gQmFzZTY0eCgpe31mdW5jdGlvbiBzdG9CQShkKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPGQubGVuZ3RoO2MrKyl7YltjXT1kLmNoYXJDb2RlQXQoYyl9cmV0dXJuIGJ9ZnVuY3Rpb24gQkF0b3MoYil7dmFyIGQ9XCJcIjtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7ZD1kK1N0cmluZy5mcm9tQ2hhckNvZGUoYltjXSl9cmV0dXJuIGR9ZnVuY3Rpb24gQkF0b2hleChiKXt2YXIgZT1cIlwiO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgYz1iW2RdLnRvU3RyaW5nKDE2KTtpZihjLmxlbmd0aD09MSl7Yz1cIjBcIitjfWU9ZStjfXJldHVybiBlfWZ1bmN0aW9uIHN0b2hleChhKXtyZXR1cm4gQkF0b2hleChzdG9CQShhKSl9ZnVuY3Rpb24gc3RvYjY0KGEpe3JldHVybiBoZXgyYjY0KHN0b2hleChhKSl9ZnVuY3Rpb24gc3RvYjY0dShhKXtyZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoc3RvaGV4KGEpKSl9ZnVuY3Rpb24gYjY0dXRvcyhhKXtyZXR1cm4gQkF0b3MoYjY0dG9CQShiNjR1dG9iNjQoYSkpKX1mdW5jdGlvbiBiNjR0b2I2NHUoYSl7YT1hLnJlcGxhY2UoL1xcPS9nLFwiXCIpO2E9YS5yZXBsYWNlKC9cXCsvZyxcIi1cIik7YT1hLnJlcGxhY2UoL1xcLy9nLFwiX1wiKTtyZXR1cm4gYX1mdW5jdGlvbiBiNjR1dG9iNjQoYSl7aWYoYS5sZW5ndGglND09Mil7YT1hK1wiPT1cIn1lbHNle2lmKGEubGVuZ3RoJTQ9PTMpe2E9YStcIj1cIn19YT1hLnJlcGxhY2UoLy0vZyxcIitcIik7YT1hLnJlcGxhY2UoL18vZyxcIi9cIik7cmV0dXJuIGF9ZnVuY3Rpb24gaGV4dG9iNjR1KGEpe2lmKGEubGVuZ3RoJTI9PTEpe2E9XCIwXCIrYX1yZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoYSkpfWZ1bmN0aW9uIGI2NHV0b2hleChhKXtyZXR1cm4gYjY0dG9oZXgoYjY0dXRvYjY0KGEpKX12YXIgdXRmOHRvYjY0dSxiNjR1dG91dGY4O2lmKHR5cGVvZiBCdWZmZXI9PT1cImZ1bmN0aW9uXCIpe3V0Zjh0b2I2NHU9ZnVuY3Rpb24oYSl7cmV0dXJuIGI2NHRvYjY0dShCdWZmZXIuZnJvbShhLFwidXRmOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSl9O2I2NHV0b3V0Zjg9ZnVuY3Rpb24oYSl7cmV0dXJuIEJ1ZmZlci5mcm9tKGI2NHV0b2I2NChhKSxcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIil9fWVsc2V7dXRmOHRvYjY0dT1mdW5jdGlvbihhKXtyZXR1cm4gaGV4dG9iNjR1KHVyaWNtcHRvaGV4KGVuY29kZVVSSUNvbXBvbmVudEFsbChhKSkpfTtiNjR1dG91dGY4PWZ1bmN0aW9uKGEpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoaGV4dG91cmljbXAoYjY0dXRvaGV4KGEpKSl9fWZ1bmN0aW9uIHV0Zjh0b2I2NChhKXtyZXR1cm4gaGV4MmI2NCh1cmljbXB0b2hleChlbmNvZGVVUklDb21wb25lbnRBbGwoYSkpKX1mdW5jdGlvbiBiNjR0b3V0ZjgoYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChiNjR0b2hleChhKSkpfWZ1bmN0aW9uIHV0Zjh0b2hleChhKXtyZXR1cm4gdXJpY21wdG9oZXgoZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpKX1mdW5jdGlvbiBoZXh0b3V0ZjgoYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChhKSl9ZnVuY3Rpb24gaGV4dG9yc3RyKGMpe3ZhciBiPVwiXCI7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aC0xO2ErPTIpe2IrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYy5zdWJzdHIoYSwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIHJzdHJ0b2hleChjKXt2YXIgYT1cIlwiO2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7YisrKXthKz0oXCIwXCIrYy5jaGFyQ29kZUF0KGIpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfXJldHVybiBhfWZ1bmN0aW9uIGhleHRvYjY0KGEpe3JldHVybiBoZXgyYjY0KGEpfWZ1bmN0aW9uIGhleHRvYjY0bmwoYil7dmFyIGE9aGV4dG9iNjQoYik7dmFyIGM9YS5yZXBsYWNlKC8oLns2NH0pL2csXCIkMVxcclxcblwiKTtjPWMucmVwbGFjZSgvXFxyXFxuJC8sXCJcIik7cmV0dXJuIGN9ZnVuY3Rpb24gYjY0bmx0b2hleChiKXt2YXIgYT1iLnJlcGxhY2UoL1teMC05QS1aYS16XFwvKz1dKi9nLFwiXCIpO3ZhciBjPWI2NHRvaGV4KGEpO3JldHVybiBjfWZ1bmN0aW9uIGhleHRvcGVtKGEsYil7dmFyIGM9aGV4dG9iNjRubChhKTtyZXR1cm5cIi0tLS0tQkVHSU4gXCIrYitcIi0tLS0tXFxyXFxuXCIrYytcIlxcclxcbi0tLS0tRU5EIFwiK2IrXCItLS0tLVxcclxcblwifWZ1bmN0aW9uIHBlbXRvaGV4KGEsYil7aWYoYS5pbmRleE9mKFwiLS0tLS1CRUdJTiBcIik9PS0xKXt0aHJvd1wiY2FuJ3QgZmluZCBQRU0gaGVhZGVyOiBcIitifWlmKGIhPT11bmRlZmluZWQpe2E9YS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJeW15dKi0tLS0tQkVHSU4gXCIrYitcIi0tLS0tXCIpLFwiXCIpO2E9YS5yZXBsYWNlKG5ldyBSZWdFeHAoXCItLS0tLUVORCBcIitiK1wiLS0tLS1bXl0qJFwiKSxcIlwiKX1lbHNle2E9YS5yZXBsYWNlKC9eW15dKi0tLS0tQkVHSU4gW14tXSstLS0tLS8sXCJcIik7YT1hLnJlcGxhY2UoLy0tLS0tRU5EIFteLV0rLS0tLS1bXl0qJC8sXCJcIil9cmV0dXJuIGI2NG5sdG9oZXgoYSl9ZnVuY3Rpb24gaGV4dG9BcnJheUJ1ZmZlcihkKXtpZihkLmxlbmd0aCUyIT0wKXt0aHJvd1wiaW5wdXQgaXMgbm90IGV2ZW4gbGVuZ3RoXCJ9aWYoZC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKT09bnVsbCl7dGhyb3dcImlucHV0IGlzIG5vdCBoZXhhZGVjaW1hbFwifXZhciBiPW5ldyBBcnJheUJ1ZmZlcihkLmxlbmd0aC8yKTt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aC8yO2MrKyl7YS5zZXRVaW50OChjLHBhcnNlSW50KGQuc3Vic3RyKGMqMiwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIEFycmF5QnVmZmVydG9oZXgoYil7dmFyIGQ9XCJcIjt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxiLmJ5dGVMZW5ndGg7YysrKXtkKz0oXCIwMFwiK2EuZ2V0VWludDgoYykudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGR9ZnVuY3Rpb24genVsdXRvbXNlYyhuKXt2YXIgbCxqLG0sZSxmLGksYixrO3ZhciBhLGgsZyxjO2M9bi5tYXRjaCgvXihcXGR7Mn18XFxkezR9KShcXGRcXGQpKFxcZFxcZCkoXFxkXFxkKShcXGRcXGQpKFxcZFxcZCkofFxcLlxcZCspWiQvKTtpZihjKXthPWNbMV07bD1wYXJzZUludChhKTtpZihhLmxlbmd0aD09PTIpe2lmKDUwPD1sJiZsPDEwMCl7bD0xOTAwK2x9ZWxzZXtpZigwPD1sJiZsPDUwKXtsPTIwMDArbH19fWo9cGFyc2VJbnQoY1syXSktMTttPXBhcnNlSW50KGNbM10pO2U9cGFyc2VJbnQoY1s0XSk7Zj1wYXJzZUludChjWzVdKTtpPXBhcnNlSW50KGNbNl0pO2I9MDtoPWNbN107aWYoaCE9PVwiXCIpe2c9KGguc3Vic3RyKDEpK1wiMDBcIikuc3Vic3RyKDAsMyk7Yj1wYXJzZUludChnKX1yZXR1cm4gRGF0ZS5VVEMobCxqLG0sZSxmLGksYil9dGhyb3dcInVuc3VwcG9ydGVkIHp1bHUgZm9ybWF0OiBcIitufWZ1bmN0aW9uIHp1bHV0b3NlYyhhKXt2YXIgYj16dWx1dG9tc2VjKGEpO3JldHVybiB+fihiLzEwMDApfWZ1bmN0aW9uIHp1bHV0b2RhdGUoYSl7cmV0dXJuIG5ldyBEYXRlKHp1bHV0b21zZWMoYSkpfWZ1bmN0aW9uIGRhdGV0b3p1bHUoZyxlLGYpe3ZhciBiO3ZhciBhPWcuZ2V0VVRDRnVsbFllYXIoKTtpZihlKXtpZihhPDE5NTB8fDIwNDk8YSl7dGhyb3dcIm5vdCBwcm9wZXIgeWVhciBmb3IgVVRDVGltZTogXCIrYX1iPShcIlwiK2EpLnNsaWNlKC0yKX1lbHNle2I9KFwiMDAwXCIrYSkuc2xpY2UoLTQpfWIrPShcIjBcIisoZy5nZXRVVENNb250aCgpKzEpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDRGF0ZSgpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpO2lmKGYpe3ZhciBjPWcuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7aWYoYyE9PTApe2M9KFwiMDBcIitjKS5zbGljZSgtMyk7Yz1jLnJlcGxhY2UoLzArJC9nLFwiXCIpO2IrPVwiLlwiK2N9fWIrPVwiWlwiO3JldHVybiBifWZ1bmN0aW9uIHVyaWNtcHRvaGV4KGEpe3JldHVybiBhLnJlcGxhY2UoLyUvZyxcIlwiKX1mdW5jdGlvbiBoZXh0b3VyaWNtcChhKXtyZXR1cm4gYS5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIil9ZnVuY3Rpb24gaXB2NnRvaGV4KGcpe3ZhciBiPVwibWFsZm9ybWVkIElQdjYgYWRkcmVzc1wiO2lmKCFnLm1hdGNoKC9eWzAtOUEtRmEtZjpdKyQvKSl7dGhyb3cgYn1nPWcudG9Mb3dlckNhc2UoKTt2YXIgZD1nLnNwbGl0KFwiOlwiKS5sZW5ndGgtMTtpZihkPDIpe3Rocm93IGJ9dmFyIGU9XCI6XCIucmVwZWF0KDctZCsyKTtnPWcucmVwbGFjZShcIjo6XCIsZSk7dmFyIGM9Zy5zcGxpdChcIjpcIik7aWYoYy5sZW5ndGghPTgpe3Rocm93IGJ9Zm9yKHZhciBmPTA7Zjw4O2YrKyl7Y1tmXT0oXCIwMDAwXCIrY1tmXSkuc2xpY2UoLTQpfXJldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gaGV4dG9pcHY2KGUpe2lmKCFlLm1hdGNoKC9eWzAtOUEtRmEtZl17MzJ9JC8pKXt0aHJvd1wibWFsZm9ybWVkIElQdjYgYWRkcmVzcyBvY3RldFwifWU9ZS50b0xvd2VyQ2FzZSgpO3ZhciBiPWUubWF0Y2goLy57MSw0fS9nKTtmb3IodmFyIGQ9MDtkPDg7ZCsrKXtiW2RdPWJbZF0ucmVwbGFjZSgvXjArLyxcIlwiKTtpZihiW2RdPT1cIlwiKXtiW2RdPVwiMFwifX1lPVwiOlwiK2Iuam9pbihcIjpcIikrXCI6XCI7dmFyIGM9ZS5tYXRjaCgvOigwOil7Mix9L2cpO2lmKGM9PT1udWxsKXtyZXR1cm4gZS5zbGljZSgxLC0xKX12YXIgZj1cIlwiO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtpZihjW2RdLmxlbmd0aD5mLmxlbmd0aCl7Zj1jW2RdfX1lPWUucmVwbGFjZShmLFwiOjpcIik7cmV0dXJuIGUuc2xpY2UoMSwtMSl9ZnVuY3Rpb24gaGV4dG9pcChiKXt2YXIgZD1cIm1hbGZvcm1lZCBoZXggdmFsdWVcIjtpZighYi5tYXRjaCgvXihbMC05QS1GYS1mXVswLTlBLUZhLWZdKXsxLH0kLykpe3Rocm93IGR9aWYoYi5sZW5ndGg9PTgpe3ZhciBjO3RyeXtjPXBhcnNlSW50KGIuc3Vic3RyKDAsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDIsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDQsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDYsMiksMTYpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93IGR9fWVsc2V7aWYoYi5sZW5ndGg9PTMyKXtyZXR1cm4gaGV4dG9pcHY2KGIpfWVsc2V7cmV0dXJuIGJ9fX1mdW5jdGlvbiBpcHRvaGV4KGYpe3ZhciBqPVwibWFsZm9ybWVkIElQIGFkZHJlc3NcIjtmPWYudG9Mb3dlckNhc2UoZik7aWYoZi5tYXRjaCgvXlswLTkuXSskLykpe3ZhciBiPWYuc3BsaXQoXCIuXCIpO2lmKGIubGVuZ3RoIT09NCl7dGhyb3cgan12YXIgZz1cIlwiO3RyeXtmb3IodmFyIGU9MDtlPDQ7ZSsrKXt2YXIgaD1wYXJzZUludChiW2VdKTtnKz0oXCIwXCIraC50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gZ31jYXRjaChjKXt0aHJvdyBqfX1lbHNle2lmKGYubWF0Y2goL15bMC05YS1mOl0rJC8pJiZmLmluZGV4T2YoXCI6XCIpIT09LTEpe3JldHVybiBpcHY2dG9oZXgoZil9ZWxzZXt0aHJvdyBqfX19ZnVuY3Rpb24gdWNzMmhleHRvdXRmOChkKXtmdW5jdGlvbiBlKGYpe3ZhciBoPXBhcnNlSW50KGYuc3Vic3RyKDAsMiksMTYpO3ZhciBhPXBhcnNlSW50KGYuc3Vic3RyKDIpLDE2KTtpZihoPT0wJmE8MTI4KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhKX1pZihoPDgpe3ZhciBqPTE5MnwoKGgmNyk8PDMpfCgoYSYxOTIpPj42KTt2YXIgaT0xMjh8KGEmNjMpO3JldHVybiBoZXh0b3V0Zjgoai50b1N0cmluZygxNikraS50b1N0cmluZygxNikpfXZhciBqPTIyNHwoKGgmMjQwKT4+NCk7dmFyIGk9MTI4fCgoaCYxNSk8PDIpfCgoYSYxOTIpPj42KTt2YXIgZz0xMjh8KGEmNjMpO3JldHVybiBoZXh0b3V0Zjgoai50b1N0cmluZygxNikraS50b1N0cmluZygxNikrZy50b1N0cmluZygxNikpfXZhciBjPWQubWF0Y2goLy57NH0vZyk7dmFyIGI9Yy5tYXAoZSk7cmV0dXJuIGIuam9pbihcIlwiKX1mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRBbGwoYSl7dmFyIGQ9ZW5jb2RlVVJJQ29tcG9uZW50KGEpO3ZhciBiPVwiXCI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGRbY109PVwiJVwiKXtiPWIrZC5zdWJzdHIoYywzKTtjPWMrMn1lbHNle2I9YitcIiVcIitzdG9oZXgoZFtjXSl9fXJldHVybiBifWZ1bmN0aW9uIG5ld2xpbmVfdG9Vbml4KGEpe2E9YS5yZXBsYWNlKC9cXHJcXG4vbWcsXCJcXG5cIik7cmV0dXJuIGF9ZnVuY3Rpb24gbmV3bGluZV90b0RvcyhhKXthPWEucmVwbGFjZSgvXFxyXFxuL21nLFwiXFxuXCIpO2E9YS5yZXBsYWNlKC9cXG4vbWcsXCJcXHJcXG5cIik7cmV0dXJuIGF9S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXI9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXlswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtpZihhLm1hdGNoKC9eLVswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX07S0pVUi5sYW5nLlN0cmluZy5pc0hleD1mdW5jdGlvbihhKXtyZXR1cm4gaXNoZXgoYSl9O2Z1bmN0aW9uIGlzaGV4KGEpe2lmKGEubGVuZ3RoJTI9PTAmJihhLm1hdGNoKC9eWzAtOWEtZl0rJC8pfHxhLm1hdGNoKC9eWzAtOUEtRl0rJC8pKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fUtKVVIubGFuZy5TdHJpbmcuaXNCYXNlNjQ9ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccysvZyxcIlwiKTtpZihhLm1hdGNoKC9eWzAtOUEtWmEteitcXC9dKz17MCwzfSQvKSYmYS5sZW5ndGglND09MCl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtLSlVSLmxhbmcuU3RyaW5nLmlzQmFzZTY0VVJMPWZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL1srLz1dLykpe3JldHVybiBmYWxzZX1hPWI2NHV0b2I2NChhKTtyZXR1cm4gS0pVUi5sYW5nLlN0cmluZy5pc0Jhc2U2NChhKX07S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXJBcnJheT1mdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzKy9nLFwiXCIpO2lmKGEubWF0Y2goL15cXFtbMC05LF0rXFxdJC8pKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0tKVVIubGFuZy5TdHJpbmcuaXNQcmludGFibGU9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXlswLTlBLVphLXogJygpKywtLi86PT9dKiQvKSE9PW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07S0pVUi5sYW5nLlN0cmluZy5pc0lBNT1mdW5jdGlvbihhKXtpZihhLm1hdGNoKC9eW1xceDIwLVxceDIxXFx4MjMtXFx4N2ZdKiQvKSE9PW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07S0pVUi5sYW5nLlN0cmluZy5pc01haWw9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXltBLVphLXowLTldezF9W0EtWmEtejAtOV8uLV0qQHsxfVtBLVphLXowLTlfLi1dezEsfVxcLltBLVphLXowLTldezEsfSQvKSE9PW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07ZnVuY3Rpb24gaGV4dG9wb3NoZXgoYSl7aWYoYS5sZW5ndGglMj09MSl7cmV0dXJuXCIwXCIrYX1pZihhLnN1YnN0cigwLDEpPlwiN1wiKXtyZXR1cm5cIjAwXCIrYX1yZXR1cm4gYX1mdW5jdGlvbiBpbnRhcnlzdHJ0b2hleChiKXtiPWIucmVwbGFjZSgvXlxccypcXFtcXHMqLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKlxcXVxccyokLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKi9nLFwiXCIpO3RyeXt2YXIgYz1iLnNwbGl0KC8sLykubWFwKGZ1bmN0aW9uKGcsZSxoKXt2YXIgZj1wYXJzZUludChnKTtpZihmPDB8fDI1NTxmKXt0aHJvd1wiaW50ZWdlciBub3QgaW4gcmFuZ2UgMC0yNTVcIn12YXIgZD0oXCIwMFwiK2YudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7cmV0dXJuIGR9KS5qb2luKFwiXCIpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93XCJtYWxmb3JtZWQgaW50ZWdlciBhcnJheSBzdHJpbmc6IFwiK2F9fXZhciBzdHJkaWZmaWR4PWZ1bmN0aW9uKGMsYSl7dmFyIGQ9Yy5sZW5ndGg7aWYoYy5sZW5ndGg+YS5sZW5ndGgpe2Q9YS5sZW5ndGh9Zm9yKHZhciBiPTA7YjxkO2IrKyl7aWYoYy5jaGFyQ29kZUF0KGIpIT1hLmNoYXJDb2RlQXQoYikpe3JldHVybiBifX1pZihjLmxlbmd0aCE9YS5sZW5ndGgpe3JldHVybiBkfXJldHVybiAtMX07ZnVuY3Rpb24gb2lkdG9oZXgoZyl7dmFyIGY9ZnVuY3Rpb24oYSl7dmFyIGw9YS50b1N0cmluZygxNik7aWYobC5sZW5ndGg9PTEpe2w9XCIwXCIrbH1yZXR1cm4gbH07dmFyIGU9ZnVuY3Rpb24ocCl7dmFyIG89XCJcIjt2YXIgbD1wYXJzZUludChwLDEwKTt2YXIgYT1sLnRvU3RyaW5nKDIpO3ZhciBtPTctYS5sZW5ndGglNztpZihtPT03KXttPTB9dmFyIHI9XCJcIjtmb3IodmFyIG49MDtuPG07bisrKXtyKz1cIjBcIn1hPXIrYTtmb3IodmFyIG49MDtuPGEubGVuZ3RoLTE7bis9Nyl7dmFyIHE9YS5zdWJzdHIobiw3KTtpZihuIT1hLmxlbmd0aC03KXtxPVwiMVwiK3F9bys9ZihwYXJzZUludChxLDIpKX1yZXR1cm4gb307dHJ5e2lmKCFnLm1hdGNoKC9eWzAtOS5dKyQvKSl7cmV0dXJuIG51bGx9dmFyIGo9XCJcIjt2YXIgYj1nLnNwbGl0KFwiLlwiKTt2YXIgaz1wYXJzZUludChiWzBdLDEwKSo0MCtwYXJzZUludChiWzFdLDEwKTtqKz1mKGspO2Iuc3BsaWNlKDAsMik7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe2orPWUoYltkXSl9cmV0dXJuIGp9Y2F0Y2goYyl7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGhleHRvb2lkKGcpe2lmKCFpc2hleChnKSl7cmV0dXJuIG51bGx9dHJ5e3ZhciBtPVtdO3ZhciBwPWcuc3Vic3RyKDAsMik7dmFyIGU9cGFyc2VJbnQocCwxNik7bVswXT1uZXcgU3RyaW5nKE1hdGguZmxvb3IoZS80MCkpO21bMV09bmV3IFN0cmluZyhlJTQwKTt2YXIgbj1nLnN1YnN0cigyKTt2YXIgbD1bXTtmb3IodmFyIGY9MDtmPG4ubGVuZ3RoLzI7ZisrKXtsLnB1c2gocGFyc2VJbnQobi5zdWJzdHIoZioyLDIpLDE2KSl9dmFyIGs9W107dmFyIGQ9XCJcIjtmb3IodmFyIGY9MDtmPGwubGVuZ3RoO2YrKyl7aWYobFtmXSYxMjgpe2Q9ZCtzdHJwYWQoKGxbZl0mMTI3KS50b1N0cmluZygyKSw3KX1lbHNle2Q9ZCtzdHJwYWQoKGxbZl0mMTI3KS50b1N0cmluZygyKSw3KTtrLnB1c2gobmV3IFN0cmluZyhwYXJzZUludChkLDIpKSk7ZD1cIlwifX12YXIgbz1tLmpvaW4oXCIuXCIpO2lmKGsubGVuZ3RoPjApe289bytcIi5cIitrLmpvaW4oXCIuXCIpfXJldHVybiBvfWNhdGNoKGope3JldHVybiBudWxsfX12YXIgc3RycGFkPWZ1bmN0aW9uKGMsYixhKXtpZihhPT11bmRlZmluZWQpe2E9XCIwXCJ9aWYoYy5sZW5ndGg+PWIpe3JldHVybiBjfXJldHVybiBuZXcgQXJyYXkoYi1jLmxlbmd0aCsxKS5qb2luKGEpK2N9O2Z1bmN0aW9uIGJpdHN0cnRvaW50KGUpe3RyeXt2YXIgYT1lLnN1YnN0cigwLDIpO2lmKGE9PVwiMDBcIil7cmV0dXJuIHBhcnNlSW50KGUuc3Vic3RyKDIpLDE2KX12YXIgYj1wYXJzZUludChhLDE2KTt2YXIgZj1lLnN1YnN0cigyKTt2YXIgZD1wYXJzZUludChmLDE2KS50b1N0cmluZygyKTtpZihkPT1cIjBcIil7ZD1cIjAwMDAwMDAwXCJ9ZD1kLnNsaWNlKDAsMC1iKTtyZXR1cm4gcGFyc2VJbnQoZCwyKX1jYXRjaChjKXtyZXR1cm4gLTF9fWZ1bmN0aW9uIGludHRvYml0c3RyKGUpe3ZhciBjPU51bWJlcihlKS50b1N0cmluZygyKTt2YXIgYj04LWMubGVuZ3RoJTg7aWYoYj09OCl7Yj0wfWM9YytzdHJwYWQoXCJcIixiLFwiMFwiKTt2YXIgZD1wYXJzZUludChjLDIpLnRvU3RyaW5nKDE2KTtpZihkLmxlbmd0aCUyPT0xKXtkPVwiMFwiK2R9dmFyIGE9XCIwXCIrYjtyZXR1cm4gYStkfWZ1bmN0aW9uIGV4dGVuZENsYXNzKGMsYSl7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPWEucHJvdG90eXBlO2MucHJvdG90eXBlPW5ldyBiKCk7Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9YztjLnN1cGVyY2xhc3M9YS5wcm90b3R5cGU7aWYoYS5wcm90b3R5cGUuY29uc3RydWN0b3I9PU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3Ipe2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWF9fTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uVXRpbD1uZXcgZnVuY3Rpb24oKXt0aGlzLkRJR0VTVElORk9IRUFEPXtzaGExOlwiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0XCIsc2hhMjI0OlwiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWNcIixzaGEyNTY6XCIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMFwiLHNoYTM4NDpcIjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwXCIsc2hhNTEyOlwiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDBcIixtZDI6XCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjAyMDUwMDA0MTBcIixtZDU6XCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTBcIixyaXBlbWQxNjA6XCIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTRcIix9O3RoaXMuREVGQVVMVFBST1ZJREVSPXttZDU6XCJjcnlwdG9qc1wiLHNoYTE6XCJjcnlwdG9qc1wiLHNoYTIyNDpcImNyeXB0b2pzXCIsc2hhMjU2OlwiY3J5cHRvanNcIixzaGEzODQ6XCJjcnlwdG9qc1wiLHNoYTUxMjpcImNyeXB0b2pzXCIscmlwZW1kMTYwOlwiY3J5cHRvanNcIixobWFjbWQ1OlwiY3J5cHRvanNcIixobWFjc2hhMTpcImNyeXB0b2pzXCIsaG1hY3NoYTIyNDpcImNyeXB0b2pzXCIsaG1hY3NoYTI1NjpcImNyeXB0b2pzXCIsaG1hY3NoYTM4NDpcImNyeXB0b2pzXCIsaG1hY3NoYTUxMjpcImNyeXB0b2pzXCIsaG1hY3JpcGVtZDE2MDpcImNyeXB0b2pzXCIsTUQ1d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTM4NHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTUxMndpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLE1ENXdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTM4NHdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixSSVBFTUQxNjB3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixNRDV3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEEzODR3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIix9O3RoaXMuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRT17bWQ1OkNyeXB0b0pTLmFsZ28uTUQ1LHNoYTE6Q3J5cHRvSlMuYWxnby5TSEExLHNoYTIyNDpDcnlwdG9KUy5hbGdvLlNIQTIyNCxzaGEyNTY6Q3J5cHRvSlMuYWxnby5TSEEyNTYsc2hhMzg0OkNyeXB0b0pTLmFsZ28uU0hBMzg0LHNoYTUxMjpDcnlwdG9KUy5hbGdvLlNIQTUxMixyaXBlbWQxNjA6Q3J5cHRvSlMuYWxnby5SSVBFTUQxNjB9O3RoaXMuZ2V0RGlnZXN0SW5mb0hleD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiB0aGlzLkRJR0VTVElORk9IRUFEW2JdPT1cInVuZGVmaW5lZFwiKXt0aHJvd1wiYWxnIG5vdCBzdXBwb3J0ZWQgaW4gVXRpbC5ESUdFU1RJTkZPSEVBRDogXCIrYn1yZXR1cm4gdGhpcy5ESUdFU1RJTkZPSEVBRFtiXSthfTt0aGlzLmdldFBhZGRlZERpZ2VzdEluZm9IZXg9ZnVuY3Rpb24oaCxhLGope3ZhciBjPXRoaXMuZ2V0RGlnZXN0SW5mb0hleChoLGEpO3ZhciBkPWovNDtpZihjLmxlbmd0aCsyMj5kKXt0aHJvd1wia2V5IGlzIHRvbyBzaG9ydCBmb3IgU2lnQWxnOiBrZXlsZW49XCIraitcIixcIithfXZhciBiPVwiMDAwMVwiO3ZhciBrPVwiMDBcIitjO3ZhciBnPVwiXCI7dmFyIGw9ZC1iLmxlbmd0aC1rLmxlbmd0aDtmb3IodmFyIGY9MDtmPGw7Zis9Mil7Zys9XCJmZlwifXZhciBlPWIrZytrO3JldHVybiBlfTt0aGlzLmhhc2hTdHJpbmc9ZnVuY3Rpb24oYSxjKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOmN9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuaGFzaEhleD1mdW5jdGlvbihiLGMpe3ZhciBhPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6Y30pO3JldHVybiBhLmRpZ2VzdEhleChiKX07dGhpcy5zaGExPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc2hTdHJpbmcoYSxcInNoYTFcIil9O3RoaXMuc2hhMjU2PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc2hTdHJpbmcoYSxcInNoYTI1NlwiKX07dGhpcy5zaGEyNTZIZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGFzaEhleChhLFwic2hhMjU2XCIpfTt0aGlzLnNoYTUxMj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oYXNoU3RyaW5nKGEsXCJzaGE1MTJcIil9O3RoaXMuc2hhNTEySGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc2hIZXgoYSxcInNoYTUxMlwiKX07dGhpcy5pc0tleT1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgUlNBS2V5fHxhIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRFNBfHxhIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0Epe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX19O0tKVVIuY3J5cHRvLlV0aWwubWQ1PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJtZDVcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07S0pVUi5jcnlwdG8uVXRpbC5yaXBlbWQxNjA9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInJpcGVtZDE2MFwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTj1uZXcgU2VjdXJlUmFuZG9tKCk7S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcz1mdW5jdGlvbihiKXt2YXIgYT1uZXcgQXJyYXkoYik7S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU4ubmV4dEJ5dGVzKGEpO3JldHVybiBCQXRvaGV4KGEpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoS0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcyhhKSwxNil9O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYml0cz1mdW5jdGlvbihkKXt2YXIgYz1kJTg7dmFyIGE9KGQtYykvODt2YXIgYj1uZXcgQXJyYXkoYSsxKTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTi5uZXh0Qnl0ZXMoYik7YlswXT0oKCgyNTU8PGMpJjI1NSleMjU1KSZiWzBdO3JldHVybiBCQXRvaGV4KGIpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJpdHMoYSksMTYpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXg9ZnVuY3Rpb24oYil7dmFyIGE9Yi5iaXRMZW5ndGgoKTt3aGlsZSgxKXt2YXIgYz1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzKGEpO2lmKGIuY29tcGFyZVRvKGMpIT0tMSl7cmV0dXJuIGN9fX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXg9ZnVuY3Rpb24oZSxiKXt2YXIgYz1lLmNvbXBhcmVUbyhiKTtpZihjPT0xKXt0aHJvd1wiYmlNaW4gaXMgZ3JlYXRlciB0aGFuIGJpTWF4XCJ9aWYoYz09MCl7cmV0dXJuIGV9dmFyIGE9Yi5zdWJ0cmFjdChlKTt2YXIgZD1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgoYSk7cmV0dXJuIGQuYWRkKGUpfTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0PWZ1bmN0aW9uKGMpe3ZhciBiPW51bGw7dmFyIGE9bnVsbDt2YXIgZD1udWxsO3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24oZyxmKXtnPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZShnKTtpZihnIT09bnVsbCYmZj09PXVuZGVmaW5lZCl7Zj1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUltnXX1pZihcIjptZDU6c2hhMTpzaGEyMjQ6c2hhMjU2OnNoYTM4NDpzaGE1MTI6cmlwZW1kMTYwOlwiLmluZGV4T2YoZykhPS0xJiZmPT1cImNyeXB0b2pzXCIpe3RyeXt0aGlzLm1kPUtKVVIuY3J5cHRvLlV0aWwuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRVtnXS5jcmVhdGUoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaCl7dmFyIGk9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShoKTt0aGlzLm1kLnVwZGF0ZShpKX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLm1kLmZpbmFsaXplKCk7cmV0dXJuIGgudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19aWYoXCI6c2hhMjU2OlwiLmluZGV4T2YoZykhPS0xJiZmPT1cInNqY2xcIil7dHJ5e3RoaXMubWQ9bmV3IHNqY2wuaGFzaC5zaGEyNTYoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaSl7dmFyIGg9c2pjbC5jb2RlYy5oZXgudG9CaXRzKGkpO3RoaXMubWQudXBkYXRlKGgpfTt0aGlzLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBoPXRoaXMubWQuZmluYWxpemUoKTtyZXR1cm4gc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoaCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihlKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGUpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvd1wiZGlnZXN0KCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGUpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oZSl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTtpZihjIT09dW5kZWZpbmVkKXtpZihjLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPWMuYWxnO2lmKGMucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfXRoaXMuc2V0QWxnQW5kUHJvdmlkZXIodGhpcy5hbGdOYW1lLHRoaXMucHJvdk5hbWUpfX19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZT1mdW5jdGlvbihhKXtpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpe2E9YS50b0xvd2VyQ2FzZSgpO2E9YS5yZXBsYWNlKC8tLyxcIlwiKX1yZXR1cm4gYX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdC5nZXRIYXNoTGVuZ3RoPWZ1bmN0aW9uKGMpe3ZhciBiPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Q7dmFyIGE9Yi5nZXRDYW5vbmljYWxBbGdOYW1lKGMpO2lmKGIuSEFTSExFTkdUSFthXT09PXVuZGVmaW5lZCl7dGhyb3dcIm5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIitjfXJldHVybiBiLkhBU0hMRU5HVEhbYV19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuSEFTSExFTkdUSD17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJpcGVtZDE2MDoyMH07S0pVUi5jcnlwdG8uTWFjPWZ1bmN0aW9uKGQpe3ZhciBmPW51bGw7dmFyIGM9bnVsbDt2YXIgYT1udWxsO3ZhciBlPW51bGw7dmFyIGI9bnVsbDt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKGssaSl7az1rLnRvTG93ZXJDYXNlKCk7aWYoaz09bnVsbCl7az1cImhtYWNzaGExXCJ9az1rLnRvTG93ZXJDYXNlKCk7aWYoay5zdWJzdHIoMCw0KSE9XCJobWFjXCIpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciB1bnN1cHBvcnRlZCBITUFDIGFsZzogXCIra31pZihpPT09dW5kZWZpbmVkKXtpPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW2tdfXRoaXMuYWxnUHJvdj1rK1wiL1wiK2k7dmFyIGc9ay5zdWJzdHIoNCk7aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKGcpIT0tMSYmaT09XCJjcnlwdG9qc1wiKXt0cnl7dmFyIGo9S0pVUi5jcnlwdG8uVXRpbC5DUllQVE9KU01FU1NBR0VESUdFU1ROQU1FW2ddO3RoaXMubWFjPUNyeXB0b0pTLmFsZ28uSE1BQy5jcmVhdGUoaix0aGlzLnBhc3MpfWNhdGNoKGgpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBoYXNoQWxnPVwiK2crXCIvXCIraH10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihsKXt0aGlzLm1hYy51cGRhdGUobCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGwpe3ZhciBtPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UobCk7dGhpcy5tYWMudXBkYXRlKG0pfTt0aGlzLmRvRmluYWw9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLm1hYy5maW5hbGl6ZSgpO3JldHVybiBsLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpfTt0aGlzLmRvRmluYWxTdHJpbmc9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVTdHJpbmcobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVIZXgobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfX19O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbD1mdW5jdGlvbigpe3Rocm93XCJkaWdlc3QoKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbFN0cmluZz1mdW5jdGlvbihnKXt0aHJvd1wiZGlnZXN0U3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24oZyl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5zZXRQYXNzd29yZD1mdW5jdGlvbihoKXtpZih0eXBlb2YgaD09XCJzdHJpbmdcIil7dmFyIGc9aDtpZihoLmxlbmd0aCUyPT0xfHwhaC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7Zz1yc3RydG9oZXgoaCl9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyk7cmV0dXJufWlmKHR5cGVvZiBoIT1cIm9iamVjdFwiKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dmFyIGc9bnVsbDtpZihoLmhleCE9PXVuZGVmaW5lZCl7aWYoaC5oZXgubGVuZ3RoJTIhPTB8fCFoLmhleC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7dGhyb3dcIk1hYzogd3JvbmcgaGV4IHBhc3N3b3JkOiBcIitoLmhleH1nPWguaGV4fWlmKGgudXRmOCE9PXVuZGVmaW5lZCl7Zz11dGY4dG9oZXgoaC51dGY4KX1pZihoLnJzdHIhPT11bmRlZmluZWQpe2c9cnN0cnRvaGV4KGgucnN0cil9aWYoaC5iNjQhPT11bmRlZmluZWQpe2c9YjY0dG9oZXgoaC5iNjQpfWlmKGguYjY0dSE9PXVuZGVmaW5lZCl7Zz1iNjR1dG9oZXgoaC5iNjR1KX1pZihnPT1udWxsKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyl9O2lmKGQhPT11bmRlZmluZWQpe2lmKGQucGFzcyE9PXVuZGVmaW5lZCl7dGhpcy5zZXRQYXNzd29yZChkLnBhc3MpfWlmKGQuYWxnIT09dW5kZWZpbmVkKXt0aGlzLmFsZ05hbWU9ZC5hbGc7aWYoZC5wcm92PT09dW5kZWZpbmVkKXt0aGlzLnByb3ZOYW1lPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW3RoaXMuYWxnTmFtZV19dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSl9fX07S0pVUi5jcnlwdG8uU2lnbmF0dXJlPWZ1bmN0aW9uKG8pe3ZhciBxPW51bGw7dmFyIG49bnVsbDt2YXIgcj1udWxsO3ZhciBjPW51bGw7dmFyIGw9bnVsbDt2YXIgZD1udWxsO3ZhciBrPW51bGw7dmFyIGg9bnVsbDt2YXIgcD1udWxsO3ZhciBlPW51bGw7dmFyIGI9LTE7dmFyIGc9bnVsbDt2YXIgaj1udWxsO3ZhciBhPW51bGw7dmFyIGk9bnVsbDt2YXIgZj1udWxsO3RoaXMuX3NldEFsZ05hbWVzPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5hbGdOYW1lLm1hdGNoKC9eKC4rKXdpdGgoLispJC8pO2lmKHMpe3RoaXMubWRBbGdOYW1lPXNbMV0udG9Mb3dlckNhc2UoKTt0aGlzLnB1YmtleUFsZ05hbWU9c1syXS50b0xvd2VyQ2FzZSgpO2lmKHRoaXMucHVia2V5QWxnTmFtZT09XCJyc2FhbmRtZ2YxXCImJnRoaXMubWRBbGdOYW1lPT1cInNoYVwiKXt0aGlzLm1kQWxnTmFtZT1cInNoYTFcIn19fTt0aGlzLl96ZXJvUGFkZGluZ09mU2lnbmF0dXJlPWZ1bmN0aW9uKHgsdyl7dmFyIHY9XCJcIjt2YXIgdD13LzQteC5sZW5ndGg7Zm9yKHZhciB1PTA7dTx0O3UrKyl7dj12K1wiMFwifXJldHVybiB2K3h9O3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24odSx0KXt0aGlzLl9zZXRBbGdOYW1lcygpO2lmKHQhPVwiY3J5cHRvanMvanNyc2FcIil7dGhyb3cgbmV3IEVycm9yKFwicHJvdmlkZXIgbm90IHN1cHBvcnRlZDogXCIrdCl9aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKHRoaXMubWRBbGdOYW1lKSE9LTEpe3RyeXt0aGlzLm1kPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6dGhpcy5tZEFsZ05hbWV9KX1jYXRjaChzKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBhbGc9XCIrdGhpcy5tZEFsZ05hbWUrXCIvXCIrcyl9dGhpcy5pbml0PWZ1bmN0aW9uKHcseCl7dmFyIHk9bnVsbDt0cnl7aWYoeD09PXVuZGVmaW5lZCl7eT1LRVlVVElMLmdldEtleSh3KX1lbHNle3k9S0VZVVRJTC5nZXRLZXkodyx4KX19Y2F0Y2godil7dGhyb3dcImluaXQgZmFpbGVkOlwiK3Z9aWYoeS5pc1ByaXZhdGU9PT10cnVlKXt0aGlzLnBydktleT15O3RoaXMuc3RhdGU9XCJTSUdOXCJ9ZWxzZXtpZih5LmlzUHVibGljPT09dHJ1ZSl7dGhpcy5wdWJLZXk9eTt0aGlzLnN0YXRlPVwiVkVSSUZZXCJ9ZWxzZXt0aHJvd1wiaW5pdCBmYWlsZWQuOlwiK3l9fX07dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24odil7dGhpcy5tZC51cGRhdGVTdHJpbmcodil9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKHYpe3RoaXMubWQudXBkYXRlSGV4KHYpfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aGlzLnNIYXNoSGV4PXRoaXMubWQuZGlnZXN0KCk7aWYodGhpcy5wcnZLZXk9PT11bmRlZmluZWQmJnRoaXMuZWNwcnZoZXghPT11bmRlZmluZWQmJnRoaXMuZWNjdXJ2ZW5hbWUhPT11bmRlZmluZWQmJktKVVIuY3J5cHRvLkVDRFNBIT09dW5kZWZpbmVkKXt0aGlzLnBydktleT1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOnRoaXMuZWNjdXJ2ZW5hbWUscHJ2OnRoaXMuZWNwcnZoZXh9KX1pZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaFBTUyh0aGlzLnNIYXNoSGV4LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdGhpcy5tZEFsZ05hbWUpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSl7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZzogXCIrdGhpcy5wdWJrZXlBbGdOYW1lfX19fXJldHVybiB0aGlzLmhTaWdufTt0aGlzLnNpZ25TdHJpbmc9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVTdHJpbmcodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnNpZ25IZXg9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVIZXgodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnZlcmlmeT1mdW5jdGlvbih2KXt0aGlzLnNIYXNoSGV4PXRoaXMubWQuZGlnZXN0KCk7aWYodGhpcy5wdWJLZXk9PT11bmRlZmluZWQmJnRoaXMuZWNwdWJoZXghPT11bmRlZmluZWQmJnRoaXMuZWNjdXJ2ZW5hbWUhPT11bmRlZmluZWQmJktKVVIuY3J5cHRvLkVDRFNBIT09dW5kZWZpbmVkKXt0aGlzLnB1YktleT1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOnRoaXMuZWNjdXJ2ZW5hbWUscHViOnRoaXMuZWNwdWJoZXh9KX1pZih0aGlzLnB1YktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1ModGhpcy5zSGFzaEhleCx2LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnB1YktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7aWYoS0pVUi5jcnlwdG8uRUNEU0EhPT11bmRlZmluZWQmJnRoaXMucHViS2V5IGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0Epe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle2lmKEtKVVIuY3J5cHRvLkRTQSE9PXVuZGVmaW5lZCYmdGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHB1YmxpYyBrZXkgYWxnOiBcIit0aGlzLnB1YmtleUFsZ05hbWV9fX19fX19O3RoaXMuaW5pdD1mdW5jdGlvbihzLHQpe3Rocm93XCJpbml0KGtleSwgcGFzcykgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aHJvd1wic2lnbigpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5zaWduU3RyaW5nPWZ1bmN0aW9uKHMpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuc2lnbkhleD1mdW5jdGlvbihzKXt0aHJvd1wiZGlnZXN0SGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnZlcmlmeT1mdW5jdGlvbihzKXt0aHJvd1widmVyaWZ5KGhTaWdWYWwpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5pbml0UGFyYW1zPW87aWYobyE9PXVuZGVmaW5lZCl7aWYoby5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1vLmFsZztpZihvLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX1lbHNle3RoaXMucHJvdk5hbWU9by5wcm92fXRoaXMuYWxnUHJvdk5hbWU9dGhpcy5hbGdOYW1lK1wiOlwiK3RoaXMucHJvdk5hbWU7dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSk7dGhpcy5fc2V0QWxnTmFtZXMoKX1pZihvLnBzc3NhbHRsZW4hPT11bmRlZmluZWQpe3RoaXMucHNzU2FsdExlbj1vLnBzc3NhbHRsZW59aWYoby5wcnZrZXlwZW0hPT11bmRlZmluZWQpe2lmKG8ucHJ2a2V5cGFzIT09dW5kZWZpbmVkKXt0aHJvd1wiYm90aCBwcnZrZXlwZW0gYW5kIHBydmtleXBhcyBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWRcIn1lbHNle3RyeXt2YXIgcT1LRVlVVElMLmdldEtleShvLnBydmtleXBlbSk7dGhpcy5pbml0KHEpfWNhdGNoKG0pe3Rocm93XCJmYXRhbCBlcnJvciB0byBsb2FkIHBlbSBwcml2YXRlIGtleTogXCIrbX19fX19O0tKVVIuY3J5cHRvLkNpcGhlcj1mdW5jdGlvbihhKXt9O0tKVVIuY3J5cHRvLkNpcGhlci5lbmNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHVibGljKXt2YXIgYz1LSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lKGYsZCk7aWYoYz09PVwiUlNBXCIpe3JldHVybiBmLmVuY3J5cHQoZSl9aWYoYz09PVwiUlNBT0FFUFwiKXtyZXR1cm4gZi5lbmNyeXB0T0FFUChlLFwic2hhMVwiKX12YXIgYj1jLm1hdGNoKC9eUlNBT0FFUChcXGQrKSQvKTtpZihiIT09bnVsbCl7cmV0dXJuIGYuZW5jcnlwdE9BRVAoZSxcInNoYVwiK2JbMV0pfXRocm93XCJDaXBoZXIuZW5jcnlwdDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBSU0FLZXk6IFwiK2R9ZWxzZXt0aHJvd1wiQ2lwaGVyLmVuY3J5cHQ6IHVuc3VwcG9ydGVkIGtleSBvciBhbGdvcml0aG1cIn19O0tKVVIuY3J5cHRvLkNpcGhlci5kZWNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHJpdmF0ZSl7dmFyIGM9S0pVUi5jcnlwdG8uQ2lwaGVyLmdldEFsZ0J5S2V5QW5kTmFtZShmLGQpO2lmKGM9PT1cIlJTQVwiKXtyZXR1cm4gZi5kZWNyeXB0KGUpfWlmKGM9PT1cIlJTQU9BRVBcIil7cmV0dXJuIGYuZGVjcnlwdE9BRVAoZSxcInNoYTFcIil9dmFyIGI9Yy5tYXRjaCgvXlJTQU9BRVAoXFxkKykkLyk7aWYoYiE9PW51bGwpe3JldHVybiBmLmRlY3J5cHRPQUVQKGUsXCJzaGFcIitiWzFdKX10aHJvd1wiQ2lwaGVyLmRlY3J5cHQ6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgUlNBS2V5OiBcIitkfWVsc2V7dGhyb3dcIkNpcGhlci5kZWNyeXB0OiB1bnN1cHBvcnRlZCBrZXkgb3IgYWxnb3JpdGhtXCJ9fTtLSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lPWZ1bmN0aW9uKGIsYSl7aWYoYiBpbnN0YW5jZW9mIFJTQUtleSl7aWYoXCI6UlNBOlJTQU9BRVA6UlNBT0FFUDIyNDpSU0FPQUVQMjU2OlJTQU9BRVAzODQ6UlNBT0FFUDUxMjpcIi5pbmRleE9mKGEpIT0tMSl7cmV0dXJuIGF9aWYoYT09PW51bGx8fGE9PT11bmRlZmluZWQpe3JldHVyblwiUlNBXCJ9dGhyb3dcImdldEFsZ0J5S2V5QW5kTmFtZTogbm90IHN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZSBmb3IgUlNBS2V5OiBcIithfXRocm93XCJnZXRBbGdCeUtleUFuZE5hbWU6IG5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWU6IFwiK2F9O0tKVVIuY3J5cHRvLk9JRD1uZXcgZnVuY3Rpb24oKXt0aGlzLm9pZGhleDJuYW1lPXtcIjJhODY0ODg2ZjcwZDAxMDEwMVwiOlwicnNhRW5jcnlwdGlvblwiLFwiMmE4NjQ4Y2UzZDAyMDFcIjpcImVjUHVibGljS2V5XCIsXCIyYTg2NDhjZTM4MDQwMVwiOlwiZHNhXCIsXCIyYTg2NDhjZTNkMDMwMTA3XCI6XCJzZWNwMjU2cjFcIixcIjJiODEwNDAwMWZcIjpcInNlY3AxOTJrMVwiLFwiMmI4MTA0MDAyMVwiOlwic2VjcDIyNHIxXCIsXCIyYjgxMDQwMDBhXCI6XCJzZWNwMjU2azFcIixcIjJiODEwNDAwMjNcIjpcInNlY3A1MjFyMVwiLFwiMmI4MTA0MDAyMlwiOlwic2VjcDM4NHIxXCIsXCIyYTg2NDhjZTM4MDQwM1wiOlwiU0hBMXdpdGhEU0FcIixcIjYwODY0ODAxNjUwMzA0MDMwMVwiOlwiU0hBMjI0d2l0aERTQVwiLFwiNjA4NjQ4MDE2NTAzMDQwMzAyXCI6XCJTSEEyNTZ3aXRoRFNBXCIsfX07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuY3J5cHRvPT1cInVuZGVmaW5lZFwifHwhS0pVUi5jcnlwdG8pe0tKVVIuY3J5cHRvPXt9fUtKVVIuY3J5cHRvLkVDRFNBPWZ1bmN0aW9uKGUpe3ZhciBnPVwic2VjcDI1NnIxXCI7dmFyIHA9bnVsbDt2YXIgYj1udWxsO3ZhciBpPW51bGw7dmFyIGo9RXJyb3IsZj1CaWdJbnRlZ2VyLGg9RUNQb2ludEZwLG09S0pVUi5jcnlwdG8uRUNEU0EsYz1LSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLGQ9bS5nZXROYW1lLHE9QVNOMUhFWCxuPXEuZ2V0VmJ5TGlzdEV4LGs9cS5pc0FTTjFIRVg7dmFyIGE9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBvPW51bGw7dGhpcy50eXBlPVwiRUNcIjt0aGlzLmlzUHJpdmF0ZT1mYWxzZTt0aGlzLmlzUHVibGljPWZhbHNlO2Z1bmN0aW9uIGwoeCx0LHcscyl7dmFyIHI9TWF0aC5tYXgodC5iaXRMZW5ndGgoKSxzLmJpdExlbmd0aCgpKTt2YXIgeT14LmFkZDJEKHcpO3ZhciB2PXguY3VydmUuZ2V0SW5maW5pdHkoKTtmb3IodmFyIHU9ci0xO3U+PTA7LS11KXt2PXYudHdpY2UyRCgpO3Yuej1mLk9ORTtpZih0LnRlc3RCaXQodSkpe2lmKHMudGVzdEJpdCh1KSl7dj12LmFkZDJEKHkpfWVsc2V7dj12LmFkZDJEKHgpfX1lbHNle2lmKHMudGVzdEJpdCh1KSl7dj12LmFkZDJEKHcpfX19cmV0dXJuIHZ9dGhpcy5nZXRCaWdSYW5kb209ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBmKHIuYml0TGVuZ3RoKCksYSkubW9kKHIuc3VidHJhY3QoZi5PTkUpKS5hZGQoZi5PTkUpfTt0aGlzLnNldE5hbWVkQ3VydmU9ZnVuY3Rpb24ocil7dGhpcy5lY3BhcmFtcz1jLmdldEJ5TmFtZShyKTt0aGlzLnBydktleUhleD1udWxsO3RoaXMucHViS2V5SGV4PW51bGw7dGhpcy5jdXJ2ZU5hbWU9cn07dGhpcy5zZXRQcml2YXRlS2V5SGV4PWZ1bmN0aW9uKHIpe3RoaXMuaXNQcml2YXRlPXRydWU7dGhpcy5wcnZLZXlIZXg9cn07dGhpcy5zZXRQdWJsaWNLZXlIZXg9ZnVuY3Rpb24ocil7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMucHViS2V5SGV4PXJ9O3RoaXMuZ2V0UHVibGljS2V5WFlIZXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnB1YktleUhleDtpZih0LnN1YnN0cigwLDIpIT09XCIwNFwiKXt0aHJvd1widGhpcyBtZXRob2Qgc3VwcG9ydHMgdW5jb21wcmVzc2VkIGZvcm1hdCgwNCkgb25seVwifXZhciBzPXRoaXMuZWNwYXJhbXMua2V5bGVuLzQ7aWYodC5sZW5ndGghPT0yK3MqMil7dGhyb3dcIm1hbGZvcm1lZCBwdWJsaWMga2V5IGhleCBsZW5ndGhcIn12YXIgcj17fTtyLng9dC5zdWJzdHIoMixzKTtyLnk9dC5zdWJzdHIoMitzKTtyZXR1cm4gcn07dGhpcy5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5jdXJ2ZU5hbWU7aWYocj09PVwic2VjcDI1NnIxXCJ8fHI9PT1cIk5JU1QgUC0yNTZcInx8cj09PVwiUC0yNTZcInx8cj09PVwicHJpbWUyNTZ2MVwiKXtyZXR1cm5cIlAtMjU2XCJ9aWYocj09PVwic2VjcDM4NHIxXCJ8fHI9PT1cIk5JU1QgUC0zODRcInx8cj09PVwiUC0zODRcIil7cmV0dXJuXCJQLTM4NFwifXJldHVybiBudWxsfTt0aGlzLmdlbmVyYXRlS2V5UGFpckhleD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWNwYXJhbXMubjt2YXIgdz10aGlzLmdldEJpZ1JhbmRvbSh0KTt2YXIgdT10aGlzLmVjcGFyYW1zLkcubXVsdGlwbHkodyk7dmFyIHo9dS5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIHg9dS5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIHI9dGhpcy5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgdj0oXCIwMDAwMDAwMDAwXCIrdy50b1N0cmluZygxNikpLnNsaWNlKC1yKTt2YXIgQT0oXCIwMDAwMDAwMDAwXCIrei50b1N0cmluZygxNikpLnNsaWNlKC1yKTt2YXIgeT0oXCIwMDAwMDAwMDAwXCIreC50b1N0cmluZygxNikpLnNsaWNlKC1yKTt2YXIgcz1cIjA0XCIrQSt5O3RoaXMuc2V0UHJpdmF0ZUtleUhleCh2KTt0aGlzLnNldFB1YmxpY0tleUhleChzKTtyZXR1cm57ZWNwcnZoZXg6dixlY3B1YmhleDpzfX07dGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnNpZ25IZXgocix0aGlzLnBydktleUhleCl9O3RoaXMuc2lnbkhleD1mdW5jdGlvbih4LHUpe3ZhciBBPW5ldyBmKHUsMTYpO3ZhciB2PXRoaXMuZWNwYXJhbXMubjt2YXIgej1uZXcgZih4LnN1YnN0cmluZygwLHRoaXMuZWNwYXJhbXMua2V5bGVuLzQpLDE2KTtkb3t2YXIgdz10aGlzLmdldEJpZ1JhbmRvbSh2KTt2YXIgQj10aGlzLmVjcGFyYW1zLkc7dmFyIHk9Qi5tdWx0aXBseSh3KTt2YXIgdD15LmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2Qodil9d2hpbGUodC5jb21wYXJlVG8oZi5aRVJPKTw9MCk7dmFyIEM9dy5tb2RJbnZlcnNlKHYpLm11bHRpcGx5KHouYWRkKEEubXVsdGlwbHkodCkpKS5tb2Qodik7cmV0dXJuIG0uYmlSU1NpZ1RvQVNOMVNpZyh0LEMpfTt0aGlzLnNpZ249ZnVuY3Rpb24odyxCKXt2YXIgej1CO3ZhciB1PXRoaXMuZWNwYXJhbXMubjt2YXIgeT1mLmZyb21CeXRlQXJyYXlVbnNpZ25lZCh3KTtkb3t2YXIgdj10aGlzLmdldEJpZ1JhbmRvbSh1KTt2YXIgQT10aGlzLmVjcGFyYW1zLkc7dmFyIHg9QS5tdWx0aXBseSh2KTt2YXIgdD14LmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2QodSl9d2hpbGUodC5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKTw9MCk7dmFyIEM9di5tb2RJbnZlcnNlKHUpLm11bHRpcGx5KHkuYWRkKHoubXVsdGlwbHkodCkpKS5tb2QodSk7cmV0dXJuIHRoaXMuc2VyaWFsaXplU2lnKHQsQyl9O3RoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKHMscil7cmV0dXJuIHRoaXMudmVyaWZ5SGV4KHMscix0aGlzLnB1YktleUhleCl9O3RoaXMudmVyaWZ5SGV4PWZ1bmN0aW9uKHYseSx1KXt0cnl7dmFyIHQsQjt2YXIgdz1tLnBhcnNlU2lnSGV4KHkpO3Q9dy5yO0I9dy5zO3ZhciB4PWguZGVjb2RlRnJvbUhleCh0aGlzLmVjcGFyYW1zLmN1cnZlLHUpO3ZhciB6PW5ldyBmKHYuc3Vic3RyaW5nKDAsdGhpcy5lY3BhcmFtcy5rZXlsZW4vNCksMTYpO3JldHVybiB0aGlzLnZlcmlmeVJhdyh6LHQsQix4KX1jYXRjaChBKXtyZXR1cm4gZmFsc2V9fTt0aGlzLnZlcmlmeT1mdW5jdGlvbih6LEEsdSl7dmFyIHcsdDtpZihCaXRjb2luLlV0aWwuaXNBcnJheShBKSl7dmFyIHk9dGhpcy5wYXJzZVNpZyhBKTt3PXkucjt0PXkuc31lbHNle2lmKFwib2JqZWN0XCI9PT10eXBlb2YgQSYmQS5yJiZBLnMpe3c9QS5yO3Q9QS5zfWVsc2V7dGhyb3dcIkludmFsaWQgdmFsdWUgZm9yIHNpZ25hdHVyZVwifX12YXIgdjtpZih1IGluc3RhbmNlb2YgRUNQb2ludEZwKXt2PXV9ZWxzZXtpZihCaXRjb2luLlV0aWwuaXNBcnJheSh1KSl7dj1oLmRlY29kZUZyb20odGhpcy5lY3BhcmFtcy5jdXJ2ZSx1KX1lbHNle3Rocm93XCJJbnZhbGlkIGZvcm1hdCBmb3IgcHVia2V5IHZhbHVlLCBtdXN0IGJlIGJ5dGUgYXJyYXkgb3IgRUNQb2ludEZwXCJ9fXZhciB4PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHopO3JldHVybiB0aGlzLnZlcmlmeVJhdyh4LHcsdCx2KX07dGhpcy52ZXJpZnlSYXc9ZnVuY3Rpb24oeix0LEUseSl7dmFyIHg9dGhpcy5lY3BhcmFtcy5uO3ZhciBEPXRoaXMuZWNwYXJhbXMuRztpZih0LmNvbXBhcmVUbyhmLk9ORSk8MHx8dC5jb21wYXJlVG8oeCk+PTApe3JldHVybiBmYWxzZX1pZihFLmNvbXBhcmVUbyhmLk9ORSk8MHx8RS5jb21wYXJlVG8oeCk+PTApe3JldHVybiBmYWxzZX12YXIgQT1FLm1vZEludmVyc2UoeCk7dmFyIHc9ei5tdWx0aXBseShBKS5tb2QoeCk7dmFyIHU9dC5tdWx0aXBseShBKS5tb2QoeCk7dmFyIEI9RC5tdWx0aXBseSh3KS5hZGQoeS5tdWx0aXBseSh1KSk7dmFyIEM9Qi5nZXRYKCkudG9CaWdJbnRlZ2VyKCkubW9kKHgpO3JldHVybiBDLmVxdWFscyh0KX07dGhpcy5zZXJpYWxpemVTaWc9ZnVuY3Rpb24odix1KXt2YXIgdz12LnRvQnl0ZUFycmF5U2lnbmVkKCk7dmFyIHQ9dS50b0J5dGVBcnJheVNpZ25lZCgpO3ZhciB4PVtdO3gucHVzaCgyKTt4LnB1c2gody5sZW5ndGgpO3g9eC5jb25jYXQodyk7eC5wdXNoKDIpO3gucHVzaCh0Lmxlbmd0aCk7eD14LmNvbmNhdCh0KTt4LnVuc2hpZnQoeC5sZW5ndGgpO3gudW5zaGlmdCg0OCk7cmV0dXJuIHh9O3RoaXMucGFyc2VTaWc9ZnVuY3Rpb24oeSl7dmFyIHg7aWYoeVswXSE9NDgpe3Rocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3QgYSB2YWxpZCBERVJTZXF1ZW5jZVwiKX14PTI7aWYoeVt4XSE9Mil7dGhyb3cgbmV3IEVycm9yKFwiRmlyc3QgZWxlbWVudCBpbiBzaWduYXR1cmUgbXVzdCBiZSBhIERFUkludGVnZXJcIil9dmFyIHc9eS5zbGljZSh4KzIseCsyK3lbeCsxXSk7eCs9Mit5W3grMV07aWYoeVt4XSE9Mil7dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kIGVsZW1lbnQgaW4gc2lnbmF0dXJlIG11c3QgYmUgYSBERVJJbnRlZ2VyXCIpfXZhciB0PXkuc2xpY2UoeCsyLHgrMit5W3grMV0pO3grPTIreVt4KzFdO3ZhciB2PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHcpO3ZhciB1PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHQpO3JldHVybntyOnYsczp1fX07dGhpcy5wYXJzZVNpZ0NvbXBhY3Q9ZnVuY3Rpb24odyl7aWYody5sZW5ndGghPT02NSl7dGhyb3dcIlNpZ25hdHVyZSBoYXMgdGhlIHdyb25nIGxlbmd0aFwifXZhciB0PXdbMF0tMjc7aWYodDwwfHx0Pjcpe3Rocm93XCJJbnZhbGlkIHNpZ25hdHVyZSB0eXBlXCJ9dmFyIHg9dGhpcy5lY3BhcmFtcy5uO3ZhciB2PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHcuc2xpY2UoMSwzMykpLm1vZCh4KTt2YXIgdT1mLmZyb21CeXRlQXJyYXlVbnNpZ25lZCh3LnNsaWNlKDMzLDY1KSkubW9kKHgpO3JldHVybntyOnYsczp1LGk6dH19O3RoaXMucmVhZFBLQ1M1UHJ2S2V5SGV4PWZ1bmN0aW9uKHUpe2lmKGsodSk9PT1mYWxzZSl7dGhyb3cgbmV3IEVycm9yKFwibm90IEFTTi4xIGhleCBzdHJpbmdcIil9dmFyIHIsdCx2O3RyeXtyPW4odSwwLFtcIlswXVwiLDBdLFwiMDZcIik7dD1uKHUsMCxbMV0sXCIwNFwiKTt0cnl7dj1uKHUsMCxbXCJbMV1cIiwwXSxcIjAzXCIpfWNhdGNoKHMpe319Y2F0Y2gocyl7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIFBLQ1MjMS81IHBsYWluIEVDQyBwcml2YXRlIGtleVwiKX10aGlzLmN1cnZlTmFtZT1kKHIpO2lmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgodik7dGhpcy5zZXRQcml2YXRlS2V5SGV4KHQpO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHJ2S2V5SGV4PWZ1bmN0aW9uKHYpe2lmKGsodik9PT1mYWxzZSl7dGhyb3cgbmV3IGooXCJub3QgQVNOLjEgaGV4IHN0cmluZ1wiKX12YXIgdCxyLHUsdzt0cnl7dD1uKHYsMCxbMSwwXSxcIjA2XCIpO3I9bih2LDAsWzEsMV0sXCIwNlwiKTt1PW4odiwwLFsyLDAsMV0sXCIwNFwiKTt0cnl7dz1uKHYsMCxbMiwwLFwiWzFdXCIsMF0sXCIwM1wiKX1jYXRjaChzKXt9fWNhdGNoKHMpe3Rocm93IG5ldyBqKFwibWFsZm9ybWVkIFBLQ1MjOCBwbGFpbiBFQ0MgcHJpdmF0ZSBrZXlcIil9dGhpcy5jdXJ2ZU5hbWU9ZChyKTtpZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IGooXCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCIpfXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgodyk7dGhpcy5zZXRQcml2YXRlS2V5SGV4KHUpO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKHUpe2lmKGsodSk9PT1mYWxzZSl7dGhyb3cgbmV3IGooXCJub3QgQVNOLjEgaGV4IHN0cmluZ1wiKX12YXIgdCxyLHY7dHJ5e3Q9bih1LDAsWzAsMF0sXCIwNlwiKTtyPW4odSwwLFswLDFdLFwiMDZcIik7dj1uKHUsMCxbMV0sXCIwM1wiKX1jYXRjaChzKXt0aHJvdyBuZXcgaihcIm1hbGZvcm1lZCBQS0NTIzggRUNDIHB1YmxpYyBrZXlcIil9dGhpcy5jdXJ2ZU5hbWU9ZChyKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93IG5ldyBqKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwiKX10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KHYpfTt0aGlzLnJlYWRDZXJ0UHViS2V5SGV4PWZ1bmN0aW9uKHQsdil7aWYoayh0KT09PWZhbHNlKXt0aHJvdyBuZXcgaihcIm5vdCBBU04uMSBoZXggc3RyaW5nXCIpfXZhciByLHU7dHJ5e3I9bih0LDAsWzAsNSwwLDFdLFwiMDZcIik7dT1uKHQsMCxbMCw1LDFdLFwiMDNcIil9Y2F0Y2gocyl7dGhyb3cgbmV3IGooXCJtYWxmb3JtZWQgWC41MDkgY2VydGlmaWNhdGUgRUNDIHB1YmxpYyBrZXlcIil9dGhpcy5jdXJ2ZU5hbWU9ZChyKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93IG5ldyBqKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwiKX10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KHUpfTtpZihlIT09dW5kZWZpbmVkKXtpZihlLmN1cnZlIT09dW5kZWZpbmVkKXt0aGlzLmN1cnZlTmFtZT1lLmN1cnZlfX1pZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhpcy5jdXJ2ZU5hbWU9Z310aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO2lmKGUhPT11bmRlZmluZWQpe2lmKGUucHJ2IT09dW5kZWZpbmVkKXt0aGlzLnNldFByaXZhdGVLZXlIZXgoZS5wcnYpfWlmKGUucHViIT09dW5kZWZpbmVkKXt0aGlzLnNldFB1YmxpY0tleUhleChlLnB1Yil9fX07S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXg9ZnVuY3Rpb24oYSl7dmFyIGI9S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXhJbkhleFJTKGEpO3ZhciBkPW5ldyBCaWdJbnRlZ2VyKGIuciwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYi5zLDE2KTtyZXR1cm57cjpkLHM6Y319O0tKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUz1mdW5jdGlvbihmKXt2YXIgaj1BU04xSEVYLGk9ai5nZXRDaGlsZElkeCxnPWouZ2V0VjtqLmNoZWNrU3RyaWN0REVSKGYsMCk7aWYoZi5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJzaWduYXR1cmUgaXMgbm90IGEgQVNOLjEgc2VxdWVuY2VcIil9dmFyIGg9aShmLDApO2lmKGgubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJzaWduYXR1cmUgc2hhbGwgaGF2ZSB0d28gZWxlbWVudHNcIil9dmFyIGU9aFswXTt2YXIgZD1oWzFdO2lmKGYuc3Vic3RyKGUsMikhPVwiMDJcIil7dGhyb3cgbmV3IEVycm9yKFwiMXN0IGl0ZW0gbm90IEFTTi4xIGludGVnZXJcIil9aWYoZi5zdWJzdHIoZCwyKSE9XCIwMlwiKXt0aHJvdyBuZXcgRXJyb3IoXCIybmQgaXRlbSBub3QgQVNOLjEgaW50ZWdlclwiKX12YXIgYz1nKGYsZSk7dmFyIGI9ZyhmLGQpO3JldHVybntyOmMsczpifX07S0pVUi5jcnlwdG8uRUNEU0EuYXNuMVNpZ1RvQ29uY2F0U2lnPWZ1bmN0aW9uKGMpe3ZhciBkPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUyhjKTt2YXIgYj1kLnI7dmFyIGE9ZC5zO2lmKGIuc3Vic3RyKDAsMik9PVwiMDBcIiYmKGIubGVuZ3RoJTMyKT09Mil7Yj1iLnN1YnN0cigyKX1pZihhLnN1YnN0cigwLDIpPT1cIjAwXCImJihhLmxlbmd0aCUzMik9PTIpe2E9YS5zdWJzdHIoMil9aWYoKGIubGVuZ3RoJTMyKT09MzApe2I9XCIwMFwiK2J9aWYoKGEubGVuZ3RoJTMyKT09MzApe2E9XCIwMFwiK2F9aWYoYi5sZW5ndGglMzIhPTApe3Rocm93XCJ1bmtub3duIEVDRFNBIHNpZyByIGxlbmd0aCBlcnJvclwifWlmKGEubGVuZ3RoJTMyIT0wKXt0aHJvd1widW5rbm93biBFQ0RTQSBzaWcgcyBsZW5ndGggZXJyb3JcIn1yZXR1cm4gYithfTtLSlVSLmNyeXB0by5FQ0RTQS5jb25jYXRTaWdUb0FTTjFTaWc9ZnVuY3Rpb24oYSl7aWYoKCgoYS5sZW5ndGgvMikqOCklKDE2KjgpKSE9MCl7dGhyb3dcInVua25vd24gRUNEU0EgY29uY2F0aW5hdGVkIHItcyBzaWcgIGxlbmd0aCBlcnJvclwifXZhciBjPWEuc3Vic3RyKDAsYS5sZW5ndGgvMik7dmFyIGI9YS5zdWJzdHIoYS5sZW5ndGgvMik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnKGMsYil9O0tKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnPWZ1bmN0aW9uKGIsYSl7dmFyIGQ9bmV3IEJpZ0ludGVnZXIoYiwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYSwxNik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWcoZCxjKX07S0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZz1mdW5jdGlvbihmLGQpe3ZhciBjPUtKVVIuYXNuMTt2YXIgYj1uZXcgYy5ERVJJbnRlZ2VyKHtiaWdpbnQ6Zn0pO3ZhciBhPW5ldyBjLkRFUkludGVnZXIoe2JpZ2ludDpkfSk7dmFyIGU9bmV3IGMuREVSU2VxdWVuY2Uoe2FycmF5OltiLGFdfSk7cmV0dXJuIGUuZ2V0RW5jb2RlZEhleCgpfTtLSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lPWZ1bmN0aW9uKGEpe2lmKGE9PT1cIjJiODEwNDAwMWZcIil7cmV0dXJuXCJzZWNwMTkyazFcIn1pZihhPT09XCIyYTg2NDhjZTNkMDMwMTA3XCIpe3JldHVyblwic2VjcDI1NnIxXCJ9aWYoYT09PVwiMmI4MTA0MDAwYVwiKXtyZXR1cm5cInNlY3AyNTZrMVwifWlmKGE9PT1cIjJiODEwNDAwMjFcIil7cmV0dXJuXCJzZWNwMjI0cjFcIn1pZihhPT09XCIyYjgxMDQwMDIyXCIpe3JldHVyblwic2VjcDM4NHIxXCJ9aWYoXCJ8c2VjcDI1NnIxfE5JU1QgUC0yNTZ8UC0yNTZ8cHJpbWUyNTZ2MXxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDI1NnIxXCJ9aWYoXCJ8c2VjcDI1NmsxfFwiLmluZGV4T2YoYSkhPT0tMSl7cmV0dXJuXCJzZWNwMjU2azFcIn1pZihcInxzZWNwMjI0cjF8TklTVCBQLTIyNHxQLTIyNHxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDIyNHIxXCJ9aWYoXCJ8c2VjcDM4NHIxfE5JU1QgUC0zODR8UC0zODR8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AzODRyMVwifXJldHVybiBudWxsfTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQj1uZXcgZnVuY3Rpb24oKXt2YXIgYj17fTt2YXIgYz17fTtmdW5jdGlvbiBhKGQpe3JldHVybiBuZXcgQmlnSW50ZWdlcihkLDE2KX10aGlzLmdldEJ5TmFtZT1mdW5jdGlvbihlKXt2YXIgZD1lO2lmKHR5cGVvZiBjW2RdIT1cInVuZGVmaW5lZFwiKXtkPWNbZV19aWYodHlwZW9mIGJbZF0hPVwidW5kZWZpbmVkXCIpe3JldHVybiBiW2RdfXRocm93XCJ1bnJlZ2lzdGVyZWQgRUMgY3VydmUgbmFtZTogXCIrZH07dGhpcy5yZWdpc3Q9ZnVuY3Rpb24oQSxsLG8sZyxtLGUsaixmLGssdSxkLHgpe2JbQV09e307dmFyIHM9YShvKTt2YXIgej1hKGcpO3ZhciB5PWEobSk7dmFyIHQ9YShlKTt2YXIgdz1hKGopO3ZhciByPW5ldyBFQ0N1cnZlRnAocyx6LHkpO3ZhciBxPXIuZGVjb2RlUG9pbnRIZXgoXCIwNFwiK2Yrayk7YltBXVtcIm5hbWVcIl09QTtiW0FdW1wia2V5bGVuXCJdPWw7YltBXVtcImN1cnZlXCJdPXI7YltBXVtcIkdcIl09cTtiW0FdW1wiblwiXT10O2JbQV1bXCJoXCJdPXc7YltBXVtcIm9pZFwiXT1kO2JbQV1bXCJpbmZvXCJdPXg7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe2NbdVt2XV09QX19fTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxMjhyMVwiLDEyOCxcIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiRTg3NTc5QzExMDc5RjQzREQ4MjQ5OTNDMkNFRTVFRDNcIixcIkZGRkZGRkZFMDAwMDAwMDA3NUEzMEQxQjkwMzhBMTE1XCIsXCIxXCIsXCIxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NlwiLFwiQ0Y1QUM4Mzk1QkFGRUIxM0MwMkRBMjkyRERFRDdBODNcIixbXSxcIlwiLFwic2VjcDEyOHIxIDogU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZFwiKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxNjBrMVwiLDE2MCxcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkFDNzNcIixcIjBcIixcIjdcIixcIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFCOEZBMTZERkFCOUFDQTE2QjZCM1wiLFwiMVwiLFwiM0I0QzM4MkNFMzdBQTE5MkE0MDE5RTc2MzAzNkY0RjVERDREN0VCQlwiLFwiOTM4Q0Y5MzUzMThGRENFRDZCQzI4Mjg2NTMxNzMzQzNGMDNDNEZFRVwiLFtdLFwiXCIsXCJzZWNwMTYwazEgOiBTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkXCIpO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE2MHIxXCIsMTYwLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGQ1wiLFwiMUM5N0JFRkM1NEJEN0E4QjY1QUNGODlGODFENEQ0QURDNTY1RkE0NVwiLFwiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUY0QzhGOTI3QUVEM0NBNzUyMjU3XCIsXCIxXCIsXCI0QTk2QjU2ODhFRjU3MzI4NDY2NDY5ODk2OEMzOEJCOTEzQ0JGQzgyXCIsXCIyM0E2Mjg1NTMxNjg5NDdENTlEQ0M5MTIwNDIzNTEzNzdBQzVGQjMyXCIsW10sXCJcIixcInNlY3AxNjByMSA6IFNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGRcIik7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkyazFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkVFMzdcIixcIjBcIixcIjNcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTI2RjJGQzE3MEY2OTQ2NkE3NERFRkQ4RFwiLFwiMVwiLFwiREI0RkYxMEVDMDU3RTlBRTI2QjA3RDAyODBCN0Y0MzQxREE1RDFCMUVBRTA2QzdEXCIsXCI5QjJGMkY2RDlDNTYyOEE3ODQ0MTYzRDAxNUJFODYzNDQwODJBQTg4RDk1RTJGOURcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkycjFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQ1wiLFwiNjQyMTA1MTlFNTlDODBFNzBGQTdFOUFCNzIyNDMwNDlGRUI4REVFQ0MxNDZCOUIxXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzFcIixcIjFcIixcIjE4OERBODBFQjAzMDkwRjY3Q0JGMjBFQjQzQTE4ODAwRjRGRjBBRkQ4MkZGMTAxMlwiLFwiMDcxOTJCOTVGRkM4REE3ODYzMTAxMUVENkIyNENERDU3M0Y5NzdBMTFFNzk0ODExXCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDIyNHIxXCIsMjI0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFXCIsXCJCNDA1MEE4NTBDMDRCM0FCRjU0MTMyNTY1MDQ0QjBCN0Q3QkZEOEJBMjcwQjM5NDMyMzU1RkZCNFwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0RcIixcIjFcIixcIkI3MEUwQ0JENkJCNEJGN0YzMjEzOTBCOTRBMDNDMUQzNTZDMjExMjIzNDMyODBENjExNUMxRDIxXCIsXCJCRDM3NjM4OEI1RjcyM0ZCNEMyMkRGRTZDRDQzNzVBMDVBMDc0NzY0NDRENTgxOTk4NTAwN0UzNFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AyNTZrMVwiLDI1NixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZDMkZcIixcIjBcIixcIjdcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDFcIixcIjFcIixcIjc5QkU2NjdFRjlEQ0JCQUM1NUEwNjI5NUNFODcwQjA3MDI5QkZDREIyRENFMjhEOTU5RjI4MTVCMTZGODE3OThcIixcIjQ4M0FEQTc3MjZBM0M0NjU1REE0RkJGQzBFMTEwOEE4RkQxN0I0NDhBNjg1NTQxOTlDNDdEMDhGRkIxMEQ0QjhcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMjU2cjFcIiwyNTYsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCI1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCXCIsXCJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxXCIsXCIxXCIsXCI2QjE3RDFGMkUxMkM0MjQ3RjhCQ0U2RTU2M0E0NDBGMjc3MDM3RDgxMkRFQjMzQTBGNEExMzk0NUQ4OThDMjk2XCIsXCI0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1XCIsW1wiTklTVCBQLTI1NlwiLFwiUC0yNTZcIixcInByaW1lMjU2djFcIl0pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDM4NHIxXCIsMzg0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkNcIixcIkIzMzEyRkE3RTIzRUU3RTQ5ODhFMDU2QkUzRjgyRDE5MTgxRDlDNkVGRTgxNDExMjAzMTQwODhGNTAxMzg3NUFDNjU2Mzk4RDhBMkVEMTlEMkE4NUM4RUREM0VDMkFFRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzc2MzREODFGNDM3MkRERjU4MUEwREIyNDhCMEE3N0FFQ0VDMTk2QUNDQzUyOTczXCIsXCIxXCIsXCJBQTg3Q0EyMkJFOEIwNTM3OEVCMUM3MUVGMzIwQUQ3NDZFMUQzQjYyOEJBNzlCOTg1OUY3NDFFMDgyNTQyQTM4NTUwMkYyNURCRjU1Mjk2QzNBNTQ1RTM4NzI3NjBBQjdcIixcIjM2MTdkZTRhOTYyNjJjNmY1ZDllOThiZjkyOTJkYzI5ZjhmNDFkYmQyODlhMTQ3Y2U5ZGEzMTEzYjVmMGI4YzAwYTYwYjFjZTFkN2U4MTlkN2E0MzFkN2M5MGVhMGU1ZlwiLFtcIk5JU1QgUC0zODRcIixcIlAtMzg0XCJdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3A1MjFyMVwiLDUyMSxcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiMDUxOTUzRUI5NjE4RTFDOUExRjkyOUEyMUEwQjY4NTQwRUVBMkRBNzI1Qjk5QjMxNUYzQjhCNDg5OTE4RUYxMDlFMTU2MTkzOTUxRUM3RTkzN0IxNjUyQzBCRDNCQjFCRjA3MzU3M0RGODgzRDJDMzRGMUVGNDUxRkQ0NkI1MDNGMDBcIixcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE1MTg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5XCIsXCIxXCIsXCJDNjg1OEUwNkI3MDQwNEU5Q0Q5RTNFQ0I2NjIzOTVCNDQyOUM2NDgxMzkwNTNGQjUyMUY4MjhBRjYwNkI0RDNEQkFBMTRCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZGQThERTMzNDhCM0MxODU2QTQyOUJGOTdFN0UzMUMyRTVCRDY2XCIsXCIwMTE4MzkyOTZhNzg5YTNiYzAwNDVjOGE1ZmI0MmM3ZDFiZDk5OGY1NDQ0OTU3OWI0NDY4MTdhZmJkMTcyNzNlNjYyYzk3ZWU3Mjk5NWVmNDI2NDBjNTUwYjkwMTNmYWQwNzYxMzUzYzcwODZhMjcyYzI0MDg4YmU5NDc2OWZkMTY2NTBcIixbXCJOSVNUIFAtNTIxXCIsXCJQLTUyMVwiXSk7XG52YXIgS0VZVVRJTD1mdW5jdGlvbigpe3ZhciBkPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gayhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgZT1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGsoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGE9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBrKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBrPWZ1bmN0aW9uKHMseCx1LHEpe3ZhciByPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeCk7dmFyIHc9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB0PXt9O3Qua2V5PXc7dC5pdj1wO3QuY2lwaGVydGV4dD1yO3ZhciB2PXMuZGVjcnlwdCh0LHcse2l2OnB9KTtyZXR1cm4gQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodil9O3ZhciBsPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gZyhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgbz1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGcoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGY9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBnKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBnPWZ1bmN0aW9uKHQseSx2LHEpe3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeSk7dmFyIHg9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB3PXQuZW5jcnlwdChzLHgse2l2OnB9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHcudG9TdHJpbmcoKSk7dmFyIHU9Q3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkocik7cmV0dXJuIHV9O3ZhciBpPXtcIkFFUy0yNTYtQ0JDXCI6e3Byb2M6ZCxlcHJvYzpsLGtleWxlbjozMixpdmxlbjoxNn0sXCJBRVMtMTkyLUNCQ1wiOntwcm9jOmQsZXByb2M6bCxrZXlsZW46MjQsaXZsZW46MTZ9LFwiQUVTLTEyOC1DQkNcIjp7cHJvYzpkLGVwcm9jOmwsa2V5bGVuOjE2LGl2bGVuOjE2fSxcIkRFUy1FREUzLUNCQ1wiOntwcm9jOmUsZXByb2M6byxrZXlsZW46MjQsaXZsZW46OH0sXCJERVMtQ0JDXCI6e3Byb2M6YSxlcHJvYzpmLGtleWxlbjo4LGl2bGVuOjh9fTt2YXIgYz1mdW5jdGlvbihwKXtyZXR1cm4gaVtwXVtcInByb2NcIl19O3ZhciBtPWZ1bmN0aW9uKHApe3ZhciByPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKHApO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHIpO3JldHVybiBxfTt2YXIgbj1mdW5jdGlvbih2KXt2YXIgdz17fTt2YXIgcT12Lm1hdGNoKG5ldyBSZWdFeHAoXCJERUstSW5mbzogKFteLF0rKSwoWzAtOUEtRmEtZl0rKVwiLFwibVwiKSk7aWYocSl7dy5jaXBoZXI9cVsxXTt3Lml2c2FsdD1xWzJdfXZhciBwPXYubWF0Y2gobmV3IFJlZ0V4cChcIi0tLS0tQkVHSU4gKFtBLVpdKykgUFJJVkFURSBLRVktLS0tLVwiKSk7aWYocCl7dy50eXBlPXBbMV19dmFyIHU9LTE7dmFyIHg9MDtpZih2LmluZGV4T2YoXCJcXHJcXG5cXHJcXG5cIikhPS0xKXt1PXYuaW5kZXhPZihcIlxcclxcblxcclxcblwiKTt4PTJ9aWYodi5pbmRleE9mKFwiXFxuXFxuXCIpIT0tMSl7dT12LmluZGV4T2YoXCJcXG5cXG5cIik7eD0xfXZhciB0PXYuaW5kZXhPZihcIi0tLS0tRU5EXCIpO2lmKHUhPS0xJiZ0IT0tMSl7dmFyIHI9di5zdWJzdHJpbmcodSt4KjIsdC14KTtyPXIucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3cuZGF0YT1yfXJldHVybiB3fTt2YXIgaj1mdW5jdGlvbihxLHkscCl7dmFyIHY9cC5zdWJzdHJpbmcoMCwxNik7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcj1DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh5KTt2YXIgdT1pW3FdW1wia2V5bGVuXCJdK2lbcV1bXCJpdmxlblwiXTt2YXIgeD1cIlwiO3ZhciB3PW51bGw7Zm9yKDs7KXt2YXIgcz1DcnlwdG9KUy5hbGdvLk1ENS5jcmVhdGUoKTtpZih3IT1udWxsKXtzLnVwZGF0ZSh3KX1zLnVwZGF0ZShyKTtzLnVwZGF0ZSh0KTt3PXMuZmluYWxpemUoKTt4PXgrQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodyk7aWYoeC5sZW5ndGg+PXUqMil7YnJlYWt9fXZhciB6PXt9O3oua2V5aGV4PXguc3Vic3RyKDAsaVtxXVtcImtleWxlblwiXSoyKTt6Lml2aGV4PXguc3Vic3RyKGlbcV1bXCJrZXlsZW5cIl0qMixpW3FdW1wiaXZsZW5cIl0qMik7cmV0dXJuIHp9O3ZhciBiPWZ1bmN0aW9uKHAsdixyLHcpe3ZhciBzPUNyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UocCk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7dmFyIHU9aVt2XVtcInByb2NcIl07dmFyIHQ9dShxLHIsdyk7cmV0dXJuIHR9O3ZhciBoPWZ1bmN0aW9uKHAscyxxLHUpe3ZhciByPWlbc11bXCJlcHJvY1wiXTt2YXIgdD1yKHAscSx1KTtyZXR1cm4gdH07cmV0dXJue3ZlcnNpb246XCIxLjAuMFwiLHBhcnNlUEtDUzVQRU06ZnVuY3Rpb24ocCl7cmV0dXJuIG4ocCl9LGdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdDpmdW5jdGlvbihxLHAscil7cmV0dXJuIGoocSxwLHIpfSxkZWNyeXB0S2V5QjY0OmZ1bmN0aW9uKHAscixxLHMpe3JldHVybiBiKHAscixxLHMpfSxnZXREZWNyeXB0ZWRLZXlIZXg6ZnVuY3Rpb24oeSx4KXt2YXIgcT1uKHkpO3ZhciB0PXEudHlwZTt2YXIgcj1xLmNpcGhlcjt2YXIgcD1xLml2c2FsdDt2YXIgcz1xLmRhdGE7dmFyIHc9aihyLHgscCk7dmFyIHY9dy5rZXloZXg7dmFyIHU9YihzLHIsdixwKTtyZXR1cm4gdX0sZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4OmZ1bmN0aW9uKHgscyxBLHQscil7dmFyIHA9XCJcIjtpZih0eXBlb2YgdD09XCJ1bmRlZmluZWRcInx8dD09bnVsbCl7dD1cIkFFUy0yNTYtQ0JDXCJ9aWYodHlwZW9mIGlbdF09PVwidW5kZWZpbmVkXCIpe3Rocm93IG5ldyBFcnJvcihcIktFWVVUSUwgdW5zdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIit0KX1pZih0eXBlb2Ygcj09XCJ1bmRlZmluZWRcInx8cj09bnVsbCl7dmFyIHY9aVt0XVtcIml2bGVuXCJdO3ZhciB1PW0odik7cj11LnRvVXBwZXJDYXNlKCl9dmFyIHo9aih0LEEscik7dmFyIHk9ei5rZXloZXg7dmFyIHc9aChzLHQseSxyKTt2YXIgcT13LnJlcGxhY2UoLyguezY0fSkvZyxcIiQxXFxyXFxuXCIpO3ZhciBwPVwiLS0tLS1CRUdJTiBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtwKz1cIlByb2MtVHlwZTogNCxFTkNSWVBURURcXHJcXG5cIjtwKz1cIkRFSy1JbmZvOiBcIit0K1wiLFwiK3IrXCJcXHJcXG5cIjtwKz1cIlxcclxcblwiO3ArPXE7cCs9XCJcXHJcXG4tLS0tLUVORCBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtyZXR1cm4gcH0scGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4OmZ1bmN0aW9uKHkpe3ZhciBCPUFTTjFIRVg7dmFyIHo9Qi5nZXRDaGlsZElkeDt2YXIgdz1CLmdldFY7dmFyIHQ9e307dmFyIHI9eih5LDApO2lmKHIubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwKS5pdGVtcyAhPSAyOiBcIityLmxlbmd0aCl9dC5jaXBoZXJ0ZXh0PXcoeSxyWzFdKTt2YXIgQT16KHksclswXSk7aWYoQS5sZW5ndGghPTIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMCkuaXRlbXMgIT0gMjogXCIrQS5sZW5ndGgpfWlmKHcoeSxBWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGRcIil7dGhyb3cgbmV3IEVycm9yKFwidGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJFUzJcIil9dmFyIHA9eih5LEFbMV0pO2lmKEEubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMSkuaXRlbXMgIT0gMjogXCIrcC5sZW5ndGgpfXZhciBxPXooeSxwWzFdKTtpZihxLmxlbmd0aCE9Mil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMSkuaXRlbXMgIT0gMjogXCIrcS5sZW5ndGgpfWlmKHcoeSxxWzBdKSE9XCIyYTg2NDg4NmY3MGQwMzA3XCIpe3Rocm93XCJ0aGlzIG9ubHkgc3VwcG9ydHMgVHJpcGxlREVTXCJ9dC5lbmNyeXB0aW9uU2NoZW1lQWxnPVwiVHJpcGxlREVTXCI7dC5lbmNyeXB0aW9uU2NoZW1lSVY9dyh5LHFbMV0pO3ZhciBzPXooeSxwWzBdKTtpZihzLmxlbmd0aCE9Mil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMCkuaXRlbXMgIT0gMjogXCIrcy5sZW5ndGgpfWlmKHcoeSxzWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGNcIil7dGhyb3cgbmV3IEVycm9yKFwidGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJLREYyXCIpfXZhciB4PXooeSxzWzFdKTtpZih4Lmxlbmd0aDwyKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMS4wLjEpLml0ZW1zIDwgMjogXCIreC5sZW5ndGgpfXQucGJrZGYyU2FsdD13KHkseFswXSk7dmFyIHU9dyh5LHhbMV0pO3RyeXt0LnBia2RmMkl0ZXI9cGFyc2VJbnQodSwxNil9Y2F0Y2godil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIGZvcm1hdCBwYmtkZjJJdGVyOiBcIit1KX1yZXR1cm4gdH0sZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtOmZ1bmN0aW9uKHUscCl7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1LnBia2RmMlNhbHQpO3ZhciBxPXUucGJrZGYySXRlcjt2YXIgcz1DcnlwdG9KUy5QQktERjIocCx0LHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOnF9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTtyZXR1cm4gcn0sX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24oeCx5KXt2YXIgcj1wZW10b2hleCh4LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpO3ZhciBwPXRoaXMucGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4KHIpO3ZhciB1PUtFWVVUSUwuZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtKHAseSk7dmFyIHY9e307di5jaXBoZXJ0ZXh0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5jaXBoZXJ0ZXh0KTt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUpO3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5lbmNyeXB0aW9uU2NoZW1lSVYpO3ZhciB3PUNyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KHYsdCx7aXY6c30pO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHcpO3JldHVybiBxfSxnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24ocyxxKXt2YXIgcD10aGlzLl9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNKHMscSk7dmFyIHI9dGhpcy5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7cmV0dXJuIHJ9LHBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXg6ZnVuY3Rpb24ocyl7dmFyIHY9QVNOMUhFWDt2YXIgdT12LmdldENoaWxkSWR4O3ZhciB0PXYuZ2V0Vjt2YXIgcT17fTtxLmFsZ3BhcmFtPW51bGw7aWYocy5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgcGxhaW4gUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDEpXCIpfXZhciByPXUocywwKTtpZihyLmxlbmd0aDwzKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgcGxhaW4gUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDIpXCIpfWlmKHMuc3Vic3RyKHJbMV0sMikhPVwiMzBcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDAzKVwiKX12YXIgcD11KHMsclsxXSk7aWYocC5sZW5ndGghPTIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwNClcIil9aWYocy5zdWJzdHIocFswXSwyKSE9XCIwNlwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDUpXCIpfXEuYWxnb2lkPXQocyxwWzBdKTtpZihzLnN1YnN0cihwWzFdLDIpPT1cIjA2XCIpe3EuYWxncGFyYW09dChzLHBbMV0pfWlmKHMuc3Vic3RyKHJbMl0sMikhPVwiMDRcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDA2KVwiKX1xLmtleWlkeD12LmdldFZpZHgocyxyWzJdKTtyZXR1cm4gcX0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNOmZ1bmN0aW9uKHEpe3ZhciBwPXBlbXRvaGV4KHEsXCJQUklWQVRFIEtFWVwiKTt2YXIgcj10aGlzLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleChwKTtyZXR1cm4gcn0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4OmZ1bmN0aW9uKHApe3ZhciBxPXRoaXMucGFyc2VQbGFpblByaXZhdGVQS0NTOEhleChwKTt2YXIgcjtpZihxLmFsZ29pZD09XCIyYTg2NDg4NmY3MGQwMTAxMDFcIil7cj1uZXcgUlNBS2V5KCl9ZWxzZXtpZihxLmFsZ29pZD09XCIyYTg2NDhjZTM4MDQwMVwiKXtyPW5ldyBLSlVSLmNyeXB0by5EU0EoKX1lbHNle2lmKHEuYWxnb2lkPT1cIjJhODY0OGNlM2QwMjAxXCIpe3I9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBwcml2YXRlIGtleSBhbGdvcml0aG1cIil9fX1yLnJlYWRQS0NTOFBydktleUhleChwKTtyZXR1cm4gcn0sX2dldEtleUZyb21QdWJsaWNQS0NTOEhleDpmdW5jdGlvbihxKXt2YXIgcDt2YXIgcj1BU04xSEVYLmdldFZieUxpc3QocSwwLFswLDBdLFwiMDZcIik7aWYocj09PVwiMmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3A9bmV3IFJTQUtleSgpfWVsc2V7aWYocj09PVwiMmE4NjQ4Y2UzODA0MDFcIil7cD1uZXcgS0pVUi5jcnlwdG8uRFNBKCl9ZWxzZXtpZihyPT09XCIyYTg2NDhjZTNkMDIwMVwiKXtwPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSgpfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgUEtDUyM4IHB1YmxpYyBrZXkgaGV4XCIpfX19cC5yZWFkUEtDUzhQdWJLZXlIZXgocSk7cmV0dXJuIHB9LHBhcnNlUHVibGljUmF3UlNBS2V5SGV4OmZ1bmN0aW9uKHIpe3ZhciB1PUFTTjFIRVg7dmFyIHQ9dS5nZXRDaGlsZElkeDt2YXIgcz11LmdldFY7dmFyIHA9e307aWYoci5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMSlcIil9dmFyIHE9dChyLDApO2lmKHEubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMilcIil9aWYoci5zdWJzdHIocVswXSwyKSE9XCIwMlwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMylcIil9cC5uPXMocixxWzBdKTtpZihyLnN1YnN0cihxWzFdLDIpIT1cIjAyXCIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDA0KVwiKX1wLmU9cyhyLHFbMV0pO3JldHVybiBwfSxwYXJzZVB1YmxpY1BLQ1M4SGV4OmZ1bmN0aW9uKHQpe3ZhciB2PUFTTjFIRVg7dmFyIHU9di5nZXRDaGlsZElkeDt2YXIgcz12LmdldFY7dmFyIHE9e307cS5hbGdwYXJhbT1udWxsO3ZhciByPXUodCwwKTtpZihyLmxlbmd0aCE9Mil7dGhyb3cgbmV3IEVycm9yKFwib3V0ZXIgREVSU2VxdWVuY2Ugc2hhbGwgaGF2ZSAyIGVsZW1lbnRzOiBcIityLmxlbmd0aCl9dmFyIHc9clswXTtpZih0LnN1YnN0cih3LDIpIT1cIjMwXCIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAxKVwiKX12YXIgcD11KHQsdyk7aWYocC5sZW5ndGghPTIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAyKVwiKX1pZih0LnN1YnN0cihwWzBdLDIpIT1cIjA2XCIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAzKVwiKX1xLmFsZ29pZD1zKHQscFswXSk7aWYodC5zdWJzdHIocFsxXSwyKT09XCIwNlwiKXtxLmFsZ3BhcmFtPXModCxwWzFdKX1lbHNle2lmKHQuc3Vic3RyKHBbMV0sMik9PVwiMzBcIil7cS5hbGdwYXJhbT17fTtxLmFsZ3BhcmFtLnA9di5nZXRWYnlMaXN0KHQscFsxXSxbMF0sXCIwMlwiKTtxLmFsZ3BhcmFtLnE9di5nZXRWYnlMaXN0KHQscFsxXSxbMV0sXCIwMlwiKTtxLmFsZ3BhcmFtLmc9di5nZXRWYnlMaXN0KHQscFsxXSxbMl0sXCIwMlwiKX19aWYodC5zdWJzdHIoclsxXSwyKSE9XCIwM1wiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwNClcIil9cS5rZXk9cyh0LHJbMV0pLnN1YnN0cigyKTtyZXR1cm4gcX0sfX0oKTtLRVlVVElMLmdldEtleT1mdW5jdGlvbihsLGssbil7dmFyIEc9QVNOMUhFWCxMPUcuZ2V0Q2hpbGRJZHgsdj1HLmdldFYsZD1HLmdldFZieUxpc3QsYz1LSlVSLmNyeXB0byxpPWMuRUNEU0EsQz1jLkRTQSx3PVJTQUtleSxNPXBlbXRvaGV4LEY9S0VZVVRJTDtpZih0eXBlb2YgdyE9XCJ1bmRlZmluZWRcIiYmbCBpbnN0YW5jZW9mIHcpe3JldHVybiBsfWlmKHR5cGVvZiBpIT1cInVuZGVmaW5lZFwiJiZsIGluc3RhbmNlb2YgaSl7cmV0dXJuIGx9aWYodHlwZW9mIEMhPVwidW5kZWZpbmVkXCImJmwgaW5zdGFuY2VvZiBDKXtyZXR1cm4gbH1pZihsLmN1cnZlIT09dW5kZWZpbmVkJiZsLnh5IT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3JldHVybiBuZXcgaSh7cHViOmwueHksY3VydmU6bC5jdXJ2ZX0pfWlmKGwuY3VydmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7cmV0dXJuIG5ldyBpKHtwcnY6bC5kLGN1cnZlOmwuY3VydmV9KX1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhsLm4sbC5lKTtyZXR1cm4gUH1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCYmbC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZHAhPT11bmRlZmluZWQmJmwuZHEhPT11bmRlZmluZWQmJmwuY28hPT11bmRlZmluZWQmJmwucWk9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlRXgobC5uLGwuZSxsLmQsbC5wLGwucSxsLmRwLGwuZHEsbC5jbyk7cmV0dXJuIFB9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQmJmwucD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGUobC5uLGwuZSxsLmQpO3JldHVybiBQfWlmKGwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmchPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC54PT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgQygpO1Auc2V0UHVibGljKGwucCxsLnEsbC5nLGwueSk7cmV0dXJuIFB9aWYobC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZyE9PXVuZGVmaW5lZCYmbC55IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQpe3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKGwucCxsLnEsbC5nLGwueSxsLngpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkJiZsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5kcCE9PXVuZGVmaW5lZCYmbC5kcSE9PXVuZGVmaW5lZCYmbC5xaSE9PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGVFeChiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSxiNjR1dG9oZXgobC5wKSxiNjR1dG9oZXgobC5xKSxiNjR1dG9oZXgobC5kcCksYjY0dXRvaGV4KGwuZHEpLGI2NHV0b2hleChsLnFpKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZShiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7ai5zZXRQdWJsaWNLZXlIZXgodSk7cmV0dXJuIGp9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7dmFyIGI9KFwiMDAwMDAwMDAwMFwiK2I2NHV0b2hleChsLmQpKS5zbGljZSgtdCk7ai5zZXRQdWJsaWNLZXlIZXgodSk7ai5zZXRQcml2YXRlS2V5SGV4KGIpO3JldHVybiBqfWlmKG49PT1cInBrY3M1cHJ2XCIpe3ZhciBKPWwsRz1BU04xSEVYLE4sUDtOPUwoSiwwKTtpZihOLmxlbmd0aD09PTkpe1A9bmV3IHcoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle2lmKE4ubGVuZ3RoPT09Nil7UD1uZXcgQygpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7aWYoTi5sZW5ndGg+MiYmSi5zdWJzdHIoTlsxXSwyKT09PVwiMDRcIil7UD1uZXcgaSgpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgUEtDUyMxLzUgaGV4YWRlY2ltYWwga2V5XCIpfX19cmV0dXJuIFB9aWYobj09PVwicGtjczhwcnZcIil7dmFyIFA9Ri5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgobCk7cmV0dXJuIFB9aWYobj09PVwicGtjczhwdWJcIil7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChsKX1pZihuPT09XCJ4NTA5cHViXCIpe3JldHVybiBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGwpfWlmKGwuaW5kZXhPZihcIi1FTkQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFg1MDkgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFRSVVNURUQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xKXtyZXR1cm4gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydFBFTShsKX1pZihsLmluZGV4T2YoXCItRU5EIFBVQkxJQyBLRVktXCIpIT0tMSl7dmFyIE89cGVtdG9oZXgobCxcIlBVQkxJQyBLRVlcIik7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChPKX1pZihsLmluZGV4T2YoXCItRU5EIFJTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKT09LTEpe3ZhciBtPU0obCxcIlJTQSBQUklWQVRFIEtFWVwiKTtyZXR1cm4gRi5nZXRLZXkobSxudWxsLFwicGtjczVwcnZcIil9aWYobC5pbmRleE9mKFwiLUVORCBEU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgST1NKGwsXCJEU0EgUFJJVkFURSBLRVlcIik7dmFyIEU9ZChJLDAsWzFdLFwiMDJcIik7dmFyIEQ9ZChJLDAsWzJdLFwiMDJcIik7dmFyIEs9ZChJLDAsWzNdLFwiMDJcIik7dmFyIHI9ZChJLDAsWzRdLFwiMDJcIik7dmFyIHM9ZChJLDAsWzVdLFwiMDJcIik7dmFyIFA9bmV3IEMoKTtQLnNldFByaXZhdGUobmV3IEJpZ0ludGVnZXIoRSwxNiksbmV3IEJpZ0ludGVnZXIoRCwxNiksbmV3IEJpZ0ludGVnZXIoSywxNiksbmV3IEJpZ0ludGVnZXIociwxNiksbmV3IEJpZ0ludGVnZXIocywxNikpO3JldHVybiBQfWlmKGwuaW5kZXhPZihcIi1FTkQgRUMgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgbT1NKGwsXCJFQyBQUklWQVRFIEtFWVwiKTtyZXR1cm4gRi5nZXRLZXkobSxudWxsLFwicGtjczVwcnZcIil9aWYobC5pbmRleE9mKFwiLUVORCBQUklWQVRFIEtFWS1cIikhPS0xKXtyZXR1cm4gRi5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU0obCl9aWYobC5pbmRleE9mKFwiLUVORCBSU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgbz1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBIPW5ldyBSU0FLZXkoKTtILnJlYWRQS0NTNVBydktleUhleChvKTtyZXR1cm4gSH1pZihsLmluZGV4T2YoXCItRU5EIEVDIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpIT0tMSl7dmFyIEk9Ri5nZXREZWNyeXB0ZWRLZXlIZXgobCxrKTt2YXIgUD1kKEksMCxbMV0sXCIwNFwiKTt2YXIgZj1kKEksMCxbMiwwXSxcIjA2XCIpO3ZhciBBPWQoSSwwLFszLDBdLFwiMDNcIikuc3Vic3RyKDIpO3ZhciBlPVwiXCI7aWYoS0pVUi5jcnlwdG8uT0lELm9pZGhleDJuYW1lW2ZdIT09dW5kZWZpbmVkKXtlPUtKVVIuY3J5cHRvLk9JRC5vaWRoZXgybmFtZVtmXX1lbHNle3Rocm93IG5ldyBFcnJvcihcInVuZGVmaW5lZCBPSUQoaGV4KSBpbiBLSlVSLmNyeXB0by5PSUQ6IFwiK2YpfXZhciBqPW5ldyBpKHtjdXJ2ZTplfSk7ai5zZXRQdWJsaWNLZXlIZXgoQSk7ai5zZXRQcml2YXRlS2V5SGV4KFApO2ouaXNQdWJsaWM9ZmFsc2U7cmV0dXJuIGp9aWYobC5pbmRleE9mKFwiLUVORCBEU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgST1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBFPWQoSSwwLFsxXSxcIjAyXCIpO3ZhciBEPWQoSSwwLFsyXSxcIjAyXCIpO3ZhciBLPWQoSSwwLFszXSxcIjAyXCIpO3ZhciByPWQoSSwwLFs0XSxcIjAyXCIpO3ZhciBzPWQoSSwwLFs1XSxcIjAyXCIpO3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKG5ldyBCaWdJbnRlZ2VyKEUsMTYpLG5ldyBCaWdJbnRlZ2VyKEQsMTYpLG5ldyBCaWdJbnRlZ2VyKEssMTYpLG5ldyBCaWdJbnRlZ2VyKHIsMTYpLG5ldyBCaWdJbnRlZ2VyKHMsMTYpKTtyZXR1cm4gUH1pZihsLmluZGV4T2YoXCItRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS1cIikhPS0xKXtyZXR1cm4gRi5nZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU0obCxrKX10aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGFyZ3VtZW50XCIpfTtLRVlVVElMLmdlbmVyYXRlS2V5cGFpcj1mdW5jdGlvbihhLGMpe2lmKGE9PVwiUlNBXCIpe3ZhciBiPWM7dmFyIGg9bmV3IFJTQUtleSgpO2guZ2VuZXJhdGUoYixcIjEwMDAxXCIpO2guaXNQcml2YXRlPXRydWU7aC5pc1B1YmxpYz10cnVlO3ZhciBmPW5ldyBSU0FLZXkoKTt2YXIgZT1oLm4udG9TdHJpbmcoMTYpO3ZhciBpPWguZS50b1N0cmluZygxNik7Zi5zZXRQdWJsaWMoZSxpKTtmLmlzUHJpdmF0ZT1mYWxzZTtmLmlzUHVibGljPXRydWU7dmFyIGs9e307ay5wcnZLZXlPYmo9aDtrLnB1YktleU9iaj1mO3JldHVybiBrfWVsc2V7aWYoYT09XCJFQ1wiKXt2YXIgZD1jO3ZhciBnPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6ZH0pO3ZhciBqPWcuZ2VuZXJhdGVLZXlQYWlySGV4KCk7dmFyIGg9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTpkfSk7aC5zZXRQdWJsaWNLZXlIZXgoai5lY3B1YmhleCk7aC5zZXRQcml2YXRlS2V5SGV4KGouZWNwcnZoZXgpO2guaXNQcml2YXRlPXRydWU7aC5pc1B1YmxpYz1mYWxzZTt2YXIgZj1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOmR9KTtmLnNldFB1YmxpY0tleUhleChqLmVjcHViaGV4KTtmLmlzUHJpdmF0ZT1mYWxzZTtmLmlzUHVibGljPXRydWU7dmFyIGs9e307ay5wcnZLZXlPYmo9aDtrLnB1YktleU9iaj1mO3JldHVybiBrfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBhbGdvcml0aG06IFwiK2EpfX19O0tFWVVUSUwuZ2V0UEVNPWZ1bmN0aW9uKGIsRCx5LG0scSxqKXt2YXIgRj1LSlVSLGs9Ri5hc24xLHo9ay5ERVJPYmplY3RJZGVudGlmaWVyLGY9ay5ERVJJbnRlZ2VyLGw9ay5BU04xVXRpbC5uZXdPYmplY3QsYT1rLng1MDksQz1hLlN1YmplY3RQdWJsaWNLZXlJbmZvLGU9Ri5jcnlwdG8sdT1lLkRTQSxyPWUuRUNEU0Esbj1SU0FLZXk7ZnVuY3Rpb24gQShzKXt2YXIgRz1sKHtzZXE6W3tcImludFwiOjB9LHtcImludFwiOntiaWdpbnQ6cy5ufX0se1wiaW50XCI6cy5lfSx7XCJpbnRcIjp7YmlnaW50OnMuZH19LHtcImludFwiOntiaWdpbnQ6cy5wfX0se1wiaW50XCI6e2JpZ2ludDpzLnF9fSx7XCJpbnRcIjp7YmlnaW50OnMuZG1wMX19LHtcImludFwiOntiaWdpbnQ6cy5kbXExfX0se1wiaW50XCI6e2JpZ2ludDpzLmNvZWZmfX1dfSk7cmV0dXJuIEd9ZnVuY3Rpb24gQihHKXt2YXIgcz1sKHtzZXE6W3tcImludFwiOjF9LHtvY3RzdHI6e2hleDpHLnBydktleUhleH19LHt0YWc6W1wiYTBcIix0cnVlLHtvaWQ6e25hbWU6Ry5jdXJ2ZU5hbWV9fV19LHt0YWc6W1wiYTFcIix0cnVlLHtiaXRzdHI6e2hleDpcIjAwXCIrRy5wdWJLZXlIZXh9fV19XX0pO3JldHVybiBzfWZ1bmN0aW9uIHgocyl7dmFyIEc9bCh7c2VxOlt7XCJpbnRcIjowfSx7XCJpbnRcIjp7YmlnaW50OnMucH19LHtcImludFwiOntiaWdpbnQ6cy5xfX0se1wiaW50XCI6e2JpZ2ludDpzLmd9fSx7XCJpbnRcIjp7YmlnaW50OnMueX19LHtcImludFwiOntiaWdpbnQ6cy54fX1dfSk7cmV0dXJuIEd9aWYoKChuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2Ygbil8fCh1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSl8fChyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgcikpJiZiLmlzUHVibGljPT10cnVlJiYoRD09PXVuZGVmaW5lZHx8RD09XCJQS0NTOFBVQlwiKSl7dmFyIEU9bmV3IEMoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJQVUJMSUMgS0VZXCIpfWlmKEQ9PVwiUEtDUzFQUlZcIiYmbiE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPUEoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJSU0EgUFJJVkFURSBLRVlcIil9aWYoRD09XCJQS0NTMVBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGk9bmV3IHooe25hbWU6Yi5jdXJ2ZU5hbWV9KTt2YXIgdj1pLmdldEVuY29kZWRIZXgoKTt2YXIgaD1CKGIpO3ZhciB0PWguZ2V0RW5jb2RlZEhleCgpO3ZhciBwPVwiXCI7cCs9aGV4dG9wZW0odixcIkVDIFBBUkFNRVRFUlNcIik7cCs9aGV4dG9wZW0odCxcIkVDIFBSSVZBVEUgS0VZXCIpO3JldHVybiBwfWlmKEQ9PVwiUEtDUzFQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPXgoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJEU0EgUFJJVkFURSBLRVlcIil9aWYoRD09XCJQS0NTNVBSVlwiJiZuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QShiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiUlNBXCIsdyx5LG0sail9aWYoRD09XCJQS0NTNVBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QihiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiRUNcIix3LHksbSxqKX1pZihEPT1cIlBLQ1M1UFJWXCImJnUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1JiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT14KGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJEU0FcIix3LHksbSxqKX12YXIgbz1mdW5jdGlvbihHLHMpe3ZhciBJPWMoRyxzKTt2YXIgSD1uZXcgbCh7c2VxOlt7c2VxOlt7b2lkOntuYW1lOlwicGtjczVQQkVTMlwifX0se3NlcTpbe3NlcTpbe29pZDp7bmFtZTpcInBrY3M1UEJLREYyXCJ9fSx7c2VxOlt7b2N0c3RyOntoZXg6SS5wYmtkZjJTYWx0fX0se1wiaW50XCI6SS5wYmtkZjJJdGVyfV19XX0se3NlcTpbe29pZDp7bmFtZTpcImRlcy1FREUzLUNCQ1wifX0se29jdHN0cjp7aGV4OkkuZW5jcnlwdGlvblNjaGVtZUlWfX1dfV19XX0se29jdHN0cjp7aGV4OkkuY2lwaGVydGV4dH19XX0pO3JldHVybiBILmdldEVuY29kZWRIZXgoKX07dmFyIGM9ZnVuY3Rpb24oTixPKXt2YXIgSD0xMDA7dmFyIE09Q3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oOCk7dmFyIEw9XCJERVMtRURFMy1DQkNcIjt2YXIgcz1DcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbSg4KTt2YXIgST1DcnlwdG9KUy5QQktERjIoTyxNLHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOkh9KTt2YXIgSj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKE4pO3ZhciBLPUNyeXB0b0pTLlRyaXBsZURFUy5lbmNyeXB0KEosSSx7aXY6c30pK1wiXCI7dmFyIEc9e307Ry5jaXBoZXJ0ZXh0PUs7Ry5wYmtkZjJTYWx0PUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KE0pO0cucGJrZGYySXRlcj1IO0cuZW5jcnlwdGlvblNjaGVtZUFsZz1MO0cuZW5jcnlwdGlvblNjaGVtZUlWPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHMpO3JldHVybiBHfTtpZihEPT1cIlBLQ1M4UFJWXCImJm4hPXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1BKGIpO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcInJzYUVuY3J5cHRpb25cIn19LHtcIm51bGxcIjp0cnVlfV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19aWYoRD09XCJQS0NTOFBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPW5ldyBsKHtzZXE6W3tcImludFwiOjF9LHtvY3RzdHI6e2hleDpiLnBydktleUhleH19LHt0YWc6W1wiYTFcIix0cnVlLHtiaXRzdHI6e2hleDpcIjAwXCIrYi5wdWJLZXlIZXh9fV19XX0pO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcImVjUHVibGljS2V5XCJ9fSx7b2lkOntuYW1lOmIuY3VydmVOYW1lfX1dfSx7b2N0c3RyOntoZXg6ZH19XX0pO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpe3JldHVybiBoZXh0b3BlbSh3LFwiUFJJVkFURSBLRVlcIil9ZWxzZXt2YXIgdD1vKHcseSk7cmV0dXJuIGhleHRvcGVtKHQsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIil9fWlmKEQ9PVwiUEtDUzhQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1uZXcgZih7YmlnaW50OmIueH0pO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcImRzYVwifX0se3NlcTpbe1wiaW50XCI6e2JpZ2ludDpiLnB9fSx7XCJpbnRcIjp7YmlnaW50OmIucX19LHtcImludFwiOntiaWdpbnQ6Yi5nfX1dfV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgb2JqZWN0IG5vciBmb3JtYXRcIil9O0tFWVVUSUwuZ2V0S2V5RnJvbUNTUlBFTT1mdW5jdGlvbihiKXt2YXIgYT1wZW10b2hleChiLFwiQ0VSVElGSUNBVEUgUkVRVUVTVFwiKTt2YXIgYz1LRVlVVElMLmdldEtleUZyb21DU1JIZXgoYSk7cmV0dXJuIGN9O0tFWVVUSUwuZ2V0S2V5RnJvbUNTUkhleD1mdW5jdGlvbihhKXt2YXIgYz1LRVlVVElMLnBhcnNlQ1NSSGV4KGEpO3ZhciBiPUtFWVVUSUwuZ2V0S2V5KGMucDhwdWJrZXloZXgsbnVsbCxcInBrY3M4cHViXCIpO3JldHVybiBifTtLRVlVVElMLnBhcnNlQ1NSSGV4PWZ1bmN0aW9uKGQpe3ZhciBpPUFTTjFIRVg7dmFyIGY9aS5nZXRDaGlsZElkeDt2YXIgYz1pLmdldFRMVjt2YXIgYj17fTt2YXIgZz1kO2lmKGcuc3Vic3RyKDAsMikhPVwiMzBcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIENTUihjb2RlOjAwMSlcIil9dmFyIGU9ZihnLDApO2lmKGUubGVuZ3RoPDEpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBDU1IoY29kZTowMDIpXCIpfWlmKGcuc3Vic3RyKGVbMF0sMikhPVwiMzBcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIENTUihjb2RlOjAwMylcIil9dmFyIGE9ZihnLGVbMF0pO2lmKGEubGVuZ3RoPDMpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBDU1IoY29kZTowMDQpXCIpfWIucDhwdWJrZXloZXg9YyhnLGFbMl0pO3JldHVybiBifTtLRVlVVElMLmdldEtleUlEPWZ1bmN0aW9uKGYpe3ZhciBjPUtFWVVUSUw7dmFyIGU9QVNOMUhFWDtpZih0eXBlb2YgZj09PVwic3RyaW5nXCImJmYuaW5kZXhPZihcIkJFR0lOIFwiKSE9LTEpe2Y9Yy5nZXRLZXkoZil9dmFyIGQ9cGVtdG9oZXgoYy5nZXRQRU0oZikpO3ZhciBiPWUuZ2V0SWR4YnlMaXN0KGQsMCxbMV0pO3ZhciBhPWUuZ2V0VihkLGIpLnN1YnN0cmluZygyKTtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGEsXCJzaGExXCIpfTtLRVlVVElMLmdldEpXS0Zyb21LZXk9ZnVuY3Rpb24oZCl7dmFyIGI9e307aWYoZCBpbnN0YW5jZW9mIFJTQUtleSYmZC5pc1ByaXZhdGUpe2Iua3R5PVwiUlNBXCI7Yi5uPWhleHRvYjY0dShkLm4udG9TdHJpbmcoMTYpKTtiLmU9aGV4dG9iNjR1KGQuZS50b1N0cmluZygxNikpO2IuZD1oZXh0b2I2NHUoZC5kLnRvU3RyaW5nKDE2KSk7Yi5wPWhleHRvYjY0dShkLnAudG9TdHJpbmcoMTYpKTtiLnE9aGV4dG9iNjR1KGQucS50b1N0cmluZygxNikpO2IuZHA9aGV4dG9iNjR1KGQuZG1wMS50b1N0cmluZygxNikpO2IuZHE9aGV4dG9iNjR1KGQuZG1xMS50b1N0cmluZygxNikpO2IucWk9aGV4dG9iNjR1KGQuY29lZmYudG9TdHJpbmcoMTYpKTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBSU0FLZXkmJmQuaXNQdWJsaWMpe2Iua3R5PVwiUlNBXCI7Yi5uPWhleHRvYjY0dShkLm4udG9TdHJpbmcoMTYpKTtiLmU9aGV4dG9iNjR1KGQuZS50b1N0cmluZygxNikpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBJiZkLmlzUHJpdmF0ZSl7dmFyIGE9ZC5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lKCk7aWYoYSE9PVwiUC0yNTZcIiYmYSE9PVwiUC0zODRcIil7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithKX12YXIgYz1kLmdldFB1YmxpY0tleVhZSGV4KCk7Yi5rdHk9XCJFQ1wiO2IuY3J2PWE7Yi54PWhleHRvYjY0dShjLngpO2IueT1oZXh0b2I2NHUoYy55KTtiLmQ9aGV4dG9iNjR1KGQucHJ2S2V5SGV4KTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSYmZC5pc1B1YmxpYyl7dmFyIGE9ZC5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lKCk7aWYoYSE9PVwiUC0yNTZcIiYmYSE9PVwiUC0zODRcIil7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithKX12YXIgYz1kLmdldFB1YmxpY0tleVhZSGV4KCk7Yi5rdHk9XCJFQ1wiO2IuY3J2PWE7Yi54PWhleHRvYjY0dShjLngpO2IueT1oZXh0b2I2NHUoYy55KTtyZXR1cm4gYn19fX10aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGtleSBvYmplY3RcIil9O1xuUlNBS2V5LmdldFBvc0FycmF5T2ZDaGlsZHJlbkZyb21IZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIEFTTjFIRVguZ2V0Q2hpbGRJZHgoYSwwKX07UlNBS2V5LmdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleD1mdW5jdGlvbihmKXt2YXIgbj1BU04xSEVYO3ZhciBpPW4uZ2V0Vjt2YXIgaz1SU0FLZXkuZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleChmKTt2YXIgZT1pKGYsa1swXSk7dmFyIGo9aShmLGtbMV0pO3ZhciBiPWkoZixrWzJdKTt2YXIgYz1pKGYsa1szXSk7dmFyIGg9aShmLGtbNF0pO3ZhciBnPWkoZixrWzVdKTt2YXIgbT1pKGYsa1s2XSk7dmFyIGw9aShmLGtbN10pO3ZhciBkPWkoZixrWzhdKTt2YXIgaz1uZXcgQXJyYXkoKTtrLnB1c2goZSxqLGIsYyxoLGcsbSxsLGQpO3JldHVybiBrfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZz1mdW5jdGlvbihkKXt2YXIgYz1wZW10b2hleChkKTt2YXIgYj1SU0FLZXkuZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4KGMpO3RoaXMuc2V0UHJpdmF0ZUV4KGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10sYls4XSl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M1UHJ2S2V5SGV4PWZ1bmN0aW9uKGMpe3ZhciBiPVJTQUtleS5nZXRIZXhWYWx1ZUFycmF5T2ZDaGlsZHJlbkZyb21IZXgoYyk7dGhpcy5zZXRQcml2YXRlRXgoYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdLGJbNl0sYls3XSxiWzhdKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzhQcnZLZXlIZXg9ZnVuY3Rpb24oZSl7dmFyIGMsaSxrLGIsYSxmLGQsajt2YXIgbT1BU04xSEVYO3ZhciBsPW0uZ2V0VmJ5TGlzdEV4O2lmKG0uaXNBU04xSEVYKGUpPT09ZmFsc2Upe3Rocm93IG5ldyBFcnJvcihcIm5vdCBBU04uMSBoZXggc3RyaW5nXCIpfXRyeXtjPWwoZSwwLFsyLDAsMV0sXCIwMlwiKTtpPWwoZSwwLFsyLDAsMl0sXCIwMlwiKTtrPWwoZSwwLFsyLDAsM10sXCIwMlwiKTtiPWwoZSwwLFsyLDAsNF0sXCIwMlwiKTthPWwoZSwwLFsyLDAsNV0sXCIwMlwiKTtmPWwoZSwwLFsyLDAsNl0sXCIwMlwiKTtkPWwoZSwwLFsyLDAsN10sXCIwMlwiKTtqPWwoZSwwLFsyLDAsOF0sXCIwMlwiKX1jYXRjaChnKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUEtDUyM4IHBsYWluIFJTQSBwcml2YXRlIGtleVwiKX10aGlzLnNldFByaXZhdGVFeChjLGksayxiLGEsZixkLGopfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTNVB1YktleUhleD1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBiPWUuZ2V0VjtpZihlLmlzQVNOMUhFWChjKT09PWZhbHNlKXt0aHJvdyBuZXcgRXJyb3IoXCJrZXlIZXggaXMgbm90IEFTTi4xIGhleCBzdHJpbmdcIil9dmFyIGE9ZS5nZXRDaGlsZElkeChjLDApO2lmKGEubGVuZ3RoIT09Mnx8Yy5zdWJzdHIoYVswXSwyKSE9PVwiMDJcInx8Yy5zdWJzdHIoYVsxXSwyKSE9PVwiMDJcIil7dGhyb3cgbmV3IEVycm9yKFwid3JvbmcgaGV4IGZvciBQS0NTIzUgcHVibGljIGtleVwiKX12YXIgZj1iKGMsYVswXSk7dmFyIGQ9YihjLGFbMV0pO3RoaXMuc2V0UHVibGljKGYsZCl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKGIpe3ZhciBjPUFTTjFIRVg7aWYoYy5pc0FTTjFIRVgoYik9PT1mYWxzZSl7dGhyb3cgbmV3IEVycm9yKFwibm90IEFTTi4xIGhleCBzdHJpbmdcIil9aWYoYy5nZXRUTFZieUxpc3RFeChiLDAsWzAsMF0pIT09XCIwNjA5MmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3Rocm93IG5ldyBFcnJvcihcIm5vdCBQS0NTOCBSU0EgcHVibGljIGtleVwiKX12YXIgYT1jLmdldFRMVmJ5TGlzdEV4KGIsMCxbMSwwXSk7dGhpcy5yZWFkUEtDUzVQdWJLZXlIZXgoYSl9O1JTQUtleS5wcm90b3R5cGUucmVhZENlcnRQdWJLZXlIZXg9ZnVuY3Rpb24oYixkKXt2YXIgYSxjO2E9bmV3IFg1MDkoKTthLnJlYWRDZXJ0SGV4KGIpO2M9YS5nZXRQdWJsaWNLZXlIZXgoKTt0aGlzLnJlYWRQS0NTOFB1YktleUhleChjKX07XG52YXIgX1JFX0hFWERFQ09OTFk9bmV3IFJlZ0V4cChcIlteMC05YS1mXVwiLFwiZ2lcIik7ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyhkLGUsYSl7dmFyIGI9ZnVuY3Rpb24oZil7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhmLGEpfTt2YXIgYz1iKGQpO3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmdldFBhZGRlZERpZ2VzdEluZm9IZXgoYyxhLGUpfWZ1bmN0aW9uIF96ZXJvUGFkZGluZ09mU2lnbmF0dXJlKGUsZCl7dmFyIGM9XCJcIjt2YXIgYT1kLzQtZS5sZW5ndGg7Zm9yKHZhciBiPTA7YjxhO2IrKyl7Yz1jK1wiMFwifXJldHVybiBjK2V9UlNBS2V5LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGQsYSl7dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhlLGEpfTt2YXIgYz1iKGQpO3JldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2goYyxhKX07UlNBS2V5LnByb3RvdHlwZS5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGUsYyl7dmFyIGY9S0pVUi5jcnlwdG8uVXRpbC5nZXRQYWRkZWREaWdlc3RJbmZvSGV4KGUsYyx0aGlzLm4uYml0TGVuZ3RoKCkpO3ZhciBiPXBhcnNlQmlnSW50KGYsMTYpO3ZhciBkPXRoaXMuZG9Qcml2YXRlKGIpO3ZhciBhPWQudG9TdHJpbmcoMTYpO3JldHVybiBfemVyb1BhZGRpbmdPZlNpZ25hdHVyZShhLHRoaXMubi5iaXRMZW5ndGgoKSl9O2Z1bmN0aW9uIHBzc19tZ2YxX3N0cihjLGEsZSl7dmFyIGI9XCJcIixkPTA7d2hpbGUoYi5sZW5ndGg8YSl7Yis9aGV4dG9yc3RyKGUocnN0cnRvaGV4KGMrU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsWyhkJjQyNzgxOTAwODApPj4yNCwoZCYxNjcxMTY4MCk+PjE2LChkJjY1MjgwKT4+OCxkJjI1NV0pKSkpO2QrPTF9cmV0dXJuIGJ9UlNBS2V5LnByb3RvdHlwZS5zaWduUFNTPWZ1bmN0aW9uKGUsYSxkKXt2YXIgYz1mdW5jdGlvbihmKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGYsYSl9O3ZhciBiPWMocnN0cnRvaGV4KGUpKTtpZihkPT09dW5kZWZpbmVkKXtkPS0xfXJldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1MoYixhLGQpfTtSU0FLZXkucHJvdG90eXBlLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1M9ZnVuY3Rpb24obCxhLGspe3ZhciBiPWhleHRvcnN0cihsKTt2YXIgZz1iLmxlbmd0aDt2YXIgbT10aGlzLm4uYml0TGVuZ3RoKCktMTt2YXIgYz1NYXRoLmNlaWwobS84KTt2YXIgZDt2YXIgbz1mdW5jdGlvbihpKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGksYSl9O2lmKGs9PT0tMXx8az09PXVuZGVmaW5lZCl7az1nfWVsc2V7aWYoaz09PS0yKXtrPWMtZy0yfWVsc2V7aWYoazwtMil7dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzYWx0IGxlbmd0aFwiKX19fWlmKGM8KGcraysyKSl7dGhyb3cgbmV3IEVycm9yKFwiZGF0YSB0b28gbG9uZ1wiKX12YXIgZj1cIlwiO2lmKGs+MCl7Zj1uZXcgQXJyYXkoayk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhmKTtmPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGYpfXZhciBuPWhleHRvcnN0cihvKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitiK2YpKSk7dmFyIGo9W107Zm9yKGQ9MDtkPGMtay1nLTI7ZCs9MSl7altkXT0wfXZhciBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGopK1wiXFx4MDFcIitmO3ZhciBoPXBzc19tZ2YxX3N0cihuLGUubGVuZ3RoLG8pO3ZhciBxPVtdO2ZvcihkPTA7ZDxlLmxlbmd0aDtkKz0xKXtxW2RdPWUuY2hhckNvZGVBdChkKV5oLmNoYXJDb2RlQXQoZCl9dmFyIHA9KDY1MjgwPj4oOCpjLW0pKSYyNTU7cVswXSY9fnA7Zm9yKGQ9MDtkPGc7ZCsrKXtxLnB1c2gobi5jaGFyQ29kZUF0KGQpKX1xLnB1c2goMTg4KTtyZXR1cm4gX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUodGhpcy5kb1ByaXZhdGUobmV3IEJpZ0ludGVnZXIocSkpLnRvU3RyaW5nKDE2KSx0aGlzLm4uYml0TGVuZ3RoKCkpfTtmdW5jdGlvbiBfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkoYSxkLGMpe3ZhciBiPW5ldyBSU0FLZXkoKTtiLnNldFB1YmxpYyhkLGMpO3ZhciBlPWIuZG9QdWJsaWMoYSk7cmV0dXJuIGV9ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4RGlnZXN0SW5mb0Zyb21TaWcoYSxjLGIpe3ZhciBlPV9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSShhLGMsYik7dmFyIGQ9ZS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTtyZXR1cm4gZH1mdW5jdGlvbiBfcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhmKXtmb3IodmFyIGUgaW4gS0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRCl7dmFyIGQ9S0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRFtlXTt2YXIgYj1kLmxlbmd0aDtpZihmLnN1YnN0cmluZygwLGIpPT1kKXt2YXIgYz1bZSxmLnN1YnN0cmluZyhiKV07cmV0dXJuIGN9fXJldHVybltdfVJTQUtleS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGYsbCl7bD1sLnRvTG93ZXJDYXNlKCk7aWYobC5tYXRjaCgvXlswLTlhLWZdKyQvKT09bnVsbCl7cmV0dXJuIGZhbHNlfXZhciBiPXBhcnNlQmlnSW50KGwsMTYpO3ZhciBrPXRoaXMubi5iaXRMZW5ndGgoKTtpZihiLmJpdExlbmd0aCgpPmspe3JldHVybiBmYWxzZX12YXIgaj10aGlzLmRvUHVibGljKGIpO3ZhciBpPWoudG9TdHJpbmcoMTYpO2lmKGkubGVuZ3RoKzMhPWsvNCl7cmV0dXJuIGZhbHNlfXZhciBlPWkucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgZz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhlKTtpZihnLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWdbMF07dmFyIGg9Z1sxXTt2YXIgYT1mdW5jdGlvbihtKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoU3RyaW5nKG0sZCl9O3ZhciBjPWEoZik7cmV0dXJuKGg9PWMpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihlLGEpe2lmKGEubGVuZ3RoIT1NYXRoLmNlaWwodGhpcy5uLmJpdExlbmd0aCgpLzQpKXtyZXR1cm4gZmFsc2V9dmFyIGI9cGFyc2VCaWdJbnQoYSwxNik7aWYoYi5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiAwfXZhciBoPXRoaXMuZG9QdWJsaWMoYik7dmFyIGc9aC50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgYz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhnKTtpZihjLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWNbMF07dmFyIGY9Y1sxXTtyZXR1cm4oZj09ZSl9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5UFNTPWZ1bmN0aW9uKGMsYixhLGYpe3ZhciBlPWZ1bmN0aW9uKGcpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoZyxhKX07dmFyIGQ9ZShyc3RydG9oZXgoYykpO2lmKGY9PT11bmRlZmluZWQpe2Y9LTF9cmV0dXJuIHRoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTKGQsYixhLGYpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUz1mdW5jdGlvbihmLHMsbCxjKXtpZihzLmxlbmd0aCE9TWF0aC5jZWlsKHRoaXMubi5iaXRMZW5ndGgoKS80KSl7cmV0dXJuIGZhbHNlfXZhciBrPW5ldyBCaWdJbnRlZ2VyKHMsMTYpO3ZhciByPWZ1bmN0aW9uKGkpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoaSxsKX07dmFyIGo9aGV4dG9yc3RyKGYpO3ZhciBoPWoubGVuZ3RoO3ZhciBnPXRoaXMubi5iaXRMZW5ndGgoKS0xO3ZhciBtPU1hdGguY2VpbChnLzgpO3ZhciBxO2lmKGM9PT0tMXx8Yz09PXVuZGVmaW5lZCl7Yz1ofWVsc2V7aWYoYz09PS0yKXtjPW0taC0yfWVsc2V7aWYoYzwtMil7dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzYWx0IGxlbmd0aFwiKX19fWlmKG08KGgrYysyKSl7dGhyb3cgbmV3IEVycm9yKFwiZGF0YSB0b28gbG9uZ1wiKX12YXIgYT10aGlzLmRvUHVibGljKGspLnRvQnl0ZUFycmF5KCk7Zm9yKHE9MDtxPGEubGVuZ3RoO3ErPTEpe2FbcV0mPTI1NX13aGlsZShhLmxlbmd0aDxtKXthLnVuc2hpZnQoMCl9aWYoYVttLTFdIT09MTg4KXt0aHJvdyBuZXcgRXJyb3IoXCJlbmNvZGVkIG1lc3NhZ2UgZG9lcyBub3QgZW5kIGluIDB4YmNcIil9YT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTt2YXIgZD1hLnN1YnN0cigwLG0taC0xKTt2YXIgZT1hLnN1YnN0cihkLmxlbmd0aCxoKTt2YXIgcD0oNjUyODA+Pig4Km0tZykpJjI1NTtpZigoZC5jaGFyQ29kZUF0KDApJnApIT09MCl7dGhyb3cgbmV3IEVycm9yKFwiYml0cyBiZXlvbmQga2V5c2l6ZSBub3QgemVyb1wiKX12YXIgbj1wc3NfbWdmMV9zdHIoZSxkLmxlbmd0aCxyKTt2YXIgbz1bXTtmb3IocT0wO3E8ZC5sZW5ndGg7cSs9MSl7b1txXT1kLmNoYXJDb2RlQXQocSlebi5jaGFyQ29kZUF0KHEpfW9bMF0mPX5wO3ZhciBiPW0taC1jLTI7Zm9yKHE9MDtxPGI7cSs9MSl7aWYob1txXSE9PTApe3Rocm93IG5ldyBFcnJvcihcImxlZnRtb3N0IG9jdGV0cyBub3QgemVyb1wiKX19aWYob1tiXSE9PTEpe3Rocm93IG5ldyBFcnJvcihcIjB4MDEgbWFya2VyIG5vdCBmb3VuZFwiKX1yZXR1cm4gZT09PWhleHRvcnN0cihyKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitqK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLG8uc2xpY2UoLWMpKSkpKX07UlNBS2V5LlNBTFRfTEVOX0hMRU49LTE7UlNBS2V5LlNBTFRfTEVOX01BWD0tMjtSU0FLZXkuU0FMVF9MRU5fUkVDT1ZFUj0tMjtcbmZ1bmN0aW9uIFg1MDkocSl7dmFyIGo9QVNOMUhFWCxuPWouZ2V0Q2hpbGRJZHgsZz1qLmdldFYsYj1qLmdldFRMVixjPWouZ2V0VmJ5TGlzdCxrPWouZ2V0VmJ5TGlzdEV4LGE9ai5nZXRUTFZieUxpc3QsbD1qLmdldFRMVmJ5TGlzdEV4LGg9ai5nZXRJZHhieUxpc3QsZT1qLmdldElkeGJ5TGlzdEV4LGk9ai5nZXRWaWR4LHM9ai5nZXRJbnQscD1qLm9pZG5hbWUsbT1qLmhleHRvb2lkc3RyLGQ9WDUwOSxyPXBlbXRvaGV4LGY7dHJ5e2Y9S0pVUi5hc24xLng1MDkuQWxnb3JpdGhtSWRlbnRpZmllci5QU1NOQU1FMkFTTjFUTFZ9Y2F0Y2gobyl7fXRoaXMuSEVYMlNUQUc9e1wiMGNcIjpcInV0ZjhcIixcIjEzXCI6XCJwcm5cIixcIjE2XCI6XCJpYTVcIixcIjFhXCI6XCJ2aXNcIixcIjFlXCI6XCJibXBcIn07dGhpcy5oZXg9bnVsbDt0aGlzLnZlcnNpb249MDt0aGlzLmZvZmZzZXQ9MDt0aGlzLmFFeHRJbmZvPW51bGw7dGhpcy5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7aWYodGhpcy5oZXg9PT1udWxsfHx0aGlzLnZlcnNpb24hPT0wKXtyZXR1cm4gdGhpcy52ZXJzaW9ufXZhciB1PWEodGhpcy5oZXgsMCxbMCwwXSk7aWYodS5zdWJzdHIoMCwyKT09XCJhMFwiKXt2YXIgdj1hKHUsMCxbMF0pO3ZhciB0PXModiwwKTtpZih0PDB8fDI8dCl7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIHZlcnNpb24gZmllbGRcIil9dGhpcy52ZXJzaW9uPXQrMTtyZXR1cm4gdGhpcy52ZXJzaW9ufWVsc2V7dGhpcy52ZXJzaW9uPTE7dGhpcy5mb2Zmc2V0PS0xO3JldHVybiAxfX07dGhpcy5nZXRTZXJpYWxOdW1iZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLmhleCwwLFswLDBdLFwiMDJcIil9O3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQ9ZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMuaGV4LDAsWzAsMV0pO3JldHVybiB0aGlzLmdldEFsZ29yaXRobUlkZW50aWZpZXJOYW1lKHQpfTt0aGlzLmdldEFsZ29yaXRobUlkZW50aWZpZXJOYW1lPWZ1bmN0aW9uKHQpe2Zvcih2YXIgdSBpbiBmKXtpZih0PT09Zlt1XSl7cmV0dXJuIHV9fXJldHVybiBwKGsodCwwLFswXSxcIjA2XCIpKX07dGhpcy5nZXRJc3N1ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYNTAwTmFtZSh0aGlzLmdldElzc3VlckhleCgpKX07dGhpcy5nZXRJc3N1ZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLmhleCwwLFswLDMrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldElzc3VlclN0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0SXNzdWVyKCk7cmV0dXJuIHQuc3RyfTt0aGlzLmdldFN1YmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYNTAwTmFtZSh0aGlzLmdldFN1YmplY3RIZXgoKSl9O3RoaXMuZ2V0U3ViamVjdEhleD1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMuaGV4LDAsWzAsNSt0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0U3ViamVjdFN0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0U3ViamVjdCgpO3JldHVybiB0LnN0cn07dGhpcy5nZXROb3RCZWZvcmU9ZnVuY3Rpb24oKXt2YXIgdD1jKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMF0pO3Q9dC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7dD1kZWNvZGVVUklDb21wb25lbnQodCk7cmV0dXJuIHR9O3RoaXMuZ2V0Tm90QWZ0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1jKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMV0pO3Q9dC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7dD1kZWNvZGVVUklDb21wb25lbnQodCk7cmV0dXJuIHR9O3RoaXMuZ2V0UHVibGljS2V5SGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGouZ2V0VExWYnlMaXN0KHRoaXMuaGV4LDAsWzAsNit0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5SWR4PWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5oZXgsMCxbMCw2K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXlDb250ZW50SWR4PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQdWJsaWNLZXlJZHgoKTtyZXR1cm4gaCh0aGlzLmhleCx0LFsxLDBdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIEtFWVVUSUwuZ2V0S2V5KHRoaXMuZ2V0UHVibGljS2V5SGV4KCksbnVsbCxcInBrY3M4cHViXCIpfTt0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWU9ZnVuY3Rpb24oKXt2YXIgdD1hKHRoaXMuaGV4LDAsWzFdLFwiMzBcIik7cmV0dXJuIHRoaXMuZ2V0QWxnb3JpdGhtSWRlbnRpZmllck5hbWUodCl9O3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLmhleCwwLFsyXSxcIjAzXCIsdHJ1ZSl9O3RoaXMudmVyaWZ5U2lnbmF0dXJlPWZ1bmN0aW9uKHYpe3ZhciB3PXRoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQoKTt2YXIgdD10aGlzLmdldFNpZ25hdHVyZVZhbHVlSGV4KCk7dmFyIHU9YSh0aGlzLmhleCwwLFswXSxcIjMwXCIpO3ZhciB4PW5ldyBLSlVSLmNyeXB0by5TaWduYXR1cmUoe2FsZzp3fSk7eC5pbml0KHYpO3gudXBkYXRlSGV4KHUpO3JldHVybiB4LnZlcmlmeSh0KX07dGhpcy5wYXJzZUV4dD1mdW5jdGlvbihDKXt2YXIgdix0LHg7aWYoQz09PXVuZGVmaW5lZCl7eD10aGlzLmhleDtpZih0aGlzLnZlcnNpb24hPT0zKXtyZXR1cm4gLTF9dj1oKHgsMCxbMCw3LDBdLFwiMzBcIik7dD1uKHgsdil9ZWxzZXt4PXBlbXRvaGV4KEMpO3ZhciB5PWgoeCwwLFswLDMsMCwwXSxcIjA2XCIpO2lmKGcoeCx5KSE9XCIyYTg2NDg4NmY3MGQwMTA5MGVcIil7dGhpcy5hRXh0SW5mbz1uZXcgQXJyYXkoKTtyZXR1cm59dj1oKHgsMCxbMCwzLDAsMSwwXSxcIjMwXCIpO3Q9bih4LHYpO3RoaXMuaGV4PXh9dGhpcy5hRXh0SW5mbz1uZXcgQXJyYXkoKTtmb3IodmFyIHc9MDt3PHQubGVuZ3RoO3crKyl7dmFyIEE9e307QS5jcml0aWNhbD1mYWxzZTt2YXIgej1uKHgsdFt3XSk7dmFyIHU9MDtpZih6Lmxlbmd0aD09PTMpe0EuY3JpdGljYWw9dHJ1ZTt1PTF9QS5vaWQ9ai5oZXh0b29pZHN0cihjKHgsdFt3XSxbMF0sXCIwNlwiKSk7dmFyIEI9aCh4LHRbd10sWzErdV0pO0EudmlkeD1pKHgsQik7dGhpcy5hRXh0SW5mby5wdXNoKEEpfX07dGhpcy5nZXRFeHRJbmZvPWZ1bmN0aW9uKHYpe3ZhciB0PXRoaXMuYUV4dEluZm87dmFyIHc9djtpZighdi5tYXRjaCgvXlswLTkuXSskLykpe3c9S0pVUi5hc24xLng1MDkuT0lELm5hbWUyb2lkKHYpfWlmKHc9PT1cIlwiKXtyZXR1cm4gdW5kZWZpbmVkfWZvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKXtpZih0W3VdLm9pZD09PXcpe3JldHVybiB0W3VdfX1yZXR1cm4gdW5kZWZpbmVkfTt0aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHM9ZnVuY3Rpb24odSx5KXtpZih1PT09dW5kZWZpbmVkJiZ5PT09dW5kZWZpbmVkKXt2YXIgdz10aGlzLmdldEV4dEluZm8oXCJiYXNpY0NvbnN0cmFpbnRzXCIpO2lmKHc9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dT1iKHRoaXMuaGV4LHcudmlkeCk7eT13LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwiYmFzaWNDb25zdHJhaW50c1wifTtpZih5KXt0LmNyaXRpY2FsPXRydWV9aWYodT09PVwiMzAwMFwiKXtyZXR1cm4gdH1pZih1PT09XCIzMDAzMDEwMWZmXCIpe3QuY0E9dHJ1ZTtyZXR1cm4gdH1pZih1LnN1YnN0cigwLDEyKT09PVwiMzAwNjAxMDFmZjAyXCIpe3ZhciB4PWcodSwxMCk7dmFyIHY9cGFyc2VJbnQoeCwxNik7dC5jQT10cnVlO3QucGF0aExlbj12O3JldHVybiB0fXRocm93IG5ldyBFcnJvcihcImhFeHRWIHBhcnNlIGVycm9yOiBcIit1KX07dGhpcy5nZXRFeHRLZXlVc2FnZT1mdW5jdGlvbih1LHcpe2lmKHU9PT11bmRlZmluZWQmJnc9PT11bmRlZmluZWQpe3ZhciB2PXRoaXMuZ2V0RXh0SW5mbyhcImtleVVzYWdlXCIpO2lmKHY9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dT1iKHRoaXMuaGV4LHYudmlkeCk7dz12LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwia2V5VXNhZ2VcIn07aWYodyl7dC5jcml0aWNhbD10cnVlfXQubmFtZXM9dGhpcy5nZXRFeHRLZXlVc2FnZVN0cmluZyh1KS5zcGxpdChcIixcIik7cmV0dXJuIHR9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VCaW49ZnVuY3Rpb24odSl7aWYodT09PXVuZGVmaW5lZCl7dmFyIHY9dGhpcy5nZXRFeHRJbmZvKFwia2V5VXNhZ2VcIik7aWYodj09PXVuZGVmaW5lZCl7cmV0dXJuXCJcIn11PWIodGhpcy5oZXgsdi52aWR4KX1pZih1Lmxlbmd0aCE9OCYmdS5sZW5ndGghPTEwKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQga2V5IHVzYWdlIHZhbHVlOiBcIit1KX12YXIgdD1cIjAwMDAwMDAwMDAwMDAwMFwiK3BhcnNlSW50KHUuc3Vic3RyKDYpLDE2KS50b1N0cmluZygyKTtpZih1Lmxlbmd0aD09OCl7dD10LnNsaWNlKC04KX1pZih1Lmxlbmd0aD09MTApe3Q9dC5zbGljZSgtMTYpfXQ9dC5yZXBsYWNlKC8wKyQvLFwiXCIpO2lmKHQ9PVwiXCIpe3Q9XCIwXCJ9cmV0dXJuIHR9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VTdHJpbmc9ZnVuY3Rpb24odil7dmFyIHc9dGhpcy5nZXRFeHRLZXlVc2FnZUJpbih2KTt2YXIgdD1uZXcgQXJyYXkoKTtmb3IodmFyIHU9MDt1PHcubGVuZ3RoO3UrKyl7aWYody5zdWJzdHIodSwxKT09XCIxXCIpe3QucHVzaChYNTA5LktFWVVTQUdFX05BTUVbdV0pfX1yZXR1cm4gdC5qb2luKFwiLFwiKX07dGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcj1mdW5jdGlvbih2LHgpe2lmKHY9PT11bmRlZmluZWQmJng9PT11bmRlZmluZWQpe3ZhciB3PXRoaXMuZ2V0RXh0SW5mbyhcInN1YmplY3RLZXlJZGVudGlmaWVyXCIpO2lmKHc9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dj1iKHRoaXMuaGV4LHcudmlkeCk7eD13LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwic3ViamVjdEtleUlkZW50aWZpZXJcIn07aWYoeCl7dC5jcml0aWNhbD10cnVlfXZhciB1PWcodiwwKTt0LmtpZD17aGV4OnV9O3JldHVybiB0fTt0aGlzLmdldEV4dEF1dGhvcml0eUtleUlkZW50aWZpZXI9ZnVuY3Rpb24oeix4KXtpZih6PT09dW5kZWZpbmVkJiZ4PT09dW5kZWZpbmVkKXt2YXIgdD10aGlzLmdldEV4dEluZm8oXCJhdXRob3JpdHlLZXlJZGVudGlmaWVyXCIpO2lmKHQ9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9ej1iKHRoaXMuaGV4LHQudmlkeCk7eD10LmNyaXRpY2FsfXZhciBBPXtleHRuYW1lOlwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwifTtpZih4KXtBLmNyaXRpY2FsPXRydWV9dmFyIHk9bih6LDApO2Zvcih2YXIgdT0wO3U8eS5sZW5ndGg7dSsrKXt2YXIgQj16LnN1YnN0cih5W3VdLDIpO2lmKEI9PT1cIjgwXCIpe0Eua2lkPXtoZXg6Zyh6LHlbdV0pfX1pZihCPT09XCJhMVwiKXt2YXIgdz1iKHoseVt1XSk7dmFyIHY9dGhpcy5nZXRHZW5lcmFsTmFtZXModyk7QS5pc3N1ZXI9dlswXVtcImRuXCJdfWlmKEI9PT1cIjgyXCIpe0Euc249e2hleDpnKHoseVt1XSl9fX1yZXR1cm4gQX07dGhpcy5nZXRFeHRFeHRLZXlVc2FnZT1mdW5jdGlvbih3LHkpe2lmKHc9PT11bmRlZmluZWQmJnk9PT11bmRlZmluZWQpe3ZhciB4PXRoaXMuZ2V0RXh0SW5mbyhcImV4dEtleVVzYWdlXCIpO2lmKHg9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dz1iKHRoaXMuaGV4LHgudmlkeCk7eT14LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwiZXh0S2V5VXNhZ2VcIixhcnJheTpbXX07aWYoeSl7dC5jcml0aWNhbD10cnVlfXZhciB1PW4odywwKTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7dC5hcnJheS5wdXNoKHAoZyh3LHVbdl0pKSl9cmV0dXJuIHR9O3RoaXMuZ2V0RXh0RXh0S2V5VXNhZ2VOYW1lPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5nZXRFeHRJbmZvKFwiZXh0S2V5VXNhZ2VcIik7aWYoeD09PXVuZGVmaW5lZCl7cmV0dXJuIHh9dmFyIHQ9bmV3IEFycmF5KCk7dmFyIHc9Yih0aGlzLmhleCx4LnZpZHgpO2lmKHc9PT1cIlwiKXtyZXR1cm4gdH12YXIgdT1uKHcsMCk7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe3QucHVzaChwKGcodyx1W3ZdKSkpfXJldHVybiB0fTt0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lPWZ1bmN0aW9uKHUsdyl7aWYodT09PXVuZGVmaW5lZCYmdz09PXVuZGVmaW5lZCl7dmFyIHY9dGhpcy5nZXRFeHRJbmZvKFwic3ViamVjdEFsdE5hbWVcIik7aWYodj09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH11PWIodGhpcy5oZXgsdi52aWR4KTt3PXYuY3JpdGljYWx9dmFyIHQ9e2V4dG5hbWU6XCJzdWJqZWN0QWx0TmFtZVwiLGFycmF5OltdfTtpZih3KXt0LmNyaXRpY2FsPXRydWV9dC5hcnJheT10aGlzLmdldEdlbmVyYWxOYW1lcyh1KTtyZXR1cm4gdH07dGhpcy5nZXRFeHRJc3N1ZXJBbHROYW1lPWZ1bmN0aW9uKHUsdyl7aWYodT09PXVuZGVmaW5lZCYmdz09PXVuZGVmaW5lZCl7dmFyIHY9dGhpcy5nZXRFeHRJbmZvKFwiaXNzdWVyQWx0TmFtZVwiKTtpZih2PT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkfXU9Yih0aGlzLmhleCx2LnZpZHgpO3c9di5jcml0aWNhbH12YXIgdD17ZXh0bmFtZTpcImlzc3VlckFsdE5hbWVcIixhcnJheTpbXX07aWYodyl7dC5jcml0aWNhbD10cnVlfXQuYXJyYXk9dGhpcy5nZXRHZW5lcmFsTmFtZXModSk7cmV0dXJuIHR9O3RoaXMuZ2V0R2VuZXJhbE5hbWVzPWZ1bmN0aW9uKHgpe3ZhciB2PW4oeCwwKTt2YXIgdD1bXTtmb3IodmFyIHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIHU9dGhpcy5nZXRHZW5lcmFsTmFtZShiKHgsdlt3XSkpO2lmKHUhPT11bmRlZmluZWQpe3QucHVzaCh1KX19cmV0dXJuIHR9O3RoaXMuZ2V0R2VuZXJhbE5hbWU9ZnVuY3Rpb24odSl7dmFyIHQ9dS5zdWJzdHIoMCwyKTt2YXIgdz1nKHUsMCk7dmFyIHY9aGV4dG9yc3RyKHcpO2lmKHQ9PVwiODFcIil7cmV0dXJue3JmYzgyMjp2fX1pZih0PT1cIjgyXCIpe3JldHVybntkbnM6dn19aWYodD09XCI4NlwiKXtyZXR1cm57dXJpOnZ9fWlmKHQ9PVwiODdcIil7cmV0dXJue2lwOmhleHRvaXAodyl9fWlmKHQ9PVwiYTRcIil7cmV0dXJue2RuOnRoaXMuZ2V0WDUwME5hbWUodyl9fXJldHVybiB1bmRlZmluZWR9O3RoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyPWZ1bmN0aW9uKCl7dmFyIHgsQSx6O3ZhciB5PXRoaXMuZ2V0RXh0SW5mbyhcInN1YmplY3RBbHROYW1lXCIpO2lmKHk9PT11bmRlZmluZWQpe3JldHVybiB5fXZhciB0PW5ldyBBcnJheSgpO3ZhciB3PWIodGhpcy5oZXgseS52aWR4KTt2YXIgdT1uKHcsMCk7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe3o9dy5zdWJzdHIodVt2XSwyKTt4PWcodyx1W3ZdKTtpZih6PT09XCI4MVwiKXtBPWhleHRvdXRmOCh4KTt0LnB1c2goW1wiTUFJTFwiLEFdKX1pZih6PT09XCI4MlwiKXtBPWhleHRvdXRmOCh4KTt0LnB1c2goW1wiRE5TXCIsQV0pfWlmKHo9PT1cIjg0XCIpe0E9WDUwOS5oZXgyZG4oeCwwKTt0LnB1c2goW1wiRE5cIixBXSl9aWYoej09PVwiODZcIil7QT1oZXh0b3V0ZjgoeCk7dC5wdXNoKFtcIlVSSVwiLEFdKX1pZih6PT09XCI4N1wiKXtBPWhleHRvaXAoeCk7dC5wdXNoKFtcIklQXCIsQV0pfX1yZXR1cm4gdH07dGhpcy5nZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHM9ZnVuY3Rpb24oeCx6KXtpZih4PT09dW5kZWZpbmVkJiZ6PT09dW5kZWZpbmVkKXt2YXIgeT10aGlzLmdldEV4dEluZm8oXCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIik7aWYoeT09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH14PWIodGhpcy5oZXgseS52aWR4KTt6PXkuY3JpdGljYWx9dmFyIHU9e2V4dG5hbWU6XCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIixhcnJheTpbXX07aWYoeil7dS5jcml0aWNhbD10cnVlfXZhciB2PW4oeCwwKTtmb3IodmFyIHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIHQ9Yih4LHZbd10pO3UuYXJyYXkucHVzaCh0aGlzLmdldERpc3RyaWJ1dGlvblBvaW50KHQpKX1yZXR1cm4gdX07dGhpcy5nZXREaXN0cmlidXRpb25Qb2ludD1mdW5jdGlvbih5KXt2YXIgdj17fTt2YXIgdz1uKHksMCk7Zm9yKHZhciB4PTA7eDx3Lmxlbmd0aDt4Kyspe3ZhciB1PXkuc3Vic3RyKHdbeF0sMik7dmFyIHQ9Yih5LHdbeF0pO2lmKHU9PVwiYTBcIil7di5kcG5hbWU9dGhpcy5nZXREaXN0cmlidXRpb25Qb2ludE5hbWUodCl9fXJldHVybiB2fTt0aGlzLmdldERpc3RyaWJ1dGlvblBvaW50TmFtZT1mdW5jdGlvbih5KXt2YXIgdj17fTt2YXIgdz1uKHksMCk7Zm9yKHZhciB4PTA7eDx3Lmxlbmd0aDt4Kyspe3ZhciB1PXkuc3Vic3RyKHdbeF0sMik7dmFyIHQ9Yih5LHdbeF0pO2lmKHU9PVwiYTBcIil7di5mdWxsPXRoaXMuZ2V0R2VuZXJhbE5hbWVzKHQpfX1yZXR1cm4gdn07dGhpcy5nZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkk9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmdldEV4dEluZm8oXCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIik7aWYoeT09PXVuZGVmaW5lZCl7cmV0dXJuIHl9dmFyIHQ9bmV3IEFycmF5KCk7dmFyIHU9bih0aGlzLmhleCx5LnZpZHgpO2Zvcih2YXIgdz0wO3c8dS5sZW5ndGg7dysrKXt0cnl7dmFyIHo9Yyh0aGlzLmhleCx1W3ddLFswLDAsMF0sXCI4NlwiKTt2YXIgeD1oZXh0b3V0Zjgoeik7dC5wdXNoKHgpfWNhdGNoKHYpe319cmV0dXJuIHR9O3RoaXMuZ2V0RXh0QUlBSW5mbz1mdW5jdGlvbigpe3ZhciB4PXRoaXMuZ2V0RXh0SW5mbyhcImF1dGhvcml0eUluZm9BY2Nlc3NcIik7aWYoeD09PXVuZGVmaW5lZCl7cmV0dXJuIHh9dmFyIHQ9e29jc3A6W10sY2Fpc3N1ZXI6W119O3ZhciB1PW4odGhpcy5oZXgseC52aWR4KTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7dmFyIHk9Yyh0aGlzLmhleCx1W3ZdLFswXSxcIjA2XCIpO3ZhciB3PWModGhpcy5oZXgsdVt2XSxbMV0sXCI4NlwiKTtpZih5PT09XCIyYjA2MDEwNTA1MDczMDAxXCIpe3Qub2NzcC5wdXNoKGhleHRvdXRmOCh3KSl9aWYoeT09PVwiMmIwNjAxMDUwNTA3MzAwMlwiKXt0LmNhaXNzdWVyLnB1c2goaGV4dG91dGY4KHcpKX19cmV0dXJuIHR9O3RoaXMuZ2V0RXh0QXV0aG9yaXR5SW5mb0FjY2Vzcz1mdW5jdGlvbihBLHkpe2lmKEE9PT11bmRlZmluZWQmJnk9PT11bmRlZmluZWQpe3ZhciB0PXRoaXMuZ2V0RXh0SW5mbyhcImF1dGhvcml0eUluZm9BY2Nlc3NcIik7aWYodD09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH1BPWIodGhpcy5oZXgsdC52aWR4KTt5PXQuY3JpdGljYWx9dmFyIEI9e2V4dG5hbWU6XCJhdXRob3JpdHlJbmZvQWNjZXNzXCIsYXJyYXk6W119O2lmKHkpe0IuY3JpdGljYWw9dHJ1ZX12YXIgej1uKEEsMCk7Zm9yKHZhciB1PTA7dTx6Lmxlbmd0aDt1Kyspe3ZhciB4PWsoQSx6W3VdLFswXSxcIjA2XCIpO3ZhciB2PWMoQSx6W3VdLFsxXSxcIjg2XCIpO3ZhciB3PWhleHRvdXRmOCh2KTtpZih4PT1cIjJiMDYwMTA1MDUwNzMwMDFcIil7Qi5hcnJheS5wdXNoKHtvY3NwOnd9KX1lbHNle2lmKHg9PVwiMmIwNjAxMDUwNTA3MzAwMlwiKXtCLmFycmF5LnB1c2goe2NhaXNzdWVyOnd9KX1lbHNle3Rocm93IG5ldyBFcnJvcihcInVua25vd24gbWV0aG9kOiBcIit4KX19fXJldHVybiBCfTt0aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXM9ZnVuY3Rpb24oeCxBKXtpZih4PT09dW5kZWZpbmVkJiZBPT09dW5kZWZpbmVkKXt2YXIgej10aGlzLmdldEV4dEluZm8oXCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpO2lmKHo9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9eD1iKHRoaXMuaGV4LHoudmlkeCk7QT16LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwiY2VydGlmaWNhdGVQb2xpY2llc1wiLGFycmF5OltdfTtpZihBKXt0LmNyaXRpY2FsPXRydWV9dmFyIHU9bih4LDApO2Zvcih2YXIgdj0wO3Y8dS5sZW5ndGg7disrKXt2YXIgeT1iKHgsdVt2XSk7dmFyIHc9dGhpcy5nZXRQb2xpY3lJbmZvcm1hdGlvbih5KTt0LmFycmF5LnB1c2godyl9cmV0dXJuIHR9O3RoaXMuZ2V0UG9saWN5SW5mb3JtYXRpb249ZnVuY3Rpb24oeCl7dmFyIHQ9e307dmFyIHo9Yyh4LDAsWzBdLFwiMDZcIik7dC5wb2xpY3lvaWQ9cCh6KTt2YXIgQT1lKHgsMCxbMV0sXCIzMFwiKTtpZihBIT0tMSl7dC5hcnJheT1bXTt2YXIgdT1uKHgsQSk7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe3ZhciB5PWIoeCx1W3ZdKTt2YXIgdz10aGlzLmdldFBvbGljeVF1YWxpZmllckluZm8oeSk7dC5hcnJheS5wdXNoKHcpfX1yZXR1cm4gdH07dGhpcy5nZXRQb2xpY3lRdWFsaWZpZXJJbmZvPWZ1bmN0aW9uKHUpe3ZhciB0PXt9O3ZhciB2PWModSwwLFswXSxcIjA2XCIpO2lmKHY9PT1cIjJiMDYwMTA1MDUwNzAyMDFcIil7dmFyIHg9ayh1LDAsWzFdLFwiMTZcIik7dC5jcHM9aGV4dG9yc3RyKHgpfWVsc2V7aWYodj09PVwiMmIwNjAxMDUwNTA3MDIwMlwiKXt2YXIgdz1hKHUsMCxbMV0sXCIzMFwiKTt0LnVub3RpY2U9dGhpcy5nZXRVc2VyTm90aWNlKHcpfX1yZXR1cm4gdH07dGhpcy5nZXRVc2VyTm90aWNlPWZ1bmN0aW9uKHgpe3ZhciB1PXt9O3ZhciB2PW4oeCwwKTtmb3IodmFyIHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIHQ9Yih4LHZbd10pO2lmKHQuc3Vic3RyKDAsMikhPVwiMzBcIil7dS5leHB0ZXh0PXRoaXMuZ2V0RGlzcGxheVRleHQodCl9fXJldHVybiB1fTt0aGlzLmdldERpc3BsYXlUZXh0PWZ1bmN0aW9uKHUpe3ZhciB2PXtcIjBjXCI6XCJ1dGY4XCIsXCIxNlwiOlwiaWE1XCIsXCIxYVwiOlwidmlzXCIsXCIxZVwiOlwiYm1wXCJ9O3ZhciB0PXt9O3QudHlwZT12W3Uuc3Vic3RyKDAsMildO3Quc3RyPWhleHRvcnN0cihnKHUsMCkpO3JldHVybiB0fTt0aGlzLmdldEV4dENSTE51bWJlcj1mdW5jdGlvbih1LHYpe3ZhciB0PXtleHRuYW1lOlwiY1JMTnVtYmVyXCJ9O2lmKHYpe3QuY3JpdGljYWw9dHJ1ZX1pZih1LnN1YnN0cigwLDIpPT1cIjAyXCIpe3QubnVtPXtoZXg6Zyh1LDApfTtyZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoXCJoRXh0ViBwYXJzZSBlcnJvcjogXCIrdSl9O3RoaXMuZ2V0RXh0Q1JMUmVhc29uPWZ1bmN0aW9uKHUsdil7dmFyIHQ9e2V4dG5hbWU6XCJjUkxSZWFzb25cIn07aWYodil7dC5jcml0aWNhbD10cnVlfWlmKHUuc3Vic3RyKDAsMik9PVwiMGFcIil7dC5jb2RlPXBhcnNlSW50KGcodSwwKSwxNik7cmV0dXJuIHR9dGhyb3cgbmV3IEVycm9yKFwiaEV4dFYgcGFyc2UgZXJyb3I6IFwiK3UpfTt0aGlzLmdldEV4dE9jc3BOb25jZT1mdW5jdGlvbih1LHcpe3ZhciB0PXtleHRuYW1lOlwib2NzcE5vbmNlXCJ9O2lmKHcpe3QuY3JpdGljYWw9dHJ1ZX12YXIgdj1nKHUsMCk7dC5oZXg9djtyZXR1cm4gdH07dGhpcy5nZXRFeHRPY3NwTm9DaGVjaz1mdW5jdGlvbih1LHYpe3ZhciB0PXtleHRuYW1lOlwib2NzcE5vQ2hlY2tcIn07aWYodil7dC5jcml0aWNhbD10cnVlfXJldHVybiB0fTt0aGlzLmdldEV4dEFkb2JlVGltZVN0YW1wPWZ1bmN0aW9uKHcseil7aWYodz09PXVuZGVmaW5lZCYmej09PXVuZGVmaW5lZCl7dmFyIHk9dGhpcy5nZXRFeHRJbmZvKFwiYWRvYmVUaW1lU3RhbXBcIik7aWYoeT09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH13PWIodGhpcy5oZXgseS52aWR4KTt6PXkuY3JpdGljYWx9dmFyIHQ9e2V4dG5hbWU6XCJhZG9iZVRpbWVTdGFtcFwifTtpZih6KXt0LmNyaXRpY2FsPXRydWV9dmFyIHY9bih3LDApO2lmKHYubGVuZ3RoPjEpe3ZhciBBPWIodyx2WzFdKTt2YXIgdT10aGlzLmdldEdlbmVyYWxOYW1lKEEpO2lmKHUudXJpIT11bmRlZmluZWQpe3QudXJpPXUudXJpfX1pZih2Lmxlbmd0aD4yKXt2YXIgeD1iKHcsdlsyXSk7aWYoeD09XCIwMTAxZmZcIil7dC5yZXFhdXRoPXRydWV9aWYoeD09XCIwMTAxMDBcIil7dC5yZXFhdXRoPWZhbHNlfX1yZXR1cm4gdH07dGhpcy5nZXRYNTAwTmFtZVJ1bGU9ZnVuY3Rpb24odCl7dmFyIEE9dHJ1ZTt2YXIgRT10cnVlO3ZhciBEPWZhbHNlO3ZhciB1PVwiXCI7dmFyIHg9XCJcIjt2YXIgRz1udWxsO3ZhciBCPVtdO2Zvcih2YXIgdz0wO3c8dC5sZW5ndGg7dysrKXt2YXIgeT10W3ddO2Zvcih2YXIgdj0wO3Y8eS5sZW5ndGg7disrKXtCLnB1c2goeVt2XSl9fWZvcih2YXIgdz0wO3c8Qi5sZW5ndGg7dysrKXt2YXIgRj1CW3ddO3ZhciBIPUYuZHM7dmFyIEM9Ri52YWx1ZTt2YXIgej1GLnR5cGU7dSs9XCI6XCIrSDtpZihIIT1cInByblwiJiZIIT1cInV0ZjhcIiYmSCE9XCJpYTVcIil7cmV0dXJuXCJtaXhlZFwifWlmKEg9PVwiaWE1XCIpe2lmKHohPVwiQ05cIil7cmV0dXJuXCJtaXhlZFwifWVsc2V7aWYoIUtKVVIubGFuZy5TdHJpbmcuaXNNYWlsKEMpKXtyZXR1cm5cIm1peGVkXCJ9ZWxzZXtjb250aW51ZX19fWlmKHo9PVwiQ1wiKXtpZihIPT1cInByblwiKXtjb250aW51ZX1lbHNle3JldHVyblwibWl4ZWRcIn19eCs9XCI6XCIrSDtpZihHPT1udWxsKXtHPUh9ZWxzZXtpZihHIT09SCl7cmV0dXJuXCJtaXhlZFwifX19aWYoRz09bnVsbCl7cmV0dXJuXCJwcm5cIn1lbHNle3JldHVybiBHfX07dGhpcy5nZXRYNTAwTmFtZT1mdW5jdGlvbih2KXt2YXIgdD10aGlzLmdldFg1MDBOYW1lQXJyYXkodik7dmFyIHU9dGhpcy5kbmFycmF5dG9zdHIodCk7cmV0dXJue2FycmF5OnQsc3RyOnV9fTt0aGlzLmdldFg1MDBOYW1lQXJyYXk9ZnVuY3Rpb24odyl7dmFyIHQ9W107dmFyIHU9bih3LDApO2Zvcih2YXIgdj0wO3Y8dS5sZW5ndGg7disrKXt0LnB1c2godGhpcy5nZXRSRE4oYih3LHVbdl0pKSl9cmV0dXJuIHR9O3RoaXMuZ2V0UkROPWZ1bmN0aW9uKHcpe3ZhciB0PVtdO3ZhciB1PW4odywwKTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7dC5wdXNoKHRoaXMuZ2V0QXR0clR5cGVBbmRWYWx1ZShiKHcsdVt2XSkpKX1yZXR1cm4gdH07dGhpcy5nZXRBdHRyVHlwZUFuZFZhbHVlPWZ1bmN0aW9uKHYpe3ZhciB0PXt0eXBlOm51bGwsdmFsdWU6bnVsbCxkczpudWxsfTt2YXIgdT1uKHYsMCk7dmFyIHk9Yyh2LHVbMF0sW10sXCIwNlwiKTt2YXIgeD1jKHYsdVsxXSxbXSk7dmFyIHc9S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50KHkpO3QudHlwZT1LSlVSLmFzbjEueDUwOS5PSUQub2lkMmF0eXBlKHcpO3QuZHM9dGhpcy5IRVgyU1RBR1t2LnN1YnN0cih1WzFdLDIpXTtpZih0LmRzIT1cImJtcFwiKXt0LnZhbHVlPWhleHRvdXRmOCh4KX1lbHNle3QudmFsdWU9dWNzMmhleHRvdXRmOCh4KX1yZXR1cm4gdH07dGhpcy5yZWFkQ2VydFBFTT1mdW5jdGlvbih0KXt0aGlzLnJlYWRDZXJ0SGV4KHIodCkpfTt0aGlzLnJlYWRDZXJ0SGV4PWZ1bmN0aW9uKHQpe3RoaXMuaGV4PXQ7dGhpcy5nZXRWZXJzaW9uKCk7dHJ5e2godGhpcy5oZXgsMCxbMCw3XSxcImEzXCIpO3RoaXMucGFyc2VFeHQoKX1jYXRjaCh1KXt9fTt0aGlzLmdldFBhcmFtPWZ1bmN0aW9uKCl7dmFyIHQ9e307dC52ZXJzaW9uPXRoaXMuZ2V0VmVyc2lvbigpO3Quc2VyaWFsPXtoZXg6dGhpcy5nZXRTZXJpYWxOdW1iZXJIZXgoKX07dC5zaWdhbGc9dGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCgpO3QuaXNzdWVyPXRoaXMuZ2V0SXNzdWVyKCk7dC5ub3RiZWZvcmU9dGhpcy5nZXROb3RCZWZvcmUoKTt0Lm5vdGFmdGVyPXRoaXMuZ2V0Tm90QWZ0ZXIoKTt0LnN1YmplY3Q9dGhpcy5nZXRTdWJqZWN0KCk7dC5zYmpwdWJrZXk9aGV4dG9wZW0odGhpcy5nZXRQdWJsaWNLZXlIZXgoKSxcIlBVQkxJQyBLRVlcIik7aWYodGhpcy5hRXh0SW5mby5sZW5ndGg+MCl7dC5leHQ9dGhpcy5nZXRFeHRQYXJhbUFycmF5KCl9dC5zaWdoZXg9dGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleCgpO3JldHVybiB0fTt0aGlzLmdldEV4dFBhcmFtQXJyYXk9ZnVuY3Rpb24odSl7aWYodT09dW5kZWZpbmVkKXt2YXIgdz1lKHRoaXMuaGV4LDAsWzAsXCJbM11cIl0pO2lmKHchPS0xKXt1PWwodGhpcy5oZXgsMCxbMCxcIlszXVwiLDBdLFwiMzBcIil9fXZhciB0PVtdO3ZhciB2PW4odSwwKTtmb3IodmFyIHg9MDt4PHYubGVuZ3RoO3grKyl7dmFyIHo9Yih1LHZbeF0pO3ZhciB5PXRoaXMuZ2V0RXh0UGFyYW0oeik7aWYoeSE9bnVsbCl7dC5wdXNoKHkpfX1yZXR1cm4gdH07dGhpcy5nZXRFeHRQYXJhbT1mdW5jdGlvbih1KXt2YXIgQj17fTt2YXIgdz1uKHUsMCk7dmFyIHg9dy5sZW5ndGg7aWYoeCE9MiYmeCE9Myl7dGhyb3cgbmV3IEVycm9yKFwid3JvbmcgbnVtYmVyIGVsZW1lbnRzIGluIEV4dGVuc2lvbjogXCIreCtcIiBcIit1KX12YXIgdj1tKGModSwwLFswXSxcIjA2XCIpKTt2YXIgej1mYWxzZTtpZih4PT0zJiZhKHUsMCxbMV0pPT1cIjAxMDFmZlwiKXt6PXRydWV9dmFyIEE9YSh1LDAsW3gtMSwwXSk7dmFyIHk9dW5kZWZpbmVkO2lmKHY9PVwiMi41LjI5LjE0XCIpe3k9dGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcihBLHopfWVsc2V7aWYodj09XCIyLjUuMjkuMTVcIil7eT10aGlzLmdldEV4dEtleVVzYWdlKEEseil9ZWxzZXtpZih2PT1cIjIuNS4yOS4xN1wiKXt5PXRoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjE4XCIpe3k9dGhpcy5nZXRFeHRJc3N1ZXJBbHROYW1lKEEseil9ZWxzZXtpZih2PT1cIjIuNS4yOS4xOVwiKXt5PXRoaXMuZ2V0RXh0QmFzaWNDb25zdHJhaW50cyhBLHopfWVsc2V7aWYodj09XCIyLjUuMjkuMzFcIil7eT10aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50cyhBLHopfWVsc2V7aWYodj09XCIyLjUuMjkuMzJcIil7eT10aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXMoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjM1XCIpe3k9dGhpcy5nZXRFeHRBdXRob3JpdHlLZXlJZGVudGlmaWVyKEEseil9ZWxzZXtpZih2PT1cIjIuNS4yOS4zN1wiKXt5PXRoaXMuZ2V0RXh0RXh0S2V5VXNhZ2UoQSx6KX1lbHNle2lmKHY9PVwiMS4zLjYuMS41LjUuNy4xLjFcIil7eT10aGlzLmdldEV4dEF1dGhvcml0eUluZm9BY2Nlc3MoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjIwXCIpe3k9dGhpcy5nZXRFeHRDUkxOdW1iZXIoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjIxXCIpe3k9dGhpcy5nZXRFeHRDUkxSZWFzb24oQSx6KX1lbHNle2lmKHY9PVwiMS4zLjYuMS41LjUuNy40OC4xLjJcIil7eT10aGlzLmdldEV4dE9jc3BOb25jZShBLHopfWVsc2V7aWYodj09XCIxLjMuNi4xLjUuNS43LjQ4LjEuNVwiKXt5PXRoaXMuZ2V0RXh0T2NzcE5vQ2hlY2soQSx6KX1lbHNle2lmKHY9PVwiMS4yLjg0MC4xMTM1ODMuMS4xLjkuMVwiKXt5PXRoaXMuZ2V0RXh0QWRvYmVUaW1lU3RhbXAoQSx6KX19fX19fX19fX19fX19fWlmKHkhPXVuZGVmaW5lZCl7cmV0dXJuIHl9dmFyIHQ9e2V4dG5hbWU6dixleHRuOkF9O2lmKHope3QuY3JpdGljYWw9dHJ1ZX1yZXR1cm4gdH07dGhpcy5maW5kRXh0PWZ1bmN0aW9uKHUsdil7Zm9yKHZhciB0PTA7dDx1Lmxlbmd0aDt0Kyspe2lmKHVbdF0uZXh0bmFtZT09dil7cmV0dXJuIHVbdF19fXJldHVybiBudWxsfTt0aGlzLnVwZGF0ZUV4dENEUEZ1bGxVUkk9ZnVuY3Rpb24oeCx0KXt2YXIgdz10aGlzLmZpbmRFeHQoeCxcImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKTtpZih3PT1udWxsKXtyZXR1cm59aWYody5hcnJheT09dW5kZWZpbmVkKXtyZXR1cm59dmFyIHo9dy5hcnJheTtmb3IodmFyIHY9MDt2PHoubGVuZ3RoO3YrKyl7aWYoelt2XS5kcG5hbWU9PXVuZGVmaW5lZCl7Y29udGludWV9aWYoelt2XS5kcG5hbWUuZnVsbD09dW5kZWZpbmVkKXtjb250aW51ZX12YXIgQT16W3ZdLmRwbmFtZS5mdWxsO2Zvcih2YXIgdT0wO3U8QS5sZW5ndGg7dSsrKXt2YXIgeT1BW3ZdO2lmKHkudXJpPT11bmRlZmluZWQpe2NvbnRpbnVlfXkudXJpPXR9fX07dGhpcy51cGRhdGVFeHRBSUFPQ1NQPWZ1bmN0aW9uKHgsdSl7dmFyIHc9dGhpcy5maW5kRXh0KHgsXCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpO2lmKHc9PW51bGwpe3JldHVybn1pZih3LmFycmF5PT11bmRlZmluZWQpe3JldHVybn12YXIgdD13LmFycmF5O2Zvcih2YXIgdj0wO3Y8dC5sZW5ndGg7disrKXtpZih0W3ZdLm9jc3AhPXVuZGVmaW5lZCl7dFt2XS5vY3NwPXV9fX07dGhpcy51cGRhdGVFeHRBSUFDQUlzc3Vlcj1mdW5jdGlvbih4LHUpe3ZhciB3PXRoaXMuZmluZEV4dCh4LFwiYXV0aG9yaXR5SW5mb0FjY2Vzc1wiKTtpZih3PT1udWxsKXtyZXR1cm59aWYody5hcnJheT09dW5kZWZpbmVkKXtyZXR1cm59dmFyIHQ9dy5hcnJheTtmb3IodmFyIHY9MDt2PHQubGVuZ3RoO3YrKyl7aWYodFt2XS5jYWlzc3VlciE9dW5kZWZpbmVkKXt0W3ZdLmNhaXNzdWVyPXV9fX07dGhpcy5kbmFycmF5dG9zdHI9ZnVuY3Rpb24odil7ZnVuY3Rpb24gdCh3KXtyZXR1cm4gdy5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHUoeSkucmVwbGFjZSgvXFwrLyxcIlxcXFwrXCIpfSkuam9pbihcIitcIil9ZnVuY3Rpb24gdSh3KXtyZXR1cm4gdy50eXBlK1wiPVwiK3cudmFsdWV9cmV0dXJuXCIvXCIrdi5tYXAoZnVuY3Rpb24odyl7cmV0dXJuIHQodykucmVwbGFjZSgvXFwvLyxcIlxcXFwvXCIpfSkuam9pbihcIi9cIil9O3RoaXMuZ2V0SW5mbz1mdW5jdGlvbigpe3ZhciB1PWZ1bmN0aW9uKE0pe3ZhciBMPUpTT04uc3RyaW5naWZ5KE0uYXJyYXkpLnJlcGxhY2UoL1tcXFtcXF1cXHtcXH1cXFwiXS9nLFwiXCIpO3JldHVybiBMfTt2YXIgQT1mdW5jdGlvbihSKXt2YXIgUD1cIlwiO3ZhciBMPVIuYXJyYXk7Zm9yKHZhciBPPTA7TzxMLmxlbmd0aDtPKyspe3ZhciBRPUxbT107UCs9XCIgICAgcG9saWN5IG9pZDogXCIrUS5wb2xpY3lvaWQrXCJcXG5cIjtpZihRLmFycmF5PT09dW5kZWZpbmVkKXtjb250aW51ZX1mb3IodmFyIE49MDtOPFEuYXJyYXkubGVuZ3RoO04rKyl7dmFyIE09US5hcnJheVtOXTtpZihNLmNwcyE9PXVuZGVmaW5lZCl7UCs9XCIgICAgY3BzOiBcIitNLmNwcytcIlxcblwifX19cmV0dXJuIFB9O3ZhciBEPWZ1bmN0aW9uKFApe3ZhciBPPVwiXCI7dmFyIEw9UC5hcnJheTtmb3IodmFyIE49MDtOPEwubGVuZ3RoO04rKyl7dmFyIFE9TFtOXTt0cnl7aWYoUS5kcG5hbWUuZnVsbFswXS51cmkhPT11bmRlZmluZWQpe08rPVwiICAgIFwiK1EuZHBuYW1lLmZ1bGxbMF0udXJpK1wiXFxuXCJ9fWNhdGNoKE0pe310cnl7aWYoUS5kbmFtZS5mdWxsWzBdLmRuLmhleCE9PXVuZGVmaW5lZCl7Tys9XCIgICAgXCIrWDUwOS5oZXgyZG4oUS5kcG5hbWUuZnVsbFswXS5kbi5oZXgpK1wiXFxuXCJ9fWNhdGNoKE0pe319cmV0dXJuIE99O3ZhciBCPWZ1bmN0aW9uKFApe3ZhciBPPVwiXCI7dmFyIEw9UC5hcnJheTtmb3IodmFyIE09MDtNPEwubGVuZ3RoO00rKyl7dmFyIE49TFtNXTtpZihOLmNhaXNzdWVyIT09dW5kZWZpbmVkKXtPKz1cIiAgICBjYWlzc3VlcjogXCIrTi5jYWlzc3VlcitcIlxcblwifWlmKE4ub2NzcCE9PXVuZGVmaW5lZCl7Tys9XCIgICAgb2NzcDogXCIrTi5vY3NwK1wiXFxuXCJ9fXJldHVybiBPfTt2YXIgdj1YNTA5O3ZhciBGLEUsSztGPVwiQmFzaWMgRmllbGRzXFxuXCI7Ris9XCIgIHNlcmlhbCBudW1iZXI6IFwiK3RoaXMuZ2V0U2VyaWFsTnVtYmVySGV4KCkrXCJcXG5cIjtGKz1cIiAgc2lnbmF0dXJlIGFsZ29yaXRobTogXCIrdGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCgpK1wiXFxuXCI7Ris9XCIgIGlzc3VlcjogXCIrdGhpcy5nZXRJc3N1ZXJTdHJpbmcoKStcIlxcblwiO0YrPVwiICBub3RCZWZvcmU6IFwiK3RoaXMuZ2V0Tm90QmVmb3JlKCkrXCJcXG5cIjtGKz1cIiAgbm90QWZ0ZXI6IFwiK3RoaXMuZ2V0Tm90QWZ0ZXIoKStcIlxcblwiO0YrPVwiICBzdWJqZWN0OiBcIit0aGlzLmdldFN1YmplY3RTdHJpbmcoKStcIlxcblwiO0YrPVwiICBzdWJqZWN0IHB1YmxpYyBrZXkgaW5mbzogXFxuXCI7RT10aGlzLmdldFB1YmxpY0tleSgpO0YrPVwiICAgIGtleSBhbGdvcml0aG06IFwiK0UudHlwZStcIlxcblwiO2lmKEUudHlwZT09PVwiUlNBXCIpe0YrPVwiICAgIG49XCIraGV4dG9wb3NoZXgoRS5uLnRvU3RyaW5nKDE2KSkuc3Vic3RyKDAsMTYpK1wiLi4uXFxuXCI7Ris9XCIgICAgZT1cIitoZXh0b3Bvc2hleChFLmUudG9TdHJpbmcoMTYpKStcIlxcblwifUs9dGhpcy5hRXh0SW5mbztpZihLIT09dW5kZWZpbmVkJiZLIT09bnVsbCl7Ris9XCJYNTA5djMgRXh0ZW5zaW9uczpcXG5cIjtmb3IodmFyIEg9MDtIPEsubGVuZ3RoO0grKyl7dmFyIEo9S1tIXTt2YXIgdD1LSlVSLmFzbjEueDUwOS5PSUQub2lkMm5hbWUoSi5vaWQpO2lmKHQ9PT1cIlwiKXt0PUoub2lkfXZhciBHPVwiXCI7aWYoSi5jcml0aWNhbD09PXRydWUpe0c9XCJDUklUSUNBTFwifUYrPVwiICBcIit0K1wiIFwiK0crXCI6XFxuXCI7aWYodD09PVwiYmFzaWNDb25zdHJhaW50c1wiKXt2YXIgdz10aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHMoKTtpZih3LmNBPT09dW5kZWZpbmVkKXtGKz1cIiAgICB7fVxcblwifWVsc2V7Ris9XCIgICAgY0E9dHJ1ZVwiO2lmKHcucGF0aExlbiE9PXVuZGVmaW5lZCl7Ris9XCIsIHBhdGhMZW49XCIrdy5wYXRoTGVufUYrPVwiXFxuXCJ9fWVsc2V7aWYodD09PVwia2V5VXNhZ2VcIil7Ris9XCIgICAgXCIrdGhpcy5nZXRFeHRLZXlVc2FnZVN0cmluZygpK1wiXFxuXCJ9ZWxzZXtpZih0PT09XCJzdWJqZWN0S2V5SWRlbnRpZmllclwiKXtGKz1cIiAgICBcIit0aGlzLmdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyKCkua2lkLmhleCtcIlxcblwifWVsc2V7aWYodD09PVwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwiKXt2YXIgeD10aGlzLmdldEV4dEF1dGhvcml0eUtleUlkZW50aWZpZXIoKTtpZih4LmtpZCE9PXVuZGVmaW5lZCl7Ris9XCIgICAga2lkPVwiK3gua2lkLmhleCtcIlxcblwifX1lbHNle2lmKHQ9PT1cImV4dEtleVVzYWdlXCIpe3ZhciBJPXRoaXMuZ2V0RXh0RXh0S2V5VXNhZ2UoKS5hcnJheTtGKz1cIiAgICBcIitJLmpvaW4oXCIsIFwiKStcIlxcblwifWVsc2V7aWYodD09PVwic3ViamVjdEFsdE5hbWVcIil7dmFyIHk9dSh0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lKCkpO0YrPVwiICAgIFwiK3krXCJcXG5cIn1lbHNle2lmKHQ9PT1cImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKXt2YXIgQz10aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50cygpO0YrPUQoQyl9ZWxzZXtpZih0PT09XCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpe3ZhciB6PXRoaXMuZ2V0RXh0QXV0aG9yaXR5SW5mb0FjY2VzcygpO0YrPUIoeil9ZWxzZXtpZih0PT09XCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpe0YrPUEodGhpcy5nZXRFeHRDZXJ0aWZpY2F0ZVBvbGljaWVzKCkpfX19fX19fX19fX1GKz1cInNpZ25hdHVyZSBhbGdvcml0aG06IFwiK3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZSgpK1wiXFxuXCI7Ris9XCJzaWduYXR1cmU6IFwiK3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXgoKS5zdWJzdHIoMCwxNikrXCIuLi5cXG5cIjtyZXR1cm4gRn07aWYodHlwZW9mIHE9PVwic3RyaW5nXCIpe2lmKHEuaW5kZXhPZihcIi0tLS0tQkVHSU5cIikhPS0xKXt0aGlzLnJlYWRDZXJ0UEVNKHEpfWVsc2V7aWYoS0pVUi5sYW5nLlN0cmluZy5pc0hleChxKSl7dGhpcy5yZWFkQ2VydEhleChxKX19fX1YNTA5LmhleDJkbj1mdW5jdGlvbihlLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH12YXIgYT1uZXcgWDUwOSgpO3ZhciBjPUFTTjFIRVguZ2V0VExWKGUsYik7dmFyIGQ9YS5nZXRYNTAwTmFtZShlKTtyZXR1cm4gZC5zdHJ9O1g1MDkuaGV4MnJkbj1mdW5jdGlvbihmLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH1pZihmLnN1YnN0cihiLDIpIT09XCIzMVwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUkROXCIpfXZhciBjPW5ldyBBcnJheSgpO3ZhciBkPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZixiKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyl7Yy5wdXNoKFg1MDkuaGV4MmF0dHJUeXBlVmFsdWUoZixkW2VdKSl9Yz1jLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKFwiK1wiLFwiXFxcXCtcIil9KTtyZXR1cm4gYy5qb2luKFwiK1wiKX07WDUwOS5oZXgyYXR0clR5cGVWYWx1ZT1mdW5jdGlvbihkLGkpe3ZhciBqPUFTTjFIRVg7dmFyIGg9ai5nZXRWO2lmKGk9PT11bmRlZmluZWQpe2k9MH1pZihkLnN1YnN0cihpLDIpIT09XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgYXR0cmlidXRlIHR5cGUgYW5kIHZhbHVlXCIpfXZhciBnPWouZ2V0Q2hpbGRJZHgoZCxpKTtpZihnLmxlbmd0aCE9PTJ8fGQuc3Vic3RyKGdbMF0sMikhPT1cIjA2XCIpe1wibWFsZm9ybWVkIGF0dHJpYnV0ZSB0eXBlIGFuZCB2YWx1ZVwifXZhciBiPWgoZCxnWzBdKTt2YXIgZj1LSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQoYik7dmFyIGU9S0pVUi5hc24xLng1MDkuT0lELm9pZDJhdHlwZShmKTt2YXIgYT1oKGQsZ1sxXSk7dmFyIGM9aGV4dG9yc3RyKGEpO3JldHVybiBlK1wiPVwiK2N9O1g1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRIZXg9ZnVuY3Rpb24oYil7dmFyIGE9bmV3IFg1MDkoKTthLnJlYWRDZXJ0SGV4KGIpO3JldHVybiBhLmdldFB1YmxpY0tleSgpfTtYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0UEVNPWZ1bmN0aW9uKGIpe3ZhciBhPW5ldyBYNTA5KCk7YS5yZWFkQ2VydFBFTShiKTtyZXR1cm4gYS5nZXRQdWJsaWNLZXkoKX07WDUwOS5nZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTT1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBnPWUuZ2V0VmJ5TGlzdDt2YXIgYj17fTt2YXIgYSxmLGQ7Yi5hbGdwYXJhbT1udWxsO2E9bmV3IFg1MDkoKTthLnJlYWRDZXJ0UEVNKGMpO2Y9YS5nZXRQdWJsaWNLZXlIZXgoKTtiLmtleWhleD1nKGYsMCxbMV0sXCIwM1wiKS5zdWJzdHIoMik7Yi5hbGdvaWQ9ZyhmLDAsWzAsMF0sXCIwNlwiKTtpZihiLmFsZ29pZD09PVwiMmE4NjQ4Y2UzZDAyMDFcIil7Yi5hbGdwYXJhbT1nKGYsMCxbMCwxXSxcIjA2XCIpfXJldHVybiBifTtYNTA5LktFWVVTQUdFX05BTUU9W1wiZGlnaXRhbFNpZ25hdHVyZVwiLFwibm9uUmVwdWRpYXRpb25cIixcImtleUVuY2lwaGVybWVudFwiLFwiZGF0YUVuY2lwaGVybWVudFwiLFwia2V5QWdyZWVtZW50XCIsXCJrZXlDZXJ0U2lnblwiLFwiY1JMU2lnblwiLFwiZW5jaXBoZXJPbmx5XCIsXCJkZWNpcGhlck9ubHlcIl07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuandzPT1cInVuZGVmaW5lZFwifHwhS0pVUi5qd3Mpe0tKVVIuandzPXt9fUtKVVIuandzLkpXUz1mdW5jdGlvbigpe3ZhciBiPUtKVVIsYT1iLmp3cy5KV1MsYz1hLmlzU2FmZUpTT05TdHJpbmc7dGhpcy5wYXJzZUpXUz1mdW5jdGlvbihnLGope2lmKCh0aGlzLnBhcnNlZEpXUyE9PXVuZGVmaW5lZCkmJihqfHwodGhpcy5wYXJzZWRKV1Muc2lndmFsSCE9PXVuZGVmaW5lZCkpKXtyZXR1cm59dmFyIGk9Zy5tYXRjaCgvXihbXi5dKylcXC4oW14uXSspXFwuKFteLl0rKSQvKTtpZihpPT1udWxsKXt0aHJvd1wiSldTIHNpZ25hdHVyZSBpcyBub3QgYSBmb3JtIG9mICdIZWFkLlBheWxvYWQuU2lnVmFsdWUnLlwifXZhciBrPWlbMV07dmFyIGU9aVsyXTt2YXIgbD1pWzNdO3ZhciBuPWsrXCIuXCIrZTt0aGlzLnBhcnNlZEpXUz17fTt0aGlzLnBhcnNlZEpXUy5oZWFkQjY0VT1rO3RoaXMucGFyc2VkSldTLnBheWxvYWRCNjRVPWU7dGhpcy5wYXJzZWRKV1Muc2lndmFsQjY0VT1sO3RoaXMucGFyc2VkSldTLnNpPW47aWYoIWope3ZhciBoPWI2NHV0b2hleChsKTt2YXIgZj1wYXJzZUJpZ0ludChoLDE2KTt0aGlzLnBhcnNlZEpXUy5zaWd2YWxIPWg7dGhpcy5wYXJzZWRKV1Muc2lndmFsQkk9Zn12YXIgZD1iNjR1dG91dGY4KGspO3ZhciBtPWI2NHV0b3V0ZjgoZSk7dGhpcy5wYXJzZWRKV1MuaGVhZFM9ZDt0aGlzLnBhcnNlZEpXUy5wYXlsb2FkUz1tO2lmKCFjKGQsdGhpcy5wYXJzZWRKV1MsXCJoZWFkUFwiKSl7dGhyb3dcIm1hbGZvcm1lZCBKU09OIHN0cmluZyBmb3IgSldTIEhlYWQ6IFwiK2R9fX07S0pVUi5qd3MuSldTLnNpZ249ZnVuY3Rpb24oaix3LHosQSxhKXt2YXIgeD1LSlVSLG49eC5qd3Mscj1uLkpXUyxoPXIucmVhZFNhZmVKU09OU3RyaW5nLHE9ci5pc1NhZmVKU09OU3RyaW5nLGQ9eC5jcnlwdG8sbD1kLkVDRFNBLHA9ZC5NYWMsYz1kLlNpZ25hdHVyZSx1PUpTT047dmFyIHQsayxvO2lmKHR5cGVvZiB3IT1cInN0cmluZ1wiJiZ0eXBlb2YgdyE9XCJvYmplY3RcIil7dGhyb3dcInNwSGVhZGVyIG11c3QgYmUgSlNPTiBzdHJpbmcgb3Igb2JqZWN0OiBcIit3fWlmKHR5cGVvZiB3PT1cIm9iamVjdFwiKXtrPXc7dD11LnN0cmluZ2lmeShrKX1pZih0eXBlb2Ygdz09XCJzdHJpbmdcIil7dD13O2lmKCFxKHQpKXt0aHJvd1wiSldTIEhlYWQgaXMgbm90IHNhZmUgSlNPTiBzdHJpbmc6IFwiK3R9az1oKHQpfW89ejtpZih0eXBlb2Ygej09XCJvYmplY3RcIil7bz11LnN0cmluZ2lmeSh6KX1pZigoaj09XCJcInx8aj09bnVsbCkmJmsuYWxnIT09dW5kZWZpbmVkKXtqPWsuYWxnfWlmKChqIT1cIlwiJiZqIT1udWxsKSYmay5hbGc9PT11bmRlZmluZWQpe2suYWxnPWo7dD11LnN0cmluZ2lmeShrKX1pZihqIT09ay5hbGcpe3Rocm93XCJhbGcgYW5kIHNIZWFkZXIuYWxnIGRvZXNuJ3QgbWF0Y2g6IFwiK2orXCIhPVwiK2suYWxnfXZhciBzPW51bGw7aWYoci5qd3NhbGcyc2lnYWxnW2pdPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgYWxnIG5hbWU6IFwiK2p9ZWxzZXtzPXIuandzYWxnMnNpZ2FsZ1tqXX12YXIgZT11dGY4dG9iNjR1KHQpO3ZhciBtPXV0Zjh0b2I2NHUobyk7dmFyIGI9ZStcIi5cIittO3ZhciB5PVwiXCI7aWYocy5zdWJzdHIoMCw0KT09XCJIbWFjXCIpe2lmKEE9PT11bmRlZmluZWQpe3Rocm93XCJtYWMga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSFMqIGFsZ1wifXZhciBpPW5ldyBwKHthbGc6cyxwcm92OlwiY3J5cHRvanNcIixwYXNzOkF9KTtpLnVwZGF0ZVN0cmluZyhiKTt5PWkuZG9GaW5hbCgpfWVsc2V7aWYocy5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGY9bmV3IGMoe2FsZzpzfSk7Zi5pbml0KEEsYSk7Zi51cGRhdGVTdHJpbmcoYik7dmFyIGc9Zi5zaWduKCk7eT1LSlVSLmNyeXB0by5FQ0RTQS5hc24xU2lnVG9Db25jYXRTaWcoZyl9ZWxzZXtpZihzIT1cIm5vbmVcIil7dmFyIGY9bmV3IGMoe2FsZzpzfSk7Zi5pbml0KEEsYSk7Zi51cGRhdGVTdHJpbmcoYik7eT1mLnNpZ24oKX19fXZhciB2PWhleHRvYjY0dSh5KTtyZXR1cm4gYitcIi5cIit2fTtLSlVSLmp3cy5KV1MudmVyaWZ5PWZ1bmN0aW9uKHcsQixuKXt2YXIgeD1LSlVSLHE9eC5qd3MsdD1xLkpXUyxpPXQucmVhZFNhZmVKU09OU3RyaW5nLGU9eC5jcnlwdG8scD1lLkVDRFNBLHM9ZS5NYWMsZD1lLlNpZ25hdHVyZSxtO2lmKHR5cGVvZiBSU0FLZXkhPT11bmRlZmluZWQpe209UlNBS2V5fXZhciB5PXcuc3BsaXQoXCIuXCIpO2lmKHkubGVuZ3RoIT09Myl7cmV0dXJuIGZhbHNlfXZhciBmPXlbMF07dmFyIHI9eVsxXTt2YXIgYz1mK1wiLlwiK3I7dmFyIEE9YjY0dXRvaGV4KHlbMl0pO3ZhciBsPWkoYjY0dXRvdXRmOCh5WzBdKSk7dmFyIGs9bnVsbDt2YXIgej1udWxsO2lmKGwuYWxnPT09dW5kZWZpbmVkKXt0aHJvd1wiYWxnb3JpdGhtIG5vdCBzcGVjaWZpZWQgaW4gaGVhZGVyXCJ9ZWxzZXtrPWwuYWxnO3o9ay5zdWJzdHIoMCwyKX1pZihuIT1udWxsJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobik9PT1cIltvYmplY3QgQXJyYXldXCImJm4ubGVuZ3RoPjApe3ZhciBiPVwiOlwiK24uam9pbihcIjpcIikrXCI6XCI7aWYoYi5pbmRleE9mKFwiOlwiK2srXCI6XCIpPT0tMSl7dGhyb3dcImFsZ29yaXRobSAnXCIraytcIicgbm90IGFjY2VwdGVkIGluIHRoZSBsaXN0XCJ9fWlmKGshPVwibm9uZVwiJiZCPT09bnVsbCl7dGhyb3dcImtleSBzaGFsbCBiZSBzcGVjaWZpZWQgdG8gdmVyaWZ5LlwifWlmKHR5cGVvZiBCPT1cInN0cmluZ1wiJiZCLmluZGV4T2YoXCItLS0tLUJFR0lOIFwiKSE9LTEpe0I9S0VZVVRJTC5nZXRLZXkoQil9aWYoej09XCJSU1wifHx6PT1cIlBTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIG0pKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgUlNBS2V5IG9iaiBmb3IgUlMqIGFuZCBQUyogYWxnc1wifX1pZih6PT1cIkVTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIHApKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgRUNEU0Egb2JqIGZvciBFUyogYWxnc1wifX1pZihrPT1cIm5vbmVcIil7fXZhciB1PW51bGw7aWYodC5qd3NhbGcyc2lnYWxnW2wuYWxnXT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGFsZyBuYW1lOiBcIitrfWVsc2V7dT10Lmp3c2FsZzJzaWdhbGdba119aWYodT09XCJub25lXCIpe3Rocm93XCJub3Qgc3VwcG9ydGVkXCJ9ZWxzZXtpZih1LnN1YnN0cigwLDQpPT1cIkhtYWNcIil7dmFyIG89bnVsbDtpZihCPT09dW5kZWZpbmVkKXt0aHJvd1wiaGV4YWRlY2ltYWwga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSE1BQ1wifXZhciBqPW5ldyBzKHthbGc6dSxwYXNzOkJ9KTtqLnVwZGF0ZVN0cmluZyhjKTtvPWouZG9GaW5hbCgpO3JldHVybiBBPT1vfWVsc2V7aWYodS5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGg9bnVsbDt0cnl7aD1wLmNvbmNhdFNpZ1RvQVNOMVNpZyhBKX1jYXRjaCh2KXtyZXR1cm4gZmFsc2V9dmFyIGc9bmV3IGQoe2FsZzp1fSk7Zy5pbml0KEIpO2cudXBkYXRlU3RyaW5nKGMpO3JldHVybiBnLnZlcmlmeShoKX1lbHNle3ZhciBnPW5ldyBkKHthbGc6dX0pO2cuaW5pdChCKTtnLnVwZGF0ZVN0cmluZyhjKTtyZXR1cm4gZy52ZXJpZnkoQSl9fX19O0tKVVIuandzLkpXUy5wYXJzZT1mdW5jdGlvbihnKXt2YXIgYz1nLnNwbGl0KFwiLlwiKTt2YXIgYj17fTt2YXIgZixlLGQ7aWYoYy5sZW5ndGghPTImJmMubGVuZ3RoIT0zKXt0aHJvd1wibWFsZm9ybWVkIHNKV1M6IHdyb25nIG51bWJlciBvZiAnLicgc3BsaXR0ZWQgZWxlbWVudHNcIn1mPWNbMF07ZT1jWzFdO2lmKGMubGVuZ3RoPT0zKXtkPWNbMl19Yi5oZWFkZXJPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGYpKTtiLnBheWxvYWRPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGUpKTtiLmhlYWRlclBQPUpTT04uc3RyaW5naWZ5KGIuaGVhZGVyT2JqLG51bGwsXCIgIFwiKTtpZihiLnBheWxvYWRPYmo9PW51bGwpe2IucGF5bG9hZFBQPWI2NHV0b3V0ZjgoZSl9ZWxzZXtiLnBheWxvYWRQUD1KU09OLnN0cmluZ2lmeShiLnBheWxvYWRPYmosbnVsbCxcIiAgXCIpfWlmKGQhPT11bmRlZmluZWQpe2Iuc2lnSGV4PWI2NHV0b2hleChkKX1yZXR1cm4gYn07S0pVUi5qd3MuSldTLnZlcmlmeUpXVD1mdW5jdGlvbihlLGwscil7dmFyIGQ9S0pVUixqPWQuandzLG89ai5KV1Msbj1vLnJlYWRTYWZlSlNPTlN0cmluZyxwPW8uaW5BcnJheSxmPW8uaW5jbHVkZWRBcnJheTt2YXIgaz1lLnNwbGl0KFwiLlwiKTt2YXIgYz1rWzBdO3ZhciBpPWtbMV07dmFyIHE9YytcIi5cIitpO3ZhciBtPWI2NHV0b2hleChrWzJdKTt2YXIgaD1uKGI2NHV0b3V0ZjgoYykpO3ZhciBnPW4oYjY0dXRvdXRmOChpKSk7aWYoaC5hbGc9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZX1pZihyLmFsZz09PXVuZGVmaW5lZCl7dGhyb3dcImFjY2VwdEZpZWxkLmFsZyBzaGFsbCBiZSBzcGVjaWZpZWRcIn1pZighcChoLmFsZyxyLmFsZykpe3JldHVybiBmYWxzZX1pZihnLmlzcyE9PXVuZGVmaW5lZCYmdHlwZW9mIHIuaXNzPT09XCJvYmplY3RcIil7aWYoIXAoZy5pc3Msci5pc3MpKXtyZXR1cm4gZmFsc2V9fWlmKGcuc3ViIT09dW5kZWZpbmVkJiZ0eXBlb2Ygci5zdWI9PT1cIm9iamVjdFwiKXtpZighcChnLnN1YixyLnN1Yikpe3JldHVybiBmYWxzZX19aWYoZy5hdWQhPT11bmRlZmluZWQmJnR5cGVvZiByLmF1ZD09PVwib2JqZWN0XCIpe2lmKHR5cGVvZiBnLmF1ZD09XCJzdHJpbmdcIil7aWYoIXAoZy5hdWQsci5hdWQpKXtyZXR1cm4gZmFsc2V9fWVsc2V7aWYodHlwZW9mIGcuYXVkPT1cIm9iamVjdFwiKXtpZighZihnLmF1ZCxyLmF1ZCkpe3JldHVybiBmYWxzZX19fX12YXIgYj1qLkludERhdGUuZ2V0Tm93KCk7aWYoci52ZXJpZnlBdCE9PXVuZGVmaW5lZCYmdHlwZW9mIHIudmVyaWZ5QXQ9PT1cIm51bWJlclwiKXtiPXIudmVyaWZ5QXR9aWYoci5ncmFjZVBlcmlvZD09PXVuZGVmaW5lZHx8dHlwZW9mIHIuZ3JhY2VQZXJpb2QhPT1cIm51bWJlclwiKXtyLmdyYWNlUGVyaW9kPTB9aWYoZy5leHAhPT11bmRlZmluZWQmJnR5cGVvZiBnLmV4cD09XCJudW1iZXJcIil7aWYoZy5leHArci5ncmFjZVBlcmlvZDxiKXtyZXR1cm4gZmFsc2V9fWlmKGcubmJmIT09dW5kZWZpbmVkJiZ0eXBlb2YgZy5uYmY9PVwibnVtYmVyXCIpe2lmKGI8Zy5uYmYtci5ncmFjZVBlcmlvZCl7cmV0dXJuIGZhbHNlfX1pZihnLmlhdCE9PXVuZGVmaW5lZCYmdHlwZW9mIGcuaWF0PT1cIm51bWJlclwiKXtpZihiPGcuaWF0LXIuZ3JhY2VQZXJpb2Qpe3JldHVybiBmYWxzZX19aWYoZy5qdGkhPT11bmRlZmluZWQmJnIuanRpIT09dW5kZWZpbmVkKXtpZihnLmp0aSE9PXIuanRpKXtyZXR1cm4gZmFsc2V9fWlmKCFvLnZlcmlmeShlLGwsci5hbGcpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbmNsdWRlZEFycmF5PWZ1bmN0aW9uKGIsYSl7dmFyIGM9S0pVUi5qd3MuSldTLmluQXJyYXk7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe2lmKCFjKGJbZF0sYSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbkFycmF5PWZ1bmN0aW9uKGQsYil7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2lmKGJbY109PWQpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O0tKVVIuandzLkpXUy5qd3NhbGcyc2lnYWxnPXtIUzI1NjpcIkhtYWNTSEEyNTZcIixIUzM4NDpcIkhtYWNTSEEzODRcIixIUzUxMjpcIkhtYWNTSEE1MTJcIixSUzI1NjpcIlNIQTI1NndpdGhSU0FcIixSUzM4NDpcIlNIQTM4NHdpdGhSU0FcIixSUzUxMjpcIlNIQTUxMndpdGhSU0FcIixFUzI1NjpcIlNIQTI1NndpdGhFQ0RTQVwiLEVTMzg0OlwiU0hBMzg0d2l0aEVDRFNBXCIsUFMyNTY6XCJTSEEyNTZ3aXRoUlNBYW5kTUdGMVwiLFBTMzg0OlwiU0hBMzg0d2l0aFJTQWFuZE1HRjFcIixQUzUxMjpcIlNIQTUxMndpdGhSU0FhbmRNR0YxXCIsbm9uZTpcIm5vbmVcIix9O0tKVVIuandzLkpXUy5pc1NhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGMsYixkKXt2YXIgZT1udWxsO3RyeXtlPWpzb25QYXJzZShjKTtpZih0eXBlb2YgZSE9XCJvYmplY3RcIil7cmV0dXJuIDB9aWYoZS5jb25zdHJ1Y3Rvcj09PUFycmF5KXtyZXR1cm4gMH1pZihiKXtiW2RdPWV9cmV0dXJuIDF9Y2F0Y2goYSl7cmV0dXJuIDB9fTtLSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGIpe3ZhciBjPW51bGw7dHJ5e2M9anNvblBhcnNlKGIpO2lmKHR5cGVvZiBjIT1cIm9iamVjdFwiKXtyZXR1cm4gbnVsbH1pZihjLmNvbnN0cnVjdG9yPT09QXJyYXkpe3JldHVybiBudWxsfXJldHVybiBjfWNhdGNoKGEpe3JldHVybiBudWxsfX07S0pVUi5qd3MuSldTLmdldEVuY29kZWRTaWduYXR1cmVWYWx1ZUZyb21KV1M9ZnVuY3Rpb24oYil7dmFyIGE9Yi5tYXRjaCgvXlteLl0rXFwuW14uXStcXC4oW14uXSspJC8pO2lmKGE9PW51bGwpe3Rocm93XCJKV1Mgc2lnbmF0dXJlIGlzIG5vdCBhIGZvcm0gb2YgJ0hlYWQuUGF5bG9hZC5TaWdWYWx1ZScuXCJ9cmV0dXJuIGFbMV19O0tKVVIuandzLkpXUy5nZXRKV0t0aHVtYnByaW50PWZ1bmN0aW9uKGQpe2lmKGQua3R5IT09XCJSU0FcIiYmZC5rdHkhPT1cIkVDXCImJmQua3R5IT09XCJvY3RcIil7dGhyb3dcInVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgSldLIFRodW1wcmludFwifXZhciBhPVwie1wiO2lmKGQua3R5PT09XCJSU0FcIil7aWYodHlwZW9mIGQubiE9XCJzdHJpbmdcInx8dHlwZW9mIGQuZSE9XCJzdHJpbmdcIil7dGhyb3dcIndyb25nIG4gYW5kIGUgdmFsdWUgZm9yIFJTQSBrZXlcIn1hKz0nXCJlXCI6XCInK2QuZSsnXCIsJzthKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wiblwiOlwiJytkLm4rJ1wifSd9ZWxzZXtpZihkLmt0eT09PVwiRUNcIil7aWYodHlwZW9mIGQuY3J2IT1cInN0cmluZ1wifHx0eXBlb2YgZC54IT1cInN0cmluZ1wifHx0eXBlb2YgZC55IT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgY3J2LCB4IGFuZCB5IHZhbHVlIGZvciBFQyBrZXlcIn1hKz0nXCJjcnZcIjpcIicrZC5jcnYrJ1wiLCc7YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcInhcIjpcIicrZC54KydcIiwnO2ErPSdcInlcIjpcIicrZC55KydcIn0nfWVsc2V7aWYoZC5rdHk9PT1cIm9jdFwiKXtpZih0eXBlb2YgZC5rIT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgayB2YWx1ZSBmb3Igb2N0KHN5bW1ldHJpYykga2V5XCJ9YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcImtcIjpcIicrZC5rKydcIn0nfX19dmFyIGI9cnN0cnRvaGV4KGEpO3ZhciBjPUtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChiLFwic2hhMjU2XCIpO3ZhciBlPWhleHRvYjY0dShjKTtyZXR1cm4gZX07S0pVUi5qd3MuSW50RGF0ZT17fTtLSlVSLmp3cy5JbnREYXRlLmdldD1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmp3cy5JbnREYXRlLGQ9Yi5nZXROb3csYT1iLmdldFp1bHU7aWYoYz09XCJub3dcIil7cmV0dXJuIGQoKX1lbHNle2lmKGM9PVwibm93ICsgMWhvdXJcIil7cmV0dXJuIGQoKSs2MCo2MH1lbHNle2lmKGM9PVwibm93ICsgMWRheVwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0fWVsc2V7aWYoYz09XCJub3cgKyAxbW9udGhcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozMH1lbHNle2lmKGM9PVwibm93ICsgMXllYXJcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozNjV9ZWxzZXtpZihjLm1hdGNoKC9aJC8pKXtyZXR1cm4gYShjKX1lbHNle2lmKGMubWF0Y2goL15bMC05XSskLykpe3JldHVybiBwYXJzZUludChjKX19fX19fX10aHJvd1widW5zdXBwb3J0ZWQgZm9ybWF0OiBcIitjfTtLSlVSLmp3cy5JbnREYXRlLmdldFp1bHU9ZnVuY3Rpb24oYSl7cmV0dXJuIHp1bHV0b3NlYyhhKX07S0pVUi5qd3MuSW50RGF0ZS5nZXROb3c9ZnVuY3Rpb24oKXt2YXIgYT1+fihuZXcgRGF0ZSgpLzEwMDApO3JldHVybiBhfTtLSlVSLmp3cy5JbnREYXRlLmludERhdGUyVVRDU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBEYXRlKGEqMTAwMCk7cmV0dXJuIGIudG9VVENTdHJpbmcoKX07S0pVUi5qd3MuSW50RGF0ZS5pbnREYXRlMlp1bHU9ZnVuY3Rpb24oZSl7dmFyIGk9bmV3IERhdGUoZSoxMDAwKSxoPShcIjAwMDBcIitpLmdldFVUQ0Z1bGxZZWFyKCkpLnNsaWNlKC00KSxnPShcIjAwXCIrKGkuZ2V0VVRDTW9udGgoKSsxKSkuc2xpY2UoLTIpLGI9KFwiMDBcIitpLmdldFVUQ0RhdGUoKSkuc2xpY2UoLTIpLGE9KFwiMDBcIitpLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSxjPShcIjAwXCIraS5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSxmPShcIjAwXCIraS5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKTtyZXR1cm4gaCtnK2IrYStjK2YrXCJaXCJ9O1xuZXhwb3J0IHsgU2VjdXJlUmFuZG9tIH07XHJcbmV4cG9ydCB7IHJuZ19zZWVkX3RpbWUgfTtcclxuXHJcbmV4cG9ydCB7IEJpZ0ludGVnZXIgfTtcclxuZXhwb3J0IHsgUlNBS2V5IH07XHJcbmV4cG9ydCBjb25zdCB7IEVEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBTaWduYXR1cmUgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBNZXNzYWdlRGlnZXN0IH0gPSAgS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IE1hYyB9ID0gS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IENpcGhlciB9ID0gIEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgeyBLRVlVVElMIH07XHJcbmV4cG9ydCB7IEFTTjFIRVggfTtcclxuZXhwb3J0IHsgWDUwOSB9O1xyXG5leHBvcnQgeyBDcnlwdG9KUyB9O1xyXG5cclxuLy8gZXh0L2Jhc2U2NC5qc1xyXG5leHBvcnQgeyBiNjR0b2hleCB9O1xyXG5leHBvcnQgeyBiNjR0b0JBIH07XHJcblxyXG4vLyBiYXNlNjR4LmpzXHJcbmV4cG9ydCB7IHN0b0JBIH07XHJcbmV4cG9ydCB7IEJBdG9zIH07XHJcbmV4cG9ydCB7IEJBdG9oZXggfTtcclxuZXhwb3J0IHsgc3RvaGV4IH07XHJcbmV4cG9ydCB7IHN0b2I2NCB9O1xyXG5leHBvcnQgeyBzdG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b3MgfTtcclxuZXhwb3J0IHsgYjY0dG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b2I2NCB9O1xyXG5leHBvcnQgeyBoZXgyYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG9oZXggfTtcclxuZXhwb3J0IHsgdXRmOHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG91dGY4IH07XHJcbmV4cG9ydCB7IHV0Zjh0b2I2NCB9O1xyXG5leHBvcnQgeyBiNjR0b3V0ZjggfTtcclxuZXhwb3J0IHsgdXRmOHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXRmOCB9O1xyXG5leHBvcnQgeyBoZXh0b3JzdHIgfTtcclxuZXhwb3J0IHsgcnN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0bmwgfTtcclxuZXhwb3J0IHsgYjY0bmx0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b3BlbSB9O1xyXG5leHBvcnQgeyBwZW10b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b0FycmF5QnVmZmVyIH07XHJcbmV4cG9ydCB7IEFycmF5QnVmZmVydG9oZXggfTtcclxuZXhwb3J0IHsgenVsdXRvbXNlYyB9O1xyXG5leHBvcnQgeyB6dWx1dG9zZWMgfTtcclxuZXhwb3J0IHsgenVsdXRvZGF0ZSB9O1xyXG5leHBvcnQgeyBkYXRldG96dWx1IH07XHJcbmV4cG9ydCB7IHVyaWNtcHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXJpY21wIH07XHJcbmV4cG9ydCB7IGlwdjZ0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b2lwdjYgfTtcclxuZXhwb3J0IHsgaGV4dG9pcCB9O1xyXG5leHBvcnQgeyBpcHRvaGV4IH07XHJcbmV4cG9ydCB7IGVuY29kZVVSSUNvbXBvbmVudEFsbCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvVW5peCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvRG9zIH07XHJcbmV4cG9ydCB7IGhleHRvcG9zaGV4IH07XHJcbmV4cG9ydCB7IGludGFyeXN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IHN0cmRpZmZpZHggfTtcclxuXHJcbi8vIG5hbWUgc3BhY2VzXHJcbmV4cG9ydCB7IEtKVVIgfTtcclxuY29uc3QgX2NyeXB0byA9ICBLSlVSLmNyeXB0bztcclxuZXhwb3J0IHsgX2NyeXB0byBhcyBjcnlwdG8gfTtcclxuZXhwb3J0IGNvbnN0IHsgYXNuMSB9ID0gS0pVUjtcclxuZXhwb3J0IGNvbnN0IHsgandzIH0gPSBLSlVSO1xyXG5leHBvcnQgY29uc3QgeyBsYW5nIH0gPSBLSlVSO1xyXG5cclxuXHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsInZhciBNYXAgPSByZXF1aXJlKCcuL2VzNi5tYXAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAocmVxdWlyZSgnLi9lczYud2Vhay1tYXAnKSkoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0YXJnZXRNZXRhZGF0YS5zZXQodGFyZ2V0S2V5LCBrZXlNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH0gcmV0dXJuIGtleU1ldGFkYXRhO1xufTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgdHJ1ZSkuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcbn07XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcbnZhciB0b01ldGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcbnZhciBleHAgPSBmdW5jdGlvbiAoTykge1xuICAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCBPKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIG1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIGtleTogdG9NZXRhS2V5LFxuICBleHA6IGV4cFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNik7XG52YXIgS0VZID0gJ2ZpbmRJbmRleCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciAkbmF0aXZlID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE0IC8gMTUuNC40LjE1IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8pIGlmIChPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuIiwiLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuL19kYXRlLXRvLWlzby1zdHJpbmcnKTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KSwgJ0RhdGUnLCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiIsIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpO1xufVxuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHsgYXNpbmg6IGFzaW5oIH0pO1xuIiwiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIiwiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG4vLyBzb21lIFdlYktpdCB2ZXJzaW9ucyBmYWlscyB3aXRoIGJpZyBudW1iZXJzLCBzb21lIGhhcyB3cm9uZyBhcml0eVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBsb2cxcDogcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpIH0pO1xuIiwiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIiwiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIiwiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciAkdG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuICR0b1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICEkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICB2YXIgdGhhdCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCAnTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAkdG9QcmVjaXNpb24uY2FsbCh0aGF0KSA6ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQsIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbiAoJGlzRXh0ZW5zaWJsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCRwcmV2ZW50RXh0ZW5zaW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuIiwiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiIsIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTMgUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViBbLCByZWNlaXZlcl0pXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yID0gZ09QRC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IuZ2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci5zZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLnZhbHVlID0gVjtcbiAgICAgIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBleGlzdGluZ0Rlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgY3JlYXRlRGVzYygwLCBWKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIEJhc2UgPSAkUmVnRXhwO1xudmFyIHByb3RvID0gJFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgcmUxID0gL2EvZztcbnZhciByZTIgPSAvYS9nO1xuLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICghQ09SUkVDVF9ORVcgfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsICdSZWdFeHAnLCAkUmVnRXhwKTtcbn1cblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjIgU3RyaW5nLnByb3RvdHlwZS5hbmNob3IobmFtZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2FuY2hvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmNob3IobmFtZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ25hbWUnLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNSBTdHJpbmcucHJvdG90eXBlLmJvbGQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYm9sZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBib2xkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKShmYWxzZSk7XG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjMgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdChwb3MpXG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTAgU3RyaW5nLnByb3RvdHlwZS5saW5rKHVybClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2xpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5zbWFsbCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzbWFsbCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzbWFsbCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMiBTdHJpbmcucHJvdG90eXBlLnN0cmlrZSgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdHJpa2UnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3RyaWtlKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMyBTdHJpbmcucHJvdG90eXBlLnN1YigpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdWInLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3ViKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdWInLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xNCBTdHJpbmcucHJvdG90eXBlLnN1cCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdXAnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3VwKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIEFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuQXJyYXlCdWZmZXI7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbik7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRBcnJheUJ1ZmZlcikpKHRvTGVuZ3RoKGZpbiAtIGZpcnN0KSk7XG4gICAgdmFyIHZpZXdTID0gbmV3ICREYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1QgPSBuZXcgJERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKEFSUkFZX0JVRkZFUik7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0NjQnLCA4LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgV0VBS19NQVAgPSAnV2Vha01hcCc7XG52YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSB3ZWFrLnVmc3RvcmU7XG52YXIgSW50ZXJuYWxNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbnZhciBtZXRob2RzID0ge1xuICAvLyAyMy4zLjMuMyBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgV0VBS19NQVApKS5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sXG4gIC8vIDIzLjMuMy41IFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8vIDIzLjMgV2Vha01hcCBPYmplY3RzXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbmlmIChOQVRJVkVfV0VBS19NQVAgJiYgSVNfSUUxMSkge1xuICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgIHZhciBtZXRob2QgPSBwcm90b1trZXldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBXRUFLX1NFVCA9ICdXZWFrU2V0JztcblxuLy8gMjMuNCBXZWFrU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX1NFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjQuMy4xIFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gIH1cbn0sIHdlYWssIGZhbHNlLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0TWFwXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4sIEE7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXRNYXAnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0dGVuXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXR0ZW46IGZ1bmN0aW9uIGZsYXR0ZW4oLyogZGVwdGhBcmcgPSAxICovKSB7XG4gICAgdmFyIGRlcHRoQXJnID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgZGVwdGhBcmcgPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGhBcmcpKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0dGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJykgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHA6Ly9qZmJhc3RpZW4uZ2l0aHViLmlvL3BhcGVycy9NYXRoLnNpZ25iaXQuaHRtbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgIT0geCA/IHggOiB4ID09IDAgPyAxIC8geCA9PSBJbmZpbml0eSA6IHggPiAwO1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZVNldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IHNldDogYUZ1bmN0aW9uKHNldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoaXQpIHtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuL19vd24ta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXREZXNjID0gZ09QRC5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXksIGRlc2M7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaSkge1xuICAgICAgZGVzYyA9IGdldERlc2MoTywga2V5ID0ga2V5c1tpKytdKTtcbiAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjQgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBHZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBHZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5nZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjUgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIiwidmFyIFNldCA9IHJlcXVpcmUoJy4vZXM2LnNldCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG52YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5TWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSAnLi9UaW1lci5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDsgLy8gc2Vjb25kc1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyaW5nXCIpLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyZWRcIilcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXI7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkID0gYWNjZXNzVG9rZW5FeHBpcmVkVGltZXI7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZChjb250YWluZXIpIHtcclxuICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV2ZW50cyBpZiB0aGVyZSdzIGFuIGFjY2VzcyB0b2tlbiBhbmQgaXQgaGFzIGFuIGV4cGlyYXRpb25cclxuICAgICAgICBpZiAoY29udGFpbmVyLmFjY2Vzc190b2tlbiAmJiBjb250YWluZXIuZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IGNvbnRhaW5lci5leHBpcmVzX2luO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiBhY2Nlc3MgdG9rZW4gcHJlc2VudCwgcmVtYWluaW5nIGR1cmF0aW9uOlwiLCBkdXJhdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV4cGlyaW5nIGlmIHdlIHN0aWxsIGhhdmUgdGltZVxyXG4gICAgICAgICAgICAgICAgbGV0IGV4cGlyaW5nID0gZHVyYXRpb24gLSB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuICAgICAgICAgICAgICAgIGlmIChleHBpcmluZyA8PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBleHBpcmluZyA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IHJlZ2lzdGVyaW5nIGV4cGlyaW5nIHRpbWVyIGluOlwiLCBleHBpcmluZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmluaXQoZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogY2FuY2VsaW5nIGV4aXN0aW5nIGV4cGlyaW5nIHRpbWVyIGJlY2FzZSB3ZSdyZSBwYXN0IGV4cGlyYXRpb24uXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgaXQncyBuZWdhdGl2ZSwgaXQgd2lsbCBzdGlsbCBmaXJlXHJcbiAgICAgICAgICAgIGxldCBleHBpcmVkID0gZHVyYXRpb24gKyAxO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmVkIHRpbWVyIGluOlwiLCBleHBpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmluaXQoZXhwaXJlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuY2FuY2VsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy51bmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBhY2Nlc3MgdG9rZW4gdGltZXJzXCIpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyhjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRJbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hlY2tTZXNzaW9uSUZyYW1lIHtcclxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IGludGVydmFsIHx8IERlZmF1bHRJbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wT25FcnJvciA9IHN0b3BPbkVycm9yO1xyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdXJsLmluZGV4T2YoXCIvXCIsIHVybC5pbmRleE9mKFwiLy9cIikgKyAyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZV9vcmlnaW4gPSB1cmwuc3Vic3RyKDAsIGlkeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHVybDtcclxuICAgIH1cclxuICAgIGxvYWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IHRoaXMuX21lc3NhZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfbWVzc2FnZShlKSB7XHJcbiAgICAgICAgaWYgKGUub3JpZ2luID09PSB0aGlzLl9mcmFtZV9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGUuZGF0YSA9PT0gXCJlcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGVycm9yIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdG9wT25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuZGF0YSA9PT0gXCJjaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZTogY2hhbmdlZCBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IFwiICsgZS5kYXRhICsgXCIgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhcnQoc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uX3N0YXRlICE9PSBzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdGFydFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgICAgICBsZXQgc2VuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UodGhpcy5fY2xpZW50X2lkICsgXCIgXCIgKyB0aGlzLl9zZXNzaW9uX3N0YXRlLCB0aGlzLl9mcmFtZV9vcmlnaW4pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdHJpZ2dlciBub3dcclxuICAgICAgICAgICAgc2VuZCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gYW5kIHNldHVwIHRpbWVyXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldEludGVydmFsKHNlbmQsIHRoaXMuX2ludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zZXNzaW9uX3N0YXRlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdG9wXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBDbG9ja1NlcnZpY2Uge1xyXG4gICAgZ2V0RXBvY2hUaW1lKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGF0ZS5ub3coKSAvIDEwMDAgfCAwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyA9ICdoaWRkZW49eWVzJztcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx6b29tPW5vJztcclxuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHBhcmFtcy5wb3B1cFdpbmRvd1RhcmdldCB8fCBEZWZhdWx0UG9wdXBUYXJnZXQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdF91cmkgPSBwYXJhbXMuc3RhcnRVcmw7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93LmN0b3I6IHJlZGlyZWN0X3VyaTogXCIgKyB0aGlzLnJlZGlyZWN0X3VyaSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkge1xyXG4gICAgICAgIHJldHVybiBbXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXJcIiwgXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXIuaW5hcHBicm93c2VyXCIsIFwib3JnLmFwYWNoZS5jb3Jkb3ZhLmluYXBwYnJvd3NlclwiXS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3Jkb3ZhTWV0YWRhdGEuaGFzT3duUHJvcGVydHkobmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5jb3Jkb3ZhKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJjb3Jkb3ZhIGlzIHVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY29yZG92YU1ldGFkYXRhID0gd2luZG93LmNvcmRvdmEucmVxdWlyZShcImNvcmRvdmEvcGx1Z2luX2xpc3RcIikubWV0YWRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZChjb3Jkb3ZhTWV0YWRhdGEpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiSW5BcHBCcm93c2VyIHBsdWdpbiBub3QgZm91bmRcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IGNvcmRvdmEuSW5BcHBCcm93c2VyLm9wZW4ocGFyYW1zLnVybCwgdGhpcy50YXJnZXQsIHRoaXMuZmVhdHVyZXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50ID0gdGhpcy5fZXhpdENhbGxiYWNrLmJpbmQodGhpcyk7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCA9IHRoaXMuX2xvYWRTdGFydENhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJleGl0XCIsIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5hZGRFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFN0YXJ0Q2FsbGJhY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQudXJsLmluZGV4T2YodGhpcy5yZWRpcmVjdF91cmkpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IGV2ZW50LnVybCB9KTtcclxuICAgICAgICB9ICAgIFxyXG4gICAgfVxyXG4gICAgX2V4aXRDYWxsYmFjayhtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IobWVzc2FnZSk7ICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBjb3Jkb3ZhIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKXtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93OiBjbGVhbmluZyB1cCBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXJyb3JSZXNwb25zZSBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHtlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGVycm9yX3VyaSwgc3RhdGUsIHNlc3Npb25fc3RhdGV9PXt9XHJcbiAgICApIHtcclxuICAgICAgICAgaWYgKCFlcnJvcil7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk5vIGVycm9yIHBhc3NlZCB0byBFcnJvclJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlcnJvclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyKGVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFcnJvclJlc3BvbnNlXCI7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSBlcnJvcl91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhhbmRsZXIoY2IpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSGFuZGxlcihjYikge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYWxsYmFja3MuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY2IpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJhaXNlKC4uLnBhcmFtcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkV2ZW50OiBSYWlzaW5nIGV2ZW50OiBcIiArIHRoaXMuX25hbWUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tpXSguLi5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5jb25zdCB0aW1lciA9IHtcclxuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoY2IsIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKGNiLCBkdXJhdGlvbik7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgIHJldHVybiBjbGVhckludGVydmFsKGhhbmRsZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgdGVzdGluZyA9IGZhbHNlO1xyXG5sZXQgcmVxdWVzdCA9IG51bGw7XHJcblxyXG5leHBvcnQgY2xhc3MgR2xvYmFsIHtcclxuXHJcbiAgICBzdGF0aWMgX3Rlc3RpbmcoKSB7XHJcbiAgICAgICAgdGVzdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxvY2FsU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBzZXNzaW9uU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2V0WE1MSHR0cFJlcXVlc3QobmV3UmVxdWVzdCkge1xyXG4gICAgICAgIHJlcXVlc3QgPSBuZXdSZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgWE1MSHR0cFJlcXVlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0IHx8IFhNTEh0dHBSZXF1ZXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHRpbWVyKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGltZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lV2luZG93IH0gZnJvbSAnLi9JRnJhbWVXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgZnJhbWUgPSBuZXcgSUZyYW1lV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50KHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0VGltZW91dCA9IDEwMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZVdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRpbWVvdXQgPSBwYXJhbXMuc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgRGVmYXVsdFRpbWVvdXQ7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5uYXZpZ2F0ZTogVXNpbmcgdGltZW91dCBvZjpcIiwgdGltZW91dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5fdGltZW91dC5iaW5kKHRoaXMpLCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWUuc3JjID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb21pc2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93OiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gZnJhbWUgd2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBfY2xlYW51cCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZnJhbWUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93OiBjbGVhbnVwXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLl9mcmFtZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfdGltZW91dCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cudGltZW91dFwiKTtcclxuICAgICAgICB0aGlzLl9lcnJvcihcIkZyYW1lIHdpbmRvdyB0aW1lZCBvdXRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgX21lc3NhZ2UoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5tZXNzYWdlXCIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fdGltZXIgJiZcclxuICAgICAgICAgICAgZS5vcmlnaW4gPT09IHRoaXMuX29yaWdpbiAmJlxyXG4gICAgICAgICAgICBlLnNvdXJjZSA9PT0gdGhpcy5fZnJhbWUuY29udGVudFdpbmRvdyAmJlxyXG4gICAgICAgICAgICAodHlwZW9mIGUuZGF0YSA9PT0gJ3N0cmluZycgJiYgKGUuZGF0YS5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgZS5kYXRhLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgdXJsID0gZS5kYXRhO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWNjZXNzKHsgdXJsOiB1cmwgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihcIkludmFsaWQgcmVzcG9uc2UgZnJvbSBmcmFtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgX29yaWdpbigpIHtcclxuICAgICAgICByZXR1cm4gbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3RpZnlQYXJlbnQodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudFwiKTtcclxuICAgICAgICB1cmwgPSB1cmwgfHwgd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50OiBwb3N0aW5nIHVybCBtZXNzYWdlIHRvIHBhcmVudFwiKTtcclxuICAgICAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh1cmwsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJbk1lbW9yeVdlYlN0b3JhZ2V7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5nZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5zZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShrZXkpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5yZW1vdmVJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAga2V5KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpW2luZGV4XTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0gZnJvbSAnLi9jcnlwdG8vanNyc2FzaWduJztcclxuaW1wb3J0IGdldEpvc2VVdGlsIGZyb20gJy4vSm9zZVV0aWxJbXBsJztcclxuXHJcbmV4cG9ydCBjb25zdCBKb3NlVXRpbCA9IGdldEpvc2VVdGlsKHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9KTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcclxuICAgIHJldHVybiBjbGFzcyBKb3NlVXRpbCB7XHJcblxyXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwucGFyc2VKd3RcIik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdG9rZW4uaGVhZGVyT2JqLFxyXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwudmFsaWRhdGVKd3RcIik7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5rdHkgPT09IFwiUlNBXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS54NWMgJiYga2V5Lng1Yy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGhleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5jcnYgJiYga2V5LnggJiYga2V5LnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogRUMga2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFVuc3VwcG9ydGVkIGtleSB0eXBlXCIsIGtleSAmJiBrZXkua3R5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUgJiYgZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNsb2NrU2tldykge1xyXG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFub3cpIHtcclxuICAgICAgICAgICAgICAgIG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKb3NlVXRpbC5wYXJzZUp3dChqd3QpLnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC5pc3MgIT09IGlzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGlzc3VlciBpbiB0b2tlblwiLCBwYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBhdWQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdWQgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHZhbGlkQXVkaWVuY2UgPSBwYXlsb2FkLmF1ZCA9PT0gYXVkaWVuY2UgfHwgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdWQpICYmIHBheWxvYWQuYXVkLmluZGV4T2YoYXVkaWVuY2UpID49IDApO1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkQXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmF1ZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhenAgaW4gdG9rZW5cIiwgcGF5bG9hZC5henApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXpwIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXpwKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXBwZXJOb3cgPSBub3cgLSBjbG9ja1NrZXc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaWF0IHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb3dlck5vdyA8IHBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLmlhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IG5iZiBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQubmJmKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibmJmIGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5uYmYpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCBpcyBpbiB0aGUgcGFzdFwiLCBwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCBpcyBpbiB0aGUgcGFzdDpcIiArIHBheWxvYWQuZXhwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3MuSldTLnZlcmlmeShqd3QsIGtleSwgQWxsb3dlZFNpZ25pbmdBbGdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IHNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhhc2hTdHJpbmcodmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5VdGlsLmhhc2hTdHJpbmcodmFsdWUsIGFsZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhleFRvQmFzZTY0VXJsKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZW50VHlwZXMgPSBudWxsLCBcclxuICAgICAgICBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIFxyXG4gICAgICAgIGp3dEhhbmRsZXIgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvbnRlbnRUeXBlcyAmJiBBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxDb250ZW50VHlwZXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gYWRkaXRpb25hbENvbnRlbnRUeXBlcy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBpZiAoand0SGFuZGxlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMucHVzaCgnYXBwbGljYXRpb24vand0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9qd3RIYW5kbGVyID0gand0SGFuZGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKc29uKHVybCwgdG9rZW4pIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb24sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcbiAgICAgICAgICAgIHZhciBqd3RIYW5kbGVyID0gdGhpcy5fand0SGFuZGxlcjtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb246IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBcImFwcGxpY2F0aW9uL2p3dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqd3RIYW5kbGVyKHJlcSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiB0b2tlbiBwYXNzZWQsIHNldHRpbmcgQXV0aG9yaXphdGlvbiBoZWFkZXJcIik7XHJcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEZvcm0odXJsLCBwYXlsb2FkLCBiYXNpY0F1dGgpIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5wb3N0Rm9ybSwgdXJsOiBcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIHZhciByZXEgPSBuZXcgdGhpcy5fWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICAgICAgcmVxLm9wZW4oJ1BPU1QnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcblxyXG4gICAgICAgICAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHJlcS5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiSW52YWxpZCByZXNwb25zZSBDb250ZW50LVR5cGU6IFwiICsgY29udGVudFR5cGUgKyBcIiwgZnJvbSBVUkw6IFwiICsgdXJsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSA0MDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXlsb2FkID0gSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBmcm9tIHNlcnZlcjogXCIsIHBheWxvYWQuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHBheWxvYWQuZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IG5ldHdvcmsgZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJOZXR3b3JrIEVycm9yXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCBib2R5ID0gXCJcIjtcclxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gcGF5bG9hZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHBheWxvYWRba2V5XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9IFwiJlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IFwiPVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmFzaWNBdXRoICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJhc2ljIFwiICsgYnRvYShiYXNpY0F1dGgpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVxLnNlbmQoYm9keSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxubGV0IG5vcExvZ2dlciA9IHtcclxuICAgIGRlYnVnKCl7fSxcclxuICAgIGluZm8oKXt9LFxyXG4gICAgd2Fybigpe30sXHJcbiAgICBlcnJvcigpe31cclxufTtcclxuXHJcbmNvbnN0IE5PTkUgPSAwO1xyXG5jb25zdCBFUlJPUiA9IDE7XHJcbmNvbnN0IFdBUk4gPSAyO1xyXG5jb25zdCBJTkZPID0gMztcclxuY29uc3QgREVCVUcgPSA0O1xyXG5cclxubGV0IGxvZ2dlcjtcclxubGV0IGxldmVsO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZyB7XHJcbiAgICBzdGF0aWMgZ2V0IE5PTkUoKSB7cmV0dXJuIE5PTkV9O1xyXG4gICAgc3RhdGljIGdldCBFUlJPUigpIHtyZXR1cm4gRVJST1J9O1xyXG4gICAgc3RhdGljIGdldCBXQVJOKCkge3JldHVybiBXQVJOfTtcclxuICAgIHN0YXRpYyBnZXQgSU5GTygpIHtyZXR1cm4gSU5GT307XHJcbiAgICBzdGF0aWMgZ2V0IERFQlVHKCkge3JldHVybiBERUJVR307XHJcbiAgICBcclxuICAgIHN0YXRpYyByZXNldCgpe1xyXG4gICAgICAgIGxldmVsID0gSU5GTztcclxuICAgICAgICBsb2dnZXIgPSBub3BMb2dnZXI7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbGV2ZWwoKXtcclxuICAgICAgICByZXR1cm4gbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2V0IGxldmVsKHZhbHVlKXtcclxuICAgICAgICBpZiAoTk9ORSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxldmVsID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbG9nZ2VyKCl7XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbG9nZ2VyKHZhbHVlKXtcclxuICAgICAgICBpZiAoIXZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8pIHtcclxuICAgICAgICAgICAgLy8ganVzdCB0byBzdGF5IGJhY2t3YXJkcyBjb21wYXQuIGNhbiByZW1vdmUgaW4gMi4wXHJcbiAgICAgICAgICAgIHZhbHVlLmRlYnVnID0gdmFsdWUuaW5mbztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5kZWJ1ZyAmJiB2YWx1ZS5pbmZvICYmIHZhbHVlLndhcm4gJiYgdmFsdWUuZXJyb3Ipe1xyXG4gICAgICAgICAgICBsb2dnZXIgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nZ2VyXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGRlYnVnKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBpbmZvKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBJTkZPKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgd2FybiguLi5hcmdzKXtcclxuICAgICAgICBpZiAobGV2ZWwgPj0gV0FSTil7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGVycm9yKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBFUlJPUil7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvci5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuTG9nLnJlc2V0KCk7XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZTogTm8gc2V0dGluZ3MgcGFzc2VkIHRvIE1ldGFkYXRhU2VydmljZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcihbJ2FwcGxpY2F0aW9uL2p3ay1zZXQranNvbiddKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICByZXNldFNpZ25pbmdLZXlzKCkge1xyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gdGhpcy5fc2V0dGluZ3MgfHwge31cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIGdldE1ldGFkYXRhKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IFJldHVybmluZyBtZXRhZGF0YSBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IE5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBnZXR0aW5nIG1ldGFkYXRhIGZyb21cIiwgdGhpcy5tZXRhZGF0YVVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHRoaXMubWV0YWRhdGFVcmwpXHJcbiAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YToganNvbiByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIHNlZWQgPSB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVNlZWQgfHwge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIHNlZWQsIG1ldGFkYXRhKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXNzdWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiaXNzdWVyXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF1dGhvcml6YXRpb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImF1dGhvcml6YXRpb25fZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlckluZm9FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInVzZXJpbmZvX2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRva2VuRW5kcG9pbnQob3B0aW9uYWw9dHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwidG9rZW5fZW5kcG9pbnRcIiwgb3B0aW9uYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoZWNrU2Vzc2lvbklmcmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImNoZWNrX3Nlc3Npb25faWZyYW1lXCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVuZFNlc3Npb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImVuZF9zZXNzaW9uX2VuZHBvaW50XCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJldm9jYXRpb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInJldm9jYXRpb25fZW5kcG9pbnRcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0S2V5c0VuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiandrc191cmlcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldE1ldGFkYXRhUHJvcGVydHkobmFtZSwgb3B0aW9uYWw9ZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eSBmb3I6IFwiICsgbmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBtZXRhZGF0YSByZWNpZXZlZFwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBvcHRpb25hbCBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhW25hbWVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNpZ25pbmdLZXlzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cykge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IFJldHVybmluZyBzaWduaW5nS2V5cyBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiandrc191cmlcIikudGhlbihqd2tzX3VyaSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogandrc191cmkgcmVjZWl2ZWRcIiwgandrc191cmkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24oandrc191cmkpLnRoZW4oa2V5U2V0ID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czoga2V5IHNldCByZWNlaXZlZFwiLCBrZXlTZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgha2V5U2V0LmtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IE1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBrZXlzIG9uIGtleXNldFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyA9IGtleVNldC5rZXlzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4vRXJyb3JSZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlcXVlc3QgfSBmcm9tICcuL1NpZ25pblJlcXVlc3QuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXNwb25zZSB9IGZyb20gJy4vU2lnbmluUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWdub3V0UmVxdWVzdCB9IGZyb20gJy4vU2lnbm91dFJlcXVlc3QuanMnO1xyXG5pbXBvcnQgeyBTaWdub3V0UmVzcG9uc2UgfSBmcm9tICcuL1NpZ25vdXRSZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblN0YXRlIH0gZnJvbSAnLi9TaWduaW5TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncyA9IHt9KSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzIGluc3RhbmNlb2YgT2lkY0NsaWVudFNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IG5ldyBPaWRjQ2xpZW50U2V0dGluZ3Moc2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3N0YXRlU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Muc3RhdGVTdG9yZTtcclxuICAgIH1cclxuICAgIGdldCBfdmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnZhbGlkYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCByZWRpcmVjdF91cmksXHJcbiAgICAgICAgLy8gZGF0YSB3YXMgbWVhbnQgdG8gYmUgdGhlIHBsYWNlIGEgY2FsbGVyIGNvdWxkIGluZGljYXRlIHRoZSBkYXRhIHRvXHJcbiAgICAgICAgLy8gaGF2ZSByb3VuZCB0cmlwcGVkLCBidXQgcGVvcGxlIHdlcmUgZ2V0dGluZyBjb25mdXNlZCwgc28gaSBhZGRlZCBzdGF0ZSAoc2luY2UgdGhhdCBtYXRjaGVzIHRoZSBzcGVjKVxyXG4gICAgICAgIC8vIGFuZCBzbyBub3cgaWYgZGF0YSBpcyBub3QgcGFzc2VkLCBidXQgc3RhdGUgaXMgdGhlbiBzdGF0ZSB3aWxsIGJlIHVzZWRcclxuICAgICAgICBkYXRhLCBzdGF0ZSwgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLFxyXG4gICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCBza2lwVXNlckluZm8gfSA9IHt9LFxyXG4gICAgICAgIHN0YXRlU3RvcmVcclxuICAgICkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbmluUmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgbGV0IGNsaWVudF9pZCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICByZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHNjb3BlID0gc2NvcGUgfHwgdGhpcy5fc2V0dGluZ3Muc2NvcGU7XHJcbiAgICAgICAgcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgLy8gaWRfdG9rZW5faGludCwgbG9naW5faGludCBhcmVuJ3QgYWxsb3dlZCBvbiBfc2V0dGluZ3NcclxuICAgICAgICBwcm9tcHQgPSBwcm9tcHQgfHwgdGhpcy5fc2V0dGluZ3MucHJvbXB0O1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8IHRoaXMuX3NldHRpbmdzLmRpc3BsYXk7XHJcbiAgICAgICAgbWF4X2FnZSA9IG1heF9hZ2UgfHwgdGhpcy5fc2V0dGluZ3MubWF4X2FnZTtcclxuICAgICAgICB1aV9sb2NhbGVzID0gdWlfbG9jYWxlcyB8fCB0aGlzLl9zZXR0aW5ncy51aV9sb2NhbGVzO1xyXG4gICAgICAgIGFjcl92YWx1ZXMgPSBhY3JfdmFsdWVzIHx8IHRoaXMuX3NldHRpbmdzLmFjcl92YWx1ZXM7XHJcbiAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNvdXJjZTtcclxuICAgICAgICByZXNwb25zZV9tb2RlID0gcmVzcG9uc2VfbW9kZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcbiAgICAgICAgZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFUb2tlblBhcmFtcztcclxuXHJcbiAgICAgICAgbGV0IGF1dGhvcml0eSA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgaWYgKFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpICYmIHJlc3BvbnNlX3R5cGUgIT09IFwiY29kZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJPcGVuSUQgQ29ubmVjdCBoeWJyaWQgZmxvdyBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3Q6IFJlY2VpdmVkIGF1dGhvcml6YXRpb24gZW5kcG9pbnRcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaWduaW5SZXF1ZXN0ID0gbmV3IFNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X2lkLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICAgICAgICAgIHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICAgICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgICAgIHNraXBVc2VySW5mb1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzaWduaW5TdGF0ZSA9IHNpZ25pblJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVTdG9yZS5zZXQoc2lnbmluU3RhdGUuaWQsIHNpZ25pblN0YXRlLnRvU3RvcmFnZVN0cmluZygpKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaW5SZXF1ZXN0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlXCIpO1xyXG5cclxuICAgICAgICBsZXQgdXNlUXVlcnkgPSB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlID09PSBcInF1ZXJ5XCIgfHwgXHJcbiAgICAgICAgICAgICghdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZSAmJiBTaWduaW5SZXF1ZXN0LmlzQ29kZSh0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlKSk7XHJcbiAgICAgICAgbGV0IGRlbGltaXRlciA9IHVzZVF1ZXJ5ID8gXCI/XCIgOiBcIiNcIjtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25pblJlc3BvbnNlKHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN0YXRlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShyZXNwb25zZS5zdGF0ZSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbm91dFJlcXVlc3Qoe2lkX3Rva2VuX2hpbnQsIGRhdGEsIHN0YXRlLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEVuZFNlc3Npb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IE5vIGVuZCBzZXNzaW9uIGVuZHBvaW50IHVybCByZXR1cm5lZFwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBSZWNlaXZlZCBlbmQgc2Vzc2lvbiBlbmRwb2ludFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgU2lnbm91dFJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faGludCxcclxuICAgICAgICAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdF90eXBlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25vdXRTdGF0ZSA9IHJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIGlmIChzaWdub3V0U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFNpZ25vdXQgcmVxdWVzdCBoYXMgc3RhdGUgdG8gcGVyc2lzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVTdG9yZS5zZXQoc2lnbm91dFN0YXRlLmlkLCBzaWdub3V0U3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCByZW1vdmVTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBTaWdub3V0UmVzcG9uc2UodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLndhcm4oXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogUmVzcG9uc2Ugd2FzIGVycm9yOiBcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3N0YXRlOiB1bmRlZmluZWQsIHJlc3BvbnNlfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3RhdGVLZXkgPSByZXNwb25zZS5zdGF0ZTtcclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXRlQXBpID0gcmVtb3ZlU3RhdGUgPyBzdGF0ZVN0b3JlLnJlbW92ZS5iaW5kKHN0YXRlU3RvcmUpIDogc3RhdGVTdG9yZS5nZXQuYmluZChzdGF0ZVN0b3JlKTtcclxuICAgICAgICByZXR1cm4gc3RhdGVBcGkoc3RhdGVLZXkpLnRoZW4oc3RvcmVkU3RhdGVTdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXN0b3JlZFN0YXRlU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IFN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JlZFN0YXRlU3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbm91dFJlc3BvbnNlKHVybCwgc3RhdGVTdG9yZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZTogTm8gc3RhdGUgZnJvbSBzdG9yYWdlOyBza2lwcGluZyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJTdGFsZVN0YXRlKHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNsZWFyU3RhbGVTdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFN0YXRlLmNsZWFyU3RhbGVTdGF0ZShzdGF0ZVN0b3JlLCB0aGlzLnNldHRpbmdzLnN0YWxlU3RhdGVBZ2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQ2xvY2tTZXJ2aWNlIH0gZnJvbSAnLi9DbG9ja1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVZhbGlkYXRvciB9IGZyb20gJy4vUmVzcG9uc2VWYWxpZGF0b3IuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcblxyXG5jb25zdCBPaWRjTWV0YWRhdGFVcmxQYXRoID0gJy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJztcclxuXHJcbmNvbnN0IERlZmF1bHRSZXNwb25zZVR5cGUgPSBcImlkX3Rva2VuXCI7XHJcbmNvbnN0IERlZmF1bHRTY29wZSA9IFwib3BlbmlkXCI7XHJcbmNvbnN0IERlZmF1bHRDbGllbnRBdXRoZW50aWNhdGlvbiA9IFwiY2xpZW50X3NlY3JldF9wb3N0XCIgLy8gVGhlIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSBjbGllbnRfc2VjcmV0X2Jhc2ljLCBhcyBleHBsYWluZWQgaW4gaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xpZW50QXV0aGVudGljYXRpb25cclxuY29uc3QgRGVmYXVsdFN0YWxlU3RhdGVBZ2UgPSA2MCAqIDE1OyAvLyBzZWNvbmRzXHJcbmNvbnN0IERlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMgPSA2MCAqIDU7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICAvLyBtZXRhZGF0YSByZWxhdGVkXHJcbiAgICAgICAgYXV0aG9yaXR5LCBtZXRhZGF0YVVybCwgbWV0YWRhdGEsIHNpZ25pbmdLZXlzLCBtZXRhZGF0YVNlZWQsXHJcbiAgICAgICAgLy8gY2xpZW50IHJlbGF0ZWRcclxuICAgICAgICBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHJlc3BvbnNlX3R5cGUgPSBEZWZhdWx0UmVzcG9uc2VUeXBlLCBzY29wZSA9IERlZmF1bHRTY29wZSxcclxuICAgICAgICByZWRpcmVjdF91cmksIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBjbGllbnRfYXV0aGVudGljYXRpb24gPSBEZWZhdWx0Q2xpZW50QXV0aGVudGljYXRpb24sXHJcbiAgICAgICAgLy8gb3B0aW9uYWwgcHJvdG9jb2xcclxuICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXMgPSB0cnVlLCBsb2FkVXNlckluZm8gPSB0cnVlLFxyXG4gICAgICAgIHN0YWxlU3RhdGVBZ2UgPSBEZWZhdWx0U3RhbGVTdGF0ZUFnZSwgXHJcbiAgICAgICAgY2xvY2tTa2V3ID0gRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyxcclxuICAgICAgICBjbG9ja1NlcnZpY2UgPSBuZXcgQ2xvY2tTZXJ2aWNlKCksXHJcbiAgICAgICAgdXNlckluZm9Kd3RJc3N1ZXIgPSAnT1AnLFxyXG4gICAgICAgIG1lcmdlQ2xhaW1zID0gZmFsc2UsXHJcbiAgICAgICAgLy8gb3RoZXIgYmVoYXZpb3JcclxuICAgICAgICBzdGF0ZVN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKCksXHJcbiAgICAgICAgUmVzcG9uc2VWYWxpZGF0b3JDdG9yID0gUmVzcG9uc2VWYWxpZGF0b3IsXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0ge30sXHJcbiAgICAgICAgZXh0cmFUb2tlblBhcmFtcyA9IHt9XHJcbiAgICB9ID0ge30pIHtcclxuXHJcbiAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gYXV0aG9yaXR5O1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gbWV0YWRhdGFVcmw7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlZWQgPSBtZXRhZGF0YVNlZWQ7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSBzaWduaW5nS2V5cztcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9jbGllbnRfYXV0aGVudGljYXRpb24gPSBjbGllbnRfYXV0aGVudGljYXRpb247XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb21wdCA9IHByb21wdDtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5ID0gZGlzcGxheTtcclxuICAgICAgICB0aGlzLl9tYXhfYWdlID0gbWF4X2FnZTtcclxuICAgICAgICB0aGlzLl91aV9sb2NhbGVzID0gdWlfbG9jYWxlcztcclxuICAgICAgICB0aGlzLl9hY3JfdmFsdWVzID0gYWNyX3ZhbHVlcztcclxuICAgICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyA9ICEhZmlsdGVyUHJvdG9jb2xDbGFpbXM7XHJcbiAgICAgICAgdGhpcy5fbG9hZFVzZXJJbmZvID0gISFsb2FkVXNlckluZm87XHJcbiAgICAgICAgdGhpcy5fc3RhbGVTdGF0ZUFnZSA9IHN0YWxlU3RhdGVBZ2U7XHJcbiAgICAgICAgdGhpcy5fY2xvY2tTa2V3ID0gY2xvY2tTa2V3O1xyXG4gICAgICAgIHRoaXMuX2Nsb2NrU2VydmljZSA9IGNsb2NrU2VydmljZTtcclxuICAgICAgICB0aGlzLl91c2VySW5mb0p3dElzc3VlciA9IHVzZXJJbmZvSnd0SXNzdWVyO1xyXG4gICAgICAgIHRoaXMuX21lcmdlQ2xhaW1zID0gISFtZXJnZUNsYWltcztcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmU7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9yID0gbmV3IFJlc3BvbnNlVmFsaWRhdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHR5cGVvZiBleHRyYVF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0JyA/IGV4dHJhUXVlcnlQYXJhbXMgOiB7fTtcclxuICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0gdHlwZW9mIGV4dHJhVG9rZW5QYXJhbXMgPT09ICdvYmplY3QnID8gZXh0cmFUb2tlblBhcmFtcyA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsaWVudCBjb25maWdcclxuICAgIGdldCBjbGllbnRfaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcclxuICAgIH1cclxuICAgIHNldCBjbGllbnRfaWQodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudF9pZCkge1xyXG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxyXG4gICAgICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfY2xpZW50X2lkOiBjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGNsaWVudF9zZWNyZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9zZWNyZXQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfdHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfdHlwZTtcclxuICAgIH1cclxuICAgIGdldCBzY29wZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGU7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X2F1dGhlbnRpY2F0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfYXV0aGVudGljYXRpb247XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvLyBvcHRpb25hbCBwcm90b2NvbCBwYXJhbXNcclxuICAgIGdldCBwcm9tcHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdDtcclxuICAgIH1cclxuICAgIGdldCBkaXNwbGF5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5O1xyXG4gICAgfVxyXG4gICAgZ2V0IG1heF9hZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heF9hZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgdWlfbG9jYWxlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdWlfbG9jYWxlcztcclxuICAgIH1cclxuICAgIGdldCBhY3JfdmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3JfdmFsdWVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc291cmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZTtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV9tb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBtZXRhZGF0YVxyXG4gICAgZ2V0IGF1dGhvcml0eSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yaXR5O1xyXG4gICAgfVxyXG4gICAgc2V0IGF1dGhvcml0eSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9hdXRob3JpdHk6IGF1dGhvcml0eSBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsICYmIHRoaXMuX21ldGFkYXRhVXJsLmluZGV4T2YoT2lkY01ldGFkYXRhVXJsUGF0aCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXR0YWJsZS9jYWNoYWJsZSBtZXRhZGF0YSB2YWx1ZXNcclxuICAgIGdldCBtZXRhZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICBzZXQgbWV0YWRhdGEodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhU2VlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZWVkO1xyXG4gICAgfVxyXG4gICAgc2V0IG1ldGFkYXRhU2VlZCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VlZCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWduaW5nS2V5cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluZ0tleXM7XHJcbiAgICB9XHJcbiAgICBzZXQgc2lnbmluZ0tleXModmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9zaWduaW5nS2V5cyA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICBnZXQgZmlsdGVyUHJvdG9jb2xDbGFpbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IGxvYWRVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0YWxlU3RhdGVBZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWxlU3RhdGVBZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xvY2tTa2V3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1NrZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdXNlckluZm9Kd3RJc3N1ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1lcmdlQ2xhaW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXJnZUNsYWltcztcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IHN0YXRlU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlU3RvcmU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXh0cmEgcXVlcnkgcGFyYW1zXHJcbiAgICBnZXQgZXh0cmFRdWVyeVBhcmFtcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFRdWVyeVBhcmFtcztcclxuICAgIH1cclxuICAgIHNldCBleHRyYVF1ZXJ5UGFyYW1zKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpe1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYSB0b2tlbiBwYXJhbXNcclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4dHJhVG9rZW5QYXJhbXModmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhVG9rZW5QYXJhbXMgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCB0aGUgdGltZVxyXG4gICAgZ2V0RXBvY2hUaW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1NlcnZpY2UuZ2V0RXBvY2hUaW1lKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBQb3B1cFdpbmRvdyB9IGZyb20gJy4vUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBQb3B1cFdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9wdXApO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5jb25zdCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwgPSA1MDA7XHJcbmNvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDsnO1xyXG4vL2NvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDtyZXNpemFibGU9eWVzJztcclxuXHJcbmNvbnN0IERlZmF1bHRQb3B1cFRhcmdldCA9IFwiX2JsYW5rXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBwYXJhbXMucG9wdXBXaW5kb3dUYXJnZXQgfHwgRGVmYXVsdFBvcHVwVGFyZ2V0O1xyXG4gICAgICAgIGxldCBmZWF0dXJlcyA9IHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IERlZmF1bHRQb3B1cEZlYXR1cmVzO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IHdpbmRvdy5vcGVuKCcnLCB0YXJnZXQsIGZlYXR1cmVzKTtcclxuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY3RvcjogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkLmJpbmQodGhpcyksIENoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogbm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5hdmlnYXRlOiBTZXR0aW5nIFVSTCBpbiBwb3B1cFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2lkID0gcGFyYW1zLmlkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faWQpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvd1tcInBvcHVwQ2FsbGJhY2tfXCIgKyBwYXJhbXMuaWRdID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuZm9jdXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAud2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gcG9wdXAgd2luZG93XCIpO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcclxuICAgIH1cclxuICAgIF9lcnJvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgTG9nLmVycm9yKFwiUG9wdXBXaW5kb3cuZXJyb3I6IFwiLCBtZXNzYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoa2VlcE9wZW4pIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jbGVhbnVwXCIpO1xyXG5cclxuICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIpO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IG51bGw7XHJcblxyXG4gICAgICAgIGRlbGV0ZSB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgdGhpcy5faWRdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcG9wdXAgJiYgIWtlZXBPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tGb3JQb3B1cENsb3NlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwIHx8IHRoaXMuX3BvcHVwLmNsb3NlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIlBvcHVwIHdpbmRvdyBjbG9zZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChrZWVwT3Blbik7XHJcblxyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2sgc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2s6IEludmFsaWQgcmVzcG9uc2UgZnJvbSBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIGRlbGltaXRlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IFwicG9wdXBDYWxsYmFja19cIiArIGRhdGEuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gd2luZG93Lm9wZW5lcltuYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBwYXNzaW5nIHVybCBtZXNzYWdlIHRvIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gbWF0Y2hpbmcgY2FsbGJhY2sgZm91bmQgb24gb3BlbmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyBzdGF0ZSBmb3VuZCBpbiByZXNwb25zZSB1cmxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyB3aW5kb3cub3BlbmVyLiBDYW4ndCBjb21wbGV0ZSBub3RpZmljYXRpb24uXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVkaXJlY3ROYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZWRpcmVjdE5hdmlnYXRvci5uYXZpZ2F0ZTogTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYXJhbXMudXNlUmVwbGFjZVRvTmF2aWdhdGUpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UocGFyYW1zLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBwYXJhbXMudXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1cmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBVc2VySW5mb1NlcnZpY2UgfSBmcm9tICcuL1VzZXJJbmZvU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuY29uc3QgUHJvdG9jb2xDbGFpbXMgPSBbXCJub25jZVwiLCBcImF0X2hhc2hcIiwgXCJpYXRcIiwgXCJuYmZcIiwgXCJleHBcIiwgXCJhdWRcIiwgXCJpc3NcIiwgXCJjX2hhc2hcIl07XHJcblxyXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VWYWxpZGF0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICAgIFVzZXJJbmZvU2VydmljZUN0b3IgPSBVc2VySW5mb1NlcnZpY2UsIFxyXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWwsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZCB0byBSZXNwb25zZVZhbGlkYXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl91c2VySW5mb1NlcnZpY2UgPSBuZXcgVXNlckluZm9TZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NTaWduaW5QYXJhbXMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogc3RhdGUgcHJvY2Vzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHRva2VucyB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NsYWltcyhzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IGNsYWltcyBwcm9jZXNzZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbm91dFJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiU3RhdGUgZG9lcyBub3QgbWF0Y2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyB0aGUgc3RhdGUgbWF0Y2hlcywgdGFrZSB0aGUgc3RvcmVkIGRhdGFcclxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxyXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBzdGF0ZSB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc1NpZ25pblBhcmFtcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoc3RhdGUuaWQgIT09IHJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBObyBjbGllbnRfaWQgb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjbGllbnRfaWQgb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzIGFsbG93cyB0aGUgYXV0aG9yaXR5IHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBzaWduaW4gc3RhdGVcclxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgPSBzdGF0ZS5hdXRob3JpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBhdXRob3JpdHkgaWYgdGhlIGF1dGhvcml0eSBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ICYmIHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAhPT0gc3RhdGUuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBhdXRob3JpdHkgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdGhlIGNsaWVudF9pZCB0byBiZSBsb2FkZWQgZnJvbSB0aGUgc2lnbmluIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkID0gc3RhdGUuY2xpZW50X2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbnN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgY2xpZW50X2lkIGlmIHRoZSBjbGllbnRfaWQgaXMgbm90IGxvYWRlZCBmcm9tIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCAmJiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgIT09IHN0YXRlLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogY2xpZW50X2lkIG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxyXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGJvdGggc3VjY2VzcyAmIGVycm9yIG91dGNvbWVzXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IHN0YXRlIHZhbGlkYXRlZFwiKTtcclxuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiAhcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IEV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUubm9uY2UgJiYgcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmICFyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBFeHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGNvZGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmIHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY29kZSBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnNjb3BlKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc2NvcGUgb24gdGhlIHJlc3BvbnNlLCB0aGVuIGFzc3VtZSBhbGwgc2NvcGVzIGdyYW50ZWQgKHBlci1zcGVjKSBhbmQgY29weSBvdmVyIHNjb3BlcyBmcm9tIG9yaWdpbmFsIHJlcXVlc3RcclxuICAgICAgICAgICAgcmVzcG9uc2Uuc2NvcGUgPSBzdGF0ZS5zY29wZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzQ2xhaW1zKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5pc09wZW5JZENvbm5lY3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIE9JREMsIHByb2Nlc3NpbmcgY2xhaW1zXCIpO1xyXG5cclxuICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnNraXBVc2VySW5mbyAhPT0gdHJ1ZSAmJiB0aGlzLl9zZXR0aW5ncy5sb2FkVXNlckluZm8gJiYgcmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogbG9hZGluZyB1c2VyIGluZm9cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvU2VydmljZS5nZXRDbGFpbXMocmVzcG9uc2UuYWNjZXNzX3Rva2VuKS50aGVuKGNsYWltcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQgZnJvbSB1c2VyIGluZm8gZW5kcG9pbnRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFpbXMuc3ViICE9PSByZXNwb25zZS5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogc3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQsIHVwZGF0ZWQgcHJvZmlsZTpcIiwgcmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IG5vdCBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIG5vdCBPSURDLCBub3QgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVyZ2VDbGFpbXMoY2xhaW1zMSwgY2xhaW1zMikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMxKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjbGFpbXMyKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBjbGFpbXMyW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXS5pbmRleE9mKHZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFtuYW1lXSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0aGlzLl9zZXR0aW5ncy5tZXJnZUNsYWltcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB0aGlzLl9tZXJnZUNsYWltcyhyZXN1bHRbbmFtZV0sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IFtyZXN1bHRbbmFtZV0sIHZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlclByb3RvY29sQ2xhaW1zKGNsYWltcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltcywgaW5jb21pbmcgY2xhaW1zOlwiLCBjbGFpbXMpO1xyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgY2xhaW1zKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLl9maWx0ZXJQcm90b2NvbENsYWltcykge1xyXG4gICAgICAgICAgICBQcm90b2NvbENsYWltcy5mb3JFYWNoKHR5cGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFt0eXBlXTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHByb3RvY29sIGNsYWltcyBmaWx0ZXJlZFwiLCByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zOiBwcm90b2NvbCBjbGFpbXMgbm90IGZpbHRlcmVkXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZVRva2VucyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgY29kZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NDb2RlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGlkX3Rva2VuIGFuZCBhY2Nlc3NfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4oc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IE5vIGNvZGUgdG8gcHJvY2VzcyBvciBpZF90b2tlbiB0byB2YWxpZGF0ZVwiKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc0NvZGUoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgdmFyIHJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIGNsaWVudF9pZDogc3RhdGUuY2xpZW50X2lkLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiBzdGF0ZS5jbGllbnRfc2VjcmV0LFxyXG4gICAgICAgICAgICBjb2RlIDogcmVzcG9uc2UuY29kZSxcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiBzdGF0ZS5yZWRpcmVjdF91cmksXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHN0YXRlLmNvZGVfdmVyaWZpZXJcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoc3RhdGUuZXh0cmFUb2tlblBhcmFtcyAmJiB0eXBlb2Yoc3RhdGUuZXh0cmFUb2tlblBhcmFtcykgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdCwgc3RhdGUuZXh0cmFUb2tlblBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZUNvZGUocmVxdWVzdCkudGhlbih0b2tlblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHRva2VuUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW2tleV0gPSB0b2tlblJlc3BvbnNlW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDb2RlOiB0b2tlbiByZXNwb25zZSBzdWNjZXNzZnVsLCBwcm9jZXNzaW5nIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ29kZTogdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc2Z1bCwgcmV0dXJuaW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBWYWxpZGFpbmcgSldUIGF0dHJpYnV0ZXM7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5nZXRFcG9jaFRpbWUoKS50aGVuKG5vdyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKHJlc3BvbnNlLmlkX3Rva2VuLCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMsIG5vdykudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiBzdGF0ZS5ub25jZSAhPT0gcGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4oc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFNpZ25pbmdLZXlGb3JKd3Qoand0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG4gICAgICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICBpZiAoIWtpZCkge1xyXG4gICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1swXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgIH0pWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0U2lnbmluZ0tleUZvckp3dFdpdGhTaW5nbGVSZXRyeShqd3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2lnbmluZ0tleUZvckp3dChqd3QpLnRoZW4oa2V5ID0+IHtcclxuICAgICAgICAgICAgLy8gUmVmcmVzaGluZyBzaWduaW5nS2V5cyBpZiBubyBzdWl0YWJsZSB2ZXJpZmljYXRpb24ga2V5IGlzIHByZXNlbnQgZm9yIGdpdmVuIGp3dCBoZWFkZXIuXHJcbiAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdW5kZWZpbmVkLCB0byB0cmlnZ2VyIG5ldHdvcmsgY2FsbCB0byBqd2tzX3VyaS5cclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZS5yZXNldFNpZ25pbmdLZXlzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2lnbmluZ0tleUZvckp3dChqd3QpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIG5vbmNlIG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gbm9uY2Ugb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlciB8fCAhand0LnBheWxvYWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICE9PSBqd3QucGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgaXNzdWVyXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2lnbmluZ0tleUZvckp3dFdpdGhTaW5nbGVSZXRyeShqd3QpLnRoZW4oa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogVmFsaWRhaW5nIEpXVDsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXNwb25zZS5pZF90b2tlbiwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWp3dC5wYXlsb2FkLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBqd3QucGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJCeUFsZyhrZXlzLCBhbGcpe1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IExvb2tpbmcgZm9yIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHkpO1xyXG5cclxuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleS5rdHkgPT09IGt0eTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UucHJvZmlsZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gcHJvZmlsZSBsb2FkZWQgZnJvbSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdF9oYXNoIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hBbGcgPSBqd3QuaGVhZGVyLmFsZztcclxuICAgICAgICBpZiAoIWhhc2hBbGcgfHwgaGFzaEFsZy5sZW5ndGggIT09IDUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hCaXRzID0gaGFzaEFsZy5zdWJzdHIoMiwgMyk7XHJcbiAgICAgICAgaWYgKCFoYXNoQml0cykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnLCBoYXNoQml0cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaGFzaEJpdHMgPSBwYXJzZUludChoYXNoQml0cyk7XHJcbiAgICAgICAgaWYgKGhhc2hCaXRzICE9PSAyNTYgJiYgaGFzaEJpdHMgIT09IDM4NCAmJiBoYXNoQml0cyAhPT0gNTEyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2hhID0gXCJzaGFcIiArIGhhc2hCaXRzO1xyXG4gICAgICAgIHZhciBoYXNoID0gdGhpcy5fam9zZVV0aWwuaGFzaFN0cmluZyhyZXNwb25zZS5hY2Nlc3NfdG9rZW4sIHNoYSk7XHJcbiAgICAgICAgaWYgKCFoYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4gaGFzaCBmYWlsZWQ6XCIsIHNoYSk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGVmdCA9IGhhc2guc3Vic3RyKDAsIGhhc2gubGVuZ3RoIC8gMik7XHJcbiAgICAgICAgdmFyIGxlZnRfYjY0dSA9IHRoaXMuX2pvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGxlZnQpO1xyXG4gICAgICAgIGlmIChsZWZ0X2I2NHUgIT09IHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIiwgbGVmdF9iNjR1LCByZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IHN1Y2Nlc3NcIik7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9DaGVja1Nlc3Npb25JRnJhbWUuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1vbml0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHVzZXJNYW5hZ2VyLCBDaGVja1Nlc3Npb25JRnJhbWVDdG9yID0gQ2hlY2tTZXNzaW9uSUZyYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lcikge1xyXG4gICAgICAgIGlmICghdXNlck1hbmFnZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IuY3RvcjogTm8gdXNlciBtYW5hZ2VyIHBhc3NlZCB0byBTZXNzaW9uTW9uaXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXNlck1hbmFnZXJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlciA9IHVzZXJNYW5hZ2VyO1xyXG4gICAgICAgIHRoaXMuX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IgPSBDaGVja1Nlc3Npb25JRnJhbWVDdG9yO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyTG9hZGVkKHRoaXMuX3N0YXJ0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyVW5sb2FkZWQodGhpcy5fc3RvcC5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1hbnVhbGx5IGhlcmUgc2luY2UgY2FsbGluZyBnZXRVc2VyIFxyXG4gICAgICAgICAgICAvLyBkb2Vzbid0IHRyaWdnZXIgbG9hZCBldmVudC5cclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHVzZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBVc2VyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgJiYgc2Vzc2lvbi5zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzZXNzaW9uLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2Vzc2lvbi5zaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodG1wVXNlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gcXVlcnlTZXNzaW9uU3RhdHVzOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IgY3RvcjogZXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLnNldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuICAgIGdldCBfY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdGFydCh1c2VyKSB7XHJcbiAgICAgICAgbGV0IHNlc3Npb25fc3RhdGUgPSB1c2VyLnNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWQgPSB1c2VyLnByb2ZpbGUuc2lkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgc3ViOlwiLCB0aGlzLl9zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgYW5vbnltb3VzIHVzZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBJbml0aWFsaXppbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWVcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcE9uRXJyb3IgPSB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSA9IG5ldyB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBObyBjaGVjayBzZXNzaW9uIGlmcmFtZSBmb3VuZCBpbiB0aGUgbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gbm9uLXByb21pc2UgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IEVycm9yIGZyb20gZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zdWIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdG9wXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIC8vIHVzaW5nIGEgdGltZXIgdG8gZGVsYXkgcmUtaW5pdGlhbGl6YXRpb24gdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBzaWdub3V0XHJcbiAgICAgICAgICAgIGxldCB0aW1lckhhbmRsZSA9IHRoaXMuX3RpbWVyLnNldEludGVydmFsKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRpbWVySGFuZGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBVc2VyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgJiYgc2Vzc2lvbi5zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzZXNzaW9uLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2Vzc2lvbi5zaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodG1wVXNlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvcjogZXJyb3IgZnJvbSBxdWVyeVNlc3Npb25TdGF0dXM6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmFpc2VFdmVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViID09PSB0aGlzLl9zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICByYWlzZUV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnNpZCA9PT0gdGhpcy5fc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2FtZSBzdWIgc3RpbGwgbG9nZ2VkIGluIGF0IE9QLCByZXN0YXJ0aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lOyBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IERpZmZlcmVudCBzdWJqZWN0IHNpZ25lZCBpbnRvIE9QOlwiLCBzZXNzaW9uLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFN1YmplY3Qgbm8gbG9uZ2VyIHNpZ25lZCBpbnRvIE9QXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBpbiBldmVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZEluKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IEVycm9yIGNhbGxpbmcgcXVlcnlDdXJyZW50U2lnbmluU2Vzc2lvbjsgcmFpc2luZyBzaWduZWQgb3V0IGV2ZW50XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1hbmRhdG9yeVxyXG4gICAgICAgIHVybCwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCBhdXRob3JpdHksXHJcbiAgICAgICAgLy8gb3B0aW9uYWxcclxuICAgICAgICBkYXRhLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUsIGNsaWVudF9zZWNyZXQsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mb1xyXG4gICAgfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNsaWVudF9pZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWRpcmVjdF91cmlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlc3BvbnNlX3R5cGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNwb25zZV90eXBlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNjb3BlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gc2NvcGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY29wZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBhdXRob3JpdHkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2lkYyA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKHJlc3BvbnNlX3R5cGUpO1xyXG4gICAgICAgIGxldCBjb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSk7XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfbW9kZSkge1xyXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgPyBcInF1ZXJ5XCIgOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBTaWduaW5TdGF0ZSh7IG5vbmNlOiBvaWRjLCBcclxuICAgICAgICAgICAgZGF0YSwgY2xpZW50X2lkLCBhdXRob3JpdHksIHJlZGlyZWN0X3VyaSwgXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IGNvZGUsIFxyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQsIHNjb3BlLCBleHRyYVRva2VuUGFyYW1zLCBza2lwVXNlckluZm8gfSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY2xpZW50X2lkXCIsIGNsaWVudF9pZCk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJyZWRpcmVjdF91cmlcIiwgcmVkaXJlY3RfdXJpKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlc3BvbnNlX3R5cGVcIiwgcmVzcG9uc2VfdHlwZSk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzY29wZVwiLCBzY29wZSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgaWYgKG9pZGMpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJub25jZVwiLCB0aGlzLnN0YXRlLm5vbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZVwiLCB0aGlzLnN0YXRlLmNvZGVfY2hhbGxlbmdlKTtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG9wdGlvbmFsID0geyBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSB9O1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9wdGlvbmFsKXtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbmFsW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgb3B0aW9uYWxba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc09pZGMocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT0F1dGgocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcInRva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBpc0NvZGUocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImNvZGVcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcclxuXHJcbmNvbnN0IE9pZGNTY29wZSA9IFwib3BlbmlkXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluUmVzcG9uc2Uge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCBkZWxpbWl0ZXIgPSBcIiNcIikge1xyXG5cclxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5jb2RlID0gdmFsdWVzLmNvZGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLmlkX3Rva2VuID0gdmFsdWVzLmlkX3Rva2VuO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHZhbHVlcy5zZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gdmFsdWVzLmFjY2Vzc190b2tlbjtcclxuICAgICAgICB0aGlzLnRva2VuX3R5cGUgPSB2YWx1ZXMudG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gdmFsdWVzLnNjb3BlO1xyXG4gICAgICAgIHRoaXMucHJvZmlsZSA9IHVuZGVmaW5lZDsgLy8gd2lsbCBiZSBzZXQgZnJvbSBSZXNwb25zZVZhbGlkYXRvclxyXG5cclxuICAgICAgICB0aGlzLmV4cGlyZXNfaW4gPSB2YWx1ZXMuZXhwaXJlc19pbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBub3cgKyBleHBpcmVzX2luO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlZCgpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcclxuICAgICAgICBpZiAoZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjb3BlcygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc09wZW5JZENvbm5lY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGVzLmluZGV4T2YoT2lkY1Njb3BlKSA+PSAwIHx8ICEhdGhpcy5pZF90b2tlbjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblN0YXRlIGV4dGVuZHMgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3Ioe25vbmNlLCBhdXRob3JpdHksIGNsaWVudF9pZCwgcmVkaXJlY3RfdXJpLCBjb2RlX3ZlcmlmaWVyLCByZXNwb25zZV9tb2RlLCBjbGllbnRfc2VjcmV0LCBzY29wZSwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgaWYgKG5vbmNlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gcmFuZG9tKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gbm9uY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29kZV92ZXJpZmllciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyByYW5kb20oKSBwcm9kdWNlcyAzMiBsZW5ndGhcclxuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IHJhbmRvbSgpICsgcmFuZG9tKCkgKyByYW5kb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gY29kZV92ZXJpZmllcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBsZXQgaGFzaCA9IEpvc2VVdGlsLmhhc2hTdHJpbmcodGhpcy5jb2RlX3ZlcmlmaWVyLCBcIlNIQTI1NlwiKTtcclxuICAgICAgICAgICAgdGhpcy5fY29kZV9jaGFsbGVuZ2UgPSBKb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChoYXNoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXM7XHJcbiAgICAgICAgdGhpcy5fc2tpcFVzZXJJbmZvID0gc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub25jZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9uY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgYXV0aG9yaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpdHk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgY29kZV92ZXJpZmllcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV92ZXJpZmllcjtcclxuICAgIH1cclxuICAgIGdldCBjb2RlX2NoYWxsZW5nZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV9jaGFsbGVuZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfc2VjcmV0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNraXBVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZSxcclxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHRoaXMuY29kZV92ZXJpZmllcixcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmF1dGhvcml0eSxcclxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZTogdGhpcy5yZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudF9zZWNyZXQsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBleHRyYVRva2VuUGFyYW1zIDogdGhpcy5leHRyYVRva2VuUGFyYW1zLFxyXG4gICAgICAgICAgICBza2lwVXNlckluZm86IHRoaXMuc2tpcFVzZXJJbmZvXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduaW5TdGF0ZShkYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHt1cmwsIGlkX3Rva2VuX2hpbnQsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZGF0YSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25vdXRSZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZF90b2tlbl9oaW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiaWRfdG9rZW5faGludFwiLCBpZF90b2tlbl9oaW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFN0YXRlKHsgZGF0YSwgcmVxdWVzdF90eXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIFwiP1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lsZW50UmVuZXdTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayA9IHRoaXMuX3Rva2VuRXhwaXJpbmcuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcodGhpcy5fY2FsbGJhY2spO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgbG9hZGluZyBvZiB0aGUgdXNlciBzbyB0aGUgZXhwaXJpbmcgZXZlbnRzIGNhbiBiZSBpbml0aWFsaXplZFxyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyPT57XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxpYmVyYXRlIG5vcFxyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnI9PntcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5zdGFydDogRXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMucmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFjaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rva2VuRXhwaXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBTaWxlbnQgdG9rZW4gcmVuZXdhbCBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogRXJyb3IgZnJvbSBzaWduaW5TaWxlbnQ6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgY3JlYXRlZCwgcmVxdWVzdF90eXBlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5faWQgPSBpZCB8fCByYW5kb20oKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGVkID09PSAnbnVtYmVyJyAmJiBjcmVhdGVkID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkID0gY3JlYXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RfdHlwZSA9ICByZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNyZWF0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVxdWVzdF90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZTogdGhpcy5yZXF1ZXN0X3R5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RhdGUoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNsZWFyU3RhbGVTdGF0ZShzdG9yYWdlLCBhZ2UpIHtcclxuXHJcbiAgICAgICAgdmFyIGN1dG9mZiA9IERhdGUubm93KCkgLyAxMDAwIC0gYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcmFnZS5nZXRBbGxLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3Qga2V5c1wiLCBrZXlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdG9yYWdlLmdldChrZXkpLnRoZW4oaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBpdGVtIGZyb20ga2V5OiBcIiwga2V5LCBzdGF0ZS5jcmVhdGVkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY3JlYXRlZCA8PSBjdXRvZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IEVycm9yIHBhcnNpbmcgc3RhdGUgZm9yIGtleVwiLCBrZXksIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IG5vIGl0ZW0gaW4gc3RvcmFnZSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiByZW1vdmVkIGl0ZW0gZm9yIGtleTogXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnJlbW92ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogd2FpdGluZyBvbiBwcm9taXNlIGNvdW50OlwiLCBwcm9taXNlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuY29uc3QgVGltZXJEdXJhdGlvbiA9IDU7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lciBleHRlbmRzIEV2ZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lciwgbm93RnVuYyA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIGlmIChub3dGdW5jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vd0Z1bmMgPSBub3dGdW5jO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9ICgpID0+IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm93KCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9ub3dGdW5jKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoZHVyYXRpb24pIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uID0gcGFyc2VJbnQoZHVyYXRpb24pO1xyXG5cclxuICAgICAgICB2YXIgZXhwaXJhdGlvbiA9IHRoaXMubm93ICsgZHVyYXRpb247XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvbiA9PT0gZXhwaXJhdGlvbiAmJiB0aGlzLl90aW1lckhhbmRsZSkge1xyXG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0byBzYW1lIGV4cGlyYXRpb24sIHNvIGJhaWwgb3V0XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gc2luY2UgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgZXhwaXJhdGlvbjpcIiwgdGhpcy5leHBpcmF0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBmb3IgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uID0gZXhwaXJhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gd2UncmUgdXNpbmcgYSBmYWlybHkgc2hvcnQgdGltZXIgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb24gaW4gdGhlXHJcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gaGFuZGxlIHNjZW5hcmlvcyB3aGVyZSB0aGUgYnJvd3NlciBkZXZpY2Ugc2xlZXBzLCBhbmQgdGhlblxyXG4gICAgICAgIC8vIHRoZSB0aW1lcnMgZW5kIHVwIGdldHRpbmcgZGVsYXllZC5cclxuICAgICAgICB2YXIgdGltZXJEdXJhdGlvbiA9IFRpbWVyRHVyYXRpb247XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uIDwgdGltZXJEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aW1lckR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpbWVySGFuZGxlID0gdGhpcy5fdGltZXIuc2V0SW50ZXJ2YWwodGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKSwgdGltZXJEdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZXhwaXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwaXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmNhbmNlbDogXCIsIHRoaXMuX25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRoaXMuX3RpbWVySGFuZGxlKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9leHBpcmF0aW9uIC0gdGhpcy5ub3c7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FsbGJhY2s7IFwiICsgdGhpcy5fbmFtZSArIFwiIHRpbWVyIGV4cGlyZXMgaW46XCIsIGRpZmYpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwaXJhdGlvbiA8PSB0aGlzLm5vdykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICBzdXBlci5yYWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcigpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZUNvZGUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJhdXRob3JpemF0aW9uX2NvZGVcIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLmNsaWVudF9zZWNyZXQgPSBhcmdzLmNsaWVudF9zZWNyZXQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgdmFyIGJhc2ljQXV0aCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB2YXIgY2xpZW50X2F1dGhlbnRpY2F0aW9uID0gYXJncy5fY2xpZW50X2F1dGhlbnRpY2F0aW9uIHx8IHRoaXMuX3NldHRpbmdzLl9jbGllbnRfYXV0aGVudGljYXRpb247XHJcbiAgICAgICAgZGVsZXRlIGFyZ3MuX2NsaWVudF9hdXRoZW50aWNhdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZSBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWRpcmVjdF91cmkgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGVfdmVyaWZpZXIgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlX3ZlcmlmaWVyIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5jbGllbnRfc2VjcmV0ICYmIGNsaWVudF9hdXRoZW50aWNhdGlvbiA9PSBcImNsaWVudF9zZWNyZXRfYmFzaWNcIikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9zZWNyZXQgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjbGllbnRfc2VjcmV0IGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlbmRpbmcgdGhlIGNsaWVudCBjcmVkZW50aWFscyB1c2luZyB0aGUgQmFzaWMgQXV0aCBtZXRob2RcclxuICAgICAgICBpZihjbGllbnRfYXV0aGVudGljYXRpb24gPT0gXCJjbGllbnRfc2VjcmV0X2Jhc2ljXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBiYXNpY0F1dGggPSBhcmdzLmNsaWVudF9pZCArICc6JyArIGFyZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICAgICAgZGVsZXRlIGFyZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICBkZWxldGUgYXJncy5jbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogUmVjZWl2ZWQgdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MsIGJhc2ljQXV0aCkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IHJlc3BvbnNlIHJlY2VpdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MuZ3JhbnRfdHlwZSA9IGFyZ3MuZ3JhbnRfdHlwZSB8fCBcInJlZnJlc2hfdG9rZW5cIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLmNsaWVudF9zZWNyZXQgPSBhcmdzLmNsaWVudF9zZWNyZXQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuXHJcbiAgICAgICAgdmFyIGJhc2ljQXV0aCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB2YXIgY2xpZW50X2F1dGhlbnRpY2F0aW9uID0gYXJncy5fY2xpZW50X2F1dGhlbnRpY2F0aW9uIHx8IHRoaXMuX3NldHRpbmdzLl9jbGllbnRfYXV0aGVudGljYXRpb247XHJcbiAgICAgICAgZGVsZXRlIGFyZ3MuX2NsaWVudF9hdXRoZW50aWNhdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IE5vIHJlZnJlc2hfdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWZyZXNoX3Rva2VuIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY2xpZW50X2lkIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlbmRpbmcgdGhlIGNsaWVudCBjcmVkZW50aWFscyB1c2luZyB0aGUgQmFzaWMgQXV0aCBtZXRob2RcclxuICAgICAgICBpZihjbGllbnRfYXV0aGVudGljYXRpb24gPT0gXCJjbGllbnRfc2VjcmV0X2Jhc2ljXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBiYXNpY0F1dGggPSBhcmdzLmNsaWVudF9pZCArICc6JyArIGFyZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICAgICAgZGVsZXRlIGFyZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICBkZWxldGUgYXJncy5jbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MsIGJhc2ljQXV0aCkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5jb25zdCBBY2Nlc3NUb2tlblR5cGVIaW50ID0gXCJhY2Nlc3NfdG9rZW5cIjtcclxuY29uc3QgUmVmcmVzaFRva2VuVHlwZUhpbnQgPSBcInJlZnJlc2hfdG9rZW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlblJldm9jYXRpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIFhNTEh0dHBSZXF1ZXN0Q3RvciA9IEdsb2JhbC5YTUxIdHRwUmVxdWVzdCwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXR0aW5ncyBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvciA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2b2tlKHRva2VuLCByZXF1aXJlZCwgdHlwZSA9IFwiYWNjZXNzX3Rva2VuXCIpIHtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5vIHRva2VuIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0b2tlbiBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZSAhPT0gQWNjZXNzVG9rZW5UeXBlSGludCAmJiB0eXBlICE9IFJlZnJlc2hUb2tlblR5cGVIaW50KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IEludmFsaWQgdG9rZW4gdHlwZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0b2tlbiB0eXBlLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJldm9jYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBub3QgcmVxdWlyZWQsIHNvIGRvbid0IGVycm9yIGFuZCBqdXN0IHJldHVyblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZva2luZyBcIiArIHR5cGUpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X3NlY3JldCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlKHVybCwgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCB0b2tlbiwgdHlwZSkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdEN0b3IoKTtcclxuICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHhoci5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoeGhyLnN0YXR1c1RleHQgKyBcIiAoXCIgKyB4aHIuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTmV0d29yayBFcnJvci5cIilcclxuICAgICAgICAgICAgICAgIHJlamVjdChcIk5ldHdvcmsgRXJyb3JcIik7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB2YXIgYm9keSA9IFwiY2xpZW50X2lkPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNsaWVudF9pZCk7XHJcbiAgICAgICAgICAgIGlmIChjbGllbnRfc2VjcmV0KSB7XHJcbiAgICAgICAgICAgICAgICBib2R5ICs9IFwiJmNsaWVudF9zZWNyZXQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X3NlY3JldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbl90eXBlX2hpbnQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodHlwZSk7XHJcbiAgICAgICAgICAgIGJvZHkgKz0gXCImdG9rZW49XCIgKyBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIHhoci5zZW5kKGJvZHkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVybFV0aWxpdHkge1xyXG4gICAgc3RhdGljIGFkZFF1ZXJ5UGFyYW0odXJsLCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXJsW3VybC5sZW5ndGggLSAxXSAhPT0gXCI/XCIpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiJlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgICAgICB1cmwgKz0gXCI9XCI7XHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlVXJsRnJhZ21lbnQodmFsdWUsIGRlbGltaXRlciA9IFwiI1wiLCBnbG9iYWwgPSBHbG9iYWwpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdmFsdWUubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoaWR4ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSBcIj9cIikge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSdyZSBkb2luZyBxdWVyeSwgdGhlbiBzdHJpcCBvZmYgaGFzaCBmcmFnbWVudCBiZWZvcmUgd2UgcGFyc2VcclxuICAgICAgICAgICAgaWR4ID0gdmFsdWUuaW5kZXhPZignIycpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKDAsIGlkeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7fSxcclxuICAgICAgICAgICAgcmVnZXggPSAvKFteJj1dKyk9KFteJl0qKS9nLFxyXG4gICAgICAgICAgICBtO1xyXG5cclxuICAgICAgICB2YXIgY291bnRlciA9IDA7XHJcbiAgICAgICAgd2hpbGUgKG0gPSByZWdleC5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChtWzJdLnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIrKyA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQ6IHJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCIsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiUmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7aWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGFjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgdG9rZW5fdHlwZSwgc2NvcGUsIHByb2ZpbGUsIGV4cGlyZXNfYXQsIHN0YXRlfSkge1xyXG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSBpZF90b2tlbjtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBleHBpcmVzX2F0O1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwaXJlc19pbiA9PT0gJ251bWJlcicgJiYgZXhwaXJlc19pbiA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZWQoKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XHJcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwaXJlc19pbiA8PSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY29wZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjb3BlIHx8IFwiXCIpLnNwbGl0KFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci50b1N0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgaWRfdG9rZW46IHRoaXMuaWRfdG9rZW4sXHJcbiAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHRoaXMuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdGhpcy5yZWZyZXNoX3Rva2VuLFxyXG4gICAgICAgICAgICB0b2tlbl90eXBlOiB0aGlzLnRva2VuX3R5cGUsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXHJcbiAgICAgICAgICAgIGV4cGlyZXNfYXQ6IHRoaXMuZXhwaXJlc19hdFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVzZXIoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckluZm9TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHNldHRpbmdzLCBcclxuICAgICAgICBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSwgXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9nZXRDbGFpbXNGcm9tSnd0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9qb3NlVXRpbCA9IGpvc2VVdGlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENsYWltcyh0b2tlbikge1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogTm8gdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSB0b2tlbiBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFVzZXJJbmZvRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IHJlY2VpdmVkIHVzZXJpbmZvIHVybFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24odXJsLCB0b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogY2xhaW1zIHJlY2VpdmVkXCIsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0Q2xhaW1zRnJvbUp3dChyZXEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBGYWlsZWQgdG8gcGFyc2UgSldUXCIsIGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlzc3VlclByb21pc2U7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ09QJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQU5ZJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGp3dC5wYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaXNzdWVyUHJvbWlzZS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIGlzc3VlcjpcIiArIGlzc3Vlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraWQgaXMgbWFuZGF0b3J5IG9ubHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUga2V5cyBpbiB0aGUgcmVmZXJlbmNlZCBKV0sgU2V0IGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXEucmVzcG9uc2VUZXh0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcywgdW5kZWZpbmVkLCB0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gand0LnBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBFcnJvciBwYXJzaW5nIEpXVCByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZykge1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XHJcblxyXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnQgfSBmcm9tICcuL09pZGNDbGllbnQuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlclNldHRpbmdzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlclNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vVXNlci5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyRXZlbnRzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlckV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IFNpbGVudFJlbmV3U2VydmljZSB9IGZyb20gJy4vU2lsZW50UmVuZXdTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL1Nlc3Npb25Nb25pdG9yLmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gXCIuL1NpZ25pblJlcXVlc3RcIjtcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9Ub2tlblJldm9jYXRpb25DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlciBleHRlbmRzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSxcclxuICAgICAgICBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yID0gU2lsZW50UmVuZXdTZXJ2aWNlLFxyXG4gICAgICAgIFNlc3Npb25Nb25pdG9yQ3RvciA9IFNlc3Npb25Nb25pdG9yLFxyXG4gICAgICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IgPSBUb2tlblJldm9jYXRpb25DbGllbnQsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQsXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIGlmICghKHNldHRpbmdzIGluc3RhbmNlb2YgVXNlck1hbmFnZXJTZXR0aW5ncykpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3MgPSBuZXcgVXNlck1hbmFnZXJTZXR0aW5ncyhzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFVzZXJNYW5hZ2VyRXZlbnRzKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2UgPSBuZXcgU2lsZW50UmVuZXdTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gb3JkZXIgaXMgaW1wb3J0YW50IGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM7IHRoZXNlIHNlcnZpY2VzIGRlcGVuZCB1cG9uIHRoZSBldmVudHMuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXV0b21hdGljU2lsZW50UmVuZXcpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogYXV0b21hdGljU2lsZW50UmVuZXcgaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzaWxlbnQgcmVuZXdcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRSZW5ldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubW9uaXRvclNlc3Npb24pIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogbW9uaXRvclNlc3Npb24gaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzZXNzaW9uIG1vbml0b3JcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25Nb25pdG9yID0gbmV3IFNlc3Npb25Nb25pdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudCA9IG5ldyBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9yZWRpcmVjdE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfcG9wdXBOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX2lmcmFtZU5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX3VzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy51c2VyU3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV2ZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuZ2V0VXNlcjogdXNlciBsb2FkZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIG5vdCBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcihudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5yZW1vdmVVc2VyOiB1c2VyIHJlbW92ZWQgZnJvbSBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMudW5sb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluUmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6clwiO1xyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IE5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBzaWduaW5Qb3B1cCBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9wb3B1cE5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrIGVycm9yOiBcIiArIGVyciAmJiBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgLy8gZmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByZWZyZXNoIHRva2VuLCBvciBuZWVkIHRvIHVzZSBpZnJhbWVcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MucmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VSZWZyZXNoVG9rZW4oYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiO1xyXG4gICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gYXJncy5pZF90b2tlbl9oaW50IHx8ICh0aGlzLnNldHRpbmdzLmluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyAmJiB1c2VyICYmIHVzZXIuaWRfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIgJiYgdGhpcy5fc2V0dGluZ3MudmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50LCBzdWJqZWN0IHByaW9yIHRvIHNpbGVudCByZW5ldzogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuY3VycmVudF9zdWIgPSB1c2VyLnByb2ZpbGUuc3ViO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblNpbGVudElmcmFtZShhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF91c2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuKGFyZ3MpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogTm8gYWNjZXNzIHRva2VuIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkVG9rZW5WYWxpZGF0aW9uID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZFRva2VuVmFsaWRhdGlvbiA9IHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbih1c2VyLnByb2ZpbGUsIHJlc3VsdC5pZF90b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWRUb2tlblZhbGlkYXRpb24udGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IHJlZnJlc2ggdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5pZF90b2tlbiA9IHJlc3VsdC5pZF90b2tlbiB8fCB1c2VyLmlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmFjY2Vzc190b2tlbiA9IHJlc3VsdC5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIucmVmcmVzaF90b2tlbiA9IHJlc3VsdC5yZWZyZXNoX3Rva2VuIHx8IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5leHBpcmVzX2luID0gcmVzdWx0LmV4cGlyZXNfaW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbihwcm9maWxlLCBpZF90b2tlbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5nZXRFcG9jaFRpbWUoKS50aGVuKG5vdyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGlkX3Rva2VuLCBpc3N1ZXIsIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCwgdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3LCBub3cpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnN1YiAhPT0gcHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogc3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXV0aF90aW1lICYmIHBheWxvYWQuYXV0aF90aW1lICE9PSBwcm9maWxlLmF1dGhfdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhdXRoX3RpbWUgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXV0aF90aW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aF90aW1lIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF1dGhfdGltZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gcHJvZmlsZS5henApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXpwIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF6cFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuYXpwICYmIHByb2ZpbGUuYXpwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXpwIG5vdCBpbiBpZF90b2tlbiwgYnV0IHByZXNlbnQgaW4gb3JpZ2luYWwgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgX3NpZ25pblNpbGVudElmcmFtZShhcmdzID0ge30pIHtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MucHJvbXB0ID0gYXJncy5wcm9tcHQgfHwgXCJub25lXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5faWZyYW1lTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcclxuICAgICAgICB9KS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblNpbGVudENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5DYWxsYmFjayh1cmwsIHRoaXMuX2lmcmFtZU5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluQ2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnJcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6cFwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5Qb3B1cENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpzXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblNpbGVudENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImludmFsaWQgcmVzcG9uc2VfdHlwZSBpbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286clwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286cFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFBvcHVwQ2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnlTZXNzaW9uU3RhdHVzKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjsgLy8gdGhpcyBhY3RzIGxpa2UgYSBzaWduaW4gc2lsZW50XHJcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IE5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLnByb21wdCA9IFwibm9uZVwiO1xyXG4gICAgICAgIGFyZ3MucmVzcG9uc2VfdHlwZSA9IGFyZ3MucmVzcG9uc2VfdHlwZSB8fCB0aGlzLnNldHRpbmdzLnF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIGFyZ3Muc2NvcGUgPSBhcmdzLnNjb3BlIHx8IFwib3BlbmlkXCI7XHJcbiAgICAgICAgYXJncy5za2lwVXNlckluZm8gPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgdGhpcy5faWZyYW1lTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcclxuICAgICAgICB9KS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKG5hdlJlc3BvbnNlLnVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IGdvdCBzaWduaW4gcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pblJlc3BvbnNlLnNlc3Npb25fc3RhdGUgJiYgc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogcXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3MgZm9yIHN1YjogXCIsICBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkOiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnNpZFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcInF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzZnVsLCB1c2VyIG5vdCBhdXRoZW50aWNhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuc2Vzc2lvbl9zdGF0ZSAmJiB0aGlzLnNldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlID09IFwibG9naW5fcmVxdWlyZWRcIiB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJjb25zZW50X3JlcXVpcmVkXCIgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IFwiaW50ZXJhY3Rpb25fcmVxdWlyZWRcIiB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJhY2NvdW50X3NlbGVjdGlvbl9yZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2VzcyBmb3IgYW5vbnltb3VzIHVzZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBlcnIuc2Vzc2lvbl9zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9zaWduaW4oYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcykudGhlbihuYXZSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5FbmQobmF2UmVzcG9uc2UudXJsLCBhcmdzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5TdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IucHJlcGFyZShuYXZpZ2F0b3JQYXJhbXMpLnRoZW4oaGFuZGxlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBnb3QgbmF2aWdhdG9yIHdpbmRvdyBoYW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaWduaW5SZXF1ZXN0KGFyZ3MpLnRoZW4oc2lnbmluUmVxdWVzdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBzaWduaW4gcmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMudXJsID0gc2lnbmluUmVxdWVzdC51cmw7XHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWduaW5SZXF1ZXN0LnN0YXRlLmlkO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUubmF2aWdhdGUobmF2aWdhdG9yUGFyYW1zKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluRW5kKHVybCwgYXJncyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKHVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGdvdCBzaWduaW4gcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICBsZXQgdXNlciA9IG5ldyBVc2VyKHNpZ25pblJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5jdXJyZW50X3N1YiAhPT0gdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGN1cnJlbnQgdXNlciBkb2VzIG5vdCBtYXRjaCB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluLiBzdWIgZnJvbSBzaWduaW46IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibG9naW5fcmVxdWlyZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIG1hdGNoZXMgdXNlciByZXR1cm5lZCBmcm9tIHNpZ25pblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogdXNlciBzdG9yZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pbkNhbGxiYWNrKHVybCwgbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkNhbGxiYWNrXCIpO1xyXG4gICAgICAgIGxldCB1c2VRdWVyeSA9IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgPT09IFwicXVlcnlcIiB8fCAoIXRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgJiYgU2lnbmluUmVxdWVzdC5pc0NvZGUodGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfdHlwZSkpO1xyXG4gICAgICAgIGxldCBkZWxpbWl0ZXIgPSB1c2VRdWVyeSA/IFwiP1wiIDogXCIjXCI7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jYWxsYmFjayh1cmwsIHVuZGVmaW5lZCwgZGVsaW1pdGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0UmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286clwiO1xyXG4gICAgICAgIGxldCBwb3N0TG9nb3V0UmVkaXJlY3RVcmkgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAocG9zdExvZ291dFJlZGlyZWN0VXJpKXtcclxuICAgICAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0TG9nb3V0UmVkaXJlY3RVcmk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRTdGFydChhcmdzLCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvciwgbmF2UGFyYW1zKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0OiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQodXJsIHx8IHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLnVybCkudGhlbihyZXNwb25zZT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRSZWRpcmVjdENhbGxiYWNrOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dFBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNvOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5kaXNwbGF5ID0gXCJwb3B1cFwiO1xyXG4gICAgICAgIGlmIChhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSl7XHJcbiAgICAgICAgICAgIC8vIHdlJ3JlIHB1dHRpbmcgYSBkdW1teSBlbnRyeSBpbiBoZXJlIGJlY2F1c2Ugd2VcclxuICAgICAgICAgICAgLy8gbmVlZCBhIHVuaXF1ZSBpZCBmcm9tIHRoZSBzdGF0ZSBmb3Igbm90aWZpY2F0aW9uXHJcbiAgICAgICAgICAgIC8vIHRvIHRoZSBwYXJlbnQgd2luZG93LCB3aGljaCBpcyBuZWNlc3NhcnkgaWYgd2VcclxuICAgICAgICAgICAgLy8gcGxhbiB0byByZXR1cm4gYmFjayB0byB0aGUgY2xpZW50IGFmdGVyIHNpZ25vdXRcclxuICAgICAgICAgICAgLy8gYW5kIHNvIHdlIGNhbiBjbG9zZSB0aGUgcG9wdXAgYWZ0ZXIgc2lnbm91dFxyXG4gICAgICAgICAgICBhcmdzLnN0YXRlID0gYXJncy5zdGF0ZSB8fCB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0KGFyZ3MsIHRoaXMuX3BvcHVwTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXM6IGFyZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93RmVhdHVyZXMsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93VGFyZ2V0OiBhcmdzLnBvcHVwV2luZG93VGFyZ2V0IHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dUYXJnZXRcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UG9wdXA6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihrZWVwT3BlbikgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZih1cmwpID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAga2VlcE9wZW4gPSB1cmw7XHJcbiAgICAgICAgICAgIHVybCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGVsaW1pdGVyID0gJz8nO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvci5jYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cENhbGxiYWNrOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9zaWdub3V0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dFN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQobmF2UmVzcG9uc2UudXJsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWdub3V0U3RhcnQoYXJncyA9IHt9LCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBnb3QgbmF2aWdhdG9yIHdpbmRvdyBoYW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogbG9hZGVkIGN1cnJlbnQgdXNlciBmcm9tIHN0b3JhZ2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHJldm9rZVByb21pc2UgPSB0aGlzLl9zZXR0aW5ncy5yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA/IHRoaXMuX3Jldm9rZUludGVybmFsKHVzZXIpIDogUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2b2tlUHJvbWlzZS50aGVuKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkX3Rva2VuID0gYXJncy5pZF90b2tlbl9oaW50IHx8IHVzZXIgJiYgdXNlci5pZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogU2V0dGluZyBpZF90b2tlbiBpbnRvIHNpZ25vdXQgcmVxdWVzdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gaWRfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVVc2VyKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IHVzZXIgcmVtb3ZlZCwgY3JlYXRpbmcgc2lnbm91dCByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2lnbm91dFJlcXVlc3QoYXJncykudGhlbihzaWdub3V0UmVxdWVzdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBnb3Qgc2lnbm91dCByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWdub3V0UmVxdWVzdC51cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbm91dFJlcXVlc3Quc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWdub3V0UmVxdWVzdC5zdGF0ZS5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUubmF2aWdhdGUobmF2aWdhdG9yUGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBFcnJvciBhZnRlciBwcmVwYXJpbmcgbmF2aWdhdG9yLCBjbG9zaW5nIG5hdmlnYXRvciB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25vdXRFbmQodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25vdXRSZXNwb25zZSh1cmwpLnRoZW4oc2lnbm91dFJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRFbmQ6IGdvdCBzaWdub3V0IHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNpZ25vdXRSZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXZva2VBY2Nlc3NUb2tlbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlciwgdHJ1ZSkudGhlbihzdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IHJlbW92aW5nIHRva2VuIHByb3BlcnRpZXMgZnJvbSB1c2VyIGFuZCByZS1zdG9yaW5nXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1c2VyLmFjY2Vzc190b2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLmV4cGlyZXNfYXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIudG9rZW5fdHlwZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IHVzZXIgc3RvcmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiBhY2Nlc3MgdG9rZW4gcmV2b2tlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZUludGVybmFsKHVzZXIsIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgdmFyIGFjY2Vzc190b2tlbiA9IHVzZXIuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICB2YXIgcmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihhdFN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocnRTdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRTdWNjZXNzICYmICFydFN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogbm8gbmVlZCB0byByZXZva2UgZHVlIHRvIG5vIHRva2VuKHMpLCBvciBKV1QgZm9ybWF0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdWNjZXNzIHx8IHJ0U3VjY2VzcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpIHtcclxuICAgICAgICAvLyBjaGVjayBmb3IgSldUIHZzLiByZWZlcmVuY2UgdG9rZW5cclxuICAgICAgICBpZiAoIWFjY2Vzc190b2tlbiB8fCBhY2Nlc3NfdG9rZW4uaW5kZXhPZignLicpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZShhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKS50aGVuKCgpID0+IHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZCkge1xyXG4gICAgICAgIGlmICghcmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkLCBcInJlZnJlc2hfdG9rZW5cIikudGhlbigoKSA9PiB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydFNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2Uuc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfdXNlclN0b3JlS2V5KCkge1xyXG4gICAgICAgIHJldHVybiBgdXNlcjoke3RoaXMuc2V0dGluZ3MuYXV0aG9yaXR5fToke3RoaXMuc2V0dGluZ3MuY2xpZW50X2lkfWA7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUuZ2V0KHRoaXMuX3VzZXJTdG9yZUtleSkudGhlbihzdG9yYWdlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogdXNlciBzdG9yYWdlU3RyaW5nIGxvYWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBVc2VyLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fbG9hZFVzZXI6IG5vIHVzZXIgc3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVVc2VyKHVzZXIpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5zdG9yZVVzZXI6IHN0b3JpbmcgdXNlclwiKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzdG9yYWdlU3RyaW5nID0gdXNlci50b1N0b3JhZ2VTdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5zZXQodGhpcy5fdXNlclN0b3JlS2V5LCBzdG9yYWdlU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcInN0b3JlVXNlci5zdG9yZVVzZXI6IHJlbW92aW5nIHVzZXJcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUucmVtb3ZlKHRoaXMuX3VzZXJTdG9yZUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL0FjY2Vzc1Rva2VuRXZlbnRzLmpzJztcclxuaW1wb3J0IHsgRXZlbnQgfSBmcm9tICcuL0V2ZW50LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlckV2ZW50cyBleHRlbmRzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkID0gbmV3IEV2ZW50KFwiVXNlciBsb2FkZWRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkID0gbmV3IEV2ZW50KFwiVXNlciB1bmxvYWRlZFwiKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yID0gbmV3IEV2ZW50KFwiU2lsZW50IHJlbmV3IGVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbiA9IG5ldyBFdmVudChcIlVzZXIgc2lnbmVkIGluXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQgPSBuZXcgRXZlbnQoXCJVc2VyIHNpZ25lZCBvdXRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkID0gbmV3IEV2ZW50KFwiVXNlciBzZXNzaW9uIGNoYW5nZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZCh1c2VyLCByYWlzZUV2ZW50PXRydWUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5sb2FkXCIpO1xyXG4gICAgICAgIHN1cGVyLmxvYWQodXNlcik7XHJcbiAgICAgICAgaWYgKHJhaXNlRXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yYWlzZSh1c2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB1bmxvYWQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMudW5sb2FkXCIpO1xyXG4gICAgICAgIHN1cGVyLnVubG9hZCgpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJMb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlckxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclVubG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclVubG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNpbGVudFJlbmV3RXJyb3IoY2IpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlU2lsZW50UmVuZXdFcnJvcihjYikge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VTaWxlbnRSZW5ld0Vycm9yKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VTaWxlbnRSZW5ld0Vycm9yXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yYWlzZShlKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyU2lnbmVkSW4oY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4uYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyU2lnbmVkSW4oY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4ucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2lnbmVkSW4oKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNpZ25lZEluXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbi5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTaWduZWRPdXQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNpZ25lZE91dChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2lnbmVkT3V0KCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJhaXNlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFJlZGlyZWN0TmF2aWdhdG9yIH0gZnJvbSAnLi9SZWRpcmVjdE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IFBvcHVwTmF2aWdhdG9yIH0gZnJvbSAnLi9Qb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IElGcmFtZU5hdmlnYXRvciB9IGZyb20gJy4vSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IDYwO1xyXG5jb25zdCBEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSAyMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyU2V0dGluZ3MgZXh0ZW5kcyBPaWRjQ2xpZW50U2V0dGluZ3Mge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIHBvcHVwX3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICBwb3B1cFdpbmRvd1RhcmdldCxcclxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0LFxyXG4gICAgICAgIGF1dG9tYXRpY1NpbGVudFJlbmV3ID0gZmFsc2UsXHJcbiAgICAgICAgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gZmFsc2UsXHJcbiAgICAgICAgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ID0gdHJ1ZSxcclxuICAgICAgICBtb25pdG9yU2Vzc2lvbiA9IHRydWUsXHJcbiAgICAgICAgbW9uaXRvckFub255bW91c1Nlc3Npb24gPSBmYWxzZSxcclxuICAgICAgICBjaGVja1Nlc3Npb25JbnRlcnZhbCA9IERlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCxcclxuICAgICAgICBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvciA9IHRydWUsXHJcbiAgICAgICAgcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUsXHJcbiAgICAgICAgcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSBmYWxzZSxcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSxcclxuICAgICAgICByZWRpcmVjdE5hdmlnYXRvciA9IG5ldyBSZWRpcmVjdE5hdmlnYXRvcigpLFxyXG4gICAgICAgIHBvcHVwTmF2aWdhdG9yID0gbmV3IFBvcHVwTmF2aWdhdG9yKCksXHJcbiAgICAgICAgaWZyYW1lTmF2aWdhdG9yID0gbmV3IElGcmFtZU5hdmlnYXRvcigpLFxyXG4gICAgICAgIHVzZXJTdG9yZSA9IG5ldyBXZWJTdG9yYWdlU3RhdGVTdG9yZSh7IHN0b3JlOiBHbG9iYWwuc2Vzc2lvblN0b3JhZ2UgfSlcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKGFyZ3VtZW50c1swXSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaSA9IHBvcHVwX3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcyA9IHBvcHVwV2luZG93RmVhdHVyZXM7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQgPSBwb3B1cFdpbmRvd1RhcmdldDtcclxuXHJcbiAgICAgICAgdGhpcy5fc2lsZW50X3JlZGlyZWN0X3VyaSA9IHNpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVxdWVzdFRpbWVvdXQgPSBzaWxlbnRSZXF1ZXN0VGltZW91dDtcclxuICAgICAgICB0aGlzLl9hdXRvbWF0aWNTaWxlbnRSZW5ldyA9IGF1dG9tYXRpY1NpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyA9IHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgPSBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5fbW9uaXRvclNlc3Npb24gPSBtb25pdG9yU2Vzc2lvbjtcclxuICAgICAgICB0aGlzLl9tb25pdG9yQW5vbnltb3VzU2Vzc2lvbiA9IG1vbml0b3JBbm9ueW1vdXNTZXNzaW9uO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsID0gY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICAgICAgdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IgPSBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgICAgICBpZiAocXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50c1swXSAmJiBhcmd1bWVudHNbMF0ucmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSA/IFwiaWRfdG9rZW5cIiA6IFwiY29kZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID0gcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yID0gcmVkaXJlY3ROYXZpZ2F0b3I7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBOYXZpZ2F0b3IgPSBwb3B1cE5hdmlnYXRvcjtcclxuICAgICAgICB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IgPSBpZnJhbWVOYXZpZ2F0b3I7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJTdG9yZSA9IHVzZXJTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcG9wdXBfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBXaW5kb3dGZWF0dXJlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgIH1cclxuICAgIGdldCBwb3B1cFdpbmRvd1RhcmdldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpbGVudF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICAgZ2V0IHNpbGVudFJlcXVlc3RUaW1lb3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dDtcclxuICAgIH1cclxuICAgIGdldCBhdXRvbWF0aWNTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb25pdG9yU2Vzc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9uaXRvclNlc3Npb247XHJcbiAgICB9XHJcbiAgICBnZXQgbW9uaXRvckFub255bW91c1Nlc3Npb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcigpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgIH1cclxuICAgIGdldCBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgIH1cclxuICAgIGdldCByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlZGlyZWN0TmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgaWZyYW1lTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHVzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtwcmVmaXggPSBcIm9pZGMuXCIsIHN0b3JlID0gR2xvYmFsLmxvY2FsU3RvcmFnZX0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX3N0b3JlID0gc3RvcmU7XHJcbiAgICAgICAgdGhpcy5fcHJlZml4ID0gcHJlZml4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuc2V0XCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RvcmUuc2V0SXRlbShrZXksIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUoa2V5KSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUucmVtb3ZlXCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9zdG9yZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmUucmVtb3ZlSXRlbShrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbEtleXMoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuZ2V0QWxsS2V5c1wiKTtcclxuXHJcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3N0b3JlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5fc3RvcmUua2V5KGluZGV4KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZih0aGlzLl9wcmVmaXgpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5LnN1YnN0cih0aGlzLl9wcmVmaXgubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5cyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgandzLCBLRVlVVElMIGFzIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCB9IGZyb20gJy4uLy4uL2pzcnNhc2lnbi9kaXN0L2pzcnNhc2lnbi5qcyc7XHJcblxyXG5jb25zdCBBbGxvd2VkU2lnbmluZ0FsZ3MgPSBbJ1JTMjU2JywgJ1JTMzg0JywgJ1JTNTEyJywgJ1BTMjU2JywgJ1BTMzg0JywgJ1BTNTEyJywgJ0VTMjU2JywgJ0VTMzg0JywgJ0VTNTEyJ107XHJcblxyXG5leHBvcnQge1xyXG4gICAgandzLFxyXG4gICAgS2V5VXRpbCxcclxuICAgIFg1MDksXHJcbiAgICBjcnlwdG8sXHJcbiAgICBoZXh0b2I2NHUsXHJcbiAgICBiNjR0b2hleCxcclxuICAgIEFsbG93ZWRTaWduaW5nQWxnc1xyXG59O1xyXG4iLCIvKipcclxuICogR2VuZXJhdGVzIFJGQzQxMjIgdmVyc2lvbiA0IGd1aWQgKClcclxuICovXHJcblxyXG52YXIgY3J5cHRvID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSA/ICh3aW5kb3cuY3J5cHRvIHx8IHdpbmRvdy5tc0NyeXB0bykgOiBudWxsO1xyXG5cclxuZnVuY3Rpb24gX2NyeXB0b1V1aWR2NCgpIHtcclxuICByZXR1cm4gKFsxZTddKy0xZTMrLTRlMystOGUzKy0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XHJcbiAgICAoYyBeIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMSkpWzBdICYgMTUgPj4gYyAvIDQpLnRvU3RyaW5nKDE2KVxyXG4gIClcclxufVxyXG5cclxuZnVuY3Rpb24gX3V1aWR2NCgpIHtcclxuICAgIHJldHVybiAoWzFlN10rLTFlMystNGUzKy04ZTMrLTFlMTEpLnJlcGxhY2UoL1swMThdL2csIGMgPT5cclxuICAgIChjIF4gTWF0aC5yYW5kb20oKSAqIDE2ID4+IGMgLyA0KS50b1N0cmluZygxNilcclxuICApXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbSgpIHtcclxuICB2YXIgaGFzQ3J5cHRvID0gY3J5cHRvICE9ICd1bmRlZmluZWQnICYmIGNyeXB0byAhPT0gbnVsbDtcclxuICB2YXIgaGFzUmFuZG9tVmFsdWVzID0gaGFzQ3J5cHRvICYmICh0eXBlb2YoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykgIT0gJ3VuZGVmaW5lZCcpOyAgXHJcbiAgdmFyIHV1aWQgPSBoYXNSYW5kb21WYWx1ZXMgPyBfY3J5cHRvVXVpZHY0IDogX3V1aWR2NDtcclxuICByZXR1cm4gdXVpZCgpLnJlcGxhY2UoLy0vZywgJycpO1xyXG59XHJcbiIsImNvbnN0IFZlcnNpb24gPSBcIjEuMTEuNVwiOyBleHBvcnQge1ZlcnNpb259OyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tdG8tanNvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbnZva2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZm9yY2VkLXBhbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZXBsYWNlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcmVwZWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VzZXItYWdlbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1leHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY29zaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2luaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ibGluay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmltdWxoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9jb3JlLWpzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9BY2Nlc3NUb2tlbkV2ZW50cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0Nsb2NrU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFJRnJhbWVOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhUG9wdXBOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9FcnJvclJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvRXZlbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9HbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9JRnJhbWVOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9JRnJhbWVXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Kb3NlVXRpbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pvc2VVdGlsSW1wbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pzb25TZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvTG9nLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvTWV0YWRhdGFTZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvT2lkY0NsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL09pZGNDbGllbnRTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1BvcHVwTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUG9wdXBXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9SZWRpcmVjdE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Jlc3BvbnNlVmFsaWRhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2Vzc2lvbk1vbml0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5SZXF1ZXN0LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5TdGF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25vdXRSZXF1ZXN0LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbm91dFJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lsZW50UmVuZXdTZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU3RhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9UaW1lci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Rva2VuQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXJsVXRpbGl0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VySW5mb1NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyRXZlbnRzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXJTZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvY3J5cHRvL2pzcnNhc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL3JhbmRvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vdmVyc2lvbi5qcyJdLCJuYW1lcyI6WyJWZXJzaW9uIiwiTG9nIiwiT2lkY0NsaWVudCIsIk9pZGNDbGllbnRTZXR0aW5ncyIsIldlYlN0b3JhZ2VTdGF0ZVN0b3JlIiwiSW5NZW1vcnlXZWJTdG9yYWdlIiwiVXNlck1hbmFnZXIiLCJBY2Nlc3NUb2tlbkV2ZW50cyIsIk1ldGFkYXRhU2VydmljZSIsIkNvcmRvdmFQb3B1cE5hdmlnYXRvciIsIkNvcmRvdmFJRnJhbWVOYXZpZ2F0b3IiLCJDaGVja1Nlc3Npb25JRnJhbWUiLCJUb2tlblJldm9jYXRpb25DbGllbnQiLCJTZXNzaW9uTW9uaXRvciIsIkdsb2JhbCIsIlVzZXIiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ3aW5kb3ciLCJDcnlwdG9KUyIsImUiLCJnIiwiYSIsImIiLCJsaWIiLCJqIiwiQmFzZSIsIm4iLCJleHRlbmQiLCJwIiwicHJvdG90eXBlIiwibyIsIm1peEluIiwiaGFzT3duUHJvcGVydHkiLCJpbml0IiwiJHN1cGVyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjcmVhdGUiLCJ0b1N0cmluZyIsImNsb25lIiwibCIsIldvcmRBcnJheSIsIndvcmRzIiwic2lnQnl0ZXMiLCJsZW5ndGgiLCJoIiwic3RyaW5naWZ5IiwiY29uY2F0IiwidCIsInEiLCJzIiwiY2xhbXAiLCJyIiwiY2VpbCIsImNhbGwiLCJzbGljZSIsInJhbmRvbSIsInB1c2giLCJtIiwiZW5jIiwiSGV4Iiwiam9pbiIsInBhcnNlIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJkIiwiTGF0aW4xIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsImMiLCJVdGY4IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiRXJyb3IiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImkiLCJCdWZmZXJlZEJsb2NrQWxnb3JpdGhtIiwicmVzZXQiLCJfZGF0YSIsIl9uRGF0YUJ5dGVzIiwiX2FwcGVuZCIsIl9wcm9jZXNzIiwidyIsIngiLCJibG9ja1NpemUiLCJ2IiwidSIsIm1heCIsIl9taW5CdWZmZXJTaXplIiwibWluIiwiX2RvUHJvY2Vzc0Jsb2NrIiwic3BsaWNlIiwiZiIsIkhhc2hlciIsImNmZyIsIl9kb1Jlc2V0IiwidXBkYXRlIiwiZmluYWxpemUiLCJfZG9GaW5hbGl6ZSIsIl9jcmVhdGVIZWxwZXIiLCJfY3JlYXRlSG1hY0hlbHBlciIsImsiLCJITUFDIiwiYWxnbyIsIk1hdGgiLCJ4NjQiLCJXb3JkIiwiaGlnaCIsImxvdyIsInRvWDMyIiwiQmFzZTY0IiwiX21hcCIsImNoYXJBdCIsImluZGV4T2YiLCJzcXJ0IiwicG93IiwiU0hBMjU2IiwiX2hhc2giLCJmbG9vciIsIkhtYWNTSEEyNTYiLCJUIiwiZWEiLCJTSEE1MTIiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIlgiLCJLIiwiWSIsIkwiLCJaIiwiTSIsIiQiLCJOIiwiYWEiLCJPIiwiYmEiLCJQIiwiY2EiLCJRIiwieiIsIkEiLCJ5IiwiVSIsIkIiLCJSIiwiQyIsIlMiLCJEIiwiViIsIkUiLCJXIiwiZmEiLCJkYSIsIkhtYWNTSEE1MTIiLCJTSEEzODQiLCJIbWFjU0hBMzg0IiwiYjY0bWFwIiwiYjY0cGFkIiwiaGV4MmI2NCIsInN1YnN0cmluZyIsImI2NHRvaGV4IiwiaW50MmNoYXIiLCJiNjR0b0JBIiwiQXJyYXkiLCJkYml0cyIsImNhbmFyeSIsImpfbG0iLCJCaWdJbnRlZ2VyIiwiZnJvbU51bWJlciIsImZyb21TdHJpbmciLCJuYmkiLCJhbTEiLCJhbTIiLCJhbTMiLCJhcHBOYW1lIiwiYW0iLCJEQiIsIkRNIiwiRFYiLCJCSV9GUCIsIkZWIiwiRjEiLCJGMiIsIkJJX1JNIiwiQklfUkMiLCJyciIsInZ2IiwiaW50QXQiLCJibnBDb3B5VG8iLCJibnBGcm9tSW50IiwibmJ2IiwiZnJvbUludCIsImJucEZyb21TdHJpbmciLCJmcm9tUmFkaXgiLCJaRVJPIiwic3ViVG8iLCJibnBDbGFtcCIsImJuVG9TdHJpbmciLCJuZWdhdGUiLCJ0b1JhZGl4IiwiYm5OZWdhdGUiLCJibkFicyIsImJuQ29tcGFyZVRvIiwibmJpdHMiLCJibkJpdExlbmd0aCIsImJucERMU2hpZnRUbyIsImJucERSU2hpZnRUbyIsImJucExTaGlmdFRvIiwiYm5wUlNoaWZ0VG8iLCJibnBTdWJUbyIsImJucE11bHRpcGx5VG8iLCJhYnMiLCJibnBTcXVhcmVUbyIsImJucERpdlJlbVRvIiwiY29weVRvIiwibFNoaWZ0VG8iLCJkbFNoaWZ0VG8iLCJjb21wYXJlVG8iLCJPTkUiLCJkclNoaWZ0VG8iLCJyU2hpZnRUbyIsImJuTW9kIiwiZGl2UmVtVG8iLCJDbGFzc2ljIiwiY0NvbnZlcnQiLCJtb2QiLCJjUmV2ZXJ0IiwiY1JlZHVjZSIsImNNdWxUbyIsIm11bHRpcGx5VG8iLCJyZWR1Y2UiLCJjU3FyVG8iLCJzcXVhcmVUbyIsImNvbnZlcnQiLCJyZXZlcnQiLCJtdWxUbyIsInNxclRvIiwiYm5wSW52RGlnaXQiLCJNb250Z29tZXJ5IiwibXAiLCJpbnZEaWdpdCIsIm1wbCIsIm1waCIsInVtIiwibXQyIiwibW9udENvbnZlcnQiLCJtb250UmV2ZXJ0IiwibW9udFJlZHVjZSIsIm1vbnRTcXJUbyIsIm1vbnRNdWxUbyIsImJucElzRXZlbiIsImJucEV4cCIsImJuTW9kUG93SW50IiwiaXNFdmVuIiwiZXhwIiwiYml0TGVuZ3RoIiwibW9kUG93SW50IiwiYm5DbG9uZSIsImJuSW50VmFsdWUiLCJibkJ5dGVWYWx1ZSIsImJuU2hvcnRWYWx1ZSIsImJucENodW5rU2l6ZSIsIkxOMiIsImxvZyIsImJuU2lnTnVtIiwiYm5wVG9SYWRpeCIsInNpZ251bSIsImNodW5rU2l6ZSIsImludFZhbHVlIiwiYm5wRnJvbVJhZGl4IiwiZE11bHRpcGx5IiwiZEFkZE9mZnNldCIsImJucEZyb21OdW1iZXIiLCJ0ZXN0Qml0IiwiYml0d2lzZVRvIiwic2hpZnRMZWZ0Iiwib3Bfb3IiLCJpc1Byb2JhYmxlUHJpbWUiLCJuZXh0Qnl0ZXMiLCJiblRvQnl0ZUFycmF5IiwiYm5FcXVhbHMiLCJibk1pbiIsImJuTWF4IiwiYm5wQml0d2lzZVRvIiwib3BfYW5kIiwiYm5BbmQiLCJibk9yIiwib3BfeG9yIiwiYm5Yb3IiLCJvcF9hbmRub3QiLCJibkFuZE5vdCIsImJuTm90IiwiYm5TaGlmdExlZnQiLCJiblNoaWZ0UmlnaHQiLCJsYml0IiwiYm5HZXRMb3dlc3RTZXRCaXQiLCJjYml0IiwiYm5CaXRDb3VudCIsImJuVGVzdEJpdCIsImJucENoYW5nZUJpdCIsImJuU2V0Qml0IiwiY2hhbmdlQml0IiwiYm5DbGVhckJpdCIsImJuRmxpcEJpdCIsImJucEFkZFRvIiwiYm5BZGQiLCJhZGRUbyIsImJuU3VidHJhY3QiLCJibk11bHRpcGx5IiwiYm5TcXVhcmUiLCJibkRpdmlkZSIsImJuUmVtYWluZGVyIiwiYm5EaXZpZGVBbmRSZW1haW5kZXIiLCJibnBETXVsdGlwbHkiLCJibnBEQWRkT2Zmc2V0IiwiTnVsbEV4cCIsIm5Ob3AiLCJuTXVsVG8iLCJuU3FyVG8iLCJiblBvdyIsImJucE11bHRpcGx5TG93ZXJUbyIsImJucE11bHRpcGx5VXBwZXJUbyIsIkJhcnJldHQiLCJyMiIsInEzIiwibXUiLCJkaXZpZGUiLCJiYXJyZXR0Q29udmVydCIsImJhcnJldHRSZXZlcnQiLCJiYXJyZXR0UmVkdWNlIiwibXVsdGlwbHlVcHBlclRvIiwibXVsdGlwbHlMb3dlclRvIiwiYmFycmV0dFNxclRvIiwiYmFycmV0dE11bFRvIiwiYm5Nb2RQb3ciLCJibkdDRCIsImdldExvd2VzdFNldEJpdCIsImJucE1vZEludCIsImJuTW9kSW52ZXJzZSIsInN1YnRyYWN0IiwiYWRkIiwibG93cHJpbWVzIiwibHBsaW0iLCJibklzUHJvYmFibGVQcmltZSIsIm1vZEludCIsIm1pbGxlclJhYmluIiwiYm5wTWlsbGVyUmFiaW4iLCJzaGlmdFJpZ2h0IiwibW9kUG93IiwiYnl0ZVZhbHVlIiwic2hvcnRWYWx1ZSIsInRvQnl0ZUFycmF5IiwiZXF1YWxzIiwiYW5kIiwib3IiLCJ4b3IiLCJhbmROb3QiLCJub3QiLCJiaXRDb3VudCIsInNldEJpdCIsImNsZWFyQml0IiwiZmxpcEJpdCIsIm11bHRpcGx5IiwicmVtYWluZGVyIiwiZGl2aWRlQW5kUmVtYWluZGVyIiwibW9kSW52ZXJzZSIsImdjZCIsInNxdWFyZSIsIkFyY2ZvdXIiLCJBUkM0aW5pdCIsIkFSQzRuZXh0IiwibmV4dCIsInBybmdfbmV3c3RhdGUiLCJybmdfcHNpemUiLCJybmdfc3RhdGUiLCJybmdfcG9vbCIsInJuZ19wcHRyIiwicm5nX3NlZWRfaW50Iiwicm5nX3NlZWRfdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwidW5kZWZpbmVkIiwiY3J5cHRvIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJ1YSIsIlVpbnQ4QXJyYXkiLCJhcHBWZXJzaW9uIiwicm5nX2dldF9ieXRlIiwicm5nX2dldF9ieXRlcyIsIlNlY3VyZVJhbmRvbSIsInBhcnNlQmlnSW50IiwibGluZWJyayIsImJ5dGUySGV4IiwicGtjczFwYWQyIiwib2FlcF9tZ2YxX2FyciIsIm9hZXBfcGFkIiwiS0pVUiIsIk1lc3NhZ2VEaWdlc3QiLCJVdGlsIiwiZ2V0Q2Fub25pY2FsQWxnTmFtZSIsImdldEhhc2hMZW5ndGgiLCJoZXh0b3JzdHIiLCJoYXNoSGV4IiwicnN0cnRvaGV4IiwiUlNBS2V5IiwiZG1wMSIsImRtcTEiLCJjb2VmZiIsIlJTQVNldFB1YmxpYyIsImlzUHVibGljIiwiaXNQcml2YXRlIiwiUlNBRG9QdWJsaWMiLCJSU0FFbmNyeXB0IiwiZG9QdWJsaWMiLCJSU0FFbmNyeXB0T0FFUCIsInNldFB1YmxpYyIsImVuY3J5cHQiLCJlbmNyeXB0T0FFUCIsInR5cGUiLCJFQ0ZpZWxkRWxlbWVudEZwIiwiZmVGcEVxdWFscyIsImZlRnBUb0JpZ0ludGVnZXIiLCJmZUZwTmVnYXRlIiwiZmVGcEFkZCIsInRvQmlnSW50ZWdlciIsImZlRnBTdWJ0cmFjdCIsImZlRnBNdWx0aXBseSIsImZlRnBTcXVhcmUiLCJmZUZwRGl2aWRlIiwiRUNQb2ludEZwIiwiY3VydmUiLCJ6aW52IiwicG9pbnRGcEdldFgiLCJmcm9tQmlnSW50ZWdlciIsInBvaW50RnBHZXRZIiwicG9pbnRGcEVxdWFscyIsImlzSW5maW5pdHkiLCJwb2ludEZwSXNJbmZpbml0eSIsInBvaW50RnBOZWdhdGUiLCJwb2ludEZwQWRkIiwidHdpY2UiLCJnZXRJbmZpbml0eSIsInBvaW50RnBUd2ljZSIsInBvaW50RnBNdWx0aXBseSIsInBvaW50RnBNdWx0aXBseVR3byIsImdldFgiLCJnZXRZIiwibXVsdGlwbHlUd28iLCJFQ0N1cnZlRnAiLCJpbmZpbml0eSIsImN1cnZlRnBHZXRRIiwiY3VydmVGcEdldEEiLCJjdXJ2ZUZwR2V0QiIsImN1cnZlRnBFcXVhbHMiLCJjdXJ2ZUZwR2V0SW5maW5pdHkiLCJjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIiLCJjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgiLCJnZXRRIiwiZ2V0QSIsImdldEIiLCJkZWNvZGVQb2ludEhleCIsImdldEJ5dGVMZW5ndGgiLCJnZXRFbmNvZGVkIiwidG9CeXRlQXJyYXlVbnNpZ25lZCIsInVuc2hpZnQiLCJkZWNvZGVGcm9tIiwiZGVjb2RlRnJvbUhleCIsImFkZDJEIiwidHdpY2UyRCIsInZhbHVlT2YiLCJtdWx0aXBseTJEIiwiaXNPbkN1cnZlIiwidmFsaWRhdGUiLCJqc29uUGFyc2UiLCJSZWdFeHAiLCJPYmplY3QiLCJtYXRjaCIsInJlcGxhY2UiLCJzaGlmdCIsImFzbjEiLCJBU04xVXRpbCIsImludGVnZXJUb0J5dGVIZXgiLCJiaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleCIsImdldFBFTVN0cmluZ0Zyb21IZXgiLCJoZXh0b3BlbSIsIm5ld09iamVjdCIsIkFTTjFPYmplY3QiLCJERVJCb29sZWFuIiwiREVSSW50ZWdlciIsIkRFUkJpdFN0cmluZyIsIkRFUk9jdGV0U3RyaW5nIiwiREVSTnVsbCIsIkRFUk9iamVjdElkZW50aWZpZXIiLCJERVJFbnVtZXJhdGVkIiwiREVSVVRGOFN0cmluZyIsIkRFUk51bWVyaWNTdHJpbmciLCJERVJQcmludGFibGVTdHJpbmciLCJERVJUZWxldGV4U3RyaW5nIiwiREVSSUE1U3RyaW5nIiwiREVSVVRDVGltZSIsIkRFUkdlbmVyYWxpemVkVGltZSIsIkRFUlZpc2libGVTdHJpbmciLCJERVJCTVBTdHJpbmciLCJERVJTZXF1ZW5jZSIsIkRFUlNldCIsIkRFUlRhZ2dlZE9iamVjdCIsImtleXMiLCJhcnJheSIsInRhZyIsImV4cGxpY2l0Iiwib2JqIiwianNvblRvQVNOMUhFWCIsImdldEVuY29kZWRIZXgiLCJvaWRIZXhUb0ludCIsIm9pZEludFRvSGV4Iiwic3BsaXQiLCJwYXJhbXMiLCJnZXRMZW5ndGhIZXhGcm9tVmFsdWUiLCJoViIsImhUTFYiLCJpc01vZGlmaWVkIiwiZ2V0RnJlc2hWYWx1ZUhleCIsImhMIiwiaFQiLCJnZXRWYWx1ZUhleCIsInNldEJ5UGFyYW0iLCJ0bHYiLCJERVJBYnN0cmFjdFN0cmluZyIsInN1cGVyY2xhc3MiLCJjb25zdHJ1Y3RvciIsImdldFN0cmluZyIsInNldFN0cmluZyIsInV0Zjh0b2hleCIsInRvTG93ZXJDYXNlIiwic2V0U3RyaW5nSGV4Iiwic3RyIiwiaGV4IiwiZXh0ZW5kQ2xhc3MiLCJERVJBYnN0cmFjdFRpbWUiLCJsb2NhbERhdGVUb1VUQyIsImdldFRpbWV6b25lT2Zmc2V0IiwiZm9ybWF0RGF0ZSIsInplcm9QYWRkaW5nIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwic3RvaGV4Iiwic2V0QnlEYXRlVmFsdWUiLCJVVEMiLCJzZXRCeURhdGUiLCJERVJBYnN0cmFjdFN0cnVjdHVyZWQiLCJzZXRCeUFTTjFPYmplY3RBcnJheSIsImFzbjFBcnJheSIsImFwcGVuZEFTTjFPYmplY3QiLCJzZXRCeUJpZ0ludGVnZXIiLCJzZXRCeUludGVnZXIiLCJzZXRWYWx1ZUhleCIsImJpZ2ludCIsInNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyIsInNldFVudXNlZEJpdHNBbmRIZXhWYWx1ZSIsInNldEJ5QmluYXJ5U3RyaW5nIiwic2V0QnlCb29sZWFuQXJyYXkiLCJuZXdGYWxzZUFycmF5IiwiYmluIiwic2V0VmFsdWVPaWRTdHJpbmciLCJvaWR0b2hleCIsInNldFZhbHVlTmFtZSIsIng1MDkiLCJPSUQiLCJuYW1lMm9pZCIsInNldFZhbHVlTmFtZU9yT2lkIiwib2lkIiwibmFtZSIsImRhdGUiLCJ3aXRoTWlsbGlzIiwibWlsbGlzIiwic29ydEZsYWciLCJzb3J0Iiwic29ydGZsYWciLCJpc0V4cGxpY2l0IiwiYXNuMU9iamVjdCIsInNldEFTTjFPYmplY3QiLCJ0YWdlIiwidGFnaSIsIkFTTjFIRVgiLCJnZXRMYmxlbiIsImdldEwiLCJnZXRWYmxlbiIsImdldFZpZHgiLCJnZXRWIiwiZ2V0VExWIiwiZ2V0VExWYmxlbiIsImdldE5leHRTaWJsaW5nSWR4IiwiZ2V0Q2hpbGRJZHgiLCJnZXROdGhDaGlsZElkeCIsImdldElkeGJ5TGlzdCIsImdldElkeGJ5TGlzdEV4IiwiaXNDb250ZXh0VGFnIiwiZ2V0VExWYnlMaXN0IiwiZ2V0VExWYnlMaXN0RXgiLCJnZXRWYnlMaXN0IiwiZ2V0VmJ5TGlzdEV4IiwiZ2V0SW50IiwiYml0c3RydG9pbnQiLCJnZXRPSUQiLCJoZXh0b29pZCIsImdldE9JRE5hbWUiLCJvaWQybmFtZSIsImhleHRvb2lkc3RyIiwiZHVtcCIsIm9tbWl0X2xvbmdfb2N0ZXQiLCJpc0FTTjFIRVgiLCJoZXh0b3V0ZjgiLCJ1Y3MyaGV4dG91dGY4Iiwib2lkbmFtZSIsIkpTT04iLCJ4NTA5RXh0TmFtZSIsImNoZWNrU3RyaWN0REVSIiwibGFuZyIsImlzSGV4IiwiQmFzZTY0eCIsInN0b0JBIiwiQkF0b3MiLCJCQXRvaGV4Iiwic3RvYjY0Iiwic3RvYjY0dSIsImI2NHRvYjY0dSIsImI2NHV0b3MiLCJiNjR1dG9iNjQiLCJoZXh0b2I2NHUiLCJiNjR1dG9oZXgiLCJ1dGY4dG9iNjR1IiwiYjY0dXRvdXRmOCIsIkJ1ZmZlciIsImZyb20iLCJ1cmljbXB0b2hleCIsImVuY29kZVVSSUNvbXBvbmVudEFsbCIsImhleHRvdXJpY21wIiwidXRmOHRvYjY0IiwiYjY0dG91dGY4IiwiaGV4dG9iNjQiLCJoZXh0b2I2NG5sIiwiYjY0bmx0b2hleCIsInBlbXRvaGV4IiwiaGV4dG9BcnJheUJ1ZmZlciIsIkFycmF5QnVmZmVyIiwiRGF0YVZpZXciLCJzZXRVaW50OCIsIkFycmF5QnVmZmVydG9oZXgiLCJieXRlTGVuZ3RoIiwiZ2V0VWludDgiLCJ6dWx1dG9tc2VjIiwienVsdXRvc2VjIiwienVsdXRvZGF0ZSIsImRhdGV0b3p1bHUiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJpcHY2dG9oZXgiLCJyZXBlYXQiLCJoZXh0b2lwdjYiLCJoZXh0b2lwIiwiaXB0b2hleCIsIm1hcCIsIm5ld2xpbmVfdG9Vbml4IiwibmV3bGluZV90b0RvcyIsImlzSW50ZWdlciIsImlzaGV4IiwiaXNCYXNlNjQiLCJpc0Jhc2U2NFVSTCIsImlzSW50ZWdlckFycmF5IiwiaXNQcmludGFibGUiLCJpc0lBNSIsImlzTWFpbCIsImhleHRvcG9zaGV4IiwiaW50YXJ5c3RydG9oZXgiLCJzdHJkaWZmaWR4Iiwic3RycGFkIiwiaW50dG9iaXRzdHIiLCJOdW1iZXIiLCJESUdFU1RJTkZPSEVBRCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJERUZBVUxUUFJPVklERVIiLCJobWFjbWQ1IiwiaG1hY3NoYTEiLCJobWFjc2hhMjI0IiwiaG1hY3NoYTI1NiIsImhtYWNzaGEzODQiLCJobWFjc2hhNTEyIiwiaG1hY3JpcGVtZDE2MCIsIk1ENXdpdGhSU0EiLCJTSEExd2l0aFJTQSIsIlNIQTIyNHdpdGhSU0EiLCJTSEEyNTZ3aXRoUlNBIiwiU0hBMzg0d2l0aFJTQSIsIlNIQTUxMndpdGhSU0EiLCJSSVBFTUQxNjB3aXRoUlNBIiwiTUQ1d2l0aEVDRFNBIiwiU0hBMXdpdGhFQ0RTQSIsIlNIQTIyNHdpdGhFQ0RTQSIsIlNIQTI1NndpdGhFQ0RTQSIsIlNIQTM4NHdpdGhFQ0RTQSIsIlNIQTUxMndpdGhFQ0RTQSIsIlJJUEVNRDE2MHdpdGhFQ0RTQSIsIlNIQTF3aXRoRFNBIiwiU0hBMjI0d2l0aERTQSIsIlNIQTI1NndpdGhEU0EiLCJNRDV3aXRoUlNBYW5kTUdGMSIsIlNIQXdpdGhSU0FhbmRNR0YxIiwiU0hBMXdpdGhSU0FhbmRNR0YxIiwiU0hBMjI0d2l0aFJTQWFuZE1HRjEiLCJTSEEyNTZ3aXRoUlNBYW5kTUdGMSIsIlNIQTM4NHdpdGhSU0FhbmRNR0YxIiwiU0hBNTEyd2l0aFJTQWFuZE1HRjEiLCJSSVBFTUQxNjB3aXRoUlNBYW5kTUdGMSIsIkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUUiLCJNRDUiLCJTSEExIiwiU0hBMjI0IiwiUklQRU1EMTYwIiwiZ2V0RGlnZXN0SW5mb0hleCIsImdldFBhZGRlZERpZ2VzdEluZm9IZXgiLCJoYXNoU3RyaW5nIiwiYWxnIiwiZGlnZXN0U3RyaW5nIiwiZGlnZXN0SGV4Iiwic2hhMjU2SGV4Iiwic2hhNTEySGV4IiwiaXNLZXkiLCJEU0EiLCJFQ0RTQSIsInByb3YiLCJTRUNVUkVSQU5ET01HRU4iLCJnZXRSYW5kb21IZXhPZk5ieXRlcyIsImdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcyIsImdldFJhbmRvbUhleE9mTmJpdHMiLCJnZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyIsImdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgiLCJnZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXgiLCJzZXRBbGdBbmRQcm92aWRlciIsIm1kIiwidXBkYXRlU3RyaW5nIiwidXBkYXRlSGV4IiwiZGlnZXN0Iiwic2pjbCIsImhhc2giLCJjb2RlYyIsInRvQml0cyIsImZyb21CaXRzIiwiYWxnTmFtZSIsInByb3ZOYW1lIiwiSEFTSExFTkdUSCIsIk1hYyIsImFsZ1Byb3YiLCJtYWMiLCJwYXNzIiwiZG9GaW5hbCIsImRvRmluYWxTdHJpbmciLCJkb0ZpbmFsSGV4Iiwic2V0UGFzc3dvcmQiLCJ1dGY4IiwicnN0ciIsImI2NCIsImI2NHUiLCJTaWduYXR1cmUiLCJfc2V0QWxnTmFtZXMiLCJtZEFsZ05hbWUiLCJwdWJrZXlBbGdOYW1lIiwiX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUiLCJLRVlVVElMIiwiZ2V0S2V5IiwicHJ2S2V5Iiwic3RhdGUiLCJwdWJLZXkiLCJzaWduIiwic0hhc2hIZXgiLCJlY3BydmhleCIsImVjY3VydmVuYW1lIiwicHJ2IiwiaFNpZ24iLCJzaWduV2l0aE1lc3NhZ2VIYXNoUFNTIiwicHNzU2FsdExlbiIsInNpZ25XaXRoTWVzc2FnZUhhc2giLCJzaWduU3RyaW5nIiwic2lnbkhleCIsInZlcmlmeSIsImVjcHViaGV4IiwicHViIiwidmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTIiwidmVyaWZ5V2l0aE1lc3NhZ2VIYXNoIiwiYWxnUHJvdk5hbWUiLCJpbml0UGFyYW1zIiwicHNzc2FsdGxlbiIsInBydmtleXBlbSIsInBydmtleXBhcyIsIkNpcGhlciIsImdldEFsZ0J5S2V5QW5kTmFtZSIsImRlY3J5cHQiLCJkZWNyeXB0T0FFUCIsIm9pZGhleDJuYW1lIiwiRUNQYXJhbWV0ZXJEQiIsImdldE5hbWUiLCJnZXRCaWdSYW5kb20iLCJzZXROYW1lZEN1cnZlIiwiZWNwYXJhbXMiLCJnZXRCeU5hbWUiLCJwcnZLZXlIZXgiLCJwdWJLZXlIZXgiLCJjdXJ2ZU5hbWUiLCJzZXRQcml2YXRlS2V5SGV4Iiwic2V0UHVibGljS2V5SGV4IiwiZ2V0UHVibGljS2V5WFlIZXgiLCJrZXlsZW4iLCJnZXRTaG9ydE5JU1RQQ3VydmVOYW1lIiwiZ2VuZXJhdGVLZXlQYWlySGV4IiwiYmlSU1NpZ1RvQVNOMVNpZyIsImZyb21CeXRlQXJyYXlVbnNpZ25lZCIsInNlcmlhbGl6ZVNpZyIsInZlcmlmeUhleCIsInBhcnNlU2lnSGV4IiwidmVyaWZ5UmF3IiwiQml0Y29pbiIsImlzQXJyYXkiLCJwYXJzZVNpZyIsInRvQnl0ZUFycmF5U2lnbmVkIiwicGFyc2VTaWdDb21wYWN0IiwicmVhZFBLQ1M1UHJ2S2V5SGV4IiwicmVhZFBLQ1M4UHJ2S2V5SGV4IiwicmVhZFBLQ1M4UHViS2V5SGV4IiwicmVhZENlcnRQdWJLZXlIZXgiLCJwYXJzZVNpZ0hleEluSGV4UlMiLCJhc24xU2lnVG9Db25jYXRTaWciLCJjb25jYXRTaWdUb0FTTjFTaWciLCJoZXhSU1NpZ1RvQVNOMVNpZyIsInJlZ2lzdCIsIkFFUyIsIlRyaXBsZURFUyIsIkRFUyIsImtleSIsIml2IiwiY2lwaGVydGV4dCIsInByb2MiLCJlcHJvYyIsIml2bGVuIiwiY2lwaGVyIiwiaXZzYWx0IiwiZGF0YSIsImtleWhleCIsIml2aGV4IiwidmVyc2lvbiIsInBhcnNlUEtDUzVQRU0iLCJnZXRLZXlBbmRVbnVzZWRJdkJ5UGFzc2NvZGVBbmRJdnNhbHQiLCJkZWNyeXB0S2V5QjY0IiwiZ2V0RGVjcnlwdGVkS2V5SGV4IiwiZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4IiwidG9VcHBlckNhc2UiLCJwYXJzZUhleE9mRW5jcnlwdGVkUEtDUzgiLCJlbmNyeXB0aW9uU2NoZW1lQWxnIiwiZW5jcnlwdGlvblNjaGVtZUlWIiwicGJrZGYyU2FsdCIsInBia2RmMkl0ZXIiLCJnZXRQQktERjJLZXlIZXhGcm9tUGFyYW0iLCJQQktERjIiLCJrZXlTaXplIiwiaXRlcmF0aW9ucyIsIl9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNIiwiZ2V0S2V5RnJvbUVuY3J5cHRlZFBLQ1M4UEVNIiwiZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4IiwicGFyc2VQbGFpblByaXZhdGVQS0NTOEhleCIsImFsZ3BhcmFtIiwiYWxnb2lkIiwia2V5aWR4IiwiZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNIiwiX2dldEtleUZyb21QdWJsaWNQS0NTOEhleCIsInBhcnNlUHVibGljUmF3UlNBS2V5SGV4IiwicGFyc2VQdWJsaWNQS0NTOEhleCIsInh5Iiwia3R5IiwiZHAiLCJkcSIsImNvIiwicWkiLCJzZXRQcml2YXRlRXgiLCJzZXRQcml2YXRlIiwiY3J2IiwiWDUwOSIsImdldFB1YmxpY0tleUZyb21DZXJ0SGV4IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRQRU0iLCJnZW5lcmF0ZUtleXBhaXIiLCJnZW5lcmF0ZSIsInBydktleU9iaiIsInB1YktleU9iaiIsImdldFBFTSIsIlN1YmplY3RQdWJsaWNLZXlJbmZvIiwic2VxIiwib2N0c3RyIiwiYml0c3RyIiwiZ2V0S2V5RnJvbUNTUlBFTSIsImdldEtleUZyb21DU1JIZXgiLCJwYXJzZUNTUkhleCIsInA4cHVia2V5aGV4IiwiZ2V0S2V5SUQiLCJnZXRKV0tGcm9tS2V5IiwiZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsImdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsInJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZyIsInJlYWRQS0NTNVB1YktleUhleCIsInJlYWRDZXJ0SGV4IiwiZ2V0UHVibGljS2V5SGV4IiwiX1JFX0hFWERFQ09OTFkiLCJfcnNhc2lnbl9nZXRIZXhQYWRkZWREaWdlc3RJbmZvRm9yU3RyaW5nIiwiZG9Qcml2YXRlIiwicHNzX21nZjFfc3RyIiwic2lnblBTUyIsIl9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSSIsIl9yc2FzaWduX2dldEhleERpZ2VzdEluZm9Gcm9tU2lnIiwiX3JzYXNpZ25fZ2V0QWxnTmFtZUFuZEhhc2hGcm9tSGV4RGlzZ2VzdEluZm8iLCJ2ZXJpZnlQU1MiLCJTQUxUX0xFTl9ITEVOIiwiU0FMVF9MRU5fTUFYIiwiU0FMVF9MRU5fUkVDT1ZFUiIsIkFsZ29yaXRobUlkZW50aWZpZXIiLCJQU1NOQU1FMkFTTjFUTFYiLCJIRVgyU1RBRyIsImZvZmZzZXQiLCJhRXh0SW5mbyIsImdldFZlcnNpb24iLCJnZXRTZXJpYWxOdW1iZXJIZXgiLCJnZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCIsImdldEFsZ29yaXRobUlkZW50aWZpZXJOYW1lIiwiZ2V0SXNzdWVyIiwiZ2V0WDUwME5hbWUiLCJnZXRJc3N1ZXJIZXgiLCJnZXRJc3N1ZXJTdHJpbmciLCJnZXRTdWJqZWN0IiwiZ2V0U3ViamVjdEhleCIsImdldFN1YmplY3RTdHJpbmciLCJnZXROb3RCZWZvcmUiLCJnZXROb3RBZnRlciIsImdldFB1YmxpY0tleUlkeCIsImdldFB1YmxpY0tleUNvbnRlbnRJZHgiLCJnZXRQdWJsaWNLZXkiLCJnZXRTaWduYXR1cmVBbGdvcml0aG1OYW1lIiwiZ2V0U2lnbmF0dXJlVmFsdWVIZXgiLCJ2ZXJpZnlTaWduYXR1cmUiLCJwYXJzZUV4dCIsImNyaXRpY2FsIiwidmlkeCIsImdldEV4dEluZm8iLCJnZXRFeHRCYXNpY0NvbnN0cmFpbnRzIiwiZXh0bmFtZSIsImNBIiwicGF0aExlbiIsImdldEV4dEtleVVzYWdlIiwibmFtZXMiLCJnZXRFeHRLZXlVc2FnZVN0cmluZyIsImdldEV4dEtleVVzYWdlQmluIiwiS0VZVVNBR0VfTkFNRSIsImdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyIiwia2lkIiwiZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllciIsImdldEdlbmVyYWxOYW1lcyIsImlzc3VlciIsInNuIiwiZ2V0RXh0RXh0S2V5VXNhZ2UiLCJnZXRFeHRFeHRLZXlVc2FnZU5hbWUiLCJnZXRFeHRTdWJqZWN0QWx0TmFtZSIsImdldEV4dElzc3VlckFsdE5hbWUiLCJnZXRHZW5lcmFsTmFtZSIsInJmYzgyMiIsImRucyIsInVyaSIsImlwIiwiZG4iLCJnZXRFeHRTdWJqZWN0QWx0TmFtZTIiLCJoZXgyZG4iLCJnZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHMiLCJnZXREaXN0cmlidXRpb25Qb2ludCIsImRwbmFtZSIsImdldERpc3RyaWJ1dGlvblBvaW50TmFtZSIsImZ1bGwiLCJnZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkkiLCJnZXRFeHRBSUFJbmZvIiwib2NzcCIsImNhaXNzdWVyIiwiZ2V0RXh0QXV0aG9yaXR5SW5mb0FjY2VzcyIsImdldEV4dENlcnRpZmljYXRlUG9saWNpZXMiLCJnZXRQb2xpY3lJbmZvcm1hdGlvbiIsInBvbGljeW9pZCIsImdldFBvbGljeVF1YWxpZmllckluZm8iLCJjcHMiLCJ1bm90aWNlIiwiZ2V0VXNlck5vdGljZSIsImV4cHRleHQiLCJnZXREaXNwbGF5VGV4dCIsImdldEV4dENSTE51bWJlciIsIm51bSIsImdldEV4dENSTFJlYXNvbiIsImNvZGUiLCJnZXRFeHRPY3NwTm9uY2UiLCJnZXRFeHRPY3NwTm9DaGVjayIsImdldEV4dEFkb2JlVGltZVN0YW1wIiwicmVxYXV0aCIsImdldFg1MDBOYW1lUnVsZSIsImRzIiwidmFsdWUiLCJnZXRYNTAwTmFtZUFycmF5IiwiZG5hcnJheXRvc3RyIiwiZ2V0UkROIiwiZ2V0QXR0clR5cGVBbmRWYWx1ZSIsIm9pZDJhdHlwZSIsInJlYWRDZXJ0UEVNIiwiZ2V0UGFyYW0iLCJzZXJpYWwiLCJzaWdhbGciLCJub3RiZWZvcmUiLCJub3RhZnRlciIsInN1YmplY3QiLCJzYmpwdWJrZXkiLCJleHQiLCJnZXRFeHRQYXJhbUFycmF5Iiwic2lnaGV4IiwiZ2V0RXh0UGFyYW0iLCJleHRuIiwiZmluZEV4dCIsInVwZGF0ZUV4dENEUEZ1bGxVUkkiLCJ1cGRhdGVFeHRBSUFPQ1NQIiwidXBkYXRlRXh0QUlBQ0FJc3N1ZXIiLCJnZXRJbmZvIiwiZG5hbWUiLCJoZXgycmRuIiwiaGV4MmF0dHJUeXBlVmFsdWUiLCJnZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTSIsImp3cyIsIkpXUyIsImlzU2FmZUpTT05TdHJpbmciLCJwYXJzZUpXUyIsInBhcnNlZEpXUyIsInNpZ3ZhbEgiLCJoZWFkQjY0VSIsInBheWxvYWRCNjRVIiwic2lndmFsQjY0VSIsInNpIiwic2lndmFsQkkiLCJoZWFkUyIsInBheWxvYWRTIiwicmVhZFNhZmVKU09OU3RyaW5nIiwiandzYWxnMnNpZ2FsZyIsImhlYWRlck9iaiIsInBheWxvYWRPYmoiLCJoZWFkZXJQUCIsInBheWxvYWRQUCIsInNpZ0hleCIsInZlcmlmeUpXVCIsImluQXJyYXkiLCJpbmNsdWRlZEFycmF5IiwiaXNzIiwic3ViIiwiYXVkIiwiSW50RGF0ZSIsImdldE5vdyIsInZlcmlmeUF0IiwiZ3JhY2VQZXJpb2QiLCJuYmYiLCJpYXQiLCJqdGkiLCJIUzI1NiIsIkhTMzg0IiwiSFM1MTIiLCJSUzI1NiIsIlJTMzg0IiwiUlM1MTIiLCJFUzI1NiIsIkVTMzg0IiwiUFMyNTYiLCJQUzM4NCIsIlBTNTEyIiwibm9uZSIsImdldEVuY29kZWRTaWduYXR1cmVWYWx1ZUZyb21KV1MiLCJnZXRKV0t0aHVtYnByaW50IiwiZ2V0IiwiZ2V0WnVsdSIsImludERhdGUyVVRDU3RyaW5nIiwidG9VVENTdHJpbmciLCJpbnREYXRlMlp1bHUiLCJFRFNBIiwiX2NyeXB0byIsIkRlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSIsImFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyIiwiVGltZXIiLCJhY2Nlc3NUb2tlbkV4cGlyZWRUaW1lciIsIl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSIsIl9hY2Nlc3NUb2tlbkV4cGlyaW5nIiwiX2FjY2Vzc1Rva2VuRXhwaXJlZCIsImxvYWQiLCJjb250YWluZXIiLCJhY2Nlc3NfdG9rZW4iLCJleHBpcmVzX2luIiwiZHVyYXRpb24iLCJkZWJ1ZyIsImV4cGlyaW5nIiwiY2FuY2VsIiwiZXhwaXJlZCIsInVubG9hZCIsImFkZEFjY2Vzc1Rva2VuRXhwaXJpbmciLCJjYiIsImFkZEhhbmRsZXIiLCJyZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nIiwicmVtb3ZlSGFuZGxlciIsImFkZEFjY2Vzc1Rva2VuRXhwaXJlZCIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZCIsIkRlZmF1bHRJbnRlcnZhbCIsImNhbGxiYWNrIiwiY2xpZW50X2lkIiwidXJsIiwiaW50ZXJ2YWwiLCJzdG9wT25FcnJvciIsIl9jYWxsYmFjayIsIl9jbGllbnRfaWQiLCJfdXJsIiwiX2ludGVydmFsIiwiX3N0b3BPbkVycm9yIiwiaWR4IiwiX2ZyYW1lX29yaWdpbiIsIl9mcmFtZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwidmlzaWJpbGl0eSIsInBvc2l0aW9uIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0Iiwic3JjIiwiUHJvbWlzZSIsInJlc29sdmUiLCJvbmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJfYm91bmRNZXNzYWdlRXZlbnQiLCJfbWVzc2FnZSIsImJpbmQiLCJhZGRFdmVudExpc3RlbmVyIiwib3JpZ2luIiwic291cmNlIiwiY29udGVudFdpbmRvdyIsImVycm9yIiwic3RvcCIsInN0YXJ0Iiwic2Vzc2lvbl9zdGF0ZSIsIl9zZXNzaW9uX3N0YXRlIiwic2VuZCIsInBvc3RNZXNzYWdlIiwiX3RpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiQ2xvY2tTZXJ2aWNlIiwiZ2V0RXBvY2hUaW1lIiwibm93IiwicHJlcGFyZSIsInBvcHVwV2luZG93RmVhdHVyZXMiLCJwb3B1cCIsIkNvcmRvdmFQb3B1cFdpbmRvdyIsIkRlZmF1bHRQb3B1cEZlYXR1cmVzIiwiRGVmYXVsdFBvcHVwVGFyZ2V0IiwiX3Byb21pc2UiLCJyZWplY3QiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJmZWF0dXJlcyIsInRhcmdldCIsInBvcHVwV2luZG93VGFyZ2V0IiwicmVkaXJlY3RfdXJpIiwic3RhcnRVcmwiLCJfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQiLCJjb3Jkb3ZhTWV0YWRhdGEiLCJzb21lIiwibmF2aWdhdGUiLCJfZXJyb3IiLCJjb3Jkb3ZhIiwicmVxdWlyZSIsIm1ldGFkYXRhIiwiX3BvcHVwIiwiSW5BcHBCcm93c2VyIiwib3BlbiIsIl9leGl0Q2FsbGJhY2tFdmVudCIsIl9leGl0Q2FsbGJhY2siLCJfbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCIsIl9sb2FkU3RhcnRDYWxsYmFjayIsInByb21pc2UiLCJldmVudCIsIl9zdWNjZXNzIiwibWVzc2FnZSIsIl9jbGVhbnVwIiwiY2xvc2UiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiRXJyb3JSZXNwb25zZSIsImVycm9yX2Rlc2NyaXB0aW9uIiwiZXJyb3JfdXJpIiwiRXZlbnQiLCJfbmFtZSIsIl9jYWxsYmFja3MiLCJmaW5kSW5kZXgiLCJpdGVtIiwicmFpc2UiLCJ0aW1lciIsImhhbmRsZSIsInRlc3RpbmciLCJyZXF1ZXN0IiwiX3Rlc3RpbmciLCJzZXRYTUxIdHRwUmVxdWVzdCIsIm5ld1JlcXVlc3QiLCJsb2NhdGlvbiIsImxvY2FsU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiWE1MSHR0cFJlcXVlc3QiLCJJRnJhbWVOYXZpZ2F0b3IiLCJmcmFtZSIsIklGcmFtZVdpbmRvdyIsIm5vdGlmeVBhcmVudCIsIkRlZmF1bHRUaW1lb3V0IiwidGltZW91dCIsInNpbGVudFJlcXVlc3RUaW1lb3V0Iiwic2V0VGltZW91dCIsIl90aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJfb3JpZ2luIiwic3RhcnRzV2l0aCIsImhyZWYiLCJwYXJlbnQiLCJwcm90b2NvbCIsImhvc3QiLCJnZXRJdGVtIiwic2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsImdldE93blByb3BlcnR5TmFtZXMiLCJKb3NlVXRpbCIsIktleVV0aWwiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJnZXRKb3NlVXRpbCIsInBhcnNlSnd0Iiwiand0IiwidG9rZW4iLCJoZWFkZXIiLCJwYXlsb2FkIiwidmFsaWRhdGVKd3QiLCJhdWRpZW5jZSIsImNsb2NrU2tldyIsInRpbWVJbnNlbnNpdGl2ZSIsIng1YyIsIl92YWxpZGF0ZUp3dCIsInZhbGlkYXRlSnd0QXR0cmlidXRlcyIsInZhbGlkQXVkaWVuY2UiLCJhenAiLCJsb3dlck5vdyIsInVwcGVyTm93IiwidGhlbiIsImhleFRvQmFzZTY0VXJsIiwiSnNvblNlcnZpY2UiLCJhZGRpdGlvbmFsQ29udGVudFR5cGVzIiwiWE1MSHR0cFJlcXVlc3RDdG9yIiwiand0SGFuZGxlciIsIl9jb250ZW50VHlwZXMiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJvbmVycm9yIiwic2V0UmVxdWVzdEhlYWRlciIsInBvc3RGb3JtIiwiYmFzaWNBdXRoIiwiYnRvYSIsIm5vcExvZ2dlciIsImluZm8iLCJ3YXJuIiwiTk9ORSIsIkVSUk9SIiwiV0FSTiIsIklORk8iLCJERUJVRyIsImxvZ2dlciIsImxldmVsIiwiYXJncyIsIk9pZGNNZXRhZGF0YVVybFBhdGgiLCJzZXR0aW5ncyIsIkpzb25TZXJ2aWNlQ3RvciIsIl9zZXR0aW5ncyIsIl9qc29uU2VydmljZSIsInJlc2V0U2lnbmluZ0tleXMiLCJzaWduaW5nS2V5cyIsImdldE1ldGFkYXRhIiwibWV0YWRhdGFVcmwiLCJzZWVkIiwibWV0YWRhdGFTZWVkIiwiYXNzaWduIiwiX2dldE1ldGFkYXRhUHJvcGVydHkiLCJnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQiLCJnZXRVc2VySW5mb0VuZHBvaW50IiwiZ2V0VG9rZW5FbmRwb2ludCIsIm9wdGlvbmFsIiwiZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lIiwiZ2V0RW5kU2Vzc2lvbkVuZHBvaW50IiwiZ2V0UmV2b2NhdGlvbkVuZHBvaW50IiwiZ2V0S2V5c0VuZHBvaW50IiwiZ2V0U2lnbmluZ0tleXMiLCJqd2tzX3VyaSIsImtleVNldCIsIl9tZXRhZGF0YVVybCIsImF1dGhvcml0eSIsImNyZWF0ZVNpZ25pblJlcXVlc3QiLCJyZXNwb25zZV90eXBlIiwic2NvcGUiLCJwcm9tcHQiLCJtYXhfYWdlIiwidWlfbG9jYWxlcyIsImlkX3Rva2VuX2hpbnQiLCJsb2dpbl9oaW50IiwiYWNyX3ZhbHVlcyIsInJlc291cmNlIiwicmVxdWVzdF91cmkiLCJyZXNwb25zZV9tb2RlIiwiZXh0cmFRdWVyeVBhcmFtcyIsImV4dHJhVG9rZW5QYXJhbXMiLCJyZXF1ZXN0X3R5cGUiLCJza2lwVXNlckluZm8iLCJzdGF0ZVN0b3JlIiwiU2lnbmluUmVxdWVzdCIsImlzQ29kZSIsIl9tZXRhZGF0YVNlcnZpY2UiLCJzaWduaW5SZXF1ZXN0IiwiY2xpZW50X3NlY3JldCIsInNpZ25pblN0YXRlIiwiX3N0YXRlU3RvcmUiLCJzZXQiLCJpZCIsInRvU3RvcmFnZVN0cmluZyIsInJlYWRTaWduaW5SZXNwb25zZVN0YXRlIiwicmVtb3ZlU3RhdGUiLCJ1c2VRdWVyeSIsImRlbGltaXRlciIsInJlc3BvbnNlIiwiU2lnbmluUmVzcG9uc2UiLCJzdGF0ZUFwaSIsInJlbW92ZSIsInN0b3JlZFN0YXRlU3RyaW5nIiwiU2lnbmluU3RhdGUiLCJmcm9tU3RvcmFnZVN0cmluZyIsInByb2Nlc3NTaWduaW5SZXNwb25zZSIsIl92YWxpZGF0b3IiLCJ2YWxpZGF0ZVNpZ25pblJlc3BvbnNlIiwiY3JlYXRlU2lnbm91dFJlcXVlc3QiLCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJTaWdub3V0UmVxdWVzdCIsInNpZ25vdXRTdGF0ZSIsInJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSIsIlNpZ25vdXRSZXNwb25zZSIsInN0YXRlS2V5IiwiU3RhdGUiLCJwcm9jZXNzU2lnbm91dFJlc3BvbnNlIiwidmFsaWRhdGVTaWdub3V0UmVzcG9uc2UiLCJjbGVhclN0YWxlU3RhdGUiLCJzdGFsZVN0YXRlQWdlIiwidmFsaWRhdG9yIiwibWV0YWRhdGFTZXJ2aWNlIiwiRGVmYXVsdFJlc3BvbnNlVHlwZSIsIkRlZmF1bHRTY29wZSIsIkRlZmF1bHRDbGllbnRBdXRoZW50aWNhdGlvbiIsIkRlZmF1bHRTdGFsZVN0YXRlQWdlIiwiRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyIsImNsaWVudF9hdXRoZW50aWNhdGlvbiIsImZpbHRlclByb3RvY29sQ2xhaW1zIiwibG9hZFVzZXJJbmZvIiwiY2xvY2tTZXJ2aWNlIiwidXNlckluZm9Kd3RJc3N1ZXIiLCJtZXJnZUNsYWltcyIsIlJlc3BvbnNlVmFsaWRhdG9yQ3RvciIsIlJlc3BvbnNlVmFsaWRhdG9yIiwiTWV0YWRhdGFTZXJ2aWNlQ3RvciIsIl9hdXRob3JpdHkiLCJfbWV0YWRhdGEiLCJfbWV0YWRhdGFTZWVkIiwiX3NpZ25pbmdLZXlzIiwiX2NsaWVudF9zZWNyZXQiLCJfcmVzcG9uc2VfdHlwZSIsIl9zY29wZSIsIl9yZWRpcmVjdF91cmkiLCJfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX2NsaWVudF9hdXRoZW50aWNhdGlvbiIsIl9wcm9tcHQiLCJfZGlzcGxheSIsIl9tYXhfYWdlIiwiX3VpX2xvY2FsZXMiLCJfYWNyX3ZhbHVlcyIsIl9yZXNvdXJjZSIsIl9yZXNwb25zZV9tb2RlIiwiX2ZpbHRlclByb3RvY29sQ2xhaW1zIiwiX2xvYWRVc2VySW5mbyIsIl9zdGFsZVN0YXRlQWdlIiwiX2Nsb2NrU2tldyIsIl9jbG9ja1NlcnZpY2UiLCJfdXNlckluZm9Kd3RJc3N1ZXIiLCJfbWVyZ2VDbGFpbXMiLCJfZXh0cmFRdWVyeVBhcmFtcyIsIl9leHRyYVRva2VuUGFyYW1zIiwiUG9wdXBOYXZpZ2F0b3IiLCJQb3B1cFdpbmRvdyIsImtlZXBPcGVuIiwibm90aWZ5T3BlbmVyIiwiQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsIiwiX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkIiwiX2lkIiwiZm9jdXMiLCJjbG9zZWQiLCJvcGVuZXIiLCJVcmxVdGlsaXR5IiwicGFyc2VVcmxGcmFnbWVudCIsIlJlZGlyZWN0TmF2aWdhdG9yIiwidXNlUmVwbGFjZVRvTmF2aWdhdGUiLCJQcm90b2NvbENsYWltcyIsIlVzZXJJbmZvU2VydmljZUN0b3IiLCJVc2VySW5mb1NlcnZpY2UiLCJqb3NlVXRpbCIsIlRva2VuQ2xpZW50Q3RvciIsIlRva2VuQ2xpZW50IiwiX3VzZXJJbmZvU2VydmljZSIsIl9qb3NlVXRpbCIsIl90b2tlbkNsaWVudCIsIl9wcm9jZXNzU2lnbmluUGFyYW1zIiwiX3ZhbGlkYXRlVG9rZW5zIiwiX3Byb2Nlc3NDbGFpbXMiLCJub25jZSIsImlkX3Rva2VuIiwiY29kZV92ZXJpZmllciIsImlzT3BlbklkQ29ubmVjdCIsInByb2ZpbGUiLCJnZXRDbGFpbXMiLCJjbGFpbXMiLCJjbGFpbXMxIiwiY2xhaW1zMiIsInJlc3VsdCIsInZhbHVlcyIsImZvckVhY2giLCJfcHJvY2Vzc0NvZGUiLCJfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4iLCJfdmFsaWRhdGVJZFRva2VuIiwiZXhjaGFuZ2VDb2RlIiwidG9rZW5SZXNwb25zZSIsIl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzIiwiY2xvY2tTa2V3SW5TZWNvbmRzIiwiX3ZhbGlkYXRlQWNjZXNzVG9rZW4iLCJfZ2V0U2lnbmluZ0tleUZvckp3dCIsIl9maWx0ZXJCeUFsZyIsImZpbHRlciIsIl9nZXRTaWduaW5nS2V5Rm9ySnd0V2l0aFNpbmdsZVJldHJ5IiwiYXRfaGFzaCIsImhhc2hBbGciLCJoYXNoQml0cyIsInNoYSIsImxlZnQiLCJsZWZ0X2I2NHUiLCJ1c2VyTWFuYWdlciIsIkNoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJfdXNlck1hbmFnZXIiLCJfQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciIsImV2ZW50cyIsImFkZFVzZXJMb2FkZWQiLCJfc3RhcnQiLCJhZGRVc2VyVW5sb2FkZWQiLCJfc3RvcCIsImdldFVzZXIiLCJ1c2VyIiwibW9uaXRvckFub255bW91c1Nlc3Npb24iLCJxdWVyeVNlc3Npb25TdGF0dXMiLCJ0bXBVc2VyIiwic2Vzc2lvbiIsInNpZCIsImNhdGNoIiwiZXJyIiwiX3N1YiIsIl9zaWQiLCJfY2hlY2tTZXNzaW9uSUZyYW1lIiwiX2NoZWNrU2Vzc2lvbkludGVydmFsIiwiX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yIiwidGltZXJIYW5kbGUiLCJyYWlzZUV2ZW50IiwiX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkIiwiX3JhaXNlVXNlclNpZ25lZE91dCIsIl9yYWlzZVVzZXJTaWduZWRJbiIsImNoZWNrU2Vzc2lvbkludGVydmFsIiwic3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IiLCJvaWRjIiwiaXNPaWRjIiwiYWRkUXVlcnlQYXJhbSIsImNvZGVfY2hhbGxlbmdlIiwiaXNPQXV0aCIsIk9pZGNTY29wZSIsInRva2VuX3R5cGUiLCJleHBpcmVzX2F0Iiwic2NvcGVzIiwiX25vbmNlIiwiX2NvZGVfdmVyaWZpZXIiLCJfY29kZV9jaGFsbGVuZ2UiLCJfc2tpcFVzZXJJbmZvIiwiY3JlYXRlZCIsInN0b3JhZ2VTdHJpbmciLCJTaWxlbnRSZW5ld1NlcnZpY2UiLCJfdG9rZW5FeHBpcmluZyIsInNpZ25pblNpbGVudCIsIl9yYWlzZVNpbGVudFJlbmV3RXJyb3IiLCJfY3JlYXRlZCIsIl9yZXF1ZXN0X3R5cGUiLCJzdG9yYWdlIiwiYWdlIiwiY3V0b2ZmIiwiZ2V0QWxsS2V5cyIsInByb21pc2VzIiwiYWxsIiwiVGltZXJEdXJhdGlvbiIsIm5vd0Z1bmMiLCJfbm93RnVuYyIsImV4cGlyYXRpb24iLCJfdGltZXJIYW5kbGUiLCJfZXhwaXJhdGlvbiIsInRpbWVyRHVyYXRpb24iLCJkaWZmIiwiZ3JhbnRfdHlwZSIsImV4Y2hhbmdlUmVmcmVzaFRva2VuIiwicmVmcmVzaF90b2tlbiIsIkFjY2Vzc1Rva2VuVHlwZUhpbnQiLCJSZWZyZXNoVG9rZW5UeXBlSGludCIsIl9YTUxIdHRwUmVxdWVzdEN0b3IiLCJyZXZva2UiLCJyZXF1aXJlZCIsIl9yZXZva2UiLCJ4aHIiLCJnbG9iYWwiLCJsYXN0SW5kZXhPZiIsInJlZ2V4IiwiY291bnRlciIsImV4ZWMiLCJwcm9wIiwiX2dldENsYWltc0Zyb21Kd3QiLCJpc3N1ZXJQcm9taXNlIiwiU2lsZW50UmVuZXdTZXJ2aWNlQ3RvciIsIlNlc3Npb25Nb25pdG9yQ3RvciIsIlRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IiLCJVc2VyTWFuYWdlclNldHRpbmdzIiwiX2V2ZW50cyIsIlVzZXJNYW5hZ2VyRXZlbnRzIiwiX3NpbGVudFJlbmV3U2VydmljZSIsImF1dG9tYXRpY1NpbGVudFJlbmV3Iiwic3RhcnRTaWxlbnRSZW5ldyIsIm1vbml0b3JTZXNzaW9uIiwiX3Nlc3Npb25Nb25pdG9yIiwiX3Rva2VuUmV2b2NhdGlvbkNsaWVudCIsIl9sb2FkVXNlciIsInJlbW92ZVVzZXIiLCJzdG9yZVVzZXIiLCJzaWduaW5SZWRpcmVjdCIsIm5hdlBhcmFtcyIsIl9zaWduaW5TdGFydCIsIl9yZWRpcmVjdE5hdmlnYXRvciIsInNpZ25pblJlZGlyZWN0Q2FsbGJhY2siLCJfc2lnbmluRW5kIiwic2lnbmluUG9wdXAiLCJwb3B1cF9yZWRpcmVjdF91cmkiLCJfc2lnbmluIiwiX3BvcHVwTmF2aWdhdG9yIiwic2lnbmluUG9wdXBDYWxsYmFjayIsIl9zaWduaW5DYWxsYmFjayIsIl91c2VSZWZyZXNoVG9rZW4iLCJpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXciLCJ2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXciLCJjdXJyZW50X3N1YiIsIl9zaWduaW5TaWxlbnRJZnJhbWUiLCJpZFRva2VuVmFsaWRhdGlvbiIsIl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4iLCJhdXRoX3RpbWUiLCJzaWxlbnRfcmVkaXJlY3RfdXJpIiwiX2lmcmFtZU5hdmlnYXRvciIsInNpZ25pblNpbGVudENhbGxiYWNrIiwic2lnbmluQ2FsbGJhY2siLCJzaWdub3V0Q2FsbGJhY2siLCJzaWdub3V0UmVkaXJlY3RDYWxsYmFjayIsInNpZ25vdXRQb3B1cENhbGxiYWNrIiwicXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUiLCJuYXZSZXNwb25zZSIsInNpZ25pblJlc3BvbnNlIiwibmF2aWdhdG9yUGFyYW1zIiwic2lnbm91dFJlZGlyZWN0IiwicG9zdExvZ291dFJlZGlyZWN0VXJpIiwiX3NpZ25vdXRTdGFydCIsIl9zaWdub3V0RW5kIiwic2lnbm91dFBvcHVwIiwicG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3NpZ25vdXQiLCJyZXZva2VQcm9taXNlIiwicmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQiLCJfcmV2b2tlSW50ZXJuYWwiLCJzaWdub3V0UmVxdWVzdCIsInNpZ25vdXRSZXNwb25zZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwic3VjY2VzcyIsIl9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsIiwiX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsIiwiYXRTdWNjZXNzIiwicnRTdWNjZXNzIiwic3RvcFNpbGVudFJlbmV3IiwiX3VzZXJTdG9yZSIsIl91c2VyU3RvcmVLZXkiLCJyZWRpcmVjdE5hdmlnYXRvciIsInBvcHVwTmF2aWdhdG9yIiwiaWZyYW1lTmF2aWdhdG9yIiwidXNlclN0b3JlIiwiX3VzZXJMb2FkZWQiLCJfdXNlclVubG9hZGVkIiwiX3NpbGVudFJlbmV3RXJyb3IiLCJfdXNlclNpZ25lZEluIiwiX3VzZXJTaWduZWRPdXQiLCJfdXNlclNlc3Npb25DaGFuZ2VkIiwicmVtb3ZlVXNlckxvYWRlZCIsInJlbW92ZVVzZXJVbmxvYWRlZCIsImFkZFNpbGVudFJlbmV3RXJyb3IiLCJyZW1vdmVTaWxlbnRSZW5ld0Vycm9yIiwiYWRkVXNlclNpZ25lZEluIiwicmVtb3ZlVXNlclNpZ25lZEluIiwiYWRkVXNlclNpZ25lZE91dCIsInJlbW92ZVVzZXJTaWduZWRPdXQiLCJhZGRVc2VyU2Vzc2lvbkNoYW5nZWQiLCJyZW1vdmVVc2VyU2Vzc2lvbkNoYW5nZWQiLCJEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJzdG9yZSIsIl9wb3B1cF9yZWRpcmVjdF91cmkiLCJfcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3BvcHVwV2luZG93RmVhdHVyZXMiLCJfcG9wdXBXaW5kb3dUYXJnZXQiLCJfc2lsZW50X3JlZGlyZWN0X3VyaSIsIl9zaWxlbnRSZXF1ZXN0VGltZW91dCIsIl9hdXRvbWF0aWNTaWxlbnRSZW5ldyIsIl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXciLCJfaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3IiwiX21vbml0b3JTZXNzaW9uIiwiX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uIiwiX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlIiwiX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0IiwicHJlZml4IiwiX3N0b3JlIiwiX3ByZWZpeCIsIl9jcnlwdG9VdWlkdjQiLCJfdXVpZHY0IiwiaGFzQ3J5cHRvIiwiaGFzUmFuZG9tVmFsdWVzIiwidXVpZCJdLCJtYXBwaW5ncyI6Ijs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBbkJBO0FBQ0E7O2tCQW9CZTtBQUNYQSw2QkFEVztBQUVYQyxpQkFGVztBQUdYQyxzQ0FIVztBQUlYQyw4REFKVztBQUtYQyxvRUFMVztBQU1YQyw4REFOVztBQU9YQyx5Q0FQVztBQVFYQywyREFSVztBQVNYQyxxREFUVztBQVVYQyx1RUFWVztBQVdYQywwRUFYVztBQVlYQyw4REFaVztBQWFYQyx1RUFiVztBQWNYQyxrREFkVztBQWVYQywwQkFmVztBQWdCWEM7QUFoQlcsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckJmOzs7O0FBSUEsSUFBSUMsWUFBWSxFQUFoQjtBQUNBQSxVQUFVQyxTQUFWLEdBQXNCLEtBQXRCOztBQUVBLElBQUlDLFNBQVMsRUFBYjs7QUFFQTs7Ozs7Ozs7QUFRQSxJQUFJQyxXQUFTQSxZQUFXLFVBQVNDLENBQVQsRUFBV0MsQ0FBWCxFQUFhO0FBQUMsTUFBSUMsSUFBRSxFQUFOLENBQVMsSUFBSUMsSUFBRUQsRUFBRUUsR0FBRixHQUFNLEVBQVosQ0FBZSxJQUFJQyxJQUFFRixFQUFFRyxJQUFGLEdBQVEsWUFBVTtBQUFDLGFBQVNDLENBQVQsR0FBWSxDQUFFLFFBQU0sRUFBQ0MsUUFBTyxnQkFBU0MsQ0FBVCxFQUFXO0FBQUNGLFVBQUVHLFNBQUYsR0FBWSxJQUFaLENBQWlCLElBQUlDLElBQUUsSUFBSUosQ0FBSixFQUFOLENBQWMsSUFBR0UsQ0FBSCxFQUFLO0FBQUNFLFlBQUVDLEtBQUYsQ0FBUUgsQ0FBUjtBQUFXLGFBQUcsQ0FBQ0UsRUFBRUUsY0FBRixDQUFpQixNQUFqQixDQUFKLEVBQTZCO0FBQUNGLFlBQUVHLElBQUYsR0FBTyxZQUFVO0FBQUNILGNBQUVJLE1BQUYsQ0FBU0QsSUFBVCxDQUFjRSxLQUFkLENBQW9CLElBQXBCLEVBQXlCQyxTQUF6QjtBQUFvQyxXQUF0RDtBQUF1RCxXQUFFSCxJQUFGLENBQU9KLFNBQVAsR0FBaUJDLENBQWpCLENBQW1CQSxFQUFFSSxNQUFGLEdBQVMsSUFBVCxDQUFjLE9BQU9KLENBQVA7QUFBUyxPQUFuTSxFQUFvTU8sUUFBTyxrQkFBVTtBQUFDLFlBQUlQLElBQUUsS0FBS0gsTUFBTCxFQUFOLENBQW9CRyxFQUFFRyxJQUFGLENBQU9FLEtBQVAsQ0FBYUwsQ0FBYixFQUFlTSxTQUFmLEVBQTBCLE9BQU9OLENBQVA7QUFBUyxPQUE3USxFQUE4UUcsTUFBSyxnQkFBVSxDQUFFLENBQS9SLEVBQWdTRixPQUFNLGVBQVNILENBQVQsRUFBVztBQUFDLGFBQUksSUFBSUUsQ0FBUixJQUFhRixDQUFiLEVBQWU7QUFBQyxjQUFHQSxFQUFFSSxjQUFGLENBQWlCRixDQUFqQixDQUFILEVBQXVCO0FBQUMsaUJBQUtBLENBQUwsSUFBUUYsRUFBRUUsQ0FBRixDQUFSO0FBQWE7QUFBQyxhQUFHRixFQUFFSSxjQUFGLENBQWlCLFVBQWpCLENBQUgsRUFBZ0M7QUFBQyxlQUFLTSxRQUFMLEdBQWNWLEVBQUVVLFFBQWhCO0FBQXlCO0FBQUMsT0FBbmEsRUFBb2FDLE9BQU0saUJBQVU7QUFBQyxlQUFPLEtBQUtOLElBQUwsQ0FBVUosU0FBVixDQUFvQkYsTUFBcEIsQ0FBMkIsSUFBM0IsQ0FBUDtBQUF3QyxPQUE3ZCxFQUFOO0FBQXFlLEdBQTlmLEVBQWQsQ0FBZ2hCLElBQUlhLElBQUVsQixFQUFFbUIsU0FBRixHQUFZakIsRUFBRUcsTUFBRixDQUFTLEVBQUNNLE1BQUssY0FBU0gsQ0FBVCxFQUFXSixDQUFYLEVBQWE7QUFBQ0ksVUFBRSxLQUFLWSxLQUFMLEdBQVdaLEtBQUcsRUFBaEIsQ0FBbUIsSUFBR0osS0FBR04sQ0FBTixFQUFRO0FBQUMsYUFBS3VCLFFBQUwsR0FBY2pCLENBQWQ7QUFBZ0IsT0FBekIsTUFBNkI7QUFBQyxhQUFLaUIsUUFBTCxHQUFjYixFQUFFYyxNQUFGLEdBQVMsQ0FBdkI7QUFBeUI7QUFBQyxLQUEvRixFQUFnR04sVUFBUyxrQkFBU1osQ0FBVCxFQUFXO0FBQUMsYUFBTSxDQUFDQSxLQUFHbUIsQ0FBSixFQUFPQyxTQUFQLENBQWlCLElBQWpCLENBQU47QUFBNkIsS0FBbEosRUFBbUpDLFFBQU8sZ0JBQVNDLENBQVQsRUFBVztBQUFDLFVBQUlDLElBQUUsS0FBS1AsS0FBWCxDQUFpQixJQUFJZCxJQUFFb0IsRUFBRU4sS0FBUixDQUFjLElBQUloQixJQUFFLEtBQUtpQixRQUFYLENBQW9CLElBQUlPLElBQUVGLEVBQUVMLFFBQVIsQ0FBaUIsS0FBS1EsS0FBTCxHQUFhLElBQUd6QixJQUFFLENBQUwsRUFBTztBQUFDLGFBQUksSUFBSTBCLElBQUUsQ0FBVixFQUFZQSxJQUFFRixDQUFkLEVBQWdCRSxHQUFoQixFQUFvQjtBQUFDLGNBQUl0QixJQUFHRixFQUFFd0IsTUFBSSxDQUFOLE1BQVksS0FBSUEsSUFBRSxDQUFILEdBQU0sQ0FBdEIsR0FBMEIsR0FBaEMsQ0FBb0NILEVBQUd2QixJQUFFMEIsQ0FBSCxLQUFRLENBQVYsS0FBY3RCLEtBQUksS0FBSSxDQUFDSixJQUFFMEIsQ0FBSCxJQUFNLENBQVAsR0FBVSxDQUEvQjtBQUFrQztBQUFDLE9BQXBHLE1BQXdHO0FBQUMsYUFBSSxJQUFJQSxJQUFFLENBQVYsRUFBWUEsSUFBRUYsQ0FBZCxFQUFnQkUsS0FBRyxDQUFuQixFQUFxQjtBQUFDSCxZQUFHdkIsSUFBRTBCLENBQUgsS0FBUSxDQUFWLElBQWF4QixFQUFFd0IsTUFBSSxDQUFOLENBQWI7QUFBc0I7QUFBQyxZQUFLVCxRQUFMLElBQWVPLENBQWYsQ0FBaUIsT0FBTyxJQUFQO0FBQVksS0FBMWEsRUFBMmFDLE9BQU0saUJBQVU7QUFBQyxVQUFJckIsSUFBRSxLQUFLWSxLQUFYLENBQWlCLElBQUloQixJQUFFLEtBQUtpQixRQUFYLENBQW9CYixFQUFFSixNQUFJLENBQU4sS0FBVSxjQUFhLEtBQUlBLElBQUUsQ0FBSCxHQUFNLENBQWhDLENBQW1DSSxFQUFFYyxNQUFGLEdBQVN6QixFQUFFa0MsSUFBRixDQUFPM0IsSUFBRSxDQUFULENBQVQ7QUFBcUIsS0FBemhCLEVBQTBoQmEsT0FBTSxpQkFBVTtBQUFDLFVBQUliLElBQUVGLEVBQUVlLEtBQUYsQ0FBUWUsSUFBUixDQUFhLElBQWIsQ0FBTixDQUF5QjVCLEVBQUVnQixLQUFGLEdBQVEsS0FBS0EsS0FBTCxDQUFXYSxLQUFYLENBQWlCLENBQWpCLENBQVIsQ0FBNEIsT0FBTzdCLENBQVA7QUFBUyxLQUF6bUIsRUFBMG1COEIsUUFBTyxnQkFBUzVCLENBQVQsRUFBVztBQUFDLFVBQUlFLElBQUUsRUFBTixDQUFTLEtBQUksSUFBSUosSUFBRSxDQUFWLEVBQVlBLElBQUVFLENBQWQsRUFBZ0JGLEtBQUcsQ0FBbkIsRUFBcUI7QUFBQ0ksVUFBRTJCLElBQUYsQ0FBUXRDLEVBQUVxQyxNQUFGLEtBQVcsVUFBWixHQUF3QixDQUEvQjtBQUFrQyxjQUFPLElBQUloQixFQUFFUCxJQUFOLENBQVdILENBQVgsRUFBYUYsQ0FBYixDQUFQO0FBQXVCLEtBQXJ0QixFQUFULENBQWxCLENBQW12QixJQUFJOEIsSUFBRXJDLEVBQUVzQyxHQUFGLEdBQU0sRUFBWixDQUFlLElBQUlkLElBQUVhLEVBQUVFLEdBQUYsR0FBTSxFQUFDZCxXQUFVLG1CQUFTbEIsQ0FBVCxFQUFXO0FBQUMsVUFBSXdCLElBQUV4QixFQUFFYyxLQUFSLENBQWMsSUFBSVosSUFBRUYsRUFBRWUsUUFBUixDQUFpQixJQUFJTSxJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUl2QixJQUFFLENBQVYsRUFBWUEsSUFBRUksQ0FBZCxFQUFnQkosR0FBaEIsRUFBb0I7QUFBQyxZQUFJd0IsSUFBR0UsRUFBRTFCLE1BQUksQ0FBTixNQUFZLEtBQUlBLElBQUUsQ0FBSCxHQUFNLENBQXRCLEdBQTBCLEdBQWhDLENBQW9DdUIsRUFBRVEsSUFBRixDQUFPLENBQUNQLE1BQUksQ0FBTCxFQUFRWixRQUFSLENBQWlCLEVBQWpCLENBQVAsRUFBNkJXLEVBQUVRLElBQUYsQ0FBTyxDQUFDUCxJQUFFLEVBQUgsRUFBT1osUUFBUCxDQUFnQixFQUFoQixDQUFQO0FBQTRCLGNBQU9XLEVBQUVZLElBQUYsQ0FBTyxFQUFQLENBQVA7QUFBa0IsS0FBbk0sRUFBb01DLE9BQU0sZUFBU2xDLENBQVQsRUFBVztBQUFDLFVBQUlGLElBQUVFLEVBQUVnQixNQUFSLENBQWUsSUFBSUssSUFBRSxFQUFOLENBQVMsS0FBSSxJQUFJbkIsSUFBRSxDQUFWLEVBQVlBLElBQUVKLENBQWQsRUFBZ0JJLEtBQUcsQ0FBbkIsRUFBcUI7QUFBQ21CLFVBQUVuQixNQUFJLENBQU4sS0FBVWlDLFNBQVNuQyxFQUFFb0MsTUFBRixDQUFTbEMsQ0FBVCxFQUFXLENBQVgsQ0FBVCxFQUF1QixFQUF2QixLQUE2QixLQUFJQSxJQUFFLENBQUgsR0FBTSxDQUFoRDtBQUFtRCxjQUFPLElBQUlVLEVBQUVQLElBQU4sQ0FBV2dCLENBQVgsRUFBYXZCLElBQUUsQ0FBZixDQUFQO0FBQXlCLEtBQWhWLEVBQVosQ0FBOFYsSUFBSXVDLElBQUVQLEVBQUVRLE1BQUYsR0FBUyxFQUFDcEIsV0FBVSxtQkFBU0csQ0FBVCxFQUFXO0FBQUMsVUFBSUcsSUFBRUgsRUFBRVAsS0FBUixDQUFjLElBQUlkLElBQUVxQixFQUFFTixRQUFSLENBQWlCLElBQUlqQixJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUlJLElBQUUsQ0FBVixFQUFZQSxJQUFFRixDQUFkLEVBQWdCRSxHQUFoQixFQUFvQjtBQUFDLFlBQUlvQixJQUFHRSxFQUFFdEIsTUFBSSxDQUFOLE1BQVksS0FBSUEsSUFBRSxDQUFILEdBQU0sQ0FBdEIsR0FBMEIsR0FBaEMsQ0FBb0NKLEVBQUUrQixJQUFGLENBQU9VLE9BQU9DLFlBQVAsQ0FBb0JsQixDQUFwQixDQUFQO0FBQStCLGNBQU94QixFQUFFbUMsSUFBRixDQUFPLEVBQVAsQ0FBUDtBQUFrQixLQUF6SyxFQUEwS0MsT0FBTSxlQUFTbEMsQ0FBVCxFQUFXO0FBQUMsVUFBSUYsSUFBRUUsRUFBRWdCLE1BQVIsQ0FBZSxJQUFJSyxJQUFFLEVBQU4sQ0FBUyxLQUFJLElBQUluQixJQUFFLENBQVYsRUFBWUEsSUFBRUosQ0FBZCxFQUFnQkksR0FBaEIsRUFBb0I7QUFBQ21CLFVBQUVuQixNQUFJLENBQU4sS0FBVSxDQUFDRixFQUFFeUMsVUFBRixDQUFhdkMsQ0FBYixJQUFnQixHQUFqQixLQUF3QixLQUFJQSxJQUFFLENBQUgsR0FBTSxDQUEzQztBQUE4QyxjQUFPLElBQUlVLEVBQUVQLElBQU4sQ0FBV2dCLENBQVgsRUFBYXZCLENBQWIsQ0FBUDtBQUF1QixLQUE5UyxFQUFmLENBQStULElBQUk0QyxJQUFFWixFQUFFYSxJQUFGLEdBQU8sRUFBQ3pCLFdBQVUsbUJBQVNwQixDQUFULEVBQVc7QUFBQyxVQUFHO0FBQUMsZUFBTzhDLG1CQUFtQkMsT0FBT1IsRUFBRW5CLFNBQUYsQ0FBWXBCLENBQVosQ0FBUCxDQUFuQixDQUFQO0FBQWtELE9BQXRELENBQXNELE9BQU1JLENBQU4sRUFBUTtBQUFDLGNBQU0sSUFBSTRDLEtBQUosQ0FBVSxzQkFBVixDQUFOO0FBQXdDO0FBQUMsS0FBL0gsRUFBZ0laLE9BQU0sZUFBU3BDLENBQVQsRUFBVztBQUFDLGFBQU91QyxFQUFFSCxLQUFGLENBQVFhLFNBQVNDLG1CQUFtQmxELENBQW5CLENBQVQsQ0FBUixDQUFQO0FBQWdELEtBQWxNLEVBQWIsQ0FBaU4sSUFBSW1ELElBQUV2RCxFQUFFd0Qsc0JBQUYsR0FBeUJ0RCxFQUFFRyxNQUFGLENBQVMsRUFBQ29ELE9BQU0saUJBQVU7QUFBQyxXQUFLQyxLQUFMLEdBQVcsSUFBSXhDLEVBQUVQLElBQU4sRUFBWCxDQUF3QixLQUFLZ0QsV0FBTCxHQUFpQixDQUFqQjtBQUFtQixLQUE3RCxFQUE4REMsU0FBUSxpQkFBU3hELENBQVQsRUFBVztBQUFDLFVBQUcsT0FBT0EsQ0FBUCxJQUFVLFFBQWIsRUFBc0I7QUFBQ0EsWUFBRTRDLEVBQUVSLEtBQUYsQ0FBUXBDLENBQVIsQ0FBRjtBQUFhLFlBQUtzRCxLQUFMLENBQVdqQyxNQUFYLENBQWtCckIsQ0FBbEIsRUFBcUIsS0FBS3VELFdBQUwsSUFBa0J2RCxFQUFFaUIsUUFBcEI7QUFBNkIsS0FBeEssRUFBeUt3QyxVQUFTLGtCQUFTQyxDQUFULEVBQVc7QUFBQyxVQUFJbkMsSUFBRSxLQUFLK0IsS0FBWCxDQUFpQixJQUFJSyxJQUFFcEMsRUFBRVAsS0FBUixDQUFjLElBQUloQixJQUFFdUIsRUFBRU4sUUFBUixDQUFpQixJQUFJSyxJQUFFLEtBQUtzQyxTQUFYLENBQXFCLElBQUlDLElBQUV2QyxJQUFFLENBQVIsQ0FBVSxJQUFJd0MsSUFBRTlELElBQUU2RCxDQUFSLENBQVUsSUFBR0gsQ0FBSCxFQUFLO0FBQUNJLFlBQUVyRSxFQUFFa0MsSUFBRixDQUFPbUMsQ0FBUCxDQUFGO0FBQVksT0FBbEIsTUFBc0I7QUFBQ0EsWUFBRXJFLEVBQUVzRSxHQUFGLENBQU0sQ0FBQ0QsSUFBRSxDQUFILElBQU0sS0FBS0UsY0FBakIsRUFBZ0MsQ0FBaEMsQ0FBRjtBQUFxQyxXQUFJeEMsSUFBRXNDLElBQUV4QyxDQUFSLENBQVUsSUFBSUksSUFBRWpDLEVBQUV3RSxHQUFGLENBQU16QyxJQUFFLENBQVIsRUFBVXhCLENBQVYsQ0FBTixDQUFtQixJQUFHd0IsQ0FBSCxFQUFLO0FBQUMsYUFBSSxJQUFJdEIsSUFBRSxDQUFWLEVBQVlBLElBQUVzQixDQUFkLEVBQWdCdEIsS0FBR29CLENBQW5CLEVBQXFCO0FBQUMsZUFBSzRDLGVBQUwsQ0FBcUJQLENBQXJCLEVBQXVCekQsQ0FBdkI7QUFBMEIsYUFBSUUsSUFBRXVELEVBQUVRLE1BQUYsQ0FBUyxDQUFULEVBQVczQyxDQUFYLENBQU4sQ0FBb0JELEVBQUVOLFFBQUYsSUFBWVMsQ0FBWjtBQUFjLGNBQU8sSUFBSVosRUFBRVAsSUFBTixDQUFXSCxDQUFYLEVBQWFzQixDQUFiLENBQVA7QUFBdUIsS0FBL2QsRUFBZ2ViLE9BQU0saUJBQVU7QUFBQyxVQUFJYixJQUFFRixFQUFFZSxLQUFGLENBQVFlLElBQVIsQ0FBYSxJQUFiLENBQU4sQ0FBeUI1QixFQUFFc0QsS0FBRixHQUFRLEtBQUtBLEtBQUwsQ0FBV3pDLEtBQVgsRUFBUixDQUEyQixPQUFPYixDQUFQO0FBQVMsS0FBOWlCLEVBQStpQmdFLGdCQUFlLENBQTlqQixFQUFULENBQS9CLENBQTBtQixJQUFJSSxJQUFFeEUsRUFBRXlFLE1BQUYsR0FBU2xCLEVBQUVsRCxNQUFGLENBQVMsRUFBQ3FFLEtBQUl4RSxFQUFFRyxNQUFGLEVBQUwsRUFBZ0JNLE1BQUssY0FBU1AsQ0FBVCxFQUFXO0FBQUMsV0FBS3NFLEdBQUwsR0FBUyxLQUFLQSxHQUFMLENBQVNyRSxNQUFULENBQWdCRCxDQUFoQixDQUFULENBQTRCLEtBQUtxRCxLQUFMO0FBQWEsS0FBMUUsRUFBMkVBLE9BQU0saUJBQVU7QUFBQ0YsUUFBRUUsS0FBRixDQUFRekIsSUFBUixDQUFhLElBQWIsRUFBbUIsS0FBSzJDLFFBQUw7QUFBZ0IsS0FBL0gsRUFBZ0lDLFFBQU8sZ0JBQVN4RSxDQUFULEVBQVc7QUFBQyxXQUFLd0QsT0FBTCxDQUFheEQsQ0FBYixFQUFnQixLQUFLeUQsUUFBTCxHQUFnQixPQUFPLElBQVA7QUFBWSxLQUEvTCxFQUFnTWdCLFVBQVMsa0JBQVN6RSxDQUFULEVBQVc7QUFBQyxVQUFHQSxDQUFILEVBQUs7QUFBQyxhQUFLd0QsT0FBTCxDQUFheEQsQ0FBYjtBQUFnQixXQUFJSSxJQUFFLEtBQUtzRSxXQUFMLEVBQU4sQ0FBeUIsT0FBT3RFLENBQVA7QUFBUyxLQUE3USxFQUE4UXdELFdBQVUsTUFBSSxFQUE1UixFQUErUmUsZUFBYyx1QkFBUzNFLENBQVQsRUFBVztBQUFDLGFBQU8sVUFBU0UsQ0FBVCxFQUFXRSxDQUFYLEVBQWE7QUFBQyxlQUFPLElBQUlKLEVBQUVPLElBQU4sQ0FBV0gsQ0FBWCxFQUFjcUUsUUFBZCxDQUF1QnZFLENBQXZCLENBQVA7QUFBaUMsT0FBdEQ7QUFBdUQsS0FBaFgsRUFBaVgwRSxtQkFBa0IsMkJBQVM1RSxDQUFULEVBQVc7QUFBQyxhQUFPLFVBQVNFLENBQVQsRUFBV0UsQ0FBWCxFQUFhO0FBQUMsZUFBTyxJQUFJeUUsRUFBRUMsSUFBRixDQUFPdkUsSUFBWCxDQUFnQlAsQ0FBaEIsRUFBa0JJLENBQWxCLEVBQXFCcUUsUUFBckIsQ0FBOEJ2RSxDQUE5QixDQUFQO0FBQXdDLE9BQTdEO0FBQThELEtBQTdjLEVBQVQsQ0FBZixDQUF3ZSxJQUFJMkUsSUFBRWxGLEVBQUVvRixJQUFGLEdBQU8sRUFBYixDQUFnQixPQUFPcEYsQ0FBUDtBQUFTLENBQWp4RyxDQUFreEdxRixJQUFseEcsQ0FBeEI7QUFDQTs7Ozs7O0FBTUEsQ0FBQyxVQUFTdEYsQ0FBVCxFQUFXO0FBQUMsTUFBSUMsSUFBRUgsUUFBTjtBQUFBLE1BQWU0RSxJQUFFekUsRUFBRUUsR0FBbkI7QUFBQSxNQUF1QkosSUFBRTJFLEVBQUVyRSxJQUEzQjtBQUFBLE1BQWdDb0IsSUFBRWlELEVBQUVyRCxTQUFwQztBQUFBLE1BQThDcEIsSUFBRUEsRUFBRXNGLEdBQUYsR0FBTSxFQUF0RCxDQUF5RHRGLEVBQUV1RixJQUFGLEdBQU96RixFQUFFUSxNQUFGLENBQVMsRUFBQ00sTUFBSyxjQUFTWCxDQUFULEVBQVdnRCxDQUFYLEVBQWE7QUFBQyxXQUFLdUMsSUFBTCxHQUFVdkYsQ0FBVixDQUFZLEtBQUt3RixHQUFMLEdBQVN4QyxDQUFUO0FBQVcsS0FBM0MsRUFBVCxDQUFQLENBQThEakQsRUFBRW9CLFNBQUYsR0FBWXRCLEVBQUVRLE1BQUYsQ0FBUyxFQUFDTSxNQUFLLGNBQVNYLENBQVQsRUFBV2dELENBQVgsRUFBYTtBQUFDaEQsVUFBRSxLQUFLb0IsS0FBTCxHQUFXcEIsS0FBRyxFQUFoQixDQUFtQixLQUFLcUIsUUFBTCxHQUFjMkIsS0FBR2xELENBQUgsR0FBS2tELENBQUwsR0FBTyxJQUFFaEQsRUFBRXNCLE1BQXpCO0FBQWdDLEtBQXZFLEVBQXdFbUUsT0FBTSxpQkFBVTtBQUFDLFdBQUksSUFBSXpGLElBQUUsS0FBS29CLEtBQVgsRUFBaUI0QixJQUFFaEQsRUFBRXNCLE1BQXJCLEVBQTRCdkIsSUFBRSxFQUE5QixFQUFpQzRDLElBQUUsQ0FBdkMsRUFBeUNBLElBQUVLLENBQTNDLEVBQTZDTCxHQUE3QyxFQUFpRDtBQUFDLFlBQUk5QyxJQUFFRyxFQUFFMkMsQ0FBRixDQUFOLENBQVc1QyxFQUFFb0MsSUFBRixDQUFPdEMsRUFBRTBGLElBQVQsRUFBZXhGLEVBQUVvQyxJQUFGLENBQU90QyxFQUFFMkYsR0FBVDtBQUFjLGNBQU9qRSxFQUFFUixNQUFGLENBQVNoQixDQUFULEVBQVcsS0FBS3NCLFFBQWhCLENBQVA7QUFBaUMsS0FBcE4sRUFBcU5KLE9BQU0saUJBQVU7QUFBQyxXQUFJLElBQUlqQixJQUFFSCxFQUFFb0IsS0FBRixDQUFRZSxJQUFSLENBQWEsSUFBYixDQUFOLEVBQXlCZ0IsSUFBRWhELEVBQUVvQixLQUFGLEdBQVEsS0FBS0EsS0FBTCxDQUFXYSxLQUFYLENBQWlCLENBQWpCLENBQW5DLEVBQXVEbEMsSUFBRWlELEVBQUUxQixNQUEzRCxFQUFrRXFCLElBQUUsQ0FBeEUsRUFBMEVBLElBQUU1QyxDQUE1RSxFQUE4RTRDLEdBQTlFO0FBQWtGSyxVQUFFTCxDQUFGLElBQUtLLEVBQUVMLENBQUYsRUFBSzFCLEtBQUwsRUFBTDtBQUFsRixPQUFvRyxPQUFPakIsQ0FBUDtBQUFTLEtBQW5WLEVBQVQsQ0FBWjtBQUEyVyxDQUEvZTs7QUFFQTs7Ozs7O0FBTUEsQ0FBQyxZQUFVO0FBQUMsTUFBSXVCLElBQUUzQixRQUFOO0FBQUEsTUFBZU0sSUFBRXFCLEVBQUV0QixHQUFGLENBQU1rQixTQUF2QixDQUFpQ0ksRUFBRWMsR0FBRixDQUFNcUQsTUFBTixHQUFhLEVBQUNsRSxXQUFVLG1CQUFTeEIsQ0FBVCxFQUFXO0FBQUMsVUFBSUgsSUFBRUcsRUFBRW9CLEtBQVI7QUFBQSxVQUFjb0QsSUFBRXhFLEVBQUVxQixRQUFsQjtBQUFBLFVBQTJCMkIsSUFBRSxLQUFLMkMsSUFBbEMsQ0FBdUMzRixFQUFFNkIsS0FBRixHQUFVN0IsSUFBRSxFQUFGLENBQUssS0FBSSxJQUFJRCxJQUFFLENBQVYsRUFBWUEsSUFBRXlFLENBQWQsRUFBZ0J6RSxLQUFHLENBQW5CO0FBQXFCLGFBQUksSUFBSTRDLElBQUUsQ0FBQzlDLEVBQUVFLE1BQUksQ0FBTixNQUFXLEtBQUcsS0FBR0EsSUFBRSxDQUFMLENBQWQsR0FBc0IsR0FBdkIsS0FBNkIsRUFBN0IsR0FBZ0MsQ0FBQ0YsRUFBRUUsSUFBRSxDQUFGLEtBQU0sQ0FBUixNQUFhLEtBQUcsS0FBRyxDQUFDQSxJQUFFLENBQUgsSUFBTSxDQUFULENBQWhCLEdBQTRCLEdBQTdCLEtBQW1DLENBQW5FLEdBQXFFRixFQUFFRSxJQUFFLENBQUYsS0FBTSxDQUFSLE1BQWEsS0FBRyxLQUFHLENBQUNBLElBQUUsQ0FBSCxJQUFNLENBQVQsQ0FBaEIsR0FBNEIsR0FBdkcsRUFBMkdELElBQUUsQ0FBakgsRUFBbUgsSUFBRUEsQ0FBRixJQUFLQyxJQUFFLE9BQUtELENBQVAsR0FBUzBFLENBQWpJLEVBQW1JMUUsR0FBbkk7QUFBdUlFLFlBQUVtQyxJQUFGLENBQU9hLEVBQUU0QyxNQUFGLENBQVNqRCxNQUFJLEtBQUcsSUFBRTdDLENBQUwsQ0FBSixHQUFZLEVBQXJCLENBQVA7QUFBdkk7QUFBckIsT0FBNkwsSUFBR0QsSUFBRW1ELEVBQUU0QyxNQUFGLENBQVMsRUFBVCxDQUFMLEVBQWtCLE9BQUs1RixFQUFFc0IsTUFBRixHQUFTLENBQWQ7QUFBaUJ0QixVQUFFbUMsSUFBRixDQUFPdEMsQ0FBUDtBQUFqQixPQUEyQixPQUFPRyxFQUFFdUMsSUFBRixDQUFPLEVBQVAsQ0FBUDtBQUFrQixLQUF6VSxFQUEwVUMsT0FBTSxlQUFTeEMsQ0FBVCxFQUFXO0FBQUMsVUFBSUgsSUFBRUcsRUFBRXNCLE1BQVI7QUFBQSxVQUFla0QsSUFBRSxLQUFLbUIsSUFBdEI7QUFBQSxVQUEyQjNDLElBQUV3QixFQUFFb0IsTUFBRixDQUFTLEVBQVQsQ0FBN0IsQ0FBMEM1QyxNQUFJQSxJQUFFaEQsRUFBRTZGLE9BQUYsQ0FBVTdDLENBQVYsQ0FBRixFQUFlLENBQUMsQ0FBRCxJQUFJQSxDQUFKLEtBQVFuRCxJQUFFbUQsQ0FBVixDQUFuQixFQUFpQyxLQUFJLElBQUlBLElBQUUsRUFBTixFQUFTakQsSUFBRSxDQUFYLEVBQWE0QyxJQUFFLENBQW5CLEVBQXFCQSxJQUN0ZjlDLENBRGllLEVBQy9kOEMsR0FEK2Q7QUFDM2QsWUFBR0EsSUFBRSxDQUFMLEVBQU87QUFBQyxjQUFJN0MsSUFBRTBFLEVBQUVxQixPQUFGLENBQVU3RixFQUFFNEYsTUFBRixDQUFTakQsSUFBRSxDQUFYLENBQVYsS0FBMEIsS0FBR0EsSUFBRSxDQUFMLENBQWhDO0FBQUEsY0FBd0NwQixJQUFFaUQsRUFBRXFCLE9BQUYsQ0FBVTdGLEVBQUU0RixNQUFGLENBQVNqRCxDQUFULENBQVYsTUFBeUIsSUFBRSxLQUFHQSxJQUFFLENBQUwsQ0FBckUsQ0FBNkVLLEVBQUVqRCxNQUFJLENBQU4sS0FBVSxDQUFDRCxJQUFFeUIsQ0FBSCxLQUFPLEtBQUcsS0FBR3hCLElBQUUsQ0FBTCxDQUFwQixDQUE0QkE7QUFBSTtBQURzVyxPQUN0VyxPQUFPRyxFQUFFYSxNQUFGLENBQVNpQyxDQUFULEVBQVdqRCxDQUFYLENBQVA7QUFBcUIsS0FEdEYsRUFDdUY0RixNQUFLLG1FQUQ1RixFQUFiO0FBQzhLLENBRDNOOztBQUdBOzs7Ozs7QUFNQSxDQUFDLFVBQVNWLENBQVQsRUFBVztBQUFDLE9BQUksSUFBSW5GLElBQUVGLFFBQU4sRUFBZTJCLElBQUV6QixFQUFFRyxHQUFuQixFQUF1QmdFLElBQUUxQyxFQUFFSixTQUEzQixFQUFxQ2pCLElBQUVxQixFQUFFa0QsTUFBekMsRUFBZ0RsRCxJQUFFekIsRUFBRXFGLElBQXBELEVBQXlEdkQsSUFBRSxFQUEzRCxFQUE4REYsSUFBRSxFQUFoRSxFQUFtRXdDLElBQUUsU0FBRkEsQ0FBRSxDQUFTdkMsQ0FBVCxFQUFXO0FBQUMsV0FBTyxjQUFZQSxLQUFHQSxJQUFFLENBQUwsQ0FBWixJQUFxQixDQUE1QjtBQUE4QixHQUEvRyxFQUFnSFQsSUFBRSxDQUFsSCxFQUFvSGxCLElBQUUsQ0FBMUgsRUFBNEgsS0FBR0EsQ0FBL0gsR0FBa0k7QUFBQyxRQUFJMkMsQ0FBSixDQUFNNUMsR0FBRTtBQUFDNEMsVUFBRXpCLENBQUYsQ0FBSSxLQUFJLElBQUk0QyxJQUFFbUIsRUFBRWEsSUFBRixDQUFPbkQsQ0FBUCxDQUFOLEVBQWdCYixJQUFFLENBQXRCLEVBQXdCQSxLQUFHZ0MsQ0FBM0IsRUFBNkJoQyxHQUE3QjtBQUFpQyxZQUFHLEVBQUVhLElBQUViLENBQUosQ0FBSCxFQUFVO0FBQUNhLGNBQUUsQ0FBQyxDQUFILENBQUssTUFBTTVDLENBQU47QUFBUTtBQUF6RCxPQUF5RDRDLElBQUUsQ0FBQyxDQUFIO0FBQUssV0FBSSxJQUFFM0MsQ0FBRixLQUFNNEIsRUFBRTVCLENBQUYsSUFBS2tFLEVBQUVlLEVBQUVjLEdBQUYsQ0FBTTdFLENBQU4sRUFBUSxHQUFSLENBQUYsQ0FBWCxHQUE0QlEsRUFBRTFCLENBQUYsSUFBS2tFLEVBQUVlLEVBQUVjLEdBQUYsQ0FBTTdFLENBQU4sRUFBUSxJQUFFLENBQVYsQ0FBRixDQUFqQyxFQUFpRGxCLEdBQXJELEVBQTBEa0I7QUFBSSxPQUFJZCxJQUFFLEVBQU47QUFBQSxNQUFTbUIsSUFBRUEsRUFBRXlFLE1BQUYsR0FBUzlGLEVBQUVHLE1BQUYsQ0FBUyxFQUFDc0UsVUFBUyxvQkFBVTtBQUFDLFdBQUtzQixLQUFMLEdBQVcsSUFBSWhDLEVBQUV0RCxJQUFOLENBQVdpQixFQUFFSyxLQUFGLENBQVEsQ0FBUixDQUFYLENBQVg7QUFBa0MsS0FBdkQsRUFBd0RxQyxpQkFBZ0IseUJBQVMzQyxDQUFULEVBQVdKLENBQVgsRUFBYTtBQUFDLFdBQUksSUFBSXhCLElBQUUsS0FBS2tHLEtBQUwsQ0FBVzdFLEtBQWpCLEVBQXVCNEIsSUFBRWpELEVBQUUsQ0FBRixDQUF6QixFQUE4QjRDLElBQUU1QyxFQUFFLENBQUYsQ0FBaEMsRUFBcUNDLElBQUVELEVBQUUsQ0FBRixDQUF2QyxFQUE0Q2tGLElBQUVsRixFQUFFLENBQUYsQ0FBOUMsRUFBbUR5RSxJQUFFekUsRUFBRSxDQUFGLENBQXJELEVBQTBERCxJQUFFQyxFQUFFLENBQUYsQ0FBNUQsRUFBaUVHLElBQUVILEVBQUUsQ0FBRixDQUFuRSxFQUF3RW1CLElBQUVuQixFQUFFLENBQUYsQ0FBMUUsRUFBK0VGLElBQUUsQ0FBckYsRUFBdUYsS0FBR0EsQ0FBMUYsRUFBNEZBLEdBQTVGLEVBQWdHO0FBQUMsWUFBRyxLQUFHQSxDQUFOLEVBQVFPLEVBQUVQLENBQUYsSUFDcmY4QixFQUFFSixJQUFFMUIsQ0FBSixJQUFPLENBRDhlLENBQVIsS0FDaGU7QUFBQyxjQUFJdUMsSUFBRWhDLEVBQUVQLElBQUUsRUFBSixDQUFOO0FBQUEsY0FBY1MsSUFBRUYsRUFBRVAsSUFBRSxDQUFKLENBQWhCLENBQXVCTyxFQUFFUCxDQUFGLElBQUssQ0FBQyxDQUFDdUMsS0FBRyxFQUFILEdBQU1BLE1BQUksQ0FBWCxLQUFlQSxLQUFHLEVBQUgsR0FBTUEsTUFBSSxFQUF6QixJQUE2QkEsTUFBSSxDQUFsQyxJQUFxQ2hDLEVBQUVQLElBQUUsQ0FBSixDQUFyQyxJQUE2QyxDQUFDUyxLQUFHLEVBQUgsR0FBTUEsTUFBSSxFQUFYLEtBQWdCQSxLQUFHLEVBQUgsR0FBTUEsTUFBSSxFQUExQixJQUE4QkEsTUFBSSxFQUEvRSxJQUFtRkYsRUFBRVAsSUFBRSxFQUFKLENBQXhGO0FBQWdHLGFBQUVxQixLQUFHLENBQUNzRCxLQUFHLEVBQUgsR0FBTUEsTUFBSSxDQUFYLEtBQWVBLEtBQUcsRUFBSCxHQUFNQSxNQUFJLEVBQXpCLEtBQThCQSxLQUFHLENBQUgsR0FBS0EsTUFBSSxFQUF2QyxDQUFILEtBQWdEQSxJQUFFMUUsQ0FBRixHQUFJLENBQUMwRSxDQUFELEdBQUd0RSxDQUF2RCxJQUEwRHdCLEVBQUU3QixDQUFGLENBQTFELEdBQStETyxFQUFFUCxDQUFGLENBQWpFLENBQXNFUyxJQUFFLENBQUMsQ0FBQzBDLEtBQUcsRUFBSCxHQUFNQSxNQUFJLENBQVgsS0FBZUEsS0FBRyxFQUFILEdBQU1BLE1BQUksRUFBekIsS0FBOEJBLEtBQUcsRUFBSCxHQUFNQSxNQUFJLEVBQXhDLENBQUQsS0FBK0NBLElBQUVMLENBQUYsR0FBSUssSUFBRWhELENBQU4sR0FBUTJDLElBQUUzQyxDQUF6RCxDQUFGLENBQThEa0IsSUFBRWhCLENBQUYsQ0FBSUEsSUFBRUosQ0FBRixDQUFJQSxJQUFFMEUsQ0FBRixDQUFJQSxJQUFFUyxJQUFFN0MsQ0FBRixHQUFJLENBQU4sQ0FBUTZDLElBQUVqRixDQUFGLENBQUlBLElBQUUyQyxDQUFGLENBQUlBLElBQUVLLENBQUYsQ0FBSUEsSUFBRVosSUFBRTlCLENBQUYsR0FBSSxDQUFOO0FBQVEsU0FBRSxDQUFGLElBQUtQLEVBQUUsQ0FBRixJQUFLaUQsQ0FBTCxHQUFPLENBQVosQ0FBY2pELEVBQUUsQ0FBRixJQUFLQSxFQUFFLENBQUYsSUFBSzRDLENBQUwsR0FBTyxDQUFaLENBQWM1QyxFQUFFLENBQUYsSUFBS0EsRUFBRSxDQUFGLElBQUtDLENBQUwsR0FBTyxDQUFaLENBQWNELEVBQUUsQ0FBRixJQUFLQSxFQUFFLENBQUYsSUFBS2tGLENBQUwsR0FBTyxDQUFaLENBQWNsRixFQUFFLENBQUYsSUFBS0EsRUFBRSxDQUFGLElBQUt5RSxDQUFMLEdBQU8sQ0FBWixDQUFjekUsRUFBRSxDQUFGLElBQUtBLEVBQUUsQ0FBRixJQUFLRCxDQUFMLEdBQU8sQ0FBWixDQUFjQyxFQUFFLENBQUYsSUFBS0EsRUFBRSxDQUFGLElBQUtHLENBQUwsR0FBTyxDQUFaLENBQWNILEVBQUUsQ0FBRixJQUFLQSxFQUFFLENBQUYsSUFBS21CLENBQUwsR0FBTyxDQUFaO0FBQWMsS0FEM0csRUFDNEc0RCxhQUFZLHVCQUFVO0FBQUMsVUFBSW5DLElBQUUsS0FBS2UsS0FBWDtBQUFBLFVBQWlCMUQsSUFBRTJDLEVBQUV2QixLQUFyQjtBQUFBLFVBQTJCckIsSUFBRSxJQUFFLEtBQUs0RCxXQUFwQztBQUFBLFVBQWdEWCxJQUFFLElBQUVMLEVBQUV0QixRQUF0RDtBQUN6YnJCLFFBQUVnRCxNQUFJLENBQU4sS0FBVSxPQUFLLEtBQUdBLElBQUUsRUFBcEIsQ0FBdUJoRCxFQUFFLENBQUNnRCxJQUFFLEVBQUYsS0FBTyxDQUFQLElBQVUsQ0FBWCxJQUFjLEVBQWhCLElBQW9CaUMsRUFBRWlCLEtBQUYsQ0FBUW5HLElBQUUsVUFBVixDQUFwQixDQUEwQ0MsRUFBRSxDQUFDZ0QsSUFBRSxFQUFGLEtBQU8sQ0FBUCxJQUFVLENBQVgsSUFBYyxFQUFoQixJQUFvQmpELENBQXBCLENBQXNCNEMsRUFBRXRCLFFBQUYsR0FBVyxJQUFFckIsRUFBRXNCLE1BQWYsQ0FBc0IsS0FBS3VDLFFBQUwsR0FBZ0IsT0FBTyxLQUFLb0MsS0FBWjtBQUFrQixLQUZ1SyxFQUV0S2hGLE9BQU0saUJBQVU7QUFBQyxVQUFJakIsSUFBRUUsRUFBRWUsS0FBRixDQUFRZSxJQUFSLENBQWEsSUFBYixDQUFOLENBQXlCaEMsRUFBRWlHLEtBQUYsR0FBUSxLQUFLQSxLQUFMLENBQVdoRixLQUFYLEVBQVIsQ0FBMkIsT0FBT2pCLENBQVA7QUFBUyxLQUZ3RixFQUFULENBQXBCLENBRXhERixFQUFFa0csTUFBRixHQUFTOUYsRUFBRTZFLGFBQUYsQ0FBZ0J4RCxDQUFoQixDQUFULENBQTRCekIsRUFBRXFHLFVBQUYsR0FBYWpHLEVBQUU4RSxpQkFBRixDQUFvQnpELENBQXBCLENBQWI7QUFBb0MsQ0FGalMsRUFFbVM2RCxJQUZuUzs7QUFJQTs7Ozs7O0FBTUEsQ0FBQyxZQUFVO0FBQUMsV0FBU3JGLENBQVQsR0FBWTtBQUFDLFdBQU80QyxFQUFFNUIsTUFBRixDQUFTRixLQUFULENBQWU4QixDQUFmLEVBQWlCN0IsU0FBakIsQ0FBUDtBQUFtQyxRQUFJLElBQUlWLElBQUVSLFFBQU4sRUFBZWtDLElBQUUxQixFQUFFSCxHQUFGLENBQU13RSxNQUF2QixFQUE4QjVFLElBQUVPLEVBQUVpRixHQUFsQyxFQUFzQzFDLElBQUU5QyxFQUFFeUYsSUFBMUMsRUFBK0NjLElBQUV2RyxFQUFFc0IsU0FBbkQsRUFBNkR0QixJQUFFTyxFQUFFK0UsSUFBakUsRUFBc0VrQixLQUFHLENBQUN0RyxFQUFFLFVBQUYsRUFBYSxVQUFiLENBQUQsRUFBMEJBLEVBQUUsVUFBRixFQUFhLFNBQWIsQ0FBMUIsRUFBa0RBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FBbEQsRUFBMkVBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FBM0UsRUFBb0dBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FBcEcsRUFBNEhBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FBNUgsRUFBcUpBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FBckosRUFBOEtBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FBOUssRUFBdU1BLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FBdk0sRUFBZ09BLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FBaE8sRUFBd1BBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FBeFAsRUFBZ1JBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FBaFIsRUFBeVNBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FBelMsRUFBa1VBLEVBQUUsVUFBRixFQUFhLFNBQWIsQ0FBbFUsRUFBMFZBLEVBQUUsVUFBRixFQUFhLFNBQWIsQ0FBMVYsRUFDeklBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEeUksRUFDaEhBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEZ0gsRUFDdkZBLEVBQUUsVUFBRixFQUFhLFNBQWIsQ0FEdUYsRUFDL0RBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FEK0QsRUFDdkNBLEVBQUUsU0FBRixFQUFZLFVBQVosQ0FEdUMsRUFDZkEsRUFBRSxTQUFGLEVBQVksVUFBWixDQURlLEVBQ1NBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FEVCxFQUNrQ0EsRUFBRSxVQUFGLEVBQWEsVUFBYixDQURsQyxFQUMyREEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUQzRCxFQUNvRkEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQURwRixFQUM2R0EsRUFBRSxVQUFGLEVBQWEsU0FBYixDQUQ3RyxFQUNxSUEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQURySSxFQUM4SkEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUQ5SixFQUN1TEEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUR2TCxFQUNnTkEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQURoTixFQUN5T0EsRUFBRSxTQUFGLEVBQVksVUFBWixDQUR6TyxFQUNpUUEsRUFBRSxTQUFGLEVBQVksU0FBWixDQURqUSxFQUN3UkEsRUFBRSxTQUFGLEVBQVksVUFBWixDQUR4UixFQUNnVEEsRUFBRSxTQUFGLEVBQVksVUFBWixDQURoVCxFQUN3VUEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUR4VSxFQUNpV0EsRUFBRSxVQUFGLEVBQzFlLFVBRDBlLENBRGpXLEVBRTdIQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBRjZILEVBRXBHQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBRm9HLEVBRTNFQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBRjJFLEVBRWxEQSxFQUFFLFVBQUYsRUFBYSxTQUFiLENBRmtELEVBRTFCQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBRjBCLEVBRURBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FGQyxFQUV3QkEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUZ4QixFQUVpREEsRUFBRSxVQUFGLEVBQWEsU0FBYixDQUZqRCxFQUV5RUEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUZ6RSxFQUVrR0EsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUZsRyxFQUUySEEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUYzSCxFQUVvSkEsRUFBRSxTQUFGLEVBQVksU0FBWixDQUZwSixFQUUyS0EsRUFBRSxTQUFGLEVBQVksVUFBWixDQUYzSyxFQUVtTUEsRUFBRSxTQUFGLEVBQVksVUFBWixDQUZuTSxFQUUyTkEsRUFBRSxTQUFGLEVBQVksVUFBWixDQUYzTixFQUVtUEEsRUFBRSxTQUFGLEVBQVksVUFBWixDQUZuUCxFQUUyUUEsRUFBRSxTQUFGLEVBQVksVUFBWixDQUYzUSxFQUVtU0EsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUZuUyxFQUU0VEEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUY1VCxFQUVxVkEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUZyVixFQUd6SUEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUh5SSxFQUdoSEEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUhnSCxFQUd2RkEsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUh1RixFQUc5REEsRUFBRSxVQUFGLEVBQWEsU0FBYixDQUg4RCxFQUd0Q0EsRUFBRSxVQUFGLEVBQWEsU0FBYixDQUhzQyxFQUdkQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBSGMsRUFHV0EsRUFBRSxVQUFGLEVBQWEsVUFBYixDQUhYLEVBR29DQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBSHBDLEVBRzZEQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBSDdELEVBR3NGQSxFQUFFLFVBQUYsRUFBYSxTQUFiLENBSHRGLEVBRzhHQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBSDlHLEVBR3VJQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBSHZJLEVBR2dLQSxFQUFFLFNBQUYsRUFBWSxVQUFaLENBSGhLLEVBR3dMQSxFQUFFLFNBQUYsRUFBWSxVQUFaLENBSHhMLEVBR2dOQSxFQUFFLFNBQUYsRUFBWSxVQUFaLENBSGhOLEVBR3dPQSxFQUFFLFNBQUYsRUFBWSxTQUFaLENBSHhPLEVBRytQQSxFQUFFLFNBQUYsRUFBWSxTQUFaLENBSC9QLEVBR3NSQSxFQUFFLFNBQUYsRUFBWSxVQUFaLENBSHRSLEVBRzhTQSxFQUFFLFVBQUYsRUFBYSxTQUFiLENBSDlTLEVBR3NVQSxFQUFFLFVBQUYsRUFBYSxVQUFiLENBSHRVLEVBRytWQSxFQUFFLFVBQUYsRUFDeGUsVUFEd2UsQ0FIL1YsRUFJN0hBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FKNkgsRUFJcEdBLEVBQUUsVUFBRixFQUFhLFNBQWIsQ0FKb0csRUFJNUVBLEVBQUUsVUFBRixFQUFhLFVBQWIsQ0FKNEUsQ0FBekUsRUFJdUJrRSxJQUFFLEVBSnpCLEVBSTRCSCxJQUFFLENBSmxDLEVBSW9DLEtBQUdBLENBSnZDLEVBSXlDQSxHQUp6QztBQUk2Q0csTUFBRUgsQ0FBRixJQUFLL0QsR0FBTDtBQUo3QyxHQUlzREYsSUFBRUEsRUFBRXlHLE1BQUYsR0FBU3hFLEVBQUV6QixNQUFGLENBQVMsRUFBQ3NFLFVBQVMsb0JBQVU7QUFBQyxXQUFLc0IsS0FBTCxHQUFXLElBQUlHLEVBQUV6RixJQUFOLENBQVcsQ0FBQyxJQUFJZ0MsRUFBRWhDLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCLENBQUQsRUFBbUMsSUFBSWdDLEVBQUVoQyxJQUFOLENBQVcsVUFBWCxFQUFzQixVQUF0QixDQUFuQyxFQUFxRSxJQUFJZ0MsRUFBRWhDLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCLENBQXJFLEVBQXVHLElBQUlnQyxFQUFFaEMsSUFBTixDQUFXLFVBQVgsRUFBc0IsVUFBdEIsQ0FBdkcsRUFBeUksSUFBSWdDLEVBQUVoQyxJQUFOLENBQVcsVUFBWCxFQUFzQixVQUF0QixDQUF6SSxFQUEySyxJQUFJZ0MsRUFBRWhDLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFNBQXRCLENBQTNLLEVBQTRNLElBQUlnQyxFQUFFaEMsSUFBTixDQUFXLFNBQVgsRUFBcUIsVUFBckIsQ0FBNU0sRUFBNk8sSUFBSWdDLEVBQUVoQyxJQUFOLENBQVcsVUFBWCxFQUFzQixTQUF0QixDQUE3TyxDQUFYLENBQVg7QUFBc1MsS0FBM1QsRUFBNFQyRCxpQkFBZ0IseUJBQVN2RSxDQUFULEVBQVc0QyxDQUFYLEVBQWE7QUFBQyxXQUFJLElBQUk2QixJQUFFLEtBQUt5QixLQUFMLENBQVc3RSxLQUFqQixFQUNwZW1GLElBQUUvQixFQUFFLENBQUYsQ0FEa2UsRUFDN2QzRSxJQUFFMkUsRUFBRSxDQUFGLENBRDJkLEVBQ3RkcEUsSUFBRW9FLEVBQUUsQ0FBRixDQURvZCxFQUMvYzFDLElBQUUwQyxFQUFFLENBQUYsQ0FENmMsRUFDeGNnQyxJQUFFaEMsRUFBRSxDQUFGLENBRHNjLEVBQ2pjaUMsSUFBRWpDLEVBQUUsQ0FBRixDQUQrYixFQUMxYmtDLElBQUVsQyxFQUFFLENBQUYsQ0FEd2IsRUFDbmJBLElBQUVBLEVBQUUsQ0FBRixDQURpYixFQUM1YVYsSUFBRXlDLEVBQUVoQixJQUR3YSxFQUNuYW9CLElBQUVKLEVBQUVmLEdBRCtaLEVBQzNab0IsSUFBRS9HLEVBQUUwRixJQUR1WixFQUNsWnNCLElBQUVoSCxFQUFFMkYsR0FEOFksRUFDMVlzQixJQUFFMUcsRUFBRW1GLElBRHNZLEVBQ2pZd0IsSUFBRTNHLEVBQUVvRixHQUQ2WCxFQUN6WHdCLElBQUVsRixFQUFFeUQsSUFEcVgsRUFDaFgwQixJQUFFbkYsRUFBRTBELEdBRDRXLEVBQ3hXMEIsSUFBRVYsRUFBRWpCLElBRG9XLEVBQy9WNEIsSUFBRVgsRUFBRWhCLEdBRDJWLEVBQ3ZWNEIsS0FBR1gsRUFBRWxCLElBRGtWLEVBQzdVOEIsSUFBRVosRUFBRWpCLEdBRHlVLEVBQ3JVOEIsS0FBR1osRUFBRW5CLElBRGdVLEVBQzNUZ0MsSUFBRWIsRUFBRWxCLEdBRHVULEVBQ25UZ0MsS0FBR2hELEVBQUVlLElBRDhTLEVBQ3pTa0MsSUFBRWpELEVBQUVnQixHQURxUyxFQUNqU1AsSUFBRW5CLENBRCtSLEVBQzdSaEUsSUFBRTZHLENBRDJSLEVBQ3pSZSxJQUFFZCxDQUR1UixFQUNyUjdDLElBQUU4QyxDQURtUixFQUNqUmMsSUFBRWIsQ0FEK1EsRUFDN1FjLElBQUViLENBRDJRLEVBQ3pRYyxJQUFFYixDQUR1USxFQUNyUWMsSUFBRWIsQ0FEbVEsRUFDalEvRixJQUFFZ0csQ0FEK1AsRUFDN1AzRixJQUFFNEYsQ0FEMlAsRUFDelBZLElBQUVYLEVBRHVQLEVBQ3BQWSxJQUFFWCxDQURrUCxFQUNoUFksSUFBRVgsRUFEOE8sRUFDM09ZLElBQUVYLENBRHlPLEVBQ3ZPWSxJQUFFWCxFQURxTyxFQUNsT1ksSUFBRVgsQ0FEZ08sRUFDOU5yRixJQUFFLENBRHdOLEVBQ3ROLEtBQUdBLENBRG1OLEVBQ2pOQSxHQURpTixFQUM3TTtBQUFDLFlBQUlSLElBQUVxQyxFQUFFN0IsQ0FBRixDQUFOLENBQVcsSUFBRyxLQUFHQSxDQUFOLEVBQVEsSUFBSWxDLElBQUUwQixFQUFFMkQsSUFBRixHQUFPeEYsRUFBRTRDLElBQUUsSUFBRVAsQ0FBTixJQUFTLENBQXRCO0FBQUEsWUFBd0JwQyxJQUFFNEIsRUFBRTRELEdBQUYsR0FBTXpGLEVBQUU0QyxJQUFFLElBQUVQLENBQUosR0FBTSxDQUFSLElBQVcsQ0FBM0MsQ0FBUixLQUF5RDtBQUFDLGNBQUlsQyxJQUFFK0QsRUFBRTdCLElBQUUsRUFBSixDQUFOO0FBQUEsY0FBY3BDLElBQUVFLEVBQUVxRixJQUFsQjtBQUFBLGNBQXVCakYsSUFBRUosRUFBRXNGLEdBQTNCO0FBQUEsY0FBK0J0RixJQUFFLENBQUNGLE1BQUksQ0FBSixHQUFNTSxLQUFHLEVBQVYsS0FBZU4sTUFBSSxDQUFKLEdBQU1NLEtBQUcsRUFBeEIsSUFBNEJOLE1BQUksQ0FBakU7QUFBQSxjQUFtRU0sSUFBRSxDQUFDQSxNQUFJLENBQUosR0FBTU4sS0FBRyxFQUFWLEtBQWVNLE1BQUksQ0FBSixHQUFNTixLQUFHLEVBQXhCLEtBQTZCTSxNQUFJLENBQUosR0FBTU4sS0FBRyxFQUF0QyxDQUFyRTtBQUFBLGNBQStHa0UsSUFBRUQsRUFBRTdCLElBQUUsQ0FBSixDQUFqSDtBQUFBLGNBQXdIcEMsSUFBRWtFLEVBQUVxQixJQUE1SDtBQUFBLGNBQWlJdkMsSUFBRWtCLEVBQUVzQixHQUFySTtBQUFBLGNBQXlJdEIsSUFBRSxDQUFDbEUsTUFBSSxFQUFKLEdBQU9nRCxLQUFHLEVBQVgsS0FBZ0JoRCxLQUNwZixDQURvZixHQUNsZmdELE1BQUksRUFEOGQsSUFDMWRoRCxNQUFJLENBRDJVO0FBQUEsY0FDelVnRCxJQUFFLENBQUNBLE1BQUksRUFBSixHQUFPaEQsS0FBRyxFQUFYLEtBQWdCZ0QsS0FBRyxDQUFILEdBQUtoRCxNQUFJLEVBQXpCLEtBQThCZ0QsTUFBSSxDQUFKLEdBQU1oRCxLQUFHLEVBQXZDLENBRHVVO0FBQUEsY0FDNVJBLElBQUVpRSxFQUFFN0IsSUFBRSxDQUFKLENBRDBSO0FBQUEsY0FDblJpRyxJQUFFckksRUFBRXVGLElBRCtRO0FBQUEsY0FDMVE3RCxJQUFFdUMsRUFBRTdCLElBQUUsRUFBSixDQUR3UTtBQUFBLGNBQ2hRVCxJQUFFRCxFQUFFNkQsSUFENFA7QUFBQSxjQUN2UDdELElBQUVBLEVBQUU4RCxHQURtUDtBQUFBLGNBQy9PeEYsSUFBRU0sSUFBRU4sRUFBRXdGLEdBRHlPO0FBQUEsY0FDck90RixJQUFFQSxJQUFFbUksQ0FBRixJQUFLckksTUFBSSxDQUFKLEdBQU1NLE1BQUksQ0FBVixHQUFZLENBQVosR0FBYyxDQUFuQixDQURtTztBQUFBLGNBQzdNTixJQUFFQSxJQUFFZ0QsQ0FEeU07QUFBQSxjQUN2TTlDLElBQUVBLElBQUVnRSxDQUFGLElBQUtsRSxNQUFJLENBQUosR0FBTWdELE1BQUksQ0FBVixHQUFZLENBQVosR0FBYyxDQUFuQixDQURxTTtBQUFBLGNBQy9LaEQsSUFBRUEsSUFBRTBCLENBRDJLO0FBQUEsY0FDekt4QixJQUFFQSxJQUFFeUIsQ0FBRixJQUFLM0IsTUFBSSxDQUFKLEdBQU0wQixNQUFJLENBQVYsR0FBWSxDQUFaLEdBQWMsQ0FBbkIsQ0FEdUssQ0FDakpFLEVBQUUyRCxJQUFGLEdBQU9yRixDQUFQLENBQVMwQixFQUFFNEQsR0FBRixHQUFNeEYsQ0FBTjtBQUFRLGFBQUlxSSxJQUFFbkgsSUFBRTZHLENBQUYsR0FBSSxDQUFDN0csQ0FBRCxHQUFHK0csQ0FBYjtBQUFBLFlBQWV2RyxJQUFFSCxJQUFFeUcsQ0FBRixHQUFJLENBQUN6RyxDQUFELEdBQUcyRyxDQUF4QjtBQUFBLFlBQTBCdEcsSUFBRXFELElBQUV5QyxDQUFGLEdBQUl6QyxJQUFFMEMsQ0FBTixHQUFRRCxJQUFFQyxDQUF0QztBQUFBLFlBQXdDdkIsSUFBRXRHLElBQUVpRSxDQUFGLEdBQUlqRSxJQUFFOEgsQ0FBTixHQUFRN0QsSUFBRTZELENBQXBEO0FBQUEsWUFBc0R0SCxJQUFFLENBQUMyRSxNQUFJLEVBQUosR0FBT25GLEtBQUcsQ0FBWCxLQUFlbUYsS0FBRyxFQUFILEdBQU1uRixNQUFJLENBQXpCLEtBQTZCbUYsS0FBRyxFQUFILEdBQU1uRixNQUFJLENBQXZDLENBQXhEO0FBQUEsWUFBa0dvRSxJQUFFLENBQUNwRSxNQUFJLEVBQUosR0FBT21GLEtBQUcsQ0FBWCxLQUFlbkYsS0FBRyxFQUFILEdBQU1tRixNQUFJLENBQXpCLEtBQTZCbkYsS0FBRyxFQUFILEdBQU1tRixNQUFJLENBQXZDLENBQXBHO0FBQUEsWUFBOElqQyxJQUFFcUQsR0FBR2pFLENBQUgsQ0FBaEo7QUFBQSxZQUFzSmtHLEtBQUd0RixFQUFFdUMsSUFBM0o7QUFBQSxZQUFnS2dELEtBQUd2RixFQUFFd0MsR0FBcks7QUFBQSxZQUF5S3hDLElBQUVvRixLQUFHLENBQUM3RyxNQUFJLEVBQUosR0FBT0wsS0FBRyxFQUFYLEtBQWdCSyxNQUFJLEVBQUosR0FBT0wsS0FBRyxFQUExQixLQUErQkssS0FBRyxFQUFILEdBQU1MLE1BQUksQ0FBekMsQ0FBSCxDQUEzSztBQUFBLFlBQTJOUyxJQUFFd0csS0FBRyxDQUFDakgsTUFBSSxFQUFKLEdBQU9LLEtBQUcsRUFBWCxLQUFnQkwsTUFBSSxFQUFKLEdBQU9LLEtBQUcsRUFBMUIsS0FBK0JMLEtBQUcsRUFBSCxHQUFNSyxNQUFJLENBQXpDLENBQUgsS0FBaUR5QixNQUFJLENBQUosR0FBTW9GLE1BQUksQ0FBVixHQUFZLENBQVosR0FDdmUsQ0FEc2IsQ0FBN047QUFBQSxZQUN0TnBGLElBQUVBLElBQUV0QixDQURrTjtBQUFBLFlBQ2hOQyxJQUFFQSxJQUFFMEcsQ0FBRixJQUFLckYsTUFBSSxDQUFKLEdBQU10QixNQUFJLENBQVYsR0FBWSxDQUFaLEdBQWMsQ0FBbkIsQ0FEOE07QUFBQSxZQUN4THNCLElBQUVBLElBQUV1RixFQURvTDtBQUFBLFlBQ2pMNUcsSUFBRUEsSUFBRTJHLEVBQUYsSUFBTXRGLE1BQUksQ0FBSixHQUFNdUYsT0FBSyxDQUFYLEdBQWEsQ0FBYixHQUFlLENBQXJCLENBRCtLO0FBQUEsWUFDdkp2RixJQUFFQSxJQUFFaEQsQ0FEbUo7QUFBQSxZQUNqSjJCLElBQUVBLElBQUV6QixDQUFGLElBQUs4QyxNQUFJLENBQUosR0FBTWhELE1BQUksQ0FBVixHQUFZLENBQVosR0FBYyxDQUFuQixDQUQrSTtBQUFBLFlBQ3pIQSxJQUFFa0UsSUFBRWtDLENBRHFIO0FBQUEsWUFDbkh4RSxJQUFFdEIsSUFBRXNCLENBQUYsSUFBSzVCLE1BQUksQ0FBSixHQUFNa0UsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLENBRGlIO0FBQUEsWUFDM0ZpRSxJQUFFRixDQUR5RjtBQUFBLFlBQ3ZGRyxJQUFFRixDQURxRjtBQUFBLFlBQ25GRCxJQUFFRixDQURpRjtBQUFBLFlBQy9FRyxJQUFFRixDQUQ2RTtBQUFBLFlBQzNFRCxJQUFFN0csQ0FEeUU7QUFBQSxZQUN2RThHLElBQUV6RyxDQURxRTtBQUFBLFlBQ25FQSxJQUFFdUcsSUFBRTlFLENBQUYsR0FBSSxDQUQ2RDtBQUFBLFlBQzNEOUIsSUFBRTJHLElBQUVsRyxDQUFGLElBQUtKLE1BQUksQ0FBSixHQUFNdUcsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLElBQXNCLENBRG1DO0FBQUEsWUFDakNELElBQUVGLENBRCtCO0FBQUEsWUFDN0JHLElBQUVGLENBRDJCO0FBQUEsWUFDekJELElBQUVELENBRHVCO0FBQUEsWUFDckJFLElBQUU3RCxDQURtQjtBQUFBLFlBQ2pCMkQsSUFBRXpDLENBRGU7QUFBQSxZQUNibEIsSUFBRWpFLENBRFc7QUFBQSxZQUNUQSxJQUFFa0QsSUFBRWhELENBQUYsR0FBSSxDQURHO0FBQUEsWUFDRGlGLElBQUV0RCxJQUFFQyxDQUFGLElBQUs5QixNQUFJLENBQUosR0FBTWtELE1BQUksQ0FBVixHQUFZLENBQVosR0FBYyxDQUFuQixJQUFzQixDQUR2QjtBQUN5QixXQUFFdUQsRUFBRWYsR0FBRixHQUFNbUIsSUFBRTdHLENBQVYsQ0FBWXlHLEVBQUVoQixJQUFGLEdBQU96QixJQUFFbUIsQ0FBRixJQUFLMEIsTUFBSSxDQUFKLEdBQU03RyxNQUFJLENBQVYsR0FBWSxDQUFaLEdBQWMsQ0FBbkIsQ0FBUCxDQUE2QitHLElBQUVoSCxFQUFFMkYsR0FBRixHQUFNcUIsSUFBRTlDLENBQVYsQ0FBWWxFLEVBQUUwRixJQUFGLEdBQU9xQixJQUFFYyxDQUFGLElBQUtiLE1BQUksQ0FBSixHQUFNOUMsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLENBQVAsQ0FBNkJnRCxJQUFFM0csRUFBRW9GLEdBQUYsR0FBTXVCLElBQUVhLENBQVYsQ0FBWXhILEVBQUVtRixJQUFGLEdBQU91QixJQUFFYSxDQUFGLElBQUtaLE1BQUksQ0FBSixHQUFNYSxNQUFJLENBQVYsR0FBWSxDQUFaLEdBQWMsQ0FBbkIsQ0FBUCxDQUE2QlgsSUFBRW5GLEVBQUUwRCxHQUFGLEdBQU15QixJQUFFYSxDQUFWLENBQVloRyxFQUFFeUQsSUFBRixHQUFPeUIsSUFBRWEsQ0FBRixJQUFLWixNQUFJLENBQUosR0FBTWEsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQW5CLENBQVAsQ0FBNkJYLElBQUVYLEVBQUVoQixHQUFGLEdBQU0yQixJQUFFNUYsQ0FBVixDQUFZaUYsRUFBRWpCLElBQUYsR0FBTzJCLElBQUVoRyxDQUFGLElBQUtpRyxNQUFJLENBQUosR0FBTTVGLE1BQUksQ0FBVixHQUFZLENBQVosR0FBYyxDQUFuQixDQUFQLENBQTZCOEYsSUFBRVosRUFBRWpCLEdBQUYsR0FBTTZCLElBQUVXLENBQVYsQ0FBWXZCLEVBQUVsQixJQUFGLEdBQU82QixLQUFHVyxDQUFILElBQU1WLE1BQUksQ0FBSixHQUFNVyxNQUFJLENBQVYsR0FBWSxDQUFaLEdBQWMsQ0FBcEIsQ0FBUCxDQUE4QlQsSUFBRWIsRUFBRWxCLEdBQUYsR0FBTStCLElBQUVXLENBQVY7QUFDemV4QixRQUFFbkIsSUFBRixHQUFPK0IsS0FBR1csQ0FBSCxJQUFNVixNQUFJLENBQUosR0FBTVcsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQXBCLENBQVAsQ0FBOEJULElBQUVqRCxFQUFFZ0IsR0FBRixHQUFNaUMsSUFBRVcsQ0FBVixDQUFZNUQsRUFBRWUsSUFBRixHQUFPaUMsS0FBR1csQ0FBSCxJQUFNVixNQUFJLENBQUosR0FBTVcsTUFBSSxDQUFWLEdBQVksQ0FBWixHQUFjLENBQXBCLENBQVA7QUFBOEIsS0FKOEQsRUFJN0R0RCxhQUFZLHVCQUFVO0FBQUMsVUFBSS9FLElBQUUsS0FBSzJELEtBQVg7QUFBQSxVQUFpQmYsSUFBRTVDLEVBQUVxQixLQUFyQjtBQUFBLFVBQTJCb0QsSUFBRSxJQUFFLEtBQUtiLFdBQXBDO0FBQUEsVUFBZ0Q5RCxJQUFFLElBQUVFLEVBQUVzQixRQUF0RCxDQUErRHNCLEVBQUU5QyxNQUFJLENBQU4sS0FBVSxPQUFLLEtBQUdBLElBQUUsRUFBcEIsQ0FBdUI4QyxFQUFFLENBQUM5QyxJQUFFLEdBQUYsS0FBUSxFQUFSLElBQVksQ0FBYixJQUFnQixFQUFsQixJQUFzQnVGLEtBQUtjLEtBQUwsQ0FBVzFCLElBQUUsVUFBYixDQUF0QixDQUErQzdCLEVBQUUsQ0FBQzlDLElBQUUsR0FBRixLQUFRLEVBQVIsSUFBWSxDQUFiLElBQWdCLEVBQWxCLElBQXNCMkUsQ0FBdEIsQ0FBd0J6RSxFQUFFc0IsUUFBRixHQUFXLElBQUVzQixFQUFFckIsTUFBZixDQUFzQixLQUFLdUMsUUFBTCxHQUFnQixPQUFPLEtBQUtvQyxLQUFMLENBQVdSLEtBQVgsRUFBUDtBQUEwQixLQUp2TCxFQUl3THhFLE9BQU0saUJBQVU7QUFBQyxVQUFJbEIsSUFBRStCLEVBQUViLEtBQUYsQ0FBUWUsSUFBUixDQUFhLElBQWIsQ0FBTixDQUF5QmpDLEVBQUVrRyxLQUFGLEdBQVEsS0FBS0EsS0FBTCxDQUFXaEYsS0FBWCxFQUFSLENBQTJCLE9BQU9sQixDQUFQO0FBQVMsS0FKdFEsRUFJdVFpRSxXQUFVLEVBSmpSLEVBQVQsQ0FBWCxDQUkwUzVELEVBQUVrRyxNQUFGLEdBQVN4RSxFQUFFaUQsYUFBRixDQUFnQmxGLENBQWhCLENBQVQsQ0FBNEJPLEVBQUVvSSxVQUFGLEdBQWExRyxFQUFFa0QsaUJBQUYsQ0FBb0JuRixDQUFwQixDQUFiO0FBQW9DLENBUjVkOztBQVVBOzs7Ozs7QUFNQSxDQUFDLFlBQVU7QUFBQyxNQUFJbUQsSUFBRXBELFFBQU47QUFBQSxNQUFlRyxJQUFFaUQsRUFBRXFDLEdBQW5CO0FBQUEsTUFBdUJyRixJQUFFRCxFQUFFdUYsSUFBM0I7QUFBQSxNQUFnQ3pGLElBQUVFLEVBQUVvQixTQUFwQztBQUFBLE1BQThDcEIsSUFBRWlELEVBQUVtQyxJQUFsRDtBQUFBLE1BQXVEeEMsSUFBRTVDLEVBQUV1RyxNQUEzRDtBQUFBLE1BQWtFdkcsSUFBRUEsRUFBRTBJLE1BQUYsR0FBUzlGLEVBQUV0QyxNQUFGLENBQVMsRUFBQ3NFLFVBQVMsb0JBQVU7QUFBQyxXQUFLc0IsS0FBTCxHQUFXLElBQUlwRyxFQUFFYyxJQUFOLENBQVcsQ0FBQyxJQUFJWCxFQUFFVyxJQUFOLENBQVcsVUFBWCxFQUFzQixVQUF0QixDQUFELEVBQW1DLElBQUlYLEVBQUVXLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFNBQXRCLENBQW5DLEVBQW9FLElBQUlYLEVBQUVXLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFNBQXRCLENBQXBFLEVBQXFHLElBQUlYLEVBQUVXLElBQU4sQ0FBVyxTQUFYLEVBQXFCLFVBQXJCLENBQXJHLEVBQXNJLElBQUlYLEVBQUVXLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCLENBQXRJLEVBQXdLLElBQUlYLEVBQUVXLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCLENBQXhLLEVBQTBNLElBQUlYLEVBQUVXLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCLENBQTFNLEVBQTRPLElBQUlYLEVBQUVXLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCLENBQTVPLENBQVgsQ0FBWDtBQUFzUyxLQUEzVCxFQUE0VG1FLGFBQVksdUJBQVU7QUFBQyxVQUFJL0UsSUFBRTRDLEVBQUVtQyxXQUFGLENBQWM5QyxJQUFkLENBQW1CLElBQW5CLENBQU4sQ0FBK0JqQyxFQUFFc0IsUUFBRixJQUFZLEVBQVosQ0FBZSxPQUFPdEIsQ0FBUDtBQUFTLEtBQTFZLEVBQVQsQ0FBN0UsQ0FBbWVpRCxFQUFFeUYsTUFBRixHQUMvZTlGLEVBQUVvQyxhQUFGLENBQWdCaEYsQ0FBaEIsQ0FEK2UsQ0FDNWRpRCxFQUFFMEYsVUFBRixHQUFhL0YsRUFBRXFDLGlCQUFGLENBQW9CakYsQ0FBcEIsQ0FBYjtBQUFvQyxDQUR2RDs7QUFHQTs7QUFFQSxJQUFJNEksU0FBTyxrRUFBWCxDQUE4RSxJQUFJQyxTQUFPLEdBQVgsQ0FBZSxTQUFTQyxPQUFULENBQWlCbEcsQ0FBakIsRUFBbUI7QUFBQyxNQUFJM0MsQ0FBSixDQUFNLElBQUlILENBQUosQ0FBTSxJQUFJRSxJQUFFLEVBQU4sQ0FBUyxLQUFJQyxJQUFFLENBQU4sRUFBUUEsSUFBRSxDQUFGLElBQUsyQyxFQUFFckIsTUFBZixFQUFzQnRCLEtBQUcsQ0FBekIsRUFBMkI7QUFBQ0gsUUFBRTRDLFNBQVNFLEVBQUVtRyxTQUFGLENBQVk5SSxDQUFaLEVBQWNBLElBQUUsQ0FBaEIsQ0FBVCxFQUE0QixFQUE1QixDQUFGLENBQWtDRCxLQUFHNEksT0FBTy9DLE1BQVAsQ0FBYy9GLEtBQUcsQ0FBakIsSUFBb0I4SSxPQUFPL0MsTUFBUCxDQUFjL0YsSUFBRSxFQUFoQixDQUF2QjtBQUEyQyxPQUFHRyxJQUFFLENBQUYsSUFBSzJDLEVBQUVyQixNQUFWLEVBQWlCO0FBQUN6QixRQUFFNEMsU0FBU0UsRUFBRW1HLFNBQUYsQ0FBWTlJLENBQVosRUFBY0EsSUFBRSxDQUFoQixDQUFULEVBQTRCLEVBQTVCLENBQUYsQ0FBa0NELEtBQUc0SSxPQUFPL0MsTUFBUCxDQUFjL0YsS0FBRyxDQUFqQixDQUFIO0FBQXVCLEdBQTNFLE1BQStFO0FBQUMsUUFBR0csSUFBRSxDQUFGLElBQUsyQyxFQUFFckIsTUFBVixFQUFpQjtBQUFDekIsVUFBRTRDLFNBQVNFLEVBQUVtRyxTQUFGLENBQVk5SSxDQUFaLEVBQWNBLElBQUUsQ0FBaEIsQ0FBVCxFQUE0QixFQUE1QixDQUFGLENBQWtDRCxLQUFHNEksT0FBTy9DLE1BQVAsQ0FBYy9GLEtBQUcsQ0FBakIsSUFBb0I4SSxPQUFPL0MsTUFBUCxDQUFjLENBQUMvRixJQUFFLENBQUgsS0FBTyxDQUFyQixDQUF2QjtBQUErQztBQUFDLE9BQUcrSSxNQUFILEVBQVU7QUFBQyxXQUFNLENBQUM3SSxFQUFFdUIsTUFBRixHQUFTLENBQVYsSUFBYSxDQUFuQixFQUFxQjtBQUFDdkIsV0FBRzZJLE1BQUg7QUFBVTtBQUFDLFVBQU83SSxDQUFQO0FBQVMsVUFBU2dKLFFBQVQsQ0FBa0J2RSxDQUFsQixFQUFvQjtBQUFDLE1BQUk3QixJQUFFLEVBQU4sQ0FBUyxJQUFJOUMsQ0FBSixDQUFNLElBQUlHLElBQUUsQ0FBTixDQUFRLElBQUlnRCxDQUFKLENBQU0sSUFBSWpELENBQUosQ0FBTSxLQUFJRixJQUFFLENBQU4sRUFBUUEsSUFBRTJFLEVBQUVsRCxNQUFaLEVBQW1CLEVBQUV6QixDQUFyQixFQUF1QjtBQUFDLFFBQUcyRSxFQUFFb0IsTUFBRixDQUFTL0YsQ0FBVCxLQUFhK0ksTUFBaEIsRUFBdUI7QUFBQztBQUFNLFNBQUVELE9BQU85QyxPQUFQLENBQWVyQixFQUFFb0IsTUFBRixDQUFTL0YsQ0FBVCxDQUFmLENBQUYsQ0FBOEIsSUFBR0UsSUFBRSxDQUFMLEVBQU87QUFBQztBQUFTLFNBQUdDLEtBQUcsQ0FBTixFQUFRO0FBQUMyQyxXQUFHcUcsU0FBU2pKLEtBQUcsQ0FBWixDQUFILENBQWtCaUQsSUFBRWpELElBQUUsQ0FBSixDQUFNQyxJQUFFLENBQUY7QUFBSSxLQUFyQyxNQUF5QztBQUFDLFVBQUdBLEtBQUcsQ0FBTixFQUFRO0FBQUMyQyxhQUFHcUcsU0FBVWhHLEtBQUcsQ0FBSixHQUFRakQsS0FBRyxDQUFwQixDQUFILENBQTJCaUQsSUFBRWpELElBQUUsRUFBSixDQUFPQyxJQUFFLENBQUY7QUFBSSxPQUEvQyxNQUFtRDtBQUFDLFlBQUdBLEtBQUcsQ0FBTixFQUFRO0FBQUMyQyxlQUFHcUcsU0FBU2hHLENBQVQsQ0FBSCxDQUFlTCxLQUFHcUcsU0FBU2pKLEtBQUcsQ0FBWixDQUFILENBQWtCaUQsSUFBRWpELElBQUUsQ0FBSixDQUFNQyxJQUFFLENBQUY7QUFBSSxTQUFwRCxNQUF3RDtBQUFDMkMsZUFBR3FHLFNBQVVoRyxLQUFHLENBQUosR0FBUWpELEtBQUcsQ0FBcEIsQ0FBSCxDQUEyQjRDLEtBQUdxRyxTQUFTakosSUFBRSxFQUFYLENBQUgsQ0FBa0JDLElBQUUsQ0FBRjtBQUFJO0FBQUM7QUFBQztBQUFDLE9BQUdBLEtBQUcsQ0FBTixFQUFRO0FBQUMyQyxTQUFHcUcsU0FBU2hHLEtBQUcsQ0FBWixDQUFIO0FBQWtCLFVBQU9MLENBQVA7QUFBUyxVQUFTc0csT0FBVCxDQUFpQnBKLENBQWpCLEVBQW1CO0FBQUMsTUFBSThDLElBQUVvRyxTQUFTbEosQ0FBVCxDQUFOLENBQWtCLElBQUltRCxDQUFKLENBQU0sSUFBSWhELElBQUUsSUFBSWtKLEtBQUosRUFBTixDQUFrQixLQUFJbEcsSUFBRSxDQUFOLEVBQVEsSUFBRUEsQ0FBRixHQUFJTCxFQUFFckIsTUFBZCxFQUFxQixFQUFFMEIsQ0FBdkIsRUFBeUI7QUFBQ2hELE1BQUVnRCxDQUFGLElBQUtQLFNBQVNFLEVBQUVtRyxTQUFGLENBQVksSUFBRTlGLENBQWQsRUFBZ0IsSUFBRUEsQ0FBRixHQUFJLENBQXBCLENBQVQsRUFBZ0MsRUFBaEMsQ0FBTDtBQUF5QyxVQUFPaEQsQ0FBUDtBQUFTO0FBQzkrQjs7QUFFQSxJQUFJbUosS0FBSixDQUFVLElBQUlDLFNBQU8sZUFBWCxDQUEyQixJQUFJQyxPQUFNLENBQUNELFNBQU8sUUFBUixLQUFtQixRQUE3QixDQUF1QyxTQUFTRSxVQUFULENBQW9CekosQ0FBcEIsRUFBc0I4QyxDQUF0QixFQUF3QjZCLENBQXhCLEVBQTBCO0FBQUMsTUFBRzNFLEtBQUcsSUFBTixFQUFXO0FBQUMsUUFBRyxZQUFVLE9BQU9BLENBQXBCLEVBQXNCO0FBQUMsV0FBSzBKLFVBQUwsQ0FBZ0IxSixDQUFoQixFQUFrQjhDLENBQWxCLEVBQW9CNkIsQ0FBcEI7QUFBdUIsS0FBOUMsTUFBa0Q7QUFBQyxVQUFHN0IsS0FBRyxJQUFILElBQVMsWUFBVSxPQUFPOUMsQ0FBN0IsRUFBK0I7QUFBQyxhQUFLMkosVUFBTCxDQUFnQjNKLENBQWhCLEVBQWtCLEdBQWxCO0FBQXVCLE9BQXZELE1BQTJEO0FBQUMsYUFBSzJKLFVBQUwsQ0FBZ0IzSixDQUFoQixFQUFrQjhDLENBQWxCO0FBQXFCO0FBQUM7QUFBQztBQUFDLFVBQVM4RyxHQUFULEdBQWM7QUFBQyxTQUFPLElBQUlILFVBQUosQ0FBZSxJQUFmLENBQVA7QUFBNEIsVUFBU0ksR0FBVCxDQUFhbEYsQ0FBYixFQUFlekUsQ0FBZixFQUFpQkMsQ0FBakIsRUFBbUJILENBQW5CLEVBQXFCMEIsQ0FBckIsRUFBdUJ6QixDQUF2QixFQUF5QjtBQUFDLFNBQU0sRUFBRUEsQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDLFFBQUk2QyxJQUFFNUMsSUFBRSxLQUFLeUUsR0FBTCxDQUFGLEdBQVl4RSxFQUFFSCxDQUFGLENBQVosR0FBaUIwQixDQUF2QixDQUF5QkEsSUFBRTZELEtBQUtjLEtBQUwsQ0FBV3ZELElBQUUsUUFBYixDQUFGLENBQXlCM0MsRUFBRUgsR0FBRixJQUFPOEMsSUFBRSxRQUFUO0FBQWtCLFVBQU9wQixDQUFQO0FBQVMsVUFBU29JLEdBQVQsQ0FBYW5GLENBQWIsRUFBZTdDLENBQWYsRUFBaUJHLENBQWpCLEVBQW1CakMsQ0FBbkIsRUFBcUJXLENBQXJCLEVBQXVCVCxDQUF2QixFQUF5QjtBQUFDLE1BQUlrRixJQUFFdEQsSUFBRSxLQUFSO0FBQUEsTUFBY3JCLElBQUVxQixLQUFHLEVBQW5CLENBQXNCLE9BQU0sRUFBRTVCLENBQUYsSUFBSyxDQUFYLEVBQWE7QUFBQyxRQUFJNEMsSUFBRSxLQUFLNkIsQ0FBTCxJQUFRLEtBQWQsQ0FBb0IsSUFBSTFFLElBQUUsS0FBSzBFLEdBQUwsS0FBVyxFQUFqQixDQUFvQixJQUFJeEUsSUFBRU0sSUFBRXFDLENBQUYsR0FBSTdDLElBQUVtRixDQUFaLENBQWN0QyxJQUFFc0MsSUFBRXRDLENBQUYsSUFBSyxDQUFDM0MsSUFBRSxLQUFILEtBQVcsRUFBaEIsSUFBb0I4QixFQUFFakMsQ0FBRixDQUFwQixJQUEwQlcsSUFBRSxVQUE1QixDQUFGLENBQTBDQSxJQUFFLENBQUNtQyxNQUFJLEVBQUwsS0FBVTNDLE1BQUksRUFBZCxJQUFrQk0sSUFBRVIsQ0FBcEIsSUFBdUJVLE1BQUksRUFBM0IsQ0FBRixDQUFpQ3NCLEVBQUVqQyxHQUFGLElBQU84QyxJQUFFLFVBQVQ7QUFBb0IsVUFBT25DLENBQVA7QUFBUyxVQUFTb0osR0FBVCxDQUFhcEYsQ0FBYixFQUFlN0MsQ0FBZixFQUFpQkcsQ0FBakIsRUFBbUJqQyxDQUFuQixFQUFxQlcsQ0FBckIsRUFBdUJULENBQXZCLEVBQXlCO0FBQUMsTUFBSWtGLElBQUV0RCxJQUFFLEtBQVI7QUFBQSxNQUFjckIsSUFBRXFCLEtBQUcsRUFBbkIsQ0FBc0IsT0FBTSxFQUFFNUIsQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDLFFBQUk0QyxJQUFFLEtBQUs2QixDQUFMLElBQVEsS0FBZCxDQUFvQixJQUFJMUUsSUFBRSxLQUFLMEUsR0FBTCxLQUFXLEVBQWpCLENBQW9CLElBQUl4RSxJQUFFTSxJQUFFcUMsQ0FBRixHQUFJN0MsSUFBRW1GLENBQVosQ0FBY3RDLElBQUVzQyxJQUFFdEMsQ0FBRixJQUFLLENBQUMzQyxJQUFFLEtBQUgsS0FBVyxFQUFoQixJQUFvQjhCLEVBQUVqQyxDQUFGLENBQXBCLEdBQXlCVyxDQUEzQixDQUE2QkEsSUFBRSxDQUFDbUMsS0FBRyxFQUFKLEtBQVMzQyxLQUFHLEVBQVosSUFBZ0JNLElBQUVSLENBQXBCLENBQXNCZ0MsRUFBRWpDLEdBQUYsSUFBTzhDLElBQUUsU0FBVDtBQUFtQixVQUFPbkMsQ0FBUDtBQUFTLEtBQUc2SSxRQUFPNUosVUFBVW9LLE9BQVYsSUFBbUIsNkJBQTdCLEVBQTREO0FBQUNQLGFBQVcvSSxTQUFYLENBQXFCdUosRUFBckIsR0FBd0JILEdBQXhCLENBQTRCUixRQUFNLEVBQU47QUFBUyxDQUFsRyxNQUFzRztBQUFDLE1BQUdFLFFBQU81SixVQUFVb0ssT0FBVixJQUFtQixVQUE3QixFQUF5QztBQUFDUCxlQUFXL0ksU0FBWCxDQUFxQnVKLEVBQXJCLEdBQXdCSixHQUF4QixDQUE0QlAsUUFBTSxFQUFOO0FBQVMsR0FBL0UsTUFBbUY7QUFBQ0csZUFBVy9JLFNBQVgsQ0FBcUJ1SixFQUFyQixHQUF3QkYsR0FBeEIsQ0FBNEJULFFBQU0sRUFBTjtBQUFTO0FBQUMsWUFBVzVJLFNBQVgsQ0FBcUJ3SixFQUFyQixHQUF3QlosS0FBeEIsQ0FBOEJHLFdBQVcvSSxTQUFYLENBQXFCeUosRUFBckIsR0FBeUIsQ0FBQyxLQUFHYixLQUFKLElBQVcsQ0FBcEMsQ0FBdUNHLFdBQVcvSSxTQUFYLENBQXFCMEosRUFBckIsR0FBeUIsS0FBR2QsS0FBNUIsQ0FBbUMsSUFBSWUsUUFBTSxFQUFWLENBQWFaLFdBQVcvSSxTQUFYLENBQXFCNEosRUFBckIsR0FBd0IvRSxLQUFLVyxHQUFMLENBQVMsQ0FBVCxFQUFXbUUsS0FBWCxDQUF4QixDQUEwQ1osV0FBVy9JLFNBQVgsQ0FBcUI2SixFQUFyQixHQUF3QkYsUUFBTWYsS0FBOUIsQ0FBb0NHLFdBQVcvSSxTQUFYLENBQXFCOEosRUFBckIsR0FBd0IsSUFBRWxCLEtBQUYsR0FBUWUsS0FBaEMsQ0FBc0MsSUFBSUksUUFBTSxzQ0FBVixDQUFpRCxJQUFJQyxRQUFNLElBQUlyQixLQUFKLEVBQVYsQ0FBc0IsSUFBSXNCLEVBQUosRUFBT0MsRUFBUCxDQUFVRCxLQUFHLElBQUl6SCxVQUFKLENBQWUsQ0FBZixDQUFILENBQXFCLEtBQUkwSCxLQUFHLENBQVAsRUFBU0EsTUFBSSxDQUFiLEVBQWUsRUFBRUEsRUFBakIsRUFBb0I7QUFBQ0YsUUFBTUMsSUFBTixJQUFZQyxFQUFaO0FBQWUsTUFBRyxJQUFJMUgsVUFBSixDQUFlLENBQWYsQ0FBSCxDQUFxQixLQUFJMEgsS0FBRyxFQUFQLEVBQVVBLEtBQUcsRUFBYixFQUFnQixFQUFFQSxFQUFsQixFQUFxQjtBQUFDRixRQUFNQyxJQUFOLElBQVlDLEVBQVo7QUFBZSxNQUFHLElBQUkxSCxVQUFKLENBQWUsQ0FBZixDQUFILENBQXFCLEtBQUkwSCxLQUFHLEVBQVAsRUFBVUEsS0FBRyxFQUFiLEVBQWdCLEVBQUVBLEVBQWxCLEVBQXFCO0FBQUNGLFFBQU1DLElBQU4sSUFBWUMsRUFBWjtBQUFlLFVBQVN6QixRQUFULENBQWtCakosQ0FBbEIsRUFBb0I7QUFBQyxTQUFPdUssTUFBTTFFLE1BQU4sQ0FBYTdGLENBQWIsQ0FBUDtBQUF1QixVQUFTMkssS0FBVCxDQUFlMUssQ0FBZixFQUFpQkQsQ0FBakIsRUFBbUI7QUFBQyxNQUFJNEMsSUFBRTRILE1BQU12SyxFQUFFK0MsVUFBRixDQUFhaEQsQ0FBYixDQUFOLENBQU4sQ0FBNkIsT0FBTzRDLEtBQUcsSUFBSixHQUFVLENBQUMsQ0FBWCxHQUFhQSxDQUFuQjtBQUFxQixVQUFTZ0ksU0FBVCxDQUFtQjNLLENBQW5CLEVBQXFCO0FBQUMsT0FBSSxJQUFJRCxJQUFFLEtBQUsyQixDQUFMLEdBQU8sQ0FBakIsRUFBbUIzQixLQUFHLENBQXRCLEVBQXdCLEVBQUVBLENBQTFCLEVBQTRCO0FBQUNDLE1BQUVELENBQUYsSUFBSyxLQUFLQSxDQUFMLENBQUw7QUFBYSxLQUFFMkIsQ0FBRixHQUFJLEtBQUtBLENBQVQsQ0FBVzFCLEVBQUU0QixDQUFGLEdBQUksS0FBS0EsQ0FBVDtBQUFXLFVBQVNnSixVQUFULENBQW9CN0ssQ0FBcEIsRUFBc0I7QUFBQyxPQUFLMkIsQ0FBTCxHQUFPLENBQVAsQ0FBUyxLQUFLRSxDQUFMLEdBQVE3QixJQUFFLENBQUgsR0FBTSxDQUFDLENBQVAsR0FBUyxDQUFoQixDQUFrQixJQUFHQSxJQUFFLENBQUwsRUFBTztBQUFDLFNBQUssQ0FBTCxJQUFRQSxDQUFSO0FBQVUsR0FBbEIsTUFBc0I7QUFBQyxRQUFHQSxJQUFFLENBQUMsQ0FBTixFQUFRO0FBQUMsV0FBSyxDQUFMLElBQVFBLElBQUUsS0FBS2tLLEVBQWY7QUFBa0IsS0FBM0IsTUFBK0I7QUFBQyxXQUFLdkksQ0FBTCxHQUFPLENBQVA7QUFBUztBQUFDO0FBQUMsVUFBU21KLEdBQVQsQ0FBYTlLLENBQWIsRUFBZTtBQUFDLE1BQUlDLElBQUV5SixLQUFOLENBQVl6SixFQUFFOEssT0FBRixDQUFVL0ssQ0FBVixFQUFhLE9BQU9DLENBQVA7QUFBUyxVQUFTK0ssYUFBVCxDQUF1QnhKLENBQXZCLEVBQXlCeUIsQ0FBekIsRUFBMkI7QUFBQyxNQUFJbkQsQ0FBSixDQUFNLElBQUdtRCxLQUFHLEVBQU4sRUFBUztBQUFDbkQsUUFBRSxDQUFGO0FBQUksR0FBZCxNQUFrQjtBQUFDLFFBQUdtRCxLQUFHLENBQU4sRUFBUTtBQUFDbkQsVUFBRSxDQUFGO0FBQUksS0FBYixNQUFpQjtBQUFDLFVBQUdtRCxLQUFHLEdBQU4sRUFBVTtBQUFDbkQsWUFBRSxDQUFGO0FBQUksT0FBZixNQUFtQjtBQUFDLFlBQUdtRCxLQUFHLENBQU4sRUFBUTtBQUFDbkQsY0FBRSxDQUFGO0FBQUksU0FBYixNQUFpQjtBQUFDLGNBQUdtRCxLQUFHLEVBQU4sRUFBUztBQUFDbkQsZ0JBQUUsQ0FBRjtBQUFJLFdBQWQsTUFBa0I7QUFBQyxnQkFBR21ELEtBQUcsQ0FBTixFQUFRO0FBQUNuRCxrQkFBRSxDQUFGO0FBQUksYUFBYixNQUFpQjtBQUFDLG1CQUFLbUwsU0FBTCxDQUFlekosQ0FBZixFQUFpQnlCLENBQWpCLEVBQW9CO0FBQU87QUFBQztBQUFDO0FBQUM7QUFBQztBQUFDLFFBQUt0QixDQUFMLEdBQU8sQ0FBUCxDQUFTLEtBQUtFLENBQUwsR0FBTyxDQUFQLENBQVMsSUFBSTlCLElBQUV5QixFQUFFRCxNQUFSO0FBQUEsTUFBZXFCLElBQUUsS0FBakI7QUFBQSxNQUF1QjZCLElBQUUsQ0FBekIsQ0FBMkIsT0FBTSxFQUFFMUUsQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDLFFBQUlDLElBQUdGLEtBQUcsQ0FBSixHQUFPMEIsRUFBRXpCLENBQUYsSUFBSyxHQUFaLEdBQWdCNEssTUFBTW5KLENBQU4sRUFBUXpCLENBQVIsQ0FBdEIsQ0FBaUMsSUFBR0MsSUFBRSxDQUFMLEVBQU87QUFBQyxVQUFHd0IsRUFBRXFFLE1BQUYsQ0FBUzlGLENBQVQsS0FBYSxHQUFoQixFQUFvQjtBQUFDNkMsWUFBRSxJQUFGO0FBQU87QUFBUyxTQUFFLEtBQUYsQ0FBUSxJQUFHNkIsS0FBRyxDQUFOLEVBQVE7QUFBQyxXQUFLLEtBQUs5QyxDQUFMLEVBQUwsSUFBZTNCLENBQWY7QUFBaUIsS0FBMUIsTUFBOEI7QUFBQyxVQUFHeUUsSUFBRTNFLENBQUYsR0FBSSxLQUFLa0ssRUFBWixFQUFlO0FBQUMsYUFBSyxLQUFLckksQ0FBTCxHQUFPLENBQVosS0FBZ0IsQ0FBQzNCLElBQUcsQ0FBQyxLQUFJLEtBQUtnSyxFQUFMLEdBQVF2RixDQUFiLElBQWlCLENBQXJCLEtBQTBCQSxDQUExQyxDQUE0QyxLQUFLLEtBQUs5QyxDQUFMLEVBQUwsSUFBZ0IzQixLQUFJLEtBQUtnSyxFQUFMLEdBQVF2RixDQUE1QjtBQUFnQyxPQUE1RixNQUFnRztBQUFDLGFBQUssS0FBSzlDLENBQUwsR0FBTyxDQUFaLEtBQWdCM0IsS0FBR3lFLENBQW5CO0FBQXFCO0FBQUMsVUFBRzNFLENBQUgsQ0FBSyxJQUFHMkUsS0FBRyxLQUFLdUYsRUFBWCxFQUFjO0FBQUN2RixXQUFHLEtBQUt1RixFQUFSO0FBQVc7QUFBQyxPQUFHbEssS0FBRyxDQUFILElBQU0sQ0FBQzBCLEVBQUUsQ0FBRixJQUFLLEdBQU4sS0FBWSxDQUFyQixFQUF1QjtBQUFDLFNBQUtLLENBQUwsR0FBTyxDQUFDLENBQVIsQ0FBVSxJQUFHNEMsSUFBRSxDQUFMLEVBQU87QUFBQyxXQUFLLEtBQUs5QyxDQUFMLEdBQU8sQ0FBWixLQUFpQixDQUFDLEtBQUksS0FBS3FJLEVBQUwsR0FBUXZGLENBQWIsSUFBaUIsQ0FBbEIsSUFBc0JBLENBQXRDO0FBQXdDO0FBQUMsUUFBSzNDLEtBQUwsR0FBYSxJQUFHYyxDQUFILEVBQUs7QUFBQzJHLGVBQVcyQixJQUFYLENBQWdCQyxLQUFoQixDQUFzQixJQUF0QixFQUEyQixJQUEzQjtBQUFpQztBQUFDLFVBQVNDLFFBQVQsR0FBbUI7QUFBQyxNQUFJcEwsSUFBRSxLQUFLNkIsQ0FBTCxHQUFPLEtBQUtvSSxFQUFsQixDQUFxQixPQUFNLEtBQUt0SSxDQUFMLEdBQU8sQ0FBUCxJQUFVLEtBQUssS0FBS0EsQ0FBTCxHQUFPLENBQVosS0FBZ0IzQixDQUFoQyxFQUFrQztBQUFDLE1BQUUsS0FBSzJCLENBQVA7QUFBUztBQUFDLFVBQVMwSixVQUFULENBQW9CcEksQ0FBcEIsRUFBc0I7QUFBQyxNQUFHLEtBQUtwQixDQUFMLEdBQU8sQ0FBVixFQUFZO0FBQUMsV0FBTSxNQUFJLEtBQUt5SixNQUFMLEdBQWNySyxRQUFkLENBQXVCZ0MsQ0FBdkIsQ0FBVjtBQUFvQyxPQUFJbkQsQ0FBSixDQUFNLElBQUdtRCxLQUFHLEVBQU4sRUFBUztBQUFDbkQsUUFBRSxDQUFGO0FBQUksR0FBZCxNQUFrQjtBQUFDLFFBQUdtRCxLQUFHLENBQU4sRUFBUTtBQUFDbkQsVUFBRSxDQUFGO0FBQUksS0FBYixNQUFpQjtBQUFDLFVBQUdtRCxLQUFHLENBQU4sRUFBUTtBQUFDbkQsWUFBRSxDQUFGO0FBQUksT0FBYixNQUFpQjtBQUFDLFlBQUdtRCxLQUFHLEVBQU4sRUFBUztBQUFDbkQsY0FBRSxDQUFGO0FBQUksU0FBZCxNQUFrQjtBQUFDLGNBQUdtRCxLQUFHLENBQU4sRUFBUTtBQUFDbkQsZ0JBQUUsQ0FBRjtBQUFJLFdBQWIsTUFBaUI7QUFBQyxtQkFBTyxLQUFLeUwsT0FBTCxDQUFhdEksQ0FBYixDQUFQO0FBQXVCO0FBQUM7QUFBQztBQUFDO0FBQUMsT0FBSWxELElBQUUsQ0FBQyxLQUFHRCxDQUFKLElBQU8sQ0FBYjtBQUFBLE1BQWVxQixDQUFmO0FBQUEsTUFBaUJuQixJQUFFLEtBQW5CO0FBQUEsTUFBeUJ3QixJQUFFLEVBQTNCO0FBQUEsTUFBOEJpRCxJQUFFLEtBQUs5QyxDQUFyQyxDQUF1QyxJQUFJeEIsSUFBRSxLQUFLNkosRUFBTCxHQUFTdkYsSUFBRSxLQUFLdUYsRUFBUixHQUFZbEssQ0FBMUIsQ0FBNEIsSUFBRzJFLE1BQUksQ0FBUCxFQUFTO0FBQUMsUUFBR3RFLElBQUUsS0FBSzZKLEVBQVAsSUFBVyxDQUFDN0ksSUFBRSxLQUFLc0QsQ0FBTCxLQUFTdEUsQ0FBWixJQUFlLENBQTdCLEVBQStCO0FBQUNILFVBQUUsSUFBRixDQUFPd0IsSUFBRXlILFNBQVM5SCxDQUFULENBQUY7QUFBYyxZQUFNc0QsS0FBRyxDQUFULEVBQVc7QUFBQyxVQUFHdEUsSUFBRUwsQ0FBTCxFQUFPO0FBQUNxQixZQUFFLENBQUMsS0FBS3NELENBQUwsSUFBUyxDQUFDLEtBQUd0RSxDQUFKLElBQU8sQ0FBakIsS0FBdUJMLElBQUVLLENBQTNCLENBQThCZ0IsS0FBRyxLQUFLLEVBQUVzRCxDQUFQLE1BQVl0RSxLQUFHLEtBQUs2SixFQUFMLEdBQVFsSyxDQUF2QixDQUFIO0FBQTZCLE9BQW5FLE1BQXVFO0FBQUNxQixZQUFHLEtBQUtzRCxDQUFMLE1BQVV0RSxLQUFHTCxDQUFiLENBQUQsR0FBa0JDLENBQXBCLENBQXNCLElBQUdJLEtBQUcsQ0FBTixFQUFRO0FBQUNBLGVBQUcsS0FBSzZKLEVBQVIsQ0FBVyxFQUFFdkYsQ0FBRjtBQUFJO0FBQUMsV0FBR3RELElBQUUsQ0FBTCxFQUFPO0FBQUNuQixZQUFFLElBQUY7QUFBTyxXQUFHQSxDQUFILEVBQUs7QUFBQ3dCLGFBQUd5SCxTQUFTOUgsQ0FBVCxDQUFIO0FBQWU7QUFBQztBQUFDLFVBQU9uQixJQUFFd0IsQ0FBRixHQUFJLEdBQVg7QUFBZSxVQUFTZ0ssUUFBVCxHQUFtQjtBQUFDLE1BQUl4TCxJQUFFMEosS0FBTixDQUFZSCxXQUFXMkIsSUFBWCxDQUFnQkMsS0FBaEIsQ0FBc0IsSUFBdEIsRUFBMkJuTCxDQUEzQixFQUE4QixPQUFPQSxDQUFQO0FBQVMsVUFBU3lMLEtBQVQsR0FBZ0I7QUFBQyxTQUFPLEtBQUs1SixDQUFMLEdBQU8sQ0FBUixHQUFXLEtBQUt5SixNQUFMLEVBQVgsR0FBeUIsSUFBL0I7QUFBb0MsVUFBU0ksV0FBVCxDQUFxQnpMLENBQXJCLEVBQXVCO0FBQUMsTUFBSTJDLElBQUUsS0FBS2YsQ0FBTCxHQUFPNUIsRUFBRTRCLENBQWYsQ0FBaUIsSUFBR2UsS0FBRyxDQUFOLEVBQVE7QUFBQyxXQUFPQSxDQUFQO0FBQVMsT0FBSUssSUFBRSxLQUFLdEIsQ0FBWCxDQUFhaUIsSUFBRUssSUFBRWhELEVBQUUwQixDQUFOLENBQVEsSUFBR2lCLEtBQUcsQ0FBTixFQUFRO0FBQUMsV0FBTyxLQUFLZixDQUFMLEdBQU8sQ0FBUixHQUFXLENBQUNlLENBQVosR0FBY0EsQ0FBcEI7QUFBc0IsVUFBTSxFQUFFSyxDQUFGLElBQUssQ0FBWCxFQUFhO0FBQUMsUUFBRyxDQUFDTCxJQUFFLEtBQUtLLENBQUwsSUFBUWhELEVBQUVnRCxDQUFGLENBQVgsS0FBa0IsQ0FBckIsRUFBdUI7QUFBQyxhQUFPTCxDQUFQO0FBQVM7QUFBQyxVQUFPLENBQVA7QUFBUyxVQUFTK0ksS0FBVCxDQUFlM0wsQ0FBZixFQUFpQjtBQUFDLE1BQUlpRCxJQUFFLENBQU47QUFBQSxNQUFRaEQsQ0FBUixDQUFVLElBQUcsQ0FBQ0EsSUFBRUQsTUFBSSxFQUFQLEtBQVksQ0FBZixFQUFpQjtBQUFDQSxRQUFFQyxDQUFGLENBQUlnRCxLQUFHLEVBQUg7QUFBTSxPQUFHLENBQUNoRCxJQUFFRCxLQUFHLENBQU4sS0FBVSxDQUFiLEVBQWU7QUFBQ0EsUUFBRUMsQ0FBRixDQUFJZ0QsS0FBRyxDQUFIO0FBQUssT0FBRyxDQUFDaEQsSUFBRUQsS0FBRyxDQUFOLEtBQVUsQ0FBYixFQUFlO0FBQUNBLFFBQUVDLENBQUYsQ0FBSWdELEtBQUcsQ0FBSDtBQUFLLE9BQUcsQ0FBQ2hELElBQUVELEtBQUcsQ0FBTixLQUFVLENBQWIsRUFBZTtBQUFDQSxRQUFFQyxDQUFGLENBQUlnRCxLQUFHLENBQUg7QUFBSyxPQUFHLENBQUNoRCxJQUFFRCxLQUFHLENBQU4sS0FBVSxDQUFiLEVBQWU7QUFBQ0EsUUFBRUMsQ0FBRixDQUFJZ0QsS0FBRyxDQUFIO0FBQUssVUFBT0EsQ0FBUDtBQUFTLFVBQVMySSxXQUFULEdBQXNCO0FBQUMsTUFBRyxLQUFLakssQ0FBTCxJQUFRLENBQVgsRUFBYTtBQUFDLFdBQU8sQ0FBUDtBQUFTLFVBQU8sS0FBS3FJLEVBQUwsSUFBUyxLQUFLckksQ0FBTCxHQUFPLENBQWhCLElBQW1CZ0ssTUFBTSxLQUFLLEtBQUtoSyxDQUFMLEdBQU8sQ0FBWixJQUFnQixLQUFLRSxDQUFMLEdBQU8sS0FBS29JLEVBQWxDLENBQTFCO0FBQWlFLFVBQVM0QixZQUFULENBQXNCNUksQ0FBdEIsRUFBd0JoRCxDQUF4QixFQUEwQjtBQUFDLE1BQUlELENBQUosQ0FBTSxLQUFJQSxJQUFFLEtBQUsyQixDQUFMLEdBQU8sQ0FBYixFQUFlM0IsS0FBRyxDQUFsQixFQUFvQixFQUFFQSxDQUF0QixFQUF3QjtBQUFDQyxNQUFFRCxJQUFFaUQsQ0FBSixJQUFPLEtBQUtqRCxDQUFMLENBQVA7QUFBZSxRQUFJQSxJQUFFaUQsSUFBRSxDQUFSLEVBQVVqRCxLQUFHLENBQWIsRUFBZSxFQUFFQSxDQUFqQixFQUFtQjtBQUFDQyxNQUFFRCxDQUFGLElBQUssQ0FBTDtBQUFPLEtBQUUyQixDQUFGLEdBQUksS0FBS0EsQ0FBTCxHQUFPc0IsQ0FBWCxDQUFhaEQsRUFBRTRCLENBQUYsR0FBSSxLQUFLQSxDQUFUO0FBQVcsVUFBU2lLLFlBQVQsQ0FBc0I3SSxDQUF0QixFQUF3QmhELENBQXhCLEVBQTBCO0FBQUMsT0FBSSxJQUFJRCxJQUFFaUQsQ0FBVixFQUFZakQsSUFBRSxLQUFLMkIsQ0FBbkIsRUFBcUIsRUFBRTNCLENBQXZCLEVBQXlCO0FBQUNDLE1BQUVELElBQUVpRCxDQUFKLElBQU8sS0FBS2pELENBQUwsQ0FBUDtBQUFlLEtBQUUyQixDQUFGLEdBQUkwRCxLQUFLakIsR0FBTCxDQUFTLEtBQUt6QyxDQUFMLEdBQU9zQixDQUFoQixFQUFrQixDQUFsQixDQUFKLENBQXlCaEQsRUFBRTRCLENBQUYsR0FBSSxLQUFLQSxDQUFUO0FBQVcsVUFBU2tLLFdBQVQsQ0FBcUI1TCxDQUFyQixFQUF1QkwsQ0FBdkIsRUFBeUI7QUFBQyxNQUFJRyxJQUFFRSxJQUFFLEtBQUs2SixFQUFiLENBQWdCLElBQUloSyxJQUFFLEtBQUtnSyxFQUFMLEdBQVEvSixDQUFkLENBQWdCLElBQUlGLElBQUUsQ0FBQyxLQUFHQyxDQUFKLElBQU8sQ0FBYixDQUFlLElBQUl5RSxJQUFFWSxLQUFLYyxLQUFMLENBQVdoRyxJQUFFLEtBQUs2SixFQUFsQixDQUFOO0FBQUEsTUFBNEJ4SSxJQUFHLEtBQUtLLENBQUwsSUFBUTVCLENBQVQsR0FBWSxLQUFLZ0ssRUFBL0M7QUFBQSxNQUFrRHJILENBQWxELENBQW9ELEtBQUlBLElBQUUsS0FBS2pCLENBQUwsR0FBTyxDQUFiLEVBQWVpQixLQUFHLENBQWxCLEVBQW9CLEVBQUVBLENBQXRCLEVBQXdCO0FBQUM5QyxNQUFFOEMsSUFBRTZCLENBQUYsR0FBSSxDQUFOLElBQVUsS0FBSzdCLENBQUwsS0FBUzVDLENBQVYsR0FBYXdCLENBQXRCLENBQXdCQSxJQUFFLENBQUMsS0FBS29CLENBQUwsSUFBUTdDLENBQVQsS0FBYUUsQ0FBZjtBQUFpQixRQUFJMkMsSUFBRTZCLElBQUUsQ0FBUixFQUFVN0IsS0FBRyxDQUFiLEVBQWUsRUFBRUEsQ0FBakIsRUFBbUI7QUFBQzlDLE1BQUU4QyxDQUFGLElBQUssQ0FBTDtBQUFPLEtBQUU2QixDQUFGLElBQUtqRCxDQUFMLENBQU8xQixFQUFFNkIsQ0FBRixHQUFJLEtBQUtBLENBQUwsR0FBTzhDLENBQVAsR0FBUyxDQUFiLENBQWUzRSxFQUFFK0IsQ0FBRixHQUFJLEtBQUtBLENBQVQsQ0FBVy9CLEVBQUVnQyxLQUFGO0FBQVUsVUFBU2tLLFdBQVQsQ0FBcUJqTSxDQUFyQixFQUF1QjZDLENBQXZCLEVBQXlCO0FBQUNBLElBQUVmLENBQUYsR0FBSSxLQUFLQSxDQUFULENBQVcsSUFBSS9CLElBQUV1RixLQUFLYyxLQUFMLENBQVdwRyxJQUFFLEtBQUtpSyxFQUFsQixDQUFOLENBQTRCLElBQUdsSyxLQUFHLEtBQUs2QixDQUFYLEVBQWE7QUFBQ2lCLE1BQUVqQixDQUFGLEdBQUksQ0FBSixDQUFNO0FBQU8sT0FBSTFCLElBQUVGLElBQUUsS0FBS2lLLEVBQWIsQ0FBZ0IsSUFBSWhLLElBQUUsS0FBS2dLLEVBQUwsR0FBUS9KLENBQWQsQ0FBZ0IsSUFBSXdFLElBQUUsQ0FBQyxLQUFHeEUsQ0FBSixJQUFPLENBQWIsQ0FBZTJDLEVBQUUsQ0FBRixJQUFLLEtBQUs5QyxDQUFMLEtBQVNHLENBQWQsQ0FBZ0IsS0FBSSxJQUFJZ0QsSUFBRW5ELElBQUUsQ0FBWixFQUFjbUQsSUFBRSxLQUFLdEIsQ0FBckIsRUFBdUIsRUFBRXNCLENBQXpCLEVBQTJCO0FBQUNMLE1BQUVLLElBQUVuRCxDQUFGLEdBQUksQ0FBTixLQUFVLENBQUMsS0FBS21ELENBQUwsSUFBUXdCLENBQVQsS0FBYXpFLENBQXZCLENBQXlCNEMsRUFBRUssSUFBRW5ELENBQUosSUFBTyxLQUFLbUQsQ0FBTCxLQUFTaEQsQ0FBaEI7QUFBa0IsT0FBR0EsSUFBRSxDQUFMLEVBQU87QUFBQzJDLE1BQUUsS0FBS2pCLENBQUwsR0FBTzdCLENBQVAsR0FBUyxDQUFYLEtBQWUsQ0FBQyxLQUFLK0IsQ0FBTCxHQUFPNEMsQ0FBUixLQUFZekUsQ0FBM0I7QUFBNkIsS0FBRTJCLENBQUYsR0FBSSxLQUFLQSxDQUFMLEdBQU83QixDQUFYLENBQWE4QyxFQUFFZCxLQUFGO0FBQVUsVUFBU21LLFFBQVQsQ0FBa0JySixDQUFsQixFQUFvQjZCLENBQXBCLEVBQXNCO0FBQUMsTUFBSTNFLElBQUUsQ0FBTjtBQUFBLE1BQVFDLElBQUUsQ0FBVjtBQUFBLE1BQVlFLElBQUVvRixLQUFLZixHQUFMLENBQVMxQixFQUFFakIsQ0FBWCxFQUFhLEtBQUtBLENBQWxCLENBQWQsQ0FBbUMsT0FBTTdCLElBQUVHLENBQVIsRUFBVTtBQUFDRixTQUFHLEtBQUtELENBQUwsSUFBUThDLEVBQUU5QyxDQUFGLENBQVgsQ0FBZ0IyRSxFQUFFM0UsR0FBRixJQUFPQyxJQUFFLEtBQUtrSyxFQUFkLENBQWlCbEssTUFBSSxLQUFLaUssRUFBVDtBQUFZLE9BQUdwSCxFQUFFakIsQ0FBRixHQUFJLEtBQUtBLENBQVosRUFBYztBQUFDNUIsU0FBRzZDLEVBQUVmLENBQUwsQ0FBTyxPQUFNL0IsSUFBRSxLQUFLNkIsQ0FBYixFQUFlO0FBQUM1QixXQUFHLEtBQUtELENBQUwsQ0FBSCxDQUFXMkUsRUFBRTNFLEdBQUYsSUFBT0MsSUFBRSxLQUFLa0ssRUFBZCxDQUFpQmxLLE1BQUksS0FBS2lLLEVBQVQ7QUFBWSxVQUFHLEtBQUtuSSxDQUFSO0FBQVUsR0FBeEYsTUFBNEY7QUFBQzlCLFNBQUcsS0FBSzhCLENBQVIsQ0FBVSxPQUFNL0IsSUFBRThDLEVBQUVqQixDQUFWLEVBQVk7QUFBQzVCLFdBQUc2QyxFQUFFOUMsQ0FBRixDQUFILENBQVEyRSxFQUFFM0UsR0FBRixJQUFPQyxJQUFFLEtBQUtrSyxFQUFkLENBQWlCbEssTUFBSSxLQUFLaUssRUFBVDtBQUFZLFVBQUdwSCxFQUFFZixDQUFMO0FBQU8sS0FBRUEsQ0FBRixHQUFLOUIsSUFBRSxDQUFILEdBQU0sQ0FBQyxDQUFQLEdBQVMsQ0FBYixDQUFlLElBQUdBLElBQUUsQ0FBQyxDQUFOLEVBQVE7QUFBQzBFLE1BQUUzRSxHQUFGLElBQU8sS0FBS29LLEVBQUwsR0FBUW5LLENBQWY7QUFBaUIsR0FBMUIsTUFBOEI7QUFBQyxRQUFHQSxJQUFFLENBQUwsRUFBTztBQUFDMEUsUUFBRTNFLEdBQUYsSUFBT0MsQ0FBUDtBQUFTO0FBQUMsS0FBRTRCLENBQUYsR0FBSTdCLENBQUosQ0FBTTJFLEVBQUUzQyxLQUFGO0FBQVUsVUFBU29LLGFBQVQsQ0FBdUJqSixDQUF2QixFQUF5Qm5ELENBQXpCLEVBQTJCO0FBQUMsTUFBSUcsSUFBRSxLQUFLa00sR0FBTCxFQUFOO0FBQUEsTUFBaUIxSCxJQUFFeEIsRUFBRWtKLEdBQUYsRUFBbkIsQ0FBMkIsSUFBSXZKLElBQUUzQyxFQUFFMEIsQ0FBUixDQUFVN0IsRUFBRTZCLENBQUYsR0FBSWlCLElBQUU2QixFQUFFOUMsQ0FBUixDQUFVLE9BQU0sRUFBRWlCLENBQUYsSUFBSyxDQUFYLEVBQWE7QUFBQzlDLE1BQUU4QyxDQUFGLElBQUssQ0FBTDtBQUFPLFFBQUlBLElBQUUsQ0FBTixFQUFRQSxJQUFFNkIsRUFBRTlDLENBQVosRUFBYyxFQUFFaUIsQ0FBaEIsRUFBa0I7QUFBQzlDLE1BQUU4QyxJQUFFM0MsRUFBRTBCLENBQU4sSUFBUzFCLEVBQUU4SixFQUFGLENBQUssQ0FBTCxFQUFPdEYsRUFBRTdCLENBQUYsQ0FBUCxFQUFZOUMsQ0FBWixFQUFjOEMsQ0FBZCxFQUFnQixDQUFoQixFQUFrQjNDLEVBQUUwQixDQUFwQixDQUFUO0FBQWdDLEtBQUVFLENBQUYsR0FBSSxDQUFKLENBQU0vQixFQUFFZ0MsS0FBRixHQUFVLElBQUcsS0FBS0QsQ0FBTCxJQUFRb0IsRUFBRXBCLENBQWIsRUFBZTtBQUFDMEgsZUFBVzJCLElBQVgsQ0FBZ0JDLEtBQWhCLENBQXNCckwsQ0FBdEIsRUFBd0JBLENBQXhCO0FBQTJCO0FBQUMsVUFBU3NNLFdBQVQsQ0FBcUJ4SixDQUFyQixFQUF1QjtBQUFDLE1BQUk1QyxJQUFFLEtBQUttTSxHQUFMLEVBQU4sQ0FBaUIsSUFBSWxNLElBQUUyQyxFQUFFakIsQ0FBRixHQUFJLElBQUUzQixFQUFFMkIsQ0FBZCxDQUFnQixPQUFNLEVBQUUxQixDQUFGLElBQUssQ0FBWCxFQUFhO0FBQUMyQyxNQUFFM0MsQ0FBRixJQUFLLENBQUw7QUFBTyxRQUFJQSxJQUFFLENBQU4sRUFBUUEsSUFBRUQsRUFBRTJCLENBQUYsR0FBSSxDQUFkLEVBQWdCLEVBQUUxQixDQUFsQixFQUFvQjtBQUFDLFFBQUlILElBQUVFLEVBQUUrSixFQUFGLENBQUs5SixDQUFMLEVBQU9ELEVBQUVDLENBQUYsQ0FBUCxFQUFZMkMsQ0FBWixFQUFjLElBQUUzQyxDQUFoQixFQUFrQixDQUFsQixFQUFvQixDQUFwQixDQUFOLENBQTZCLElBQUcsQ0FBQzJDLEVBQUUzQyxJQUFFRCxFQUFFMkIsQ0FBTixLQUFVM0IsRUFBRStKLEVBQUYsQ0FBSzlKLElBQUUsQ0FBUCxFQUFTLElBQUVELEVBQUVDLENBQUYsQ0FBWCxFQUFnQjJDLENBQWhCLEVBQWtCLElBQUUzQyxDQUFGLEdBQUksQ0FBdEIsRUFBd0JILENBQXhCLEVBQTBCRSxFQUFFMkIsQ0FBRixHQUFJMUIsQ0FBSixHQUFNLENBQWhDLENBQVgsS0FBZ0RELEVBQUVrSyxFQUFyRCxFQUF3RDtBQUFDdEgsUUFBRTNDLElBQUVELEVBQUUyQixDQUFOLEtBQVUzQixFQUFFa0ssRUFBWixDQUFldEgsRUFBRTNDLElBQUVELEVBQUUyQixDQUFKLEdBQU0sQ0FBUixJQUFXLENBQVg7QUFBYTtBQUFDLE9BQUdpQixFQUFFakIsQ0FBRixHQUFJLENBQVAsRUFBUztBQUFDaUIsTUFBRUEsRUFBRWpCLENBQUYsR0FBSSxDQUFOLEtBQVUzQixFQUFFK0osRUFBRixDQUFLOUosQ0FBTCxFQUFPRCxFQUFFQyxDQUFGLENBQVAsRUFBWTJDLENBQVosRUFBYyxJQUFFM0MsQ0FBaEIsRUFBa0IsQ0FBbEIsRUFBb0IsQ0FBcEIsQ0FBVjtBQUFpQyxLQUFFNEIsQ0FBRixHQUFJLENBQUosQ0FBTWUsRUFBRWQsS0FBRjtBQUFVLFVBQVN1SyxXQUFULENBQXFCaE0sQ0FBckIsRUFBdUJtQixDQUF2QixFQUF5QnpCLENBQXpCLEVBQTJCO0FBQUMsTUFBSWdFLElBQUUxRCxFQUFFOEwsR0FBRixFQUFOLENBQWMsSUFBR3BJLEVBQUVwQyxDQUFGLElBQUssQ0FBUixFQUFVO0FBQUM7QUFBTyxPQUFJdUQsSUFBRSxLQUFLaUgsR0FBTCxFQUFOLENBQWlCLElBQUdqSCxFQUFFdkQsQ0FBRixHQUFJb0MsRUFBRXBDLENBQVQsRUFBVztBQUFDLFFBQUdILEtBQUcsSUFBTixFQUFXO0FBQUNBLFFBQUV1SixPQUFGLENBQVUsQ0FBVjtBQUFhLFNBQUdoTCxLQUFHLElBQU4sRUFBVztBQUFDLFdBQUt1TSxNQUFMLENBQVl2TSxDQUFaO0FBQWU7QUFBTyxPQUFHQSxLQUFHLElBQU4sRUFBVztBQUFDQSxRQUFFMkosS0FBRjtBQUFRLE9BQUk5RyxJQUFFOEcsS0FBTjtBQUFBLE1BQVkxSixJQUFFLEtBQUs2QixDQUFuQjtBQUFBLE1BQXFCVixJQUFFZCxFQUFFd0IsQ0FBekIsQ0FBMkIsSUFBSXFDLElBQUUsS0FBSzhGLEVBQUwsR0FBUTJCLE1BQU01SCxFQUFFQSxFQUFFcEMsQ0FBRixHQUFJLENBQU4sQ0FBTixDQUFkLENBQThCLElBQUd1QyxJQUFFLENBQUwsRUFBTztBQUFDSCxNQUFFd0ksUUFBRixDQUFXckksQ0FBWCxFQUFhdEIsQ0FBYixFQUFnQnNDLEVBQUVxSCxRQUFGLENBQVdySSxDQUFYLEVBQWFuRSxDQUFiO0FBQWdCLEdBQXhDLE1BQTRDO0FBQUNnRSxNQUFFdUksTUFBRixDQUFTMUosQ0FBVCxFQUFZc0MsRUFBRW9ILE1BQUYsQ0FBU3ZNLENBQVQ7QUFBWSxPQUFJUSxJQUFFcUMsRUFBRWpCLENBQVIsQ0FBVSxJQUFJMUIsSUFBRTJDLEVBQUVyQyxJQUFFLENBQUosQ0FBTixDQUFhLElBQUdOLEtBQUcsQ0FBTixFQUFRO0FBQUM7QUFBTyxPQUFJUSxJQUFFUixLQUFHLEtBQUcsS0FBS29LLEVBQVgsS0FBaUI5SixJQUFFLENBQUgsR0FBTXFDLEVBQUVyQyxJQUFFLENBQUosS0FBUSxLQUFLK0osRUFBbkIsR0FBc0IsQ0FBdEMsQ0FBTixDQUErQyxJQUFJMUMsSUFBRSxLQUFLd0MsRUFBTCxHQUFRM0osQ0FBZDtBQUFBLE1BQWdCa0gsSUFBRSxDQUFDLEtBQUcsS0FBSzBDLEVBQVQsSUFBYTVKLENBQS9CO0FBQUEsTUFBaUN1RCxJQUFFLEtBQUcsS0FBS3NHLEVBQTNDLENBQThDLElBQUluRyxJQUFFcEUsRUFBRTRCLENBQVI7QUFBQSxNQUFVRSxJQUFFc0MsSUFBRTVELENBQWQ7QUFBQSxNQUFnQmtFLElBQUdqRCxLQUFHLElBQUosR0FBVWtJLEtBQVYsR0FBZ0JsSSxDQUFsQyxDQUFvQ29CLEVBQUU0SixTQUFGLENBQVkzSyxDQUFaLEVBQWM0QyxDQUFkLEVBQWlCLElBQUcxRSxFQUFFME0sU0FBRixDQUFZaEksQ0FBWixLQUFnQixDQUFuQixFQUFxQjtBQUFDMUUsTUFBRUEsRUFBRTRCLENBQUYsRUFBRixJQUFTLENBQVQsQ0FBVzVCLEVBQUVvTCxLQUFGLENBQVExRyxDQUFSLEVBQVUxRSxDQUFWO0FBQWEsY0FBVzJNLEdBQVgsQ0FBZUYsU0FBZixDQUF5QmpNLENBQXpCLEVBQTJCa0UsQ0FBM0IsRUFBOEJBLEVBQUUwRyxLQUFGLENBQVF2SSxDQUFSLEVBQVVBLENBQVYsRUFBYSxPQUFNQSxFQUFFakIsQ0FBRixHQUFJcEIsQ0FBVixFQUFZO0FBQUNxQyxNQUFFQSxFQUFFakIsQ0FBRixFQUFGLElBQVMsQ0FBVDtBQUFXLFVBQU0sRUFBRUUsQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDLFFBQUlvQixJQUFHbEQsRUFBRSxFQUFFb0UsQ0FBSixLQUFRbEUsQ0FBVCxHQUFZLEtBQUtnSyxFQUFqQixHQUFvQjVFLEtBQUtjLEtBQUwsQ0FBV3BHLEVBQUVvRSxDQUFGLElBQUt5RCxDQUFMLEdBQU8sQ0FBQzdILEVBQUVvRSxJQUFFLENBQUosSUFBT0gsQ0FBUixJQUFXMkQsQ0FBN0IsQ0FBMUIsQ0FBMEQsSUFBRyxDQUFDNUgsRUFBRW9FLENBQUYsS0FBTXZCLEVBQUVtSCxFQUFGLENBQUssQ0FBTCxFQUFPOUcsQ0FBUCxFQUFTbEQsQ0FBVCxFQUFXOEIsQ0FBWCxFQUFhLENBQWIsRUFBZXRCLENBQWYsQ0FBUCxJQUEwQjBDLENBQTdCLEVBQStCO0FBQUNMLFFBQUU0SixTQUFGLENBQVkzSyxDQUFaLEVBQWM0QyxDQUFkLEVBQWlCMUUsRUFBRW9MLEtBQUYsQ0FBUTFHLENBQVIsRUFBVTFFLENBQVYsRUFBYSxPQUFNQSxFQUFFb0UsQ0FBRixJQUFLLEVBQUVsQixDQUFiLEVBQWU7QUFBQ2xELFVBQUVvTCxLQUFGLENBQVExRyxDQUFSLEVBQVUxRSxDQUFWO0FBQWE7QUFBQztBQUFDLE9BQUd5QixLQUFHLElBQU4sRUFBVztBQUFDekIsTUFBRTRNLFNBQUYsQ0FBWXBNLENBQVosRUFBY2lCLENBQWQsRUFBaUIsSUFBR3hCLEtBQUdtQixDQUFOLEVBQVE7QUFBQ29JLGlCQUFXMkIsSUFBWCxDQUFnQkMsS0FBaEIsQ0FBc0IzSixDQUF0QixFQUF3QkEsQ0FBeEI7QUFBMkI7QUFBQyxLQUFFRyxDQUFGLEdBQUlwQixDQUFKLENBQU1SLEVBQUUrQixLQUFGLEdBQVUsSUFBR29DLElBQUUsQ0FBTCxFQUFPO0FBQUNuRSxNQUFFNk0sUUFBRixDQUFXMUksQ0FBWCxFQUFhbkUsQ0FBYjtBQUFnQixPQUFHQyxJQUFFLENBQUwsRUFBTztBQUFDdUosZUFBVzJCLElBQVgsQ0FBZ0JDLEtBQWhCLENBQXNCcEwsQ0FBdEIsRUFBd0JBLENBQXhCO0FBQTJCO0FBQUMsVUFBUzhNLEtBQVQsQ0FBZTVNLENBQWYsRUFBaUI7QUFBQyxNQUFJZ0QsSUFBRXlHLEtBQU4sQ0FBWSxLQUFLeUMsR0FBTCxHQUFXVyxRQUFYLENBQW9CN00sQ0FBcEIsRUFBc0IsSUFBdEIsRUFBMkJnRCxDQUEzQixFQUE4QixJQUFHLEtBQUtwQixDQUFMLEdBQU8sQ0FBUCxJQUFVb0IsRUFBRXdKLFNBQUYsQ0FBWWxELFdBQVcyQixJQUF2QixJQUE2QixDQUExQyxFQUE0QztBQUFDakwsTUFBRWtMLEtBQUYsQ0FBUWxJLENBQVIsRUFBVUEsQ0FBVjtBQUFhLFVBQU9BLENBQVA7QUFBUyxVQUFTOEosT0FBVCxDQUFpQi9NLENBQWpCLEVBQW1CO0FBQUMsT0FBS3FDLENBQUwsR0FBT3JDLENBQVA7QUFBUyxVQUFTZ04sUUFBVCxDQUFrQmhOLENBQWxCLEVBQW9CO0FBQUMsTUFBR0EsRUFBRTZCLENBQUYsR0FBSSxDQUFKLElBQU83QixFQUFFeU0sU0FBRixDQUFZLEtBQUtwSyxDQUFqQixLQUFxQixDQUEvQixFQUFpQztBQUFDLFdBQU9yQyxFQUFFaU4sR0FBRixDQUFNLEtBQUs1SyxDQUFYLENBQVA7QUFBcUIsR0FBdkQsTUFBMkQ7QUFBQyxXQUFPckMsQ0FBUDtBQUFTO0FBQUMsVUFBU2tOLE9BQVQsQ0FBaUJsTixDQUFqQixFQUFtQjtBQUFDLFNBQU9BLENBQVA7QUFBUyxVQUFTbU4sT0FBVCxDQUFpQm5OLENBQWpCLEVBQW1CO0FBQUNBLElBQUU4TSxRQUFGLENBQVcsS0FBS3pLLENBQWhCLEVBQWtCLElBQWxCLEVBQXVCckMsQ0FBdkI7QUFBMEIsVUFBU29OLE1BQVQsQ0FBZ0JwTixDQUFoQixFQUFrQmlELENBQWxCLEVBQW9CaEQsQ0FBcEIsRUFBc0I7QUFBQ0QsSUFBRXFOLFVBQUYsQ0FBYXBLLENBQWIsRUFBZWhELENBQWYsRUFBa0IsS0FBS3FOLE1BQUwsQ0FBWXJOLENBQVo7QUFBZSxVQUFTc04sTUFBVCxDQUFnQnZOLENBQWhCLEVBQWtCQyxDQUFsQixFQUFvQjtBQUFDRCxJQUFFd04sUUFBRixDQUFXdk4sQ0FBWCxFQUFjLEtBQUtxTixNQUFMLENBQVlyTixDQUFaO0FBQWUsU0FBUU8sU0FBUixDQUFrQmlOLE9BQWxCLEdBQTBCVCxRQUExQixDQUFtQ0QsUUFBUXZNLFNBQVIsQ0FBa0JrTixNQUFsQixHQUF5QlIsT0FBekIsQ0FBaUNILFFBQVF2TSxTQUFSLENBQWtCOE0sTUFBbEIsR0FBeUJILE9BQXpCLENBQWlDSixRQUFRdk0sU0FBUixDQUFrQm1OLEtBQWxCLEdBQXdCUCxNQUF4QixDQUErQkwsUUFBUXZNLFNBQVIsQ0FBa0JvTixLQUFsQixHQUF3QkwsTUFBeEIsQ0FBK0IsU0FBU00sV0FBVCxHQUFzQjtBQUFDLE1BQUcsS0FBS2xNLENBQUwsR0FBTyxDQUFWLEVBQVk7QUFBQyxXQUFPLENBQVA7QUFBUyxPQUFJM0IsSUFBRSxLQUFLLENBQUwsQ0FBTixDQUFjLElBQUcsQ0FBQ0EsSUFBRSxDQUFILEtBQU8sQ0FBVixFQUFZO0FBQUMsV0FBTyxDQUFQO0FBQVMsT0FBSUMsSUFBRUQsSUFBRSxDQUFSLENBQVVDLElBQUdBLEtBQUcsSUFBRSxDQUFDRCxJQUFFLEVBQUgsSUFBT0MsQ0FBWixDQUFELEdBQWlCLEVBQW5CLENBQXNCQSxJQUFHQSxLQUFHLElBQUUsQ0FBQ0QsSUFBRSxHQUFILElBQVFDLENBQWIsQ0FBRCxHQUFrQixHQUFwQixDQUF3QkEsSUFBR0EsS0FBRyxLQUFJLENBQUNELElBQUUsS0FBSCxJQUFVQyxDQUFYLEdBQWMsS0FBakIsQ0FBSCxDQUFELEdBQThCLEtBQWhDLENBQXNDQSxJQUFHQSxLQUFHLElBQUVELElBQUVDLENBQUYsR0FBSSxLQUFLaUssRUFBZCxDQUFELEdBQW9CLEtBQUtBLEVBQTNCLENBQThCLE9BQU9qSyxJQUFFLENBQUgsR0FBTSxLQUFLaUssRUFBTCxHQUFRakssQ0FBZCxHQUFnQixDQUFDQSxDQUF2QjtBQUF5QixVQUFTNk4sVUFBVCxDQUFvQjlOLENBQXBCLEVBQXNCO0FBQUMsT0FBS3FDLENBQUwsR0FBT3JDLENBQVAsQ0FBUyxLQUFLK04sRUFBTCxHQUFRL04sRUFBRWdPLFFBQUYsRUFBUixDQUFxQixLQUFLQyxHQUFMLEdBQVMsS0FBS0YsRUFBTCxHQUFRLEtBQWpCLENBQXVCLEtBQUtHLEdBQUwsR0FBUyxLQUFLSCxFQUFMLElBQVMsRUFBbEIsQ0FBcUIsS0FBS0ksRUFBTCxHQUFRLENBQUMsS0FBSW5PLEVBQUVnSyxFQUFGLEdBQUssRUFBVixJQUFlLENBQXZCLENBQXlCLEtBQUtvRSxHQUFMLEdBQVMsSUFBRXBPLEVBQUUyQixDQUFiO0FBQWUsVUFBUzBNLFdBQVQsQ0FBcUJyTyxDQUFyQixFQUF1QjtBQUFDLE1BQUlDLElBQUV5SixLQUFOLENBQVkxSixFQUFFbU0sR0FBRixHQUFRSyxTQUFSLENBQWtCLEtBQUtuSyxDQUFMLENBQU9WLENBQXpCLEVBQTJCMUIsQ0FBM0IsRUFBOEJBLEVBQUU2TSxRQUFGLENBQVcsS0FBS3pLLENBQWhCLEVBQWtCLElBQWxCLEVBQXVCcEMsQ0FBdkIsRUFBMEIsSUFBR0QsRUFBRTZCLENBQUYsR0FBSSxDQUFKLElBQU81QixFQUFFd00sU0FBRixDQUFZbEQsV0FBVzJCLElBQXZCLElBQTZCLENBQXZDLEVBQXlDO0FBQUMsU0FBSzdJLENBQUwsQ0FBTzhJLEtBQVAsQ0FBYWxMLENBQWIsRUFBZUEsQ0FBZjtBQUFrQixVQUFPQSxDQUFQO0FBQVMsVUFBU3FPLFVBQVQsQ0FBb0J0TyxDQUFwQixFQUFzQjtBQUFDLE1BQUlDLElBQUV5SixLQUFOLENBQVkxSixFQUFFc00sTUFBRixDQUFTck0sQ0FBVCxFQUFZLEtBQUtxTixNQUFMLENBQVlyTixDQUFaLEVBQWUsT0FBT0EsQ0FBUDtBQUFTLFVBQVNzTyxVQUFULENBQW9Cdk8sQ0FBcEIsRUFBc0I7QUFBQyxTQUFNQSxFQUFFMkIsQ0FBRixJQUFLLEtBQUt5TSxHQUFoQixFQUFvQjtBQUFDcE8sTUFBRUEsRUFBRTJCLENBQUYsRUFBRixJQUFTLENBQVQ7QUFBVyxRQUFJLElBQUlzQixJQUFFLENBQVYsRUFBWUEsSUFBRSxLQUFLWixDQUFMLENBQU9WLENBQXJCLEVBQXVCLEVBQUVzQixDQUF6QixFQUEyQjtBQUFDLFFBQUloRCxJQUFFRCxFQUFFaUQsQ0FBRixJQUFLLEtBQVgsQ0FBaUIsSUFBSUwsSUFBRzNDLElBQUUsS0FBS2dPLEdBQVAsSUFBWSxDQUFFaE8sSUFBRSxLQUFLaU8sR0FBUCxHQUFXLENBQUNsTyxFQUFFaUQsQ0FBRixLQUFNLEVBQVAsSUFBVyxLQUFLZ0wsR0FBNUIsR0FBaUMsS0FBS0UsRUFBdkMsS0FBNEMsRUFBeEQsQ0FBRCxHQUE4RG5PLEVBQUVpSyxFQUF0RSxDQUF5RWhLLElBQUVnRCxJQUFFLEtBQUtaLENBQUwsQ0FBT1YsQ0FBWCxDQUFhM0IsRUFBRUMsQ0FBRixLQUFNLEtBQUtvQyxDQUFMLENBQU8wSCxFQUFQLENBQVUsQ0FBVixFQUFZbkgsQ0FBWixFQUFjNUMsQ0FBZCxFQUFnQmlELENBQWhCLEVBQWtCLENBQWxCLEVBQW9CLEtBQUtaLENBQUwsQ0FBT1YsQ0FBM0IsQ0FBTixDQUFvQyxPQUFNM0IsRUFBRUMsQ0FBRixLQUFNRCxFQUFFa0ssRUFBZCxFQUFpQjtBQUFDbEssUUFBRUMsQ0FBRixLQUFNRCxFQUFFa0ssRUFBUixDQUFXbEssRUFBRSxFQUFFQyxDQUFKO0FBQVM7QUFBQyxLQUFFNkIsS0FBRixHQUFVOUIsRUFBRTJNLFNBQUYsQ0FBWSxLQUFLdEssQ0FBTCxDQUFPVixDQUFuQixFQUFxQjNCLENBQXJCLEVBQXdCLElBQUdBLEVBQUV5TSxTQUFGLENBQVksS0FBS3BLLENBQWpCLEtBQXFCLENBQXhCLEVBQTBCO0FBQUNyQyxNQUFFbUwsS0FBRixDQUFRLEtBQUs5SSxDQUFiLEVBQWVyQyxDQUFmO0FBQWtCO0FBQUMsVUFBU3dPLFNBQVQsQ0FBbUJ4TyxDQUFuQixFQUFxQkMsQ0FBckIsRUFBdUI7QUFBQ0QsSUFBRXdOLFFBQUYsQ0FBV3ZOLENBQVgsRUFBYyxLQUFLcU4sTUFBTCxDQUFZck4sQ0FBWjtBQUFlLFVBQVN3TyxTQUFULENBQW1Cek8sQ0FBbkIsRUFBcUJpRCxDQUFyQixFQUF1QmhELENBQXZCLEVBQXlCO0FBQUNELElBQUVxTixVQUFGLENBQWFwSyxDQUFiLEVBQWVoRCxDQUFmLEVBQWtCLEtBQUtxTixNQUFMLENBQVlyTixDQUFaO0FBQWUsWUFBV08sU0FBWCxDQUFxQmlOLE9BQXJCLEdBQTZCWSxXQUE3QixDQUF5Q1AsV0FBV3ROLFNBQVgsQ0FBcUJrTixNQUFyQixHQUE0QlksVUFBNUIsQ0FBdUNSLFdBQVd0TixTQUFYLENBQXFCOE0sTUFBckIsR0FBNEJpQixVQUE1QixDQUF1Q1QsV0FBV3ROLFNBQVgsQ0FBcUJtTixLQUFyQixHQUEyQmMsU0FBM0IsQ0FBcUNYLFdBQVd0TixTQUFYLENBQXFCb04sS0FBckIsR0FBMkJZLFNBQTNCLENBQXFDLFNBQVNFLFNBQVQsR0FBb0I7QUFBQyxTQUFNLENBQUUsS0FBSy9NLENBQUwsR0FBTyxDQUFSLEdBQVksS0FBSyxDQUFMLElBQVEsQ0FBcEIsR0FBdUIsS0FBS0UsQ0FBN0IsS0FBaUMsQ0FBdkM7QUFBeUMsVUFBUzhNLE1BQVQsQ0FBZ0JuTixDQUFoQixFQUFrQnJCLENBQWxCLEVBQW9CO0FBQUMsTUFBR3FCLElBQUUsVUFBRixJQUFjQSxJQUFFLENBQW5CLEVBQXFCO0FBQUMsV0FBTytILFdBQVdtRCxHQUFsQjtBQUFzQixPQUFJakksSUFBRWlGLEtBQU47QUFBQSxNQUFZMUosSUFBRTBKLEtBQWQ7QUFBQSxNQUFvQjlHLElBQUV6QyxFQUFFc04sT0FBRixDQUFVLElBQVYsQ0FBdEI7QUFBQSxNQUFzQ3hLLElBQUUwSSxNQUFNbkssQ0FBTixJQUFTLENBQWpELENBQW1Eb0IsRUFBRTBKLE1BQUYsQ0FBUzdILENBQVQsRUFBWSxPQUFNLEVBQUV4QixDQUFGLElBQUssQ0FBWCxFQUFhO0FBQUM5QyxNQUFFeU4sS0FBRixDQUFRbkosQ0FBUixFQUFVekUsQ0FBVixFQUFhLElBQUcsQ0FBQ3dCLElBQUcsS0FBR3lCLENBQVAsSUFBVyxDQUFkLEVBQWdCO0FBQUM5QyxRQUFFd04sS0FBRixDQUFRM04sQ0FBUixFQUFVNEMsQ0FBVixFQUFZNkIsQ0FBWjtBQUFlLEtBQWhDLE1BQW9DO0FBQUMsVUFBSXhFLElBQUV3RSxDQUFOLENBQVFBLElBQUV6RSxDQUFGLENBQUlBLElBQUVDLENBQUY7QUFBSTtBQUFDLFVBQU9FLEVBQUV1TixNQUFGLENBQVNqSixDQUFULENBQVA7QUFBbUIsVUFBU21LLFdBQVQsQ0FBcUIzTyxDQUFyQixFQUF1QkQsQ0FBdkIsRUFBeUI7QUFBQyxNQUFJaUQsQ0FBSixDQUFNLElBQUdoRCxJQUFFLEdBQUYsSUFBT0QsRUFBRTZPLE1BQUYsRUFBVixFQUFxQjtBQUFDNUwsUUFBRSxJQUFJOEosT0FBSixDQUFZL00sQ0FBWixDQUFGO0FBQWlCLEdBQXZDLE1BQTJDO0FBQUNpRCxRQUFFLElBQUk2SyxVQUFKLENBQWU5TixDQUFmLENBQUY7QUFBb0IsVUFBTyxLQUFLOE8sR0FBTCxDQUFTN08sQ0FBVCxFQUFXZ0QsQ0FBWCxDQUFQO0FBQXFCLFlBQVd6QyxTQUFYLENBQXFCOEwsTUFBckIsR0FBNEIxQixTQUE1QixDQUFzQ3JCLFdBQVcvSSxTQUFYLENBQXFCdUssT0FBckIsR0FBNkJGLFVBQTdCLENBQXdDdEIsV0FBVy9JLFNBQVgsQ0FBcUJpSixVQUFyQixHQUFnQ3VCLGFBQWhDLENBQThDekIsV0FBVy9JLFNBQVgsQ0FBcUJzQixLQUFyQixHQUEyQnNKLFFBQTNCLENBQW9DN0IsV0FBVy9JLFNBQVgsQ0FBcUJnTSxTQUFyQixHQUErQlgsWUFBL0IsQ0FBNEN0QyxXQUFXL0ksU0FBWCxDQUFxQm1NLFNBQXJCLEdBQStCYixZQUEvQixDQUE0Q3ZDLFdBQVcvSSxTQUFYLENBQXFCK0wsUUFBckIsR0FBOEJSLFdBQTlCLENBQTBDeEMsV0FBVy9JLFNBQVgsQ0FBcUJvTSxRQUFyQixHQUE4QlosV0FBOUIsQ0FBMEN6QyxXQUFXL0ksU0FBWCxDQUFxQjJLLEtBQXJCLEdBQTJCYyxRQUEzQixDQUFvQzFDLFdBQVcvSSxTQUFYLENBQXFCNk0sVUFBckIsR0FBZ0NuQixhQUFoQyxDQUE4QzNDLFdBQVcvSSxTQUFYLENBQXFCZ04sUUFBckIsR0FBOEJwQixXQUE5QixDQUEwQzdDLFdBQVcvSSxTQUFYLENBQXFCc00sUUFBckIsR0FBOEJULFdBQTlCLENBQTBDOUMsV0FBVy9JLFNBQVgsQ0FBcUJ3TixRQUFyQixHQUE4QkgsV0FBOUIsQ0FBMEN0RSxXQUFXL0ksU0FBWCxDQUFxQnFPLE1BQXJCLEdBQTRCSCxTQUE1QixDQUFzQ25GLFdBQVcvSSxTQUFYLENBQXFCc08sR0FBckIsR0FBeUJILE1BQXpCLENBQWdDcEYsV0FBVy9JLFNBQVgsQ0FBcUJTLFFBQXJCLEdBQThCb0ssVUFBOUIsQ0FBeUM5QixXQUFXL0ksU0FBWCxDQUFxQjhLLE1BQXJCLEdBQTRCRSxRQUE1QixDQUFxQ2pDLFdBQVcvSSxTQUFYLENBQXFCMkwsR0FBckIsR0FBeUJWLEtBQXpCLENBQStCbEMsV0FBVy9JLFNBQVgsQ0FBcUJpTSxTQUFyQixHQUErQmYsV0FBL0IsQ0FBMkNuQyxXQUFXL0ksU0FBWCxDQUFxQnVPLFNBQXJCLEdBQStCbkQsV0FBL0IsQ0FBMkNyQyxXQUFXL0ksU0FBWCxDQUFxQnlNLEdBQXJCLEdBQXlCSixLQUF6QixDQUErQnRELFdBQVcvSSxTQUFYLENBQXFCd08sU0FBckIsR0FBK0JKLFdBQS9CLENBQTJDckYsV0FBVzJCLElBQVgsR0FBZ0JKLElBQUksQ0FBSixDQUFoQixDQUF1QnZCLFdBQVdtRCxHQUFYLEdBQWU1QixJQUFJLENBQUosQ0FBZjtBQUNscFM7O0FBRUEsU0FBU21FLE9BQVQsR0FBa0I7QUFBQyxNQUFJalAsSUFBRTBKLEtBQU4sQ0FBWSxLQUFLNEMsTUFBTCxDQUFZdE0sQ0FBWixFQUFlLE9BQU9BLENBQVA7QUFBUyxVQUFTa1AsVUFBVCxHQUFxQjtBQUFDLE1BQUcsS0FBS3JOLENBQUwsR0FBTyxDQUFWLEVBQVk7QUFBQyxRQUFHLEtBQUtGLENBQUwsSUFBUSxDQUFYLEVBQWE7QUFBQyxhQUFPLEtBQUssQ0FBTCxJQUFRLEtBQUt1SSxFQUFwQjtBQUF1QixLQUFyQyxNQUF5QztBQUFDLFVBQUcsS0FBS3ZJLENBQUwsSUFBUSxDQUFYLEVBQWE7QUFBQyxlQUFPLENBQUMsQ0FBUjtBQUFVO0FBQUM7QUFBQyxHQUFqRixNQUFxRjtBQUFDLFFBQUcsS0FBS0EsQ0FBTCxJQUFRLENBQVgsRUFBYTtBQUFDLGFBQU8sS0FBSyxDQUFMLENBQVA7QUFBZSxLQUE3QixNQUFpQztBQUFDLFVBQUcsS0FBS0EsQ0FBTCxJQUFRLENBQVgsRUFBYTtBQUFDLGVBQU8sQ0FBUDtBQUFTO0FBQUM7QUFBQyxVQUFPLENBQUMsS0FBSyxDQUFMLElBQVMsQ0FBQyxLQUFJLEtBQUcsS0FBS3FJLEVBQWIsSUFBa0IsQ0FBNUIsS0FBaUMsS0FBS0EsRUFBdkMsR0FBMkMsS0FBSyxDQUFMLENBQWpEO0FBQXlELFVBQVNtRixXQUFULEdBQXNCO0FBQUMsU0FBTyxLQUFLeE4sQ0FBTCxJQUFRLENBQVQsR0FBWSxLQUFLRSxDQUFqQixHQUFvQixLQUFLLENBQUwsS0FBUyxFQUFWLElBQWUsRUFBeEM7QUFBMkMsVUFBU3VOLFlBQVQsR0FBdUI7QUFBQyxTQUFPLEtBQUt6TixDQUFMLElBQVEsQ0FBVCxHQUFZLEtBQUtFLENBQWpCLEdBQW9CLEtBQUssQ0FBTCxLQUFTLEVBQVYsSUFBZSxFQUF4QztBQUEyQyxVQUFTd04sWUFBVCxDQUFzQnJQLENBQXRCLEVBQXdCO0FBQUMsU0FBT3FGLEtBQUtjLEtBQUwsQ0FBV2QsS0FBS2lLLEdBQUwsR0FBUyxLQUFLdEYsRUFBZCxHQUFpQjNFLEtBQUtrSyxHQUFMLENBQVN2UCxDQUFULENBQTVCLENBQVA7QUFBZ0QsVUFBU3dQLFFBQVQsR0FBbUI7QUFBQyxNQUFHLEtBQUszTixDQUFMLEdBQU8sQ0FBVixFQUFZO0FBQUMsV0FBTyxDQUFDLENBQVI7QUFBVSxHQUF2QixNQUEyQjtBQUFDLFFBQUcsS0FBS0YsQ0FBTCxJQUFRLENBQVIsSUFBWSxLQUFLQSxDQUFMLElBQVEsQ0FBUixJQUFXLEtBQUssQ0FBTCxLQUFTLENBQW5DLEVBQXNDO0FBQUMsYUFBTyxDQUFQO0FBQVMsS0FBaEQsTUFBb0Q7QUFBQyxhQUFPLENBQVA7QUFBUztBQUFDO0FBQUMsVUFBUzhOLFVBQVQsQ0FBb0J4TSxDQUFwQixFQUFzQjtBQUFDLE1BQUdBLEtBQUcsSUFBTixFQUFXO0FBQUNBLFFBQUUsRUFBRjtBQUFLLE9BQUcsS0FBS3lNLE1BQUwsTUFBZSxDQUFmLElBQWtCek0sSUFBRSxDQUFwQixJQUF1QkEsSUFBRSxFQUE1QixFQUErQjtBQUFDLFdBQU0sR0FBTjtBQUFVLE9BQUl3QixJQUFFLEtBQUtrTCxTQUFMLENBQWUxTSxDQUFmLENBQU4sQ0FBd0IsSUFBSW5ELElBQUV1RixLQUFLVyxHQUFMLENBQVMvQyxDQUFULEVBQVd3QixDQUFYLENBQU4sQ0FBb0IsSUFBSWpCLElBQUVzSCxJQUFJaEwsQ0FBSixDQUFOO0FBQUEsTUFBYUssSUFBRXVKLEtBQWY7QUFBQSxNQUFxQmxJLElBQUVrSSxLQUF2QjtBQUFBLE1BQTZCM0osSUFBRSxFQUEvQixDQUFrQyxLQUFLK00sUUFBTCxDQUFjdEosQ0FBZCxFQUFnQnJELENBQWhCLEVBQWtCcUIsQ0FBbEIsRUFBcUIsT0FBTXJCLEVBQUV1UCxNQUFGLEtBQVcsQ0FBakIsRUFBbUI7QUFBQzNQLFFBQUUsQ0FBQ0QsSUFBRTBCLEVBQUVvTyxRQUFGLEVBQUgsRUFBaUIzTyxRQUFqQixDQUEwQmdDLENBQTFCLEVBQTZCTixNQUE3QixDQUFvQyxDQUFwQyxJQUF1QzVDLENBQXpDLENBQTJDSSxFQUFFMk0sUUFBRixDQUFXdEosQ0FBWCxFQUFhckQsQ0FBYixFQUFlcUIsQ0FBZjtBQUFrQixVQUFPQSxFQUFFb08sUUFBRixHQUFhM08sUUFBYixDQUFzQmdDLENBQXRCLElBQXlCbEQsQ0FBaEM7QUFBa0MsVUFBUzhQLFlBQVQsQ0FBc0J4TixDQUF0QixFQUF3QmIsQ0FBeEIsRUFBMEI7QUFBQyxPQUFLdUosT0FBTCxDQUFhLENBQWIsRUFBZ0IsSUFBR3ZKLEtBQUcsSUFBTixFQUFXO0FBQUNBLFFBQUUsRUFBRjtBQUFLLE9BQUlpRCxJQUFFLEtBQUtrTCxTQUFMLENBQWVuTyxDQUFmLENBQU4sQ0FBd0IsSUFBSXpCLElBQUVzRixLQUFLVyxHQUFMLENBQVN4RSxDQUFULEVBQVdpRCxDQUFYLENBQU47QUFBQSxNQUFvQjNFLElBQUUsS0FBdEI7QUFBQSxNQUE0QkUsSUFBRSxDQUE5QjtBQUFBLE1BQWdDbUIsSUFBRSxDQUFsQyxDQUFvQyxLQUFJLElBQUk4QixJQUFFLENBQVYsRUFBWUEsSUFBRVosRUFBRWQsTUFBaEIsRUFBdUIsRUFBRTBCLENBQXpCLEVBQTJCO0FBQUMsUUFBSWlDLElBQUV5RixNQUFNdEksQ0FBTixFQUFRWSxDQUFSLENBQU4sQ0FBaUIsSUFBR2lDLElBQUUsQ0FBTCxFQUFPO0FBQUMsVUFBRzdDLEVBQUV3RCxNQUFGLENBQVM1QyxDQUFULEtBQWEsR0FBYixJQUFrQixLQUFLeU0sTUFBTCxNQUFlLENBQXBDLEVBQXNDO0FBQUM1UCxZQUFFLElBQUY7QUFBTztBQUFTLFNBQUUwQixJQUFFTCxDQUFGLEdBQUkrRCxDQUFOLENBQVEsSUFBRyxFQUFFbEYsQ0FBRixJQUFLeUUsQ0FBUixFQUFVO0FBQUMsV0FBS3FMLFNBQUwsQ0FBZS9QLENBQWYsRUFBa0IsS0FBS2dRLFVBQUwsQ0FBZ0I1TyxDQUFoQixFQUFrQixDQUFsQixFQUFxQm5CLElBQUUsQ0FBRixDQUFJbUIsSUFBRSxDQUFGO0FBQUk7QUFBQyxPQUFHbkIsSUFBRSxDQUFMLEVBQU87QUFBQyxTQUFLOFAsU0FBTCxDQUFlekssS0FBS1csR0FBTCxDQUFTeEUsQ0FBVCxFQUFXeEIsQ0FBWCxDQUFmLEVBQThCLEtBQUsrUCxVQUFMLENBQWdCNU8sQ0FBaEIsRUFBa0IsQ0FBbEI7QUFBcUIsT0FBR3JCLENBQUgsRUFBSztBQUFDeUosZUFBVzJCLElBQVgsQ0FBZ0JDLEtBQWhCLENBQXNCLElBQXRCLEVBQTJCLElBQTNCO0FBQWlDO0FBQUMsVUFBUzZFLGFBQVQsQ0FBdUJ2TCxDQUF2QixFQUF5QjNFLENBQXpCLEVBQTJCMEIsQ0FBM0IsRUFBNkI7QUFBQyxNQUFHLFlBQVUsT0FBTzFCLENBQXBCLEVBQXNCO0FBQUMsUUFBRzJFLElBQUUsQ0FBTCxFQUFPO0FBQUMsV0FBS3NHLE9BQUwsQ0FBYSxDQUFiO0FBQWdCLEtBQXhCLE1BQTRCO0FBQUMsV0FBS3ZCLFVBQUwsQ0FBZ0IvRSxDQUFoQixFQUFrQmpELENBQWxCLEVBQXFCLElBQUcsQ0FBQyxLQUFLeU8sT0FBTCxDQUFheEwsSUFBRSxDQUFmLENBQUosRUFBc0I7QUFBQyxhQUFLeUwsU0FBTCxDQUFlM0csV0FBV21ELEdBQVgsQ0FBZXlELFNBQWYsQ0FBeUIxTCxJQUFFLENBQTNCLENBQWYsRUFBNkMyTCxLQUE3QyxFQUFtRCxJQUFuRDtBQUF5RCxXQUFHLEtBQUt2QixNQUFMLEVBQUgsRUFBaUI7QUFBQyxhQUFLa0IsVUFBTCxDQUFnQixDQUFoQixFQUFrQixDQUFsQjtBQUFxQixjQUFNLENBQUMsS0FBS00sZUFBTCxDQUFxQnZRLENBQXJCLENBQVAsRUFBK0I7QUFBQyxhQUFLaVEsVUFBTCxDQUFnQixDQUFoQixFQUFrQixDQUFsQixFQUFxQixJQUFHLEtBQUtoQixTQUFMLEtBQWlCdEssQ0FBcEIsRUFBc0I7QUFBQyxlQUFLMEcsS0FBTCxDQUFXNUIsV0FBV21ELEdBQVgsQ0FBZXlELFNBQWYsQ0FBeUIxTCxJQUFFLENBQTNCLENBQVgsRUFBeUMsSUFBekM7QUFBK0M7QUFBQztBQUFDO0FBQUMsR0FBOVQsTUFBa1U7QUFBQyxRQUFJN0IsSUFBRSxJQUFJdUcsS0FBSixFQUFOO0FBQUEsUUFBa0JwSixJQUFFMEUsSUFBRSxDQUF0QixDQUF3QjdCLEVBQUVyQixNQUFGLEdBQVMsQ0FBQ2tELEtBQUcsQ0FBSixJQUFPLENBQWhCLENBQWtCM0UsRUFBRXdRLFNBQUYsQ0FBWTFOLENBQVosRUFBZSxJQUFHN0MsSUFBRSxDQUFMLEVBQU87QUFBQzZDLFFBQUUsQ0FBRixLQUFPLENBQUMsS0FBRzdDLENBQUosSUFBTyxDQUFkO0FBQWlCLEtBQXpCLE1BQTZCO0FBQUM2QyxRQUFFLENBQUYsSUFBSyxDQUFMO0FBQU8sVUFBSzZHLFVBQUwsQ0FBZ0I3RyxDQUFoQixFQUFrQixHQUFsQjtBQUF1QjtBQUFDLFVBQVMyTixhQUFULEdBQXdCO0FBQUMsTUFBSXRRLElBQUUsS0FBSzBCLENBQVg7QUFBQSxNQUFhc0IsSUFBRSxJQUFJa0csS0FBSixFQUFmLENBQTJCbEcsRUFBRSxDQUFGLElBQUssS0FBS3BCLENBQVYsQ0FBWSxJQUFJL0IsSUFBRSxLQUFLa0ssRUFBTCxHQUFTL0osSUFBRSxLQUFLK0osRUFBUixHQUFZLENBQTFCO0FBQUEsTUFBNEJ2RixDQUE1QjtBQUFBLE1BQThCekUsSUFBRSxDQUFoQyxDQUFrQyxJQUFHQyxNQUFJLENBQVAsRUFBUztBQUFDLFFBQUdILElBQUUsS0FBS2tLLEVBQVAsSUFBVyxDQUFDdkYsSUFBRSxLQUFLeEUsQ0FBTCxLQUFTSCxDQUFaLEtBQWdCLENBQUMsS0FBSytCLENBQUwsR0FBTyxLQUFLb0ksRUFBYixLQUFrQm5LLENBQWhELEVBQWtEO0FBQUNtRCxRQUFFakQsR0FBRixJQUFPeUUsSUFBRyxLQUFLNUMsQ0FBTCxJQUFTLEtBQUttSSxFQUFMLEdBQVFsSyxDQUEzQjtBQUErQixZQUFNRyxLQUFHLENBQVQsRUFBVztBQUFDLFVBQUdILElBQUUsQ0FBTCxFQUFPO0FBQUMyRSxZQUFFLENBQUMsS0FBS3hFLENBQUwsSUFBUyxDQUFDLEtBQUdILENBQUosSUFBTyxDQUFqQixLQUF1QixJQUFFQSxDQUEzQixDQUE4QjJFLEtBQUcsS0FBSyxFQUFFeEUsQ0FBUCxNQUFZSCxLQUFHLEtBQUtrSyxFQUFMLEdBQVEsQ0FBdkIsQ0FBSDtBQUE2QixPQUFuRSxNQUF1RTtBQUFDdkYsWUFBRyxLQUFLeEUsQ0FBTCxNQUFVSCxLQUFHLENBQWIsQ0FBRCxHQUFrQixHQUFwQixDQUF3QixJQUFHQSxLQUFHLENBQU4sRUFBUTtBQUFDQSxlQUFHLEtBQUtrSyxFQUFSLENBQVcsRUFBRS9KLENBQUY7QUFBSTtBQUFDLFdBQUcsQ0FBQ3dFLElBQUUsR0FBSCxLQUFTLENBQVosRUFBYztBQUFDQSxhQUFHLENBQUMsR0FBSjtBQUFRLFdBQUd6RSxLQUFHLENBQUgsSUFBTSxDQUFDLEtBQUs2QixDQUFMLEdBQU8sR0FBUixNQUFlNEMsSUFBRSxHQUFqQixDQUFULEVBQStCO0FBQUMsVUFBRXpFLENBQUY7QUFBSSxXQUFHQSxJQUFFLENBQUYsSUFBS3lFLEtBQUcsS0FBSzVDLENBQWhCLEVBQWtCO0FBQUNvQixVQUFFakQsR0FBRixJQUFPeUUsQ0FBUDtBQUFTO0FBQUM7QUFBQyxVQUFPeEIsQ0FBUDtBQUFTLFVBQVN1TixRQUFULENBQWtCdlEsQ0FBbEIsRUFBb0I7QUFBQyxTQUFPLEtBQUt3TSxTQUFMLENBQWV4TSxDQUFmLEtBQW1CLENBQTFCO0FBQTZCLFVBQVN3USxLQUFULENBQWV4USxDQUFmLEVBQWlCO0FBQUMsU0FBTyxLQUFLd00sU0FBTCxDQUFleE0sQ0FBZixJQUFrQixDQUFuQixHQUFzQixJQUF0QixHQUEyQkEsQ0FBakM7QUFBbUMsVUFBU3lRLEtBQVQsQ0FBZXpRLENBQWYsRUFBaUI7QUFBQyxTQUFPLEtBQUt3TSxTQUFMLENBQWV4TSxDQUFmLElBQWtCLENBQW5CLEdBQXNCLElBQXRCLEdBQTJCQSxDQUFqQztBQUFtQyxVQUFTMFEsWUFBVCxDQUFzQjFOLENBQXRCLEVBQXdCekIsQ0FBeEIsRUFBMEIxQixDQUExQixFQUE0QjtBQUFDLE1BQUk4QyxDQUFKO0FBQUEsTUFBTTdDLENBQU47QUFBQSxNQUFRRSxJQUFFb0YsS0FBS2YsR0FBTCxDQUFTckIsRUFBRXRCLENBQVgsRUFBYSxLQUFLQSxDQUFsQixDQUFWLENBQStCLEtBQUlpQixJQUFFLENBQU4sRUFBUUEsSUFBRTNDLENBQVYsRUFBWSxFQUFFMkMsQ0FBZCxFQUFnQjtBQUFDOUMsTUFBRThDLENBQUYsSUFBS3BCLEVBQUUsS0FBS29CLENBQUwsQ0FBRixFQUFVSyxFQUFFTCxDQUFGLENBQVYsQ0FBTDtBQUFxQixPQUFHSyxFQUFFdEIsQ0FBRixHQUFJLEtBQUtBLENBQVosRUFBYztBQUFDNUIsUUFBRWtELEVBQUVwQixDQUFGLEdBQUksS0FBS29JLEVBQVgsQ0FBYyxLQUFJckgsSUFBRTNDLENBQU4sRUFBUTJDLElBQUUsS0FBS2pCLENBQWYsRUFBaUIsRUFBRWlCLENBQW5CLEVBQXFCO0FBQUM5QyxRQUFFOEMsQ0FBRixJQUFLcEIsRUFBRSxLQUFLb0IsQ0FBTCxDQUFGLEVBQVU3QyxDQUFWLENBQUw7QUFBa0IsT0FBRTRCLENBQUYsR0FBSSxLQUFLQSxDQUFUO0FBQVcsR0FBaEYsTUFBb0Y7QUFBQzVCLFFBQUUsS0FBSzhCLENBQUwsR0FBTyxLQUFLb0ksRUFBZCxDQUFpQixLQUFJckgsSUFBRTNDLENBQU4sRUFBUTJDLElBQUVLLEVBQUV0QixDQUFaLEVBQWMsRUFBRWlCLENBQWhCLEVBQWtCO0FBQUM5QyxRQUFFOEMsQ0FBRixJQUFLcEIsRUFBRXpCLENBQUYsRUFBSWtELEVBQUVMLENBQUYsQ0FBSixDQUFMO0FBQWUsT0FBRWpCLENBQUYsR0FBSXNCLEVBQUV0QixDQUFOO0FBQVEsS0FBRUUsQ0FBRixHQUFJTCxFQUFFLEtBQUtLLENBQVAsRUFBU29CLEVBQUVwQixDQUFYLENBQUosQ0FBa0IvQixFQUFFZ0MsS0FBRjtBQUFVLFVBQVM4TyxNQUFULENBQWdCNVEsQ0FBaEIsRUFBa0JDLENBQWxCLEVBQW9CO0FBQUMsU0FBT0QsSUFBRUMsQ0FBVDtBQUFXLFVBQVM0USxLQUFULENBQWU1USxDQUFmLEVBQWlCO0FBQUMsTUFBSWdELElBQUV5RyxLQUFOLENBQVksS0FBS3dHLFNBQUwsQ0FBZWpRLENBQWYsRUFBaUIyUSxNQUFqQixFQUF3QjNOLENBQXhCLEVBQTJCLE9BQU9BLENBQVA7QUFBUyxVQUFTbU4sS0FBVCxDQUFlcFEsQ0FBZixFQUFpQkMsQ0FBakIsRUFBbUI7QUFBQyxTQUFPRCxJQUFFQyxDQUFUO0FBQVcsVUFBUzZRLElBQVQsQ0FBYzdRLENBQWQsRUFBZ0I7QUFBQyxNQUFJZ0QsSUFBRXlHLEtBQU4sQ0FBWSxLQUFLd0csU0FBTCxDQUFlalEsQ0FBZixFQUFpQm1RLEtBQWpCLEVBQXVCbk4sQ0FBdkIsRUFBMEIsT0FBT0EsQ0FBUDtBQUFTLFVBQVM4TixNQUFULENBQWdCL1EsQ0FBaEIsRUFBa0JDLENBQWxCLEVBQW9CO0FBQUMsU0FBT0QsSUFBRUMsQ0FBVDtBQUFXLFVBQVMrUSxLQUFULENBQWUvUSxDQUFmLEVBQWlCO0FBQUMsTUFBSWdELElBQUV5RyxLQUFOLENBQVksS0FBS3dHLFNBQUwsQ0FBZWpRLENBQWYsRUFBaUI4USxNQUFqQixFQUF3QjlOLENBQXhCLEVBQTJCLE9BQU9BLENBQVA7QUFBUyxVQUFTZ08sU0FBVCxDQUFtQmpSLENBQW5CLEVBQXFCQyxDQUFyQixFQUF1QjtBQUFDLFNBQU9ELElBQUUsQ0FBQ0MsQ0FBVjtBQUFZLFVBQVNpUixRQUFULENBQWtCalIsQ0FBbEIsRUFBb0I7QUFBQyxNQUFJZ0QsSUFBRXlHLEtBQU4sQ0FBWSxLQUFLd0csU0FBTCxDQUFlalEsQ0FBZixFQUFpQmdSLFNBQWpCLEVBQTJCaE8sQ0FBM0IsRUFBOEIsT0FBT0EsQ0FBUDtBQUFTLFVBQVNrTyxLQUFULEdBQWdCO0FBQUMsTUFBSWxSLElBQUV5SixLQUFOLENBQVksS0FBSSxJQUFJMUosSUFBRSxDQUFWLEVBQVlBLElBQUUsS0FBSzJCLENBQW5CLEVBQXFCLEVBQUUzQixDQUF2QixFQUF5QjtBQUFDQyxNQUFFRCxDQUFGLElBQUssS0FBS2lLLEVBQUwsR0FBUSxDQUFDLEtBQUtqSyxDQUFMLENBQWQ7QUFBc0IsS0FBRTJCLENBQUYsR0FBSSxLQUFLQSxDQUFULENBQVcxQixFQUFFNEIsQ0FBRixHQUFJLENBQUMsS0FBS0EsQ0FBVixDQUFZLE9BQU81QixDQUFQO0FBQVMsVUFBU21SLFdBQVQsQ0FBcUJuUixDQUFyQixFQUF1QjtBQUFDLE1BQUlELElBQUUwSixLQUFOLENBQVksSUFBR3pKLElBQUUsQ0FBTCxFQUFPO0FBQUMsU0FBSzJNLFFBQUwsQ0FBYyxDQUFDM00sQ0FBZixFQUFpQkQsQ0FBakI7QUFBb0IsR0FBNUIsTUFBZ0M7QUFBQyxTQUFLdU0sUUFBTCxDQUFjdE0sQ0FBZCxFQUFnQkQsQ0FBaEI7QUFBbUIsVUFBT0EsQ0FBUDtBQUFTLFVBQVNxUixZQUFULENBQXNCcFIsQ0FBdEIsRUFBd0I7QUFBQyxNQUFJRCxJQUFFMEosS0FBTixDQUFZLElBQUd6SixJQUFFLENBQUwsRUFBTztBQUFDLFNBQUtzTSxRQUFMLENBQWMsQ0FBQ3RNLENBQWYsRUFBaUJELENBQWpCO0FBQW9CLEdBQTVCLE1BQWdDO0FBQUMsU0FBSzRNLFFBQUwsQ0FBYzNNLENBQWQsRUFBZ0JELENBQWhCO0FBQW1CLFVBQU9BLENBQVA7QUFBUyxVQUFTc1IsSUFBVCxDQUFjdFIsQ0FBZCxFQUFnQjtBQUFDLE1BQUdBLEtBQUcsQ0FBTixFQUFRO0FBQUMsV0FBTyxDQUFDLENBQVI7QUFBVSxPQUFJQyxJQUFFLENBQU4sQ0FBUSxJQUFHLENBQUNELElBQUUsS0FBSCxLQUFXLENBQWQsRUFBZ0I7QUFBQ0EsVUFBSSxFQUFKLENBQU9DLEtBQUcsRUFBSDtBQUFNLE9BQUcsQ0FBQ0QsSUFBRSxHQUFILEtBQVMsQ0FBWixFQUFjO0FBQUNBLFVBQUksQ0FBSixDQUFNQyxLQUFHLENBQUg7QUFBSyxPQUFHLENBQUNELElBQUUsRUFBSCxLQUFRLENBQVgsRUFBYTtBQUFDQSxVQUFJLENBQUosQ0FBTUMsS0FBRyxDQUFIO0FBQUssT0FBRyxDQUFDRCxJQUFFLENBQUgsS0FBTyxDQUFWLEVBQVk7QUFBQ0EsVUFBSSxDQUFKLENBQU1DLEtBQUcsQ0FBSDtBQUFLLE9BQUcsQ0FBQ0QsSUFBRSxDQUFILEtBQU8sQ0FBVixFQUFZO0FBQUMsTUFBRUMsQ0FBRjtBQUFJLFVBQU9BLENBQVA7QUFBUyxVQUFTc1IsaUJBQVQsR0FBNEI7QUFBQyxPQUFJLElBQUl2UixJQUFFLENBQVYsRUFBWUEsSUFBRSxLQUFLMkIsQ0FBbkIsRUFBcUIsRUFBRTNCLENBQXZCLEVBQXlCO0FBQUMsUUFBRyxLQUFLQSxDQUFMLEtBQVMsQ0FBWixFQUFjO0FBQUMsYUFBT0EsSUFBRSxLQUFLZ0ssRUFBUCxHQUFVc0gsS0FBSyxLQUFLdFIsQ0FBTCxDQUFMLENBQWpCO0FBQStCO0FBQUMsT0FBRyxLQUFLNkIsQ0FBTCxHQUFPLENBQVYsRUFBWTtBQUFDLFdBQU8sS0FBS0YsQ0FBTCxHQUFPLEtBQUtxSSxFQUFuQjtBQUFzQixVQUFPLENBQUMsQ0FBUjtBQUFVLFVBQVN3SCxJQUFULENBQWN4UixDQUFkLEVBQWdCO0FBQUMsTUFBSUMsSUFBRSxDQUFOLENBQVEsT0FBTUQsS0FBRyxDQUFULEVBQVc7QUFBQ0EsU0FBR0EsSUFBRSxDQUFMLENBQU8sRUFBRUMsQ0FBRjtBQUFJLFVBQU9BLENBQVA7QUFBUyxVQUFTd1IsVUFBVCxHQUFxQjtBQUFDLE1BQUl4TyxJQUFFLENBQU47QUFBQSxNQUFRakQsSUFBRSxLQUFLNkIsQ0FBTCxHQUFPLEtBQUtvSSxFQUF0QixDQUF5QixLQUFJLElBQUloSyxJQUFFLENBQVYsRUFBWUEsSUFBRSxLQUFLMEIsQ0FBbkIsRUFBcUIsRUFBRTFCLENBQXZCLEVBQXlCO0FBQUNnRCxTQUFHdU8sS0FBSyxLQUFLdlIsQ0FBTCxJQUFRRCxDQUFiLENBQUg7QUFBbUIsVUFBT2lELENBQVA7QUFBUyxVQUFTeU8sU0FBVCxDQUFtQnpSLENBQW5CLEVBQXFCO0FBQUMsTUFBSUQsSUFBRXFGLEtBQUtjLEtBQUwsQ0FBV2xHLElBQUUsS0FBSytKLEVBQWxCLENBQU4sQ0FBNEIsSUFBR2hLLEtBQUcsS0FBSzJCLENBQVgsRUFBYTtBQUFDLFdBQU8sS0FBS0UsQ0FBTCxJQUFRLENBQWY7QUFBa0IsVUFBTyxDQUFDLEtBQUs3QixDQUFMLElBQVMsS0FBSUMsSUFBRSxLQUFLK0osRUFBckIsS0FBNEIsQ0FBbkM7QUFBc0MsVUFBUzJILFlBQVQsQ0FBc0IxTyxDQUF0QixFQUF3QmhELENBQXhCLEVBQTBCO0FBQUMsTUFBSUQsSUFBRXVKLFdBQVdtRCxHQUFYLENBQWV5RCxTQUFmLENBQXlCbE4sQ0FBekIsQ0FBTixDQUFrQyxLQUFLaU4sU0FBTCxDQUFlbFEsQ0FBZixFQUFpQkMsQ0FBakIsRUFBbUJELENBQW5CLEVBQXNCLE9BQU9BLENBQVA7QUFBUyxVQUFTNFIsUUFBVCxDQUFrQjVSLENBQWxCLEVBQW9CO0FBQUMsU0FBTyxLQUFLNlIsU0FBTCxDQUFlN1IsQ0FBZixFQUFpQm9RLEtBQWpCLENBQVA7QUFBK0IsVUFBUzBCLFVBQVQsQ0FBb0I5UixDQUFwQixFQUFzQjtBQUFDLFNBQU8sS0FBSzZSLFNBQUwsQ0FBZTdSLENBQWYsRUFBaUJpUixTQUFqQixDQUFQO0FBQW1DLFVBQVNjLFNBQVQsQ0FBbUIvUixDQUFuQixFQUFxQjtBQUFDLFNBQU8sS0FBSzZSLFNBQUwsQ0FBZTdSLENBQWYsRUFBaUIrUSxNQUFqQixDQUFQO0FBQWdDLFVBQVNpQixRQUFULENBQWtCcFAsQ0FBbEIsRUFBb0I2QixDQUFwQixFQUFzQjtBQUFDLE1BQUkzRSxJQUFFLENBQU47QUFBQSxNQUFRQyxJQUFFLENBQVY7QUFBQSxNQUFZRSxJQUFFb0YsS0FBS2YsR0FBTCxDQUFTMUIsRUFBRWpCLENBQVgsRUFBYSxLQUFLQSxDQUFsQixDQUFkLENBQW1DLE9BQU03QixJQUFFRyxDQUFSLEVBQVU7QUFBQ0YsU0FBRyxLQUFLRCxDQUFMLElBQVE4QyxFQUFFOUMsQ0FBRixDQUFYLENBQWdCMkUsRUFBRTNFLEdBQUYsSUFBT0MsSUFBRSxLQUFLa0ssRUFBZCxDQUFpQmxLLE1BQUksS0FBS2lLLEVBQVQ7QUFBWSxPQUFHcEgsRUFBRWpCLENBQUYsR0FBSSxLQUFLQSxDQUFaLEVBQWM7QUFBQzVCLFNBQUc2QyxFQUFFZixDQUFMLENBQU8sT0FBTS9CLElBQUUsS0FBSzZCLENBQWIsRUFBZTtBQUFDNUIsV0FBRyxLQUFLRCxDQUFMLENBQUgsQ0FBVzJFLEVBQUUzRSxHQUFGLElBQU9DLElBQUUsS0FBS2tLLEVBQWQsQ0FBaUJsSyxNQUFJLEtBQUtpSyxFQUFUO0FBQVksVUFBRyxLQUFLbkksQ0FBUjtBQUFVLEdBQXhGLE1BQTRGO0FBQUM5QixTQUFHLEtBQUs4QixDQUFSLENBQVUsT0FBTS9CLElBQUU4QyxFQUFFakIsQ0FBVixFQUFZO0FBQUM1QixXQUFHNkMsRUFBRTlDLENBQUYsQ0FBSCxDQUFRMkUsRUFBRTNFLEdBQUYsSUFBT0MsSUFBRSxLQUFLa0ssRUFBZCxDQUFpQmxLLE1BQUksS0FBS2lLLEVBQVQ7QUFBWSxVQUFHcEgsRUFBRWYsQ0FBTDtBQUFPLEtBQUVBLENBQUYsR0FBSzlCLElBQUUsQ0FBSCxHQUFNLENBQUMsQ0FBUCxHQUFTLENBQWIsQ0FBZSxJQUFHQSxJQUFFLENBQUwsRUFBTztBQUFDMEUsTUFBRTNFLEdBQUYsSUFBT0MsQ0FBUDtBQUFTLEdBQWpCLE1BQXFCO0FBQUMsUUFBR0EsSUFBRSxDQUFDLENBQU4sRUFBUTtBQUFDMEUsUUFBRTNFLEdBQUYsSUFBTyxLQUFLb0ssRUFBTCxHQUFRbkssQ0FBZjtBQUFpQjtBQUFDLEtBQUU0QixDQUFGLEdBQUk3QixDQUFKLENBQU0yRSxFQUFFM0MsS0FBRjtBQUFVLFVBQVNtUSxLQUFULENBQWVoUyxDQUFmLEVBQWlCO0FBQUMsTUFBSWdELElBQUV5RyxLQUFOLENBQVksS0FBS3dJLEtBQUwsQ0FBV2pTLENBQVgsRUFBYWdELENBQWIsRUFBZ0IsT0FBT0EsQ0FBUDtBQUFTLFVBQVNrUCxVQUFULENBQW9CbFMsQ0FBcEIsRUFBc0I7QUFBQyxNQUFJZ0QsSUFBRXlHLEtBQU4sQ0FBWSxLQUFLeUIsS0FBTCxDQUFXbEwsQ0FBWCxFQUFhZ0QsQ0FBYixFQUFnQixPQUFPQSxDQUFQO0FBQVMsVUFBU21QLFVBQVQsQ0FBb0JuUyxDQUFwQixFQUFzQjtBQUFDLE1BQUlnRCxJQUFFeUcsS0FBTixDQUFZLEtBQUsyRCxVQUFMLENBQWdCcE4sQ0FBaEIsRUFBa0JnRCxDQUFsQixFQUFxQixPQUFPQSxDQUFQO0FBQVMsVUFBU29QLFFBQVQsR0FBbUI7QUFBQyxNQUFJclMsSUFBRTBKLEtBQU4sQ0FBWSxLQUFLOEQsUUFBTCxDQUFjeE4sQ0FBZCxFQUFpQixPQUFPQSxDQUFQO0FBQVMsVUFBU3NTLFFBQVQsQ0FBa0JyUyxDQUFsQixFQUFvQjtBQUFDLE1BQUlnRCxJQUFFeUcsS0FBTixDQUFZLEtBQUtvRCxRQUFMLENBQWM3TSxDQUFkLEVBQWdCZ0QsQ0FBaEIsRUFBa0IsSUFBbEIsRUFBd0IsT0FBT0EsQ0FBUDtBQUFTLFVBQVNzUCxXQUFULENBQXFCdFMsQ0FBckIsRUFBdUI7QUFBQyxNQUFJZ0QsSUFBRXlHLEtBQU4sQ0FBWSxLQUFLb0QsUUFBTCxDQUFjN00sQ0FBZCxFQUFnQixJQUFoQixFQUFxQmdELENBQXJCLEVBQXdCLE9BQU9BLENBQVA7QUFBUyxVQUFTdVAsb0JBQVQsQ0FBOEJ2UyxDQUE5QixFQUFnQztBQUFDLE1BQUkyQyxJQUFFOEcsS0FBTjtBQUFBLE1BQVl6RyxJQUFFeUcsS0FBZCxDQUFvQixLQUFLb0QsUUFBTCxDQUFjN00sQ0FBZCxFQUFnQjJDLENBQWhCLEVBQWtCSyxDQUFsQixFQUFxQixPQUFPLElBQUlrRyxLQUFKLENBQVV2RyxDQUFWLEVBQVlLLENBQVosQ0FBUDtBQUFzQixVQUFTd1AsWUFBVCxDQUFzQnpTLENBQXRCLEVBQXdCO0FBQUMsT0FBSyxLQUFLMkIsQ0FBVixJQUFhLEtBQUtvSSxFQUFMLENBQVEsQ0FBUixFQUFVL0osSUFBRSxDQUFaLEVBQWMsSUFBZCxFQUFtQixDQUFuQixFQUFxQixDQUFyQixFQUF1QixLQUFLMkIsQ0FBNUIsQ0FBYixDQUE0QyxFQUFFLEtBQUtBLENBQVAsQ0FBUyxLQUFLRyxLQUFMO0FBQWEsVUFBUzRRLGFBQVQsQ0FBdUJ6UyxDQUF2QixFQUF5QkQsQ0FBekIsRUFBMkI7QUFBQyxNQUFHQyxLQUFHLENBQU4sRUFBUTtBQUFDO0FBQU8sVUFBTSxLQUFLMEIsQ0FBTCxJQUFRM0IsQ0FBZCxFQUFnQjtBQUFDLFNBQUssS0FBSzJCLENBQUwsRUFBTCxJQUFlLENBQWY7QUFBaUIsUUFBSzNCLENBQUwsS0FBU0MsQ0FBVCxDQUFXLE9BQU0sS0FBS0QsQ0FBTCxLQUFTLEtBQUtrSyxFQUFwQixFQUF1QjtBQUFDLFNBQUtsSyxDQUFMLEtBQVMsS0FBS2tLLEVBQWQsQ0FBaUIsSUFBRyxFQUFFbEssQ0FBRixJQUFLLEtBQUsyQixDQUFiLEVBQWU7QUFBQyxXQUFLLEtBQUtBLENBQUwsRUFBTCxJQUFlLENBQWY7QUFBaUIsT0FBRSxLQUFLM0IsQ0FBTCxDQUFGO0FBQVU7QUFBQyxVQUFTMlMsT0FBVCxHQUFrQixDQUFFLFVBQVNDLElBQVQsQ0FBYzVTLENBQWQsRUFBZ0I7QUFBQyxTQUFPQSxDQUFQO0FBQVMsVUFBUzZTLE1BQVQsQ0FBZ0I3UyxDQUFoQixFQUFrQmlELENBQWxCLEVBQW9CaEQsQ0FBcEIsRUFBc0I7QUFBQ0QsSUFBRXFOLFVBQUYsQ0FBYXBLLENBQWIsRUFBZWhELENBQWY7QUFBa0IsVUFBUzZTLE1BQVQsQ0FBZ0I5UyxDQUFoQixFQUFrQkMsQ0FBbEIsRUFBb0I7QUFBQ0QsSUFBRXdOLFFBQUYsQ0FBV3ZOLENBQVg7QUFBYyxTQUFRTyxTQUFSLENBQWtCaU4sT0FBbEIsR0FBMEJtRixJQUExQixDQUErQkQsUUFBUW5TLFNBQVIsQ0FBa0JrTixNQUFsQixHQUF5QmtGLElBQXpCLENBQThCRCxRQUFRblMsU0FBUixDQUFrQm1OLEtBQWxCLEdBQXdCa0YsTUFBeEIsQ0FBK0JGLFFBQVFuUyxTQUFSLENBQWtCb04sS0FBbEIsR0FBd0JrRixNQUF4QixDQUErQixTQUFTQyxLQUFULENBQWUvUyxDQUFmLEVBQWlCO0FBQUMsU0FBTyxLQUFLOE8sR0FBTCxDQUFTOU8sQ0FBVCxFQUFXLElBQUkyUyxPQUFKLEVBQVgsQ0FBUDtBQUFpQyxVQUFTSyxrQkFBVCxDQUE0Qi9TLENBQTVCLEVBQThCd0UsQ0FBOUIsRUFBZ0MzRSxDQUFoQyxFQUFrQztBQUFDLE1BQUk4QyxJQUFFeUMsS0FBS2YsR0FBTCxDQUFTLEtBQUszQyxDQUFMLEdBQU8xQixFQUFFMEIsQ0FBbEIsRUFBb0I4QyxDQUFwQixDQUFOLENBQTZCM0UsRUFBRStCLENBQUYsR0FBSSxDQUFKLENBQU0vQixFQUFFNkIsQ0FBRixHQUFJaUIsQ0FBSixDQUFNLE9BQU1BLElBQUUsQ0FBUixFQUFVO0FBQUM5QyxNQUFFLEVBQUU4QyxDQUFKLElBQU8sQ0FBUDtBQUFTLE9BQUlLLENBQUosQ0FBTSxLQUFJQSxJQUFFbkQsRUFBRTZCLENBQUYsR0FBSSxLQUFLQSxDQUFmLEVBQWlCaUIsSUFBRUssQ0FBbkIsRUFBcUIsRUFBRUwsQ0FBdkIsRUFBeUI7QUFBQzlDLE1BQUU4QyxJQUFFLEtBQUtqQixDQUFULElBQVksS0FBS29JLEVBQUwsQ0FBUSxDQUFSLEVBQVU5SixFQUFFMkMsQ0FBRixDQUFWLEVBQWU5QyxDQUFmLEVBQWlCOEMsQ0FBakIsRUFBbUIsQ0FBbkIsRUFBcUIsS0FBS2pCLENBQTFCLENBQVo7QUFBeUMsUUFBSXNCLElBQUVvQyxLQUFLZixHQUFMLENBQVNyRSxFQUFFMEIsQ0FBWCxFQUFhOEMsQ0FBYixDQUFOLEVBQXNCN0IsSUFBRUssQ0FBeEIsRUFBMEIsRUFBRUwsQ0FBNUIsRUFBOEI7QUFBQyxTQUFLbUgsRUFBTCxDQUFRLENBQVIsRUFBVTlKLEVBQUUyQyxDQUFGLENBQVYsRUFBZTlDLENBQWYsRUFBaUI4QyxDQUFqQixFQUFtQixDQUFuQixFQUFxQjZCLElBQUU3QixDQUF2QjtBQUEwQixLQUFFZCxLQUFGO0FBQVUsVUFBU21SLGtCQUFULENBQTRCaFQsQ0FBNUIsRUFBOEJILENBQTlCLEVBQWdDOEMsQ0FBaEMsRUFBa0M7QUFBQyxJQUFFOUMsQ0FBRixDQUFJLElBQUltRCxJQUFFTCxFQUFFakIsQ0FBRixHQUFJLEtBQUtBLENBQUwsR0FBTzFCLEVBQUUwQixDQUFULEdBQVc3QixDQUFyQixDQUF1QjhDLEVBQUVmLENBQUYsR0FBSSxDQUFKLENBQU0sT0FBTSxFQUFFb0IsQ0FBRixJQUFLLENBQVgsRUFBYTtBQUFDTCxNQUFFSyxDQUFGLElBQUssQ0FBTDtBQUFPLFFBQUlBLElBQUVvQyxLQUFLakIsR0FBTCxDQUFTdEUsSUFBRSxLQUFLNkIsQ0FBaEIsRUFBa0IsQ0FBbEIsQ0FBTixFQUEyQnNCLElBQUVoRCxFQUFFMEIsQ0FBL0IsRUFBaUMsRUFBRXNCLENBQW5DLEVBQXFDO0FBQUNMLE1BQUUsS0FBS2pCLENBQUwsR0FBT3NCLENBQVAsR0FBU25ELENBQVgsSUFBYyxLQUFLaUssRUFBTCxDQUFRakssSUFBRW1ELENBQVYsRUFBWWhELEVBQUVnRCxDQUFGLENBQVosRUFBaUJMLENBQWpCLEVBQW1CLENBQW5CLEVBQXFCLENBQXJCLEVBQXVCLEtBQUtqQixDQUFMLEdBQU9zQixDQUFQLEdBQVNuRCxDQUFoQyxDQUFkO0FBQWlELEtBQUVnQyxLQUFGLEdBQVVjLEVBQUUrSixTQUFGLENBQVksQ0FBWixFQUFjL0osQ0FBZDtBQUFpQixVQUFTc1EsT0FBVCxDQUFpQmxULENBQWpCLEVBQW1CO0FBQUMsT0FBS21ULEVBQUwsR0FBUXpKLEtBQVIsQ0FBYyxLQUFLMEosRUFBTCxHQUFRMUosS0FBUixDQUFjSCxXQUFXbUQsR0FBWCxDQUFlRixTQUFmLENBQXlCLElBQUV4TSxFQUFFMkIsQ0FBN0IsRUFBK0IsS0FBS3dSLEVBQXBDLEVBQXdDLEtBQUtFLEVBQUwsR0FBUSxLQUFLRixFQUFMLENBQVFHLE1BQVIsQ0FBZXRULENBQWYsQ0FBUixDQUEwQixLQUFLcUMsQ0FBTCxHQUFPckMsQ0FBUDtBQUFTLFVBQVN1VCxjQUFULENBQXdCdlQsQ0FBeEIsRUFBMEI7QUFBQyxNQUFHQSxFQUFFNkIsQ0FBRixHQUFJLENBQUosSUFBTzdCLEVBQUUyQixDQUFGLEdBQUksSUFBRSxLQUFLVSxDQUFMLENBQU9WLENBQXZCLEVBQXlCO0FBQUMsV0FBTzNCLEVBQUVpTixHQUFGLENBQU0sS0FBSzVLLENBQVgsQ0FBUDtBQUFxQixHQUEvQyxNQUFtRDtBQUFDLFFBQUdyQyxFQUFFeU0sU0FBRixDQUFZLEtBQUtwSyxDQUFqQixJQUFvQixDQUF2QixFQUF5QjtBQUFDLGFBQU9yQyxDQUFQO0FBQVMsS0FBbkMsTUFBdUM7QUFBQyxVQUFJQyxJQUFFeUosS0FBTixDQUFZMUosRUFBRXNNLE1BQUYsQ0FBU3JNLENBQVQsRUFBWSxLQUFLcU4sTUFBTCxDQUFZck4sQ0FBWixFQUFlLE9BQU9BLENBQVA7QUFBUztBQUFDO0FBQUMsVUFBU3VULGFBQVQsQ0FBdUJ4VCxDQUF2QixFQUF5QjtBQUFDLFNBQU9BLENBQVA7QUFBUyxVQUFTeVQsYUFBVCxDQUF1QnpULENBQXZCLEVBQXlCO0FBQUNBLElBQUUyTSxTQUFGLENBQVksS0FBS3RLLENBQUwsQ0FBT1YsQ0FBUCxHQUFTLENBQXJCLEVBQXVCLEtBQUt3UixFQUE1QixFQUFnQyxJQUFHblQsRUFBRTJCLENBQUYsR0FBSSxLQUFLVSxDQUFMLENBQU9WLENBQVAsR0FBUyxDQUFoQixFQUFrQjtBQUFDM0IsTUFBRTJCLENBQUYsR0FBSSxLQUFLVSxDQUFMLENBQU9WLENBQVAsR0FBUyxDQUFiLENBQWUzQixFQUFFOEIsS0FBRjtBQUFVLFFBQUt1UixFQUFMLENBQVFLLGVBQVIsQ0FBd0IsS0FBS1AsRUFBN0IsRUFBZ0MsS0FBSzlRLENBQUwsQ0FBT1YsQ0FBUCxHQUFTLENBQXpDLEVBQTJDLEtBQUt5UixFQUFoRCxFQUFvRCxLQUFLL1EsQ0FBTCxDQUFPc1IsZUFBUCxDQUF1QixLQUFLUCxFQUE1QixFQUErQixLQUFLL1EsQ0FBTCxDQUFPVixDQUFQLEdBQVMsQ0FBeEMsRUFBMEMsS0FBS3dSLEVBQS9DLEVBQW1ELE9BQU1uVCxFQUFFeU0sU0FBRixDQUFZLEtBQUswRyxFQUFqQixJQUFxQixDQUEzQixFQUE2QjtBQUFDblQsTUFBRStQLFVBQUYsQ0FBYSxDQUFiLEVBQWUsS0FBSzFOLENBQUwsQ0FBT1YsQ0FBUCxHQUFTLENBQXhCO0FBQTJCLEtBQUV3SixLQUFGLENBQVEsS0FBS2dJLEVBQWIsRUFBZ0JuVCxDQUFoQixFQUFtQixPQUFNQSxFQUFFeU0sU0FBRixDQUFZLEtBQUtwSyxDQUFqQixLQUFxQixDQUEzQixFQUE2QjtBQUFDckMsTUFBRW1MLEtBQUYsQ0FBUSxLQUFLOUksQ0FBYixFQUFlckMsQ0FBZjtBQUFrQjtBQUFDLFVBQVM0VCxZQUFULENBQXNCNVQsQ0FBdEIsRUFBd0JDLENBQXhCLEVBQTBCO0FBQUNELElBQUV3TixRQUFGLENBQVd2TixDQUFYLEVBQWMsS0FBS3FOLE1BQUwsQ0FBWXJOLENBQVo7QUFBZSxVQUFTNFQsWUFBVCxDQUFzQjdULENBQXRCLEVBQXdCaUQsQ0FBeEIsRUFBMEJoRCxDQUExQixFQUE0QjtBQUFDRCxJQUFFcU4sVUFBRixDQUFhcEssQ0FBYixFQUFlaEQsQ0FBZixFQUFrQixLQUFLcU4sTUFBTCxDQUFZck4sQ0FBWjtBQUFlLFNBQVFPLFNBQVIsQ0FBa0JpTixPQUFsQixHQUEwQjhGLGNBQTFCLENBQXlDTCxRQUFRMVMsU0FBUixDQUFrQmtOLE1BQWxCLEdBQXlCOEYsYUFBekIsQ0FBdUNOLFFBQVExUyxTQUFSLENBQWtCOE0sTUFBbEIsR0FBeUJtRyxhQUF6QixDQUF1Q1AsUUFBUTFTLFNBQVIsQ0FBa0JtTixLQUFsQixHQUF3QmtHLFlBQXhCLENBQXFDWCxRQUFRMVMsU0FBUixDQUFrQm9OLEtBQWxCLEdBQXdCZ0csWUFBeEIsQ0FBcUMsU0FBU0UsUUFBVCxDQUFrQmxTLENBQWxCLEVBQW9CNkMsQ0FBcEIsRUFBc0I7QUFBQyxNQUFJaEUsSUFBRW1CLEVBQUVtTixTQUFGLEVBQU47QUFBQSxNQUFvQnZOLENBQXBCO0FBQUEsTUFBc0J2QixJQUFFNkssSUFBSSxDQUFKLENBQXhCO0FBQUEsTUFBK0I1RyxDQUEvQixDQUFpQyxJQUFHekQsS0FBRyxDQUFOLEVBQVE7QUFBQyxXQUFPUixDQUFQO0FBQVMsR0FBbEIsTUFBc0I7QUFBQyxRQUFHUSxJQUFFLEVBQUwsRUFBUTtBQUFDZSxVQUFFLENBQUY7QUFBSSxLQUFiLE1BQWlCO0FBQUMsVUFBR2YsSUFBRSxFQUFMLEVBQVE7QUFBQ2UsWUFBRSxDQUFGO0FBQUksT0FBYixNQUFpQjtBQUFDLFlBQUdmLElBQUUsR0FBTCxFQUFTO0FBQUNlLGNBQUUsQ0FBRjtBQUFJLFNBQWQsTUFBa0I7QUFBQyxjQUFHZixJQUFFLEdBQUwsRUFBUztBQUFDZSxnQkFBRSxDQUFGO0FBQUksV0FBZCxNQUFrQjtBQUFDQSxnQkFBRSxDQUFGO0FBQUk7QUFBQztBQUFDO0FBQUM7QUFBQyxPQUFHZixJQUFFLENBQUwsRUFBTztBQUFDeUQsUUFBRSxJQUFJNkksT0FBSixDQUFZdEksQ0FBWixDQUFGO0FBQWlCLEdBQXpCLE1BQTZCO0FBQUMsUUFBR0EsRUFBRW9LLE1BQUYsRUFBSCxFQUFjO0FBQUMzSyxVQUFFLElBQUlnUCxPQUFKLENBQVl6TyxDQUFaLENBQUY7QUFBaUIsS0FBaEMsTUFBb0M7QUFBQ1AsVUFBRSxJQUFJNEosVUFBSixDQUFlckosQ0FBZixDQUFGO0FBQW9CO0FBQUMsT0FBSWxFLElBQUUsSUFBSTRJLEtBQUosRUFBTjtBQUFBLE1BQWtCdkcsSUFBRSxDQUFwQjtBQUFBLE1BQXNCZixJQUFFTCxJQUFFLENBQTFCO0FBQUEsTUFBNEJ4QixJQUFFLENBQUMsS0FBR3dCLENBQUosSUFBTyxDQUFyQyxDQUF1Q2pCLEVBQUUsQ0FBRixJQUFLMkQsRUFBRXVKLE9BQUYsQ0FBVSxJQUFWLENBQUwsQ0FBcUIsSUFBR2pNLElBQUUsQ0FBTCxFQUFPO0FBQUMsUUFBSW9HLElBQUU4QixLQUFOLENBQVl4RixFQUFFMEosS0FBRixDQUFRck4sRUFBRSxDQUFGLENBQVIsRUFBYXFILENBQWIsRUFBZ0IsT0FBTWhGLEtBQUc1QyxDQUFULEVBQVc7QUFBQ08sUUFBRXFDLENBQUYsSUFBSzhHLEtBQUwsQ0FBV3hGLEVBQUV5SixLQUFGLENBQVEvRixDQUFSLEVBQVVySCxFQUFFcUMsSUFBRSxDQUFKLENBQVYsRUFBaUJyQyxFQUFFcUMsQ0FBRixDQUFqQixFQUF1QkEsS0FBRyxDQUFIO0FBQUs7QUFBQyxPQUFJekIsSUFBRVMsRUFBRUQsQ0FBRixHQUFJLENBQVY7QUFBQSxNQUFZcUMsQ0FBWjtBQUFBLE1BQWNHLElBQUUsSUFBaEI7QUFBQSxNQUFxQmxCLElBQUV5RyxLQUF2QjtBQUFBLE1BQTZCN0IsQ0FBN0IsQ0FBK0JwSCxJQUFFa0wsTUFBTS9KLEVBQUVULENBQUYsQ0FBTixJQUFZLENBQWQsQ0FBZ0IsT0FBTUEsS0FBRyxDQUFULEVBQVc7QUFBQyxRQUFHVixLQUFHb0IsQ0FBTixFQUFRO0FBQUNtQyxVQUFHcEMsRUFBRVQsQ0FBRixLQUFPVixJQUFFb0IsQ0FBVixHQUFjN0IsQ0FBaEI7QUFBa0IsS0FBM0IsTUFBK0I7QUFBQ2dFLFVBQUUsQ0FBQ3BDLEVBQUVULENBQUYsSUFBTSxDQUFDLEtBQUlWLElBQUUsQ0FBUCxJQUFXLENBQWxCLEtBQXdCb0IsSUFBRXBCLENBQTVCLENBQStCLElBQUdVLElBQUUsQ0FBTCxFQUFPO0FBQUM2QyxhQUFHcEMsRUFBRVQsSUFBRSxDQUFKLEtBQVMsS0FBSzZJLEVBQUwsR0FBUXZKLENBQVIsR0FBVW9CLENBQXRCO0FBQXlCO0FBQUMsU0FBRUwsQ0FBRixDQUFJLE9BQU0sQ0FBQ3dDLElBQUUsQ0FBSCxLQUFPLENBQWIsRUFBZTtBQUFDQSxZQUFJLENBQUosQ0FBTSxFQUFFcEIsQ0FBRjtBQUFJLFNBQUcsQ0FBQ25DLEtBQUdtQyxDQUFKLElBQU8sQ0FBVixFQUFZO0FBQUNuQyxXQUFHLEtBQUt1SixFQUFSLENBQVcsRUFBRTdJLENBQUY7QUFBSSxTQUFHZ0QsQ0FBSCxFQUFLO0FBQUM1RCxRQUFFeUQsQ0FBRixFQUFLc0ksTUFBTCxDQUFZck0sQ0FBWixFQUFla0UsSUFBRSxLQUFGO0FBQVEsS0FBN0IsTUFBaUM7QUFBQyxhQUFNdkIsSUFBRSxDQUFSLEVBQVU7QUFBQ3NCLFVBQUUwSixLQUFGLENBQVEzTixDQUFSLEVBQVVnRCxDQUFWLEVBQWFpQixFQUFFMEosS0FBRixDQUFRM0ssQ0FBUixFQUFVaEQsQ0FBVixFQUFhMkMsS0FBRyxDQUFIO0FBQUssV0FBR0EsSUFBRSxDQUFMLEVBQU87QUFBQ3NCLFVBQUUwSixLQUFGLENBQVEzTixDQUFSLEVBQVVnRCxDQUFWO0FBQWEsT0FBckIsTUFBeUI7QUFBQzRFLFlBQUU1SCxDQUFGLENBQUlBLElBQUVnRCxDQUFGLENBQUlBLElBQUU0RSxDQUFGO0FBQUksU0FBRThGLEtBQUYsQ0FBUTFLLENBQVIsRUFBVTFDLEVBQUV5RCxDQUFGLENBQVYsRUFBZS9ELENBQWY7QUFBa0IsWUFBTWtCLEtBQUcsQ0FBSCxJQUFNLENBQUNTLEVBQUVULENBQUYsSUFBTSxLQUFHVixDQUFWLEtBQWUsQ0FBM0IsRUFBNkI7QUFBQ3lELFFBQUUwSixLQUFGLENBQVEzTixDQUFSLEVBQVVnRCxDQUFWLEVBQWE0RSxJQUFFNUgsQ0FBRixDQUFJQSxJQUFFZ0QsQ0FBRixDQUFJQSxJQUFFNEUsQ0FBRixDQUFJLElBQUcsRUFBRXBILENBQUYsR0FBSSxDQUFQLEVBQVM7QUFBQ0EsWUFBRSxLQUFLdUosRUFBTCxHQUFRLENBQVYsQ0FBWSxFQUFFN0ksQ0FBRjtBQUFJO0FBQUM7QUFBQyxVQUFPK0MsRUFBRXdKLE1BQUYsQ0FBU3pOLENBQVQsQ0FBUDtBQUFtQixVQUFTOFQsS0FBVCxDQUFlOVEsQ0FBZixFQUFpQjtBQUFDLE1BQUloRCxJQUFHLEtBQUs0QixDQUFMLEdBQU8sQ0FBUixHQUFXLEtBQUt5SixNQUFMLEVBQVgsR0FBeUIsS0FBS3BLLEtBQUwsRUFBL0IsQ0FBNEMsSUFBSU0sSUFBR3lCLEVBQUVwQixDQUFGLEdBQUksQ0FBTCxHQUFRb0IsRUFBRXFJLE1BQUYsRUFBUixHQUFtQnJJLEVBQUUvQixLQUFGLEVBQXpCLENBQW1DLElBQUdqQixFQUFFd00sU0FBRixDQUFZakwsQ0FBWixJQUFlLENBQWxCLEVBQW9CO0FBQUMsUUFBSTFCLElBQUVHLENBQU4sQ0FBUUEsSUFBRXVCLENBQUYsQ0FBSUEsSUFBRTFCLENBQUY7QUFBSSxPQUFJOEMsSUFBRTNDLEVBQUUrVCxlQUFGLEVBQU47QUFBQSxNQUEwQnZQLElBQUVqRCxFQUFFd1MsZUFBRixFQUE1QixDQUFnRCxJQUFHdlAsSUFBRSxDQUFMLEVBQU87QUFBQyxXQUFPeEUsQ0FBUDtBQUFTLE9BQUcyQyxJQUFFNkIsQ0FBTCxFQUFPO0FBQUNBLFFBQUU3QixDQUFGO0FBQUksT0FBRzZCLElBQUUsQ0FBTCxFQUFPO0FBQUN4RSxNQUFFMk0sUUFBRixDQUFXbkksQ0FBWCxFQUFheEUsQ0FBYixFQUFnQnVCLEVBQUVvTCxRQUFGLENBQVduSSxDQUFYLEVBQWFqRCxDQUFiO0FBQWdCLFVBQU12QixFQUFFeVAsTUFBRixLQUFXLENBQWpCLEVBQW1CO0FBQUMsUUFBRyxDQUFDOU0sSUFBRTNDLEVBQUUrVCxlQUFGLEVBQUgsSUFBd0IsQ0FBM0IsRUFBNkI7QUFBQy9ULFFBQUUyTSxRQUFGLENBQVdoSyxDQUFYLEVBQWEzQyxDQUFiO0FBQWdCLFNBQUcsQ0FBQzJDLElBQUVwQixFQUFFd1MsZUFBRixFQUFILElBQXdCLENBQTNCLEVBQTZCO0FBQUN4UyxRQUFFb0wsUUFBRixDQUFXaEssQ0FBWCxFQUFhcEIsQ0FBYjtBQUFnQixTQUFHdkIsRUFBRXdNLFNBQUYsQ0FBWWpMLENBQVosS0FBZ0IsQ0FBbkIsRUFBcUI7QUFBQ3ZCLFFBQUVrTCxLQUFGLENBQVEzSixDQUFSLEVBQVV2QixDQUFWLEVBQWFBLEVBQUUyTSxRQUFGLENBQVcsQ0FBWCxFQUFhM00sQ0FBYjtBQUFnQixLQUFuRCxNQUF1RDtBQUFDdUIsUUFBRTJKLEtBQUYsQ0FBUWxMLENBQVIsRUFBVXVCLENBQVYsRUFBYUEsRUFBRW9MLFFBQUYsQ0FBVyxDQUFYLEVBQWFwTCxDQUFiO0FBQWdCO0FBQUMsT0FBR2lELElBQUUsQ0FBTCxFQUFPO0FBQUNqRCxNQUFFK0ssUUFBRixDQUFXOUgsQ0FBWCxFQUFhakQsQ0FBYjtBQUFnQixVQUFPQSxDQUFQO0FBQVMsVUFBU3lTLFNBQVQsQ0FBbUJuVSxDQUFuQixFQUFxQjtBQUFDLE1BQUdBLEtBQUcsQ0FBTixFQUFRO0FBQUMsV0FBTyxDQUFQO0FBQVMsT0FBSW1ELElBQUUsS0FBS2lILEVBQUwsR0FBUXBLLENBQWQ7QUFBQSxNQUFnQkcsSUFBRyxLQUFLNEIsQ0FBTCxHQUFPLENBQVIsR0FBVy9CLElBQUUsQ0FBYixHQUFlLENBQWpDLENBQW1DLElBQUcsS0FBSzZCLENBQUwsR0FBTyxDQUFWLEVBQVk7QUFBQyxRQUFHc0IsS0FBRyxDQUFOLEVBQVE7QUFBQ2hELFVBQUUsS0FBSyxDQUFMLElBQVFILENBQVY7QUFBWSxLQUFyQixNQUF5QjtBQUFDLFdBQUksSUFBSUUsSUFBRSxLQUFLMkIsQ0FBTCxHQUFPLENBQWpCLEVBQW1CM0IsS0FBRyxDQUF0QixFQUF3QixFQUFFQSxDQUExQixFQUE0QjtBQUFDQyxZQUFFLENBQUNnRCxJQUFFaEQsQ0FBRixHQUFJLEtBQUtELENBQUwsQ0FBTCxJQUFjRixDQUFoQjtBQUFrQjtBQUFDO0FBQUMsVUFBT0csQ0FBUDtBQUFTLFVBQVNpVSxZQUFULENBQXNCelAsQ0FBdEIsRUFBd0I7QUFBQyxNQUFJdEUsSUFBRXNFLEVBQUVvSyxNQUFGLEVBQU4sQ0FBaUIsSUFBSSxLQUFLQSxNQUFMLE1BQWUxTyxDQUFoQixJQUFvQnNFLEVBQUVpTCxNQUFGLE1BQVksQ0FBbkMsRUFBcUM7QUFBQyxXQUFPbkcsV0FBVzJCLElBQWxCO0FBQXVCLE9BQUkxSCxJQUFFaUIsRUFBRXZELEtBQUYsRUFBTjtBQUFBLE1BQWdCTSxJQUFFLEtBQUtOLEtBQUwsRUFBbEIsQ0FBK0IsSUFBSW5CLElBQUUrSyxJQUFJLENBQUosQ0FBTjtBQUFBLE1BQWFoTCxJQUFFZ0wsSUFBSSxDQUFKLENBQWY7QUFBQSxNQUFzQjNKLElBQUUySixJQUFJLENBQUosQ0FBeEI7QUFBQSxNQUErQjVGLElBQUU0RixJQUFJLENBQUosQ0FBakMsQ0FBd0MsT0FBTXRILEVBQUVrTSxNQUFGLE1BQVksQ0FBbEIsRUFBb0I7QUFBQyxXQUFNbE0sRUFBRXFMLE1BQUYsRUFBTixFQUFpQjtBQUFDckwsUUFBRW9KLFFBQUYsQ0FBVyxDQUFYLEVBQWFwSixDQUFiLEVBQWdCLElBQUdyRCxDQUFILEVBQUs7QUFBQyxZQUFHLENBQUNKLEVBQUU4TyxNQUFGLEVBQUQsSUFBYSxDQUFDL08sRUFBRStPLE1BQUYsRUFBakIsRUFBNEI7QUFBQzlPLFlBQUVtUyxLQUFGLENBQVEsSUFBUixFQUFhblMsQ0FBYixFQUFnQkQsRUFBRXFMLEtBQUYsQ0FBUTFHLENBQVIsRUFBVTNFLENBQVY7QUFBYSxXQUFFOE0sUUFBRixDQUFXLENBQVgsRUFBYTdNLENBQWI7QUFBZ0IsT0FBaEYsTUFBb0Y7QUFBQyxZQUFHLENBQUNELEVBQUUrTyxNQUFGLEVBQUosRUFBZTtBQUFDL08sWUFBRXFMLEtBQUYsQ0FBUTFHLENBQVIsRUFBVTNFLENBQVY7QUFBYTtBQUFDLFNBQUU4TSxRQUFGLENBQVcsQ0FBWCxFQUFhOU0sQ0FBYjtBQUFnQixZQUFNMEIsRUFBRXFOLE1BQUYsRUFBTixFQUFpQjtBQUFDck4sUUFBRW9MLFFBQUYsQ0FBVyxDQUFYLEVBQWFwTCxDQUFiLEVBQWdCLElBQUdyQixDQUFILEVBQUs7QUFBQyxZQUFHLENBQUNnQixFQUFFME4sTUFBRixFQUFELElBQWEsQ0FBQzNKLEVBQUUySixNQUFGLEVBQWpCLEVBQTRCO0FBQUMxTixZQUFFK1EsS0FBRixDQUFRLElBQVIsRUFBYS9RLENBQWIsRUFBZ0IrRCxFQUFFaUcsS0FBRixDQUFRMUcsQ0FBUixFQUFVUyxDQUFWO0FBQWEsV0FBRTBILFFBQUYsQ0FBVyxDQUFYLEVBQWF6TCxDQUFiO0FBQWdCLE9BQWhGLE1BQW9GO0FBQUMsWUFBRyxDQUFDK0QsRUFBRTJKLE1BQUYsRUFBSixFQUFlO0FBQUMzSixZQUFFaUcsS0FBRixDQUFRMUcsQ0FBUixFQUFVUyxDQUFWO0FBQWE7QUFBQyxTQUFFMEgsUUFBRixDQUFXLENBQVgsRUFBYTFILENBQWI7QUFBZ0IsU0FBRzFCLEVBQUVpSixTQUFGLENBQVlqTCxDQUFaLEtBQWdCLENBQW5CLEVBQXFCO0FBQUNnQyxRQUFFMkgsS0FBRixDQUFRM0osQ0FBUixFQUFVZ0MsQ0FBVixFQUFhLElBQUdyRCxDQUFILEVBQUs7QUFBQ0osVUFBRW9MLEtBQUYsQ0FBUWhLLENBQVIsRUFBVXBCLENBQVY7QUFBYSxTQUFFb0wsS0FBRixDQUFRakcsQ0FBUixFQUFVcEYsQ0FBVjtBQUFhLEtBQW5FLE1BQXVFO0FBQUMwQixRQUFFMkosS0FBRixDQUFRM0gsQ0FBUixFQUFVaEMsQ0FBVixFQUFhLElBQUdyQixDQUFILEVBQUs7QUFBQ2dCLFVBQUVnSyxLQUFGLENBQVFwTCxDQUFSLEVBQVVvQixDQUFWO0FBQWEsU0FBRWdLLEtBQUYsQ0FBUXJMLENBQVIsRUFBVW9GLENBQVY7QUFBYTtBQUFDLE9BQUcxRCxFQUFFaUwsU0FBRixDQUFZbEQsV0FBV21ELEdBQXZCLEtBQTZCLENBQWhDLEVBQWtDO0FBQUMsV0FBT25ELFdBQVcyQixJQUFsQjtBQUF1QixPQUFHaEcsRUFBRXVILFNBQUYsQ0FBWWhJLENBQVosS0FBZ0IsQ0FBbkIsRUFBcUI7QUFBQyxXQUFPUyxFQUFFaVAsUUFBRixDQUFXMVAsQ0FBWCxDQUFQO0FBQXFCLE9BQUdTLEVBQUV3SyxNQUFGLEtBQVcsQ0FBZCxFQUFnQjtBQUFDeEssTUFBRWdOLEtBQUYsQ0FBUXpOLENBQVIsRUFBVVMsQ0FBVjtBQUFhLEdBQTlCLE1BQWtDO0FBQUMsV0FBT0EsQ0FBUDtBQUFTLE9BQUdBLEVBQUV3SyxNQUFGLEtBQVcsQ0FBZCxFQUFnQjtBQUFDLFdBQU94SyxFQUFFa1AsR0FBRixDQUFNM1AsQ0FBTixDQUFQO0FBQWdCLEdBQWpDLE1BQXFDO0FBQUMsV0FBT1MsQ0FBUDtBQUFTO0FBQUMsS0FBSW1QLFlBQVUsQ0FBQyxDQUFELEVBQUcsQ0FBSCxFQUFLLENBQUwsRUFBTyxDQUFQLEVBQVMsRUFBVCxFQUFZLEVBQVosRUFBZSxFQUFmLEVBQWtCLEVBQWxCLEVBQXFCLEVBQXJCLEVBQXdCLEVBQXhCLEVBQTJCLEVBQTNCLEVBQThCLEVBQTlCLEVBQWlDLEVBQWpDLEVBQW9DLEVBQXBDLEVBQXVDLEVBQXZDLEVBQTBDLEVBQTFDLEVBQTZDLEVBQTdDLEVBQWdELEVBQWhELEVBQW1ELEVBQW5ELEVBQXNELEVBQXRELEVBQXlELEVBQXpELEVBQTRELEVBQTVELEVBQStELEVBQS9ELEVBQWtFLEVBQWxFLEVBQXFFLEVBQXJFLEVBQXdFLEdBQXhFLEVBQTRFLEdBQTVFLEVBQWdGLEdBQWhGLEVBQW9GLEdBQXBGLEVBQXdGLEdBQXhGLEVBQTRGLEdBQTVGLEVBQWdHLEdBQWhHLEVBQW9HLEdBQXBHLEVBQXdHLEdBQXhHLEVBQTRHLEdBQTVHLEVBQWdILEdBQWhILEVBQW9ILEdBQXBILEVBQXdILEdBQXhILEVBQTRILEdBQTVILEVBQWdJLEdBQWhJLEVBQW9JLEdBQXBJLEVBQXdJLEdBQXhJLEVBQTRJLEdBQTVJLEVBQWdKLEdBQWhKLEVBQW9KLEdBQXBKLEVBQXdKLEdBQXhKLEVBQTRKLEdBQTVKLEVBQWdLLEdBQWhLLEVBQW9LLEdBQXBLLEVBQXdLLEdBQXhLLEVBQTRLLEdBQTVLLEVBQWdMLEdBQWhMLEVBQW9MLEdBQXBMLEVBQXdMLEdBQXhMLEVBQTRMLEdBQTVMLEVBQWdNLEdBQWhNLEVBQW9NLEdBQXBNLEVBQXdNLEdBQXhNLEVBQTRNLEdBQTVNLEVBQWdOLEdBQWhOLEVBQW9OLEdBQXBOLEVBQXdOLEdBQXhOLEVBQTROLEdBQTVOLEVBQWdPLEdBQWhPLEVBQW9PLEdBQXBPLEVBQXdPLEdBQXhPLEVBQTRPLEdBQTVPLEVBQWdQLEdBQWhQLEVBQW9QLEdBQXBQLEVBQXdQLEdBQXhQLEVBQTRQLEdBQTVQLEVBQWdRLEdBQWhRLEVBQW9RLEdBQXBRLEVBQXdRLEdBQXhRLEVBQTRRLEdBQTVRLEVBQWdSLEdBQWhSLEVBQW9SLEdBQXBSLEVBQXdSLEdBQXhSLEVBQTRSLEdBQTVSLEVBQWdTLEdBQWhTLEVBQW9TLEdBQXBTLEVBQXdTLEdBQXhTLEVBQTRTLEdBQTVTLEVBQWdULEdBQWhULEVBQW9ULEdBQXBULEVBQXdULEdBQXhULEVBQTRULEdBQTVULEVBQWdVLEdBQWhVLEVBQW9VLEdBQXBVLEVBQXdVLEdBQXhVLEVBQTRVLEdBQTVVLEVBQWdWLEdBQWhWLEVBQW9WLEdBQXBWLEVBQXdWLEdBQXhWLEVBQTRWLEdBQTVWLEVBQWdXLEdBQWhXLEVBQW9XLEdBQXBXLEVBQXdXLEdBQXhXLEVBQTRXLEdBQTVXLEVBQWdYLEdBQWhYLEVBQW9YLEdBQXBYLEVBQXdYLEdBQXhYLEVBQTRYLEdBQTVYLEVBQWdZLEdBQWhZLEVBQW9ZLEdBQXBZLEVBQXdZLEdBQXhZLEVBQTRZLEdBQTVZLEVBQWdaLEdBQWhaLEVBQW9aLEdBQXBaLEVBQXdaLEdBQXhaLEVBQTRaLEdBQTVaLEVBQWdhLEdBQWhhLEVBQW9hLEdBQXBhLEVBQXdhLEdBQXhhLEVBQTRhLEdBQTVhLEVBQWdiLEdBQWhiLEVBQW9iLEdBQXBiLEVBQXdiLEdBQXhiLEVBQTRiLEdBQTViLEVBQWdjLEdBQWhjLEVBQW9jLEdBQXBjLEVBQXdjLEdBQXhjLEVBQTRjLEdBQTVjLEVBQWdkLEdBQWhkLEVBQW9kLEdBQXBkLEVBQXdkLEdBQXhkLEVBQTRkLEdBQTVkLEVBQWdlLEdBQWhlLEVBQW9lLEdBQXBlLEVBQXdlLEdBQXhlLEVBQTRlLEdBQTVlLEVBQWdmLEdBQWhmLEVBQW9mLEdBQXBmLEVBQXdmLEdBQXhmLEVBQTRmLEdBQTVmLEVBQWdnQixHQUFoZ0IsRUFBb2dCLEdBQXBn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Q0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztB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Q0FBQyxzSUFBc0M7QUFDOUMsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyw4SkFBa0Q7QUFDMUQsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvSkFBNkM7QUFDckQsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw0SUFBeUM7QUFDakQsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxvSUFBcUM7QUFDN0MsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSUFBc0M7QUFDOUMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzSUFBc0M7QUFDOUMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyx3R0FBdUI7QUFDL0IsbUJBQU8sQ0FBQyxnR0FBbUI7QUFDM0IsbUJBQU8sQ0FBQyxnR0FBbUI7QUFDM0IsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw0SUFBeUM7QUFDakQsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyw4SEFBa0M7QUFDMUMsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyxnSUFBbUM7QUFDM0MsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnS0FBbUQ7QUFDM0QsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvSUFBcUM7QUFDN0MsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw4SUFBMEM7QUFDbEQsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvSUFBcUM7QUFDN0MsbUJBQU8sQ0FBQyw0SEFBaUM7QUFDekMsbUJBQU8sQ0FBQyxnS0FBbUQ7QUFDM0QsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQywwR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxvSEFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzSEFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsbUJBQU8sQ0FBQyx3SEFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxnSEFBMkI7QUFDbkMsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDL0MsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQyw0SUFBeUM7QUFDakQsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQyxvSkFBNkM7QUFDckQsbUJBQU8sQ0FBQyxrSUFBb0M7QUFDNUMsbUJBQU8sQ0FBQywwSUFBd0M7QUFDaEQsbUJBQU8sQ0FBQywwSEFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyw4R0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyw0R0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxrSEFBNEI7QUFDcEMsaUJBQWlCLG1CQUFPLENBQUMsNEZBQWlCOzs7Ozs7Ozs7Ozs7QUNyTTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQy90Qlk7O0FBRVo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyxTQUFTO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsVUFBVTtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDckpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVZOztBQUVaLGFBQWEsbUJBQU8sQ0FBQyxvREFBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsZ0RBQVM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLGdEQUFTOztBQUUvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1EQUFtRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxFQUFFO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0EscUJBQXFCLGVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LFNBQU8sQ0FBQyxDQUFDLEdBQUQsSUFBTSxDQUFDLEdBQVAsR0FBVyxDQUFDLEdBQVosR0FBZ0IsQ0FBQyxHQUFqQixHQUFxQixDQUFDLElBQXZCLEVBQTZCL3FDLE9BQTdCLENBQXFDLFFBQXJDLEVBQStDO0FBQUEsV0FDdEQsQ0FBQzdaLElBQUlvQyxLQUFLbEQsTUFBTCxLQUFnQixFQUFoQixJQUFzQmMsSUFBSSxDQUEvQixFQUFrQ2hDLFFBQWxDLENBQTJDLEVBQTNDLENBRHNEO0FBQUEsR0FBL0MsQ0FBUDtBQUdIOztBQUVjLFNBQVNrQixNQUFULEdBQWtCO0FBQy9CLE1BQUkybEQsWUFBWWh4QyxVQUFVLFdBQVYsSUFBeUJBLFdBQVcsSUFBcEQ7QUFDQSxNQUFJaXhDLGtCQUFrQkQsYUFBYyxPQUFPaHhDLE9BQU9FLGVBQWQsSUFBa0MsV0FBdEU7QUFDQSxNQUFJZ3hDLE9BQU9ELGtCQUFrQkgsYUFBbEIsR0FBa0NDLE9BQTdDO0FBQ0EsU0FBT0csT0FBT2xyQyxPQUFQLENBQWUsSUFBZixFQUFxQixFQUFyQixDQUFQO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZCRCxJQUFNcGUsVUFBVSxlQUFoQixDLFFBQXlDQSxPLEdBQUFBLE8iLCJmaWxlIjoib2lkYy1jbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL3NyYy9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudC5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vc3JjL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBJbk1lbW9yeVdlYlN0b3JhZ2UgfSBmcm9tICcuL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlciB9IGZyb20gJy4vc3JjL1VzZXJNYW5hZ2VyLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL3NyYy9BY2Nlc3NUb2tlbkV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFQb3B1cE5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IENvcmRvdmFJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9zcmMvVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL3NyYy9TZXNzaW9uTW9uaXRvci5qcyc7XHJcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vc3JjL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3NyYy9Vc2VyLmpzJztcclxuXHJcbmltcG9ydCB7IFZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24uanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgVmVyc2lvbixcclxuICAgIExvZyxcclxuICAgIE9pZGNDbGllbnQsXHJcbiAgICBPaWRjQ2xpZW50U2V0dGluZ3MsXHJcbiAgICBXZWJTdG9yYWdlU3RhdGVTdG9yZSxcclxuICAgIEluTWVtb3J5V2ViU3RvcmFnZSxcclxuICAgIFVzZXJNYW5hZ2VyLFxyXG4gICAgQWNjZXNzVG9rZW5FdmVudHMsXHJcbiAgICBNZXRhZGF0YVNlcnZpY2UsXHJcbiAgICBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IsXHJcbiAgICBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLFxyXG4gICAgQ2hlY2tTZXNzaW9uSUZyYW1lLFxyXG4gICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxyXG4gICAgU2Vzc2lvbk1vbml0b3IsXHJcbiAgICBHbG9iYWwsXHJcbiAgICBVc2VyXHJcbn07XHJcbiIsIi8qXHJcbiAqIGpzcnNhc2lnbihhbGwpIDguMC4xMiAoMjAxOC0wNC0yMikgKGMpIDIwMTAtMjAxOCBLZW5qaSBVcnVzaGltYSB8IGtqdXIuZ2l0aHViLmNvbS9qc3JzYXNpZ24vbGljZW5zZVxyXG4gKi9cclxuXHJcbnZhciBuYXZpZ2F0b3IgPSB7fTtcclxubmF2aWdhdG9yLnVzZXJBZ2VudCA9IGZhbHNlO1xyXG5cclxudmFyIHdpbmRvdyA9IHt9O1xyXG5cbi8qISBDcnlwdG9KUyB2My4xLjIgY29yZS1maXguanNcclxuICogY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbiAqIChjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBjb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiAqIFRISVMgSVMgRklYIG9mICdjb3JlLmpzJyB0byBmaXggSG1hYyBpc3N1ZS5cclxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvaXNzdWVzL2RldGFpbD9pZD04NFxyXG4gKiBodHRwczovL2NyeXB0by1qcy5nb29nbGVjb2RlLmNvbS9zdm4taGlzdG9yeS9yNjY3L2JyYW5jaGVzLzMueC9zcmMvY29yZS5qc1xyXG4gKi9cclxudmFyIENyeXB0b0pTPUNyeXB0b0pTfHwoZnVuY3Rpb24oZSxnKXt2YXIgYT17fTt2YXIgYj1hLmxpYj17fTt2YXIgaj1iLkJhc2U9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKHApe24ucHJvdG90eXBlPXRoaXM7dmFyIG89bmV3IG4oKTtpZihwKXtvLm1peEluKHApfWlmKCFvLmhhc093blByb3BlcnR5KFwiaW5pdFwiKSl7by5pbml0PWZ1bmN0aW9uKCl7by4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fW8uaW5pdC5wcm90b3R5cGU9bztvLiRzdXBlcj10aGlzO3JldHVybiBvfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmV4dGVuZCgpO28uaW5pdC5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIG99LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKHApe2Zvcih2YXIgbyBpbiBwKXtpZihwLmhhc093blByb3BlcnR5KG8pKXt0aGlzW29dPXBbb119fWlmKHAuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSl7dGhpcy50b1N0cmluZz1wLnRvU3RyaW5nfX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fX0oKSk7dmFyIGw9Yi5Xb3JkQXJyYXk9ai5leHRlbmQoe2luaXQ6ZnVuY3Rpb24obyxuKXtvPXRoaXMud29yZHM9b3x8W107aWYobiE9Zyl7dGhpcy5zaWdCeXRlcz1ufWVsc2V7dGhpcy5zaWdCeXRlcz1vLmxlbmd0aCo0fX0sdG9TdHJpbmc6ZnVuY3Rpb24obil7cmV0dXJuKG58fGgpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBxPXRoaXMud29yZHM7dmFyIHA9dC53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO3ZhciBzPXQuc2lnQnl0ZXM7dGhpcy5jbGFtcCgpO2lmKG4lNCl7Zm9yKHZhciByPTA7cjxzO3IrKyl7dmFyIG89KHBbcj4+PjJdPj4+KDI0LShyJTQpKjgpKSYyNTU7cVsobityKT4+PjJdfD1vPDwoMjQtKChuK3IpJTQpKjgpfX1lbHNle2Zvcih2YXIgcj0wO3I8cztyKz00KXtxWyhuK3IpPj4+Ml09cFtyPj4+Ml19fXRoaXMuc2lnQnl0ZXMrPXM7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO29bbj4+PjJdJj00Mjk0OTY3Mjk1PDwoMzItKG4lNCkqOCk7by5sZW5ndGg9ZS5jZWlsKG4vNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24ud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKTtyZXR1cm4gbn0scmFuZG9tOmZ1bmN0aW9uKHApe3ZhciBvPVtdO2Zvcih2YXIgbj0wO248cDtuKz00KXtvLnB1c2goKGUucmFuZG9tKCkqNDI5NDk2NzI5Nil8MCl9cmV0dXJuIG5ldyBsLmluaXQobyxwKX19KTt2YXIgbT1hLmVuYz17fTt2YXIgaD1tLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKHApe3ZhciByPXAud29yZHM7dmFyIG89cC5zaWdCeXRlczt2YXIgcT1bXTtmb3IodmFyIG49MDtuPG87bisrKXt2YXIgcz0ocltuPj4+Ml0+Pj4oMjQtKG4lNCkqOCkpJjI1NTtxLnB1c2goKHM+Pj40KS50b1N0cmluZygxNikpO3EucHVzaCgocyYxNSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcS5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihwKXt2YXIgbj1wLmxlbmd0aDt2YXIgcT1bXTtmb3IodmFyIG89MDtvPG47bys9Mil7cVtvPj4+M118PXBhcnNlSW50KHAuc3Vic3RyKG8sMiksMTYpPDwoMjQtKG8lOCkqNCl9cmV0dXJuIG5ldyBsLmluaXQocSxuLzIpfX07dmFyIGQ9bS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihxKXt2YXIgcj1xLndvcmRzO3ZhciBwPXEuc2lnQnl0ZXM7dmFyIG49W107Zm9yKHZhciBvPTA7bzxwO28rKyl7dmFyIHM9KHJbbz4+PjJdPj4+KDI0LShvJTQpKjgpKSYyNTU7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocykpfXJldHVybiBuLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKHApe3ZhciBuPXAubGVuZ3RoO3ZhciBxPVtdO2Zvcih2YXIgbz0wO288bjtvKyspe3Fbbz4+PjJdfD0ocC5jaGFyQ29kZUF0KG8pJjI1NSk8PCgyNC0obyU0KSo4KX1yZXR1cm4gbmV3IGwuaW5pdChxLG4pfX07dmFyIGM9bS5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24obil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGQuc3RyaW5naWZ5KG4pKSl9Y2F0Y2gobyl7dGhyb3cgbmV3IEVycm9yKFwiTWFsZm9ybWVkIFVURi04IGRhdGFcIil9fSxwYXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gZC5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQobikpKX19O3ZhciBpPWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1qLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBsLmluaXQoKTt0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24obil7aWYodHlwZW9mIG49PVwic3RyaW5nXCIpe249Yy5wYXJzZShuKX10aGlzLl9kYXRhLmNvbmNhdChuKTt0aGlzLl9uRGF0YUJ5dGVzKz1uLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih3KXt2YXIgcT10aGlzLl9kYXRhO3ZhciB4PXEud29yZHM7dmFyIG49cS5zaWdCeXRlczt2YXIgdD10aGlzLmJsb2NrU2l6ZTt2YXIgdj10KjQ7dmFyIHU9bi92O2lmKHcpe3U9ZS5jZWlsKHUpfWVsc2V7dT1lLm1heCgodXwwKS10aGlzLl9taW5CdWZmZXJTaXplLDApfXZhciBzPXUqdDt2YXIgcj1lLm1pbihzKjQsbik7aWYocyl7Zm9yKHZhciBwPTA7cDxzO3ArPXQpe3RoaXMuX2RvUHJvY2Vzc0Jsb2NrKHgscCl9dmFyIG89eC5zcGxpY2UoMCxzKTtxLnNpZ0J5dGVzLT1yfXJldHVybiBuZXcgbC5pbml0KG8scil9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24uX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpO3JldHVybiBufSxfbWluQnVmZmVyU2l6ZTowfSk7dmFyIGY9Yi5IYXNoZXI9aS5leHRlbmQoe2NmZzpqLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24obil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKG4pO3RoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtpLnJlc2V0LmNhbGwodGhpcyk7dGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24obil7dGhpcy5fYXBwZW5kKG4pO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24obil7aWYobil7dGhpcy5fYXBwZW5kKG4pfXZhciBvPXRoaXMuX2RvRmluYWxpemUoKTtyZXR1cm4gb30sYmxvY2tTaXplOjUxMi8zMixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihwLG8pe3JldHVybiBuZXcgbi5pbml0KG8pLmZpbmFsaXplKHApfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHAsbyl7cmV0dXJuIG5ldyBrLkhNQUMuaW5pdChuLG8pLmZpbmFsaXplKHApfX19KTt2YXIgaz1hLmFsZ289e307cmV0dXJuIGF9KE1hdGgpKTtcbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiB4NjQtY29yZS1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihnKXt2YXIgYT1DcnlwdG9KUyxmPWEubGliLGU9Zi5CYXNlLGg9Zi5Xb3JkQXJyYXksYT1hLng2ND17fTthLldvcmQ9ZS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oYixjKXt0aGlzLmhpZ2g9Yjt0aGlzLmxvdz1jfX0pO2EuV29yZEFycmF5PWUuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKGIsYyl7Yj10aGlzLndvcmRzPWJ8fFtdO3RoaXMuc2lnQnl0ZXM9YyE9Zz9jOjgqYi5sZW5ndGh9LHRvWDMyOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMud29yZHMsYz1iLmxlbmd0aCxhPVtdLGQ9MDtkPGM7ZCsrKXt2YXIgZT1iW2RdO2EucHVzaChlLmhpZ2gpO2EucHVzaChlLmxvdyl9cmV0dXJuIGguY3JlYXRlKGEsdGhpcy5zaWdCeXRlcyl9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWUuY2xvbmUuY2FsbCh0aGlzKSxjPWIud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxhPWMubGVuZ3RoLGQ9MDtkPGE7ZCsrKWNbZF09Y1tkXS5jbG9uZSgpO3JldHVybiBifX0pfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgZW5jLWJhc2U2NC5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGg9Q3J5cHRvSlMsaj1oLmxpYi5Xb3JkQXJyYXk7aC5lbmMuQmFzZTY0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oYil7dmFyIGU9Yi53b3JkcyxmPWIuc2lnQnl0ZXMsYz10aGlzLl9tYXA7Yi5jbGFtcCgpO2I9W107Zm9yKHZhciBhPTA7YTxmO2ErPTMpZm9yKHZhciBkPShlW2E+Pj4yXT4+PjI0LTgqKGElNCkmMjU1KTw8MTZ8KGVbYSsxPj4+Ml0+Pj4yNC04KigoYSsxKSU0KSYyNTUpPDw4fGVbYSsyPj4+Ml0+Pj4yNC04KigoYSsyKSU0KSYyNTUsZz0wOzQ+ZyYmYSswLjc1Kmc8ZjtnKyspYi5wdXNoKGMuY2hhckF0KGQ+Pj42KigzLWcpJjYzKSk7aWYoZT1jLmNoYXJBdCg2NCkpZm9yKDtiLmxlbmd0aCU0OyliLnB1c2goZSk7cmV0dXJuIGIuam9pbihcIlwiKX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIGU9Yi5sZW5ndGgsZj10aGlzLl9tYXAsYz1mLmNoYXJBdCg2NCk7YyYmKGM9Yi5pbmRleE9mKGMpLC0xIT1jJiYoZT1jKSk7Zm9yKHZhciBjPVtdLGE9MCxkPTA7ZDxcclxuZTtkKyspaWYoZCU0KXt2YXIgZz1mLmluZGV4T2YoYi5jaGFyQXQoZC0xKSk8PDIqKGQlNCksaD1mLmluZGV4T2YoYi5jaGFyQXQoZCkpPj4+Ni0yKihkJTQpO2NbYT4+PjJdfD0oZ3xoKTw8MjQtOCooYSU0KTthKyt9cmV0dXJuIGouY3JlYXRlKGMsYSl9LF9tYXA6XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwifX0pKCk7XHJcblxuLypcclxuQ3J5cHRvSlMgdjMuMS4yIHNoYTI1Ni1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbihrKXtmb3IodmFyIGc9Q3J5cHRvSlMsaD1nLmxpYix2PWguV29yZEFycmF5LGo9aC5IYXNoZXIsaD1nLmFsZ28scz1bXSx0PVtdLHU9ZnVuY3Rpb24ocSl7cmV0dXJuIDQyOTQ5NjcyOTYqKHEtKHF8MCkpfDB9LGw9MixiPTA7NjQ+Yjspe3ZhciBkO2E6e2Q9bDtmb3IodmFyIHc9ay5zcXJ0KGQpLHI9MjtyPD13O3IrKylpZighKGQlcikpe2Q9ITE7YnJlYWsgYX1kPSEwfWQmJig4PmImJihzW2JdPXUoay5wb3cobCwwLjUpKSksdFtiXT11KGsucG93KGwsMS8zKSksYisrKTtsKyt9dmFyIG49W10saD1oLlNIQTI1Nj1qLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB2LmluaXQocy5zbGljZSgwKSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihxLGgpe2Zvcih2YXIgYT10aGlzLl9oYXNoLndvcmRzLGM9YVswXSxkPWFbMV0sYj1hWzJdLGs9YVszXSxmPWFbNF0sZz1hWzVdLGo9YVs2XSxsPWFbN10sZT0wOzY0PmU7ZSsrKXtpZigxNj5lKW5bZV09XHJcbnFbaCtlXXwwO2Vsc2V7dmFyIG09bltlLTE1XSxwPW5bZS0yXTtuW2VdPSgobTw8MjV8bT4+PjcpXihtPDwxNHxtPj4+MTgpXm0+Pj4zKStuW2UtN10rKChwPDwxNXxwPj4+MTcpXihwPDwxM3xwPj4+MTkpXnA+Pj4xMCkrbltlLTE2XX1tPWwrKChmPDwyNnxmPj4+NileKGY8PDIxfGY+Pj4xMSleKGY8PDd8Zj4+PjI1KSkrKGYmZ15+ZiZqKSt0W2VdK25bZV07cD0oKGM8PDMwfGM+Pj4yKV4oYzw8MTl8Yz4+PjEzKV4oYzw8MTB8Yz4+PjIyKSkrKGMmZF5jJmJeZCZiKTtsPWo7aj1nO2c9ZjtmPWsrbXwwO2s9YjtiPWQ7ZD1jO2M9bStwfDB9YVswXT1hWzBdK2N8MDthWzFdPWFbMV0rZHwwO2FbMl09YVsyXStifDA7YVszXT1hWzNdK2t8MDthWzRdPWFbNF0rZnwwO2FbNV09YVs1XStnfDA7YVs2XT1hWzZdK2p8MDthWzddPWFbN10rbHwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuX2RhdGEsYj1kLndvcmRzLGE9OCp0aGlzLl9uRGF0YUJ5dGVzLGM9OCpkLnNpZ0J5dGVzO1xyXG5iW2M+Pj41XXw9MTI4PDwyNC1jJTMyO2JbKGMrNjQ+Pj45PDw0KSsxNF09ay5mbG9vcihhLzQyOTQ5NjcyOTYpO2JbKGMrNjQ+Pj45PDw0KSsxNV09YTtkLnNpZ0J5dGVzPTQqYi5sZW5ndGg7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzLl9oYXNofSxjbG9uZTpmdW5jdGlvbigpe3ZhciBiPWouY2xvbmUuY2FsbCh0aGlzKTtiLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYn19KTtnLlNIQTI1Nj1qLl9jcmVhdGVIZWxwZXIoaCk7Zy5IbWFjU0hBMjU2PWouX2NyZWF0ZUhtYWNIZWxwZXIoaCl9KShNYXRoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhNTEyLW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3JldHVybiBkLmNyZWF0ZS5hcHBseShkLGFyZ3VtZW50cyl9Zm9yKHZhciBuPUNyeXB0b0pTLHI9bi5saWIuSGFzaGVyLGU9bi54NjQsZD1lLldvcmQsVD1lLldvcmRBcnJheSxlPW4uYWxnbyxlYT1bYSgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLGEoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLGEoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxhKDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksYSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksYSgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLGEoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxhKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksYSgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLGEoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLGEoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLGEoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxhKDE5MjUwNzgzODgsNDA2ODE4MjM4MyksYSgyMTYyMDc4MjA2LDk5MTMzNjExMyksYSgyNjE0ODg4MTAzLDYzMzgwMzMxNyksXHJcbmEoMzI0ODIyMjU4MCwzNDc5Nzc0ODY4KSxhKDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCksYSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksYSgyNjQzNDcwNzgsMjM0MTI2Mjc3MyksYSg2MDQ4MDc2MjgsMjAwNzgwMDkzMyksYSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksYSgxMjQ5MTUwMTIyLDE4NTY0MzEyMzUpLGEoMTU1NTA4MTY5MiwzMTc1MjE4MTMyKSxhKDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksYSgyNTU0MjIwODgyLDM5OTk3MTkzMzkpLGEoMjgyMTgzNDM0OSw3NjY3ODQwMTYpLGEoMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxhKDMyMTAzMTM2NzEsMzIwMzMzNzk1NiksYSgzMzM2NTcxODkxLDEwMzQ0NTcwMjYpLGEoMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxhKDExMzkyNjk5MywzNzU4MzI2MzgzKSxhKDMzODI0MTg5NSwxNjg3MTc5MzYpLGEoNjY2MzA3MjA1LDExODgxNzk5NjQpLGEoNzczNTI5OTEyLDE1NDYwNDU3MzQpLGEoMTI5NDc1NzM3MiwxNTIyODA1NDg1KSxhKDEzOTYxODIyOTEsXHJcbjI2NDM4MzM4MjMpLGEoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxhKDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCksYSgyMTc3MDI2MzUwLDEyMDY3NTkxNDIpLGEoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLGEoMjczMDQ4NTkyMSwxMjkwODYzNDYwKSxhKDI4MjAzMDI0MTEsMzE1ODQ1NDI3MyksYSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLGEoMzM0NTc2NDc3MSwxMDYyMTcwMDgpLGEoMzUxNjA2NTgxNywzNjA2MDA4MzQ0KSxhKDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksYSg0MDk0NTcxOTA5LDE0NjcwMzE1OTQpLGEoMjc1NDIzMzQ0LDg1MTE2OTcyMCksYSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksYSg1MDY5NDg2MTYsMTM2MzI1ODE5NSksYSg2NTkwNjA1NTYsMzc1MDY4NTU5MyksYSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksYSg5NTgxMzk1NzEsMzMxODMwNzQyNyksYSgxMzIyODIyMjE4LDM4MTI3MjM0MDMpLGEoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxhKDE3NDc4NzM3NzksMzYwMjAzNjg5OSksXHJcbmEoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxhKDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksYSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLGEoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLGEoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLGEoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxhKDMyMDQwMzE0NzksMjk5OTM1MTU3MyksYSgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLGEoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxhKDM1MTUyNjcyNzEsNTY2MjgwNzExKSxhKDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksYSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLGEoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLGEoMTc0MjkyNDIxLDI3MzEwNTUyNzApLGEoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLGEoNDYwMzkzMjY5LDMyMDYyMDMxNSksYSg2ODU0NzE3MzMsNTg3NDk2ODM2KSxhKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxhKDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxhKDExMjYwMDA1ODAsMjYxODI5NzY3NiksYSgxMjg4MDMzNDcwLFxyXG4zNDA5ODU1MTU4KSxhKDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksYSgxNjA3MTY3OTE1LDk4NzE2NzQ2OCksYSgxODE2NDAyMzE2LDEyNDYxODk1OTEpXSx2PVtdLHc9MDs4MD53O3crKyl2W3ddPWEoKTtlPWUuU0hBNTEyPXIuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IFQuaW5pdChbbmV3IGQuaW5pdCgxNzc5MDMzNzAzLDQwODkyMzU3MjApLG5ldyBkLmluaXQoMzE0NDEzNDI3NywyMjI3ODczNTk1KSxuZXcgZC5pbml0KDEwMTM5MDQyNDIsNDI3MTE3NTcyMyksbmV3IGQuaW5pdCgyNzczNDgwNzYyLDE1OTU3NTAxMjkpLG5ldyBkLmluaXQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KSxuZXcgZC5pbml0KDI2MDA4MjI5MjQsNzI1NTExMTk5KSxuZXcgZC5pbml0KDUyODczNDYzNSw0MjE1Mzg5NTQ3KSxuZXcgZC5pbml0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KV0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oYSxkKXtmb3IodmFyIGY9dGhpcy5faGFzaC53b3JkcyxcclxuRj1mWzBdLGU9ZlsxXSxuPWZbMl0scj1mWzNdLEc9Zls0XSxIPWZbNV0sST1mWzZdLGY9Zls3XSx3PUYuaGlnaCxKPUYubG93LFg9ZS5oaWdoLEs9ZS5sb3csWT1uLmhpZ2gsTD1uLmxvdyxaPXIuaGlnaCxNPXIubG93LCQ9Ry5oaWdoLE49Ry5sb3csYWE9SC5oaWdoLE89SC5sb3csYmE9SS5oaWdoLFA9SS5sb3csY2E9Zi5oaWdoLFE9Zi5sb3csaz13LGc9Six6PVgseD1LLEE9WSx5PUwsVT1aLEI9TSxsPSQsaD1OLFI9YWEsQz1PLFM9YmEsRD1QLFY9Y2EsRT1RLG09MDs4MD5tO20rKyl7dmFyIHM9dlttXTtpZigxNj5tKXZhciBqPXMuaGlnaD1hW2QrMiptXXwwLGI9cy5sb3c9YVtkKzIqbSsxXXwwO2Vsc2V7dmFyIGo9dlttLTE1XSxiPWouaGlnaCxwPWoubG93LGo9KGI+Pj4xfHA8PDMxKV4oYj4+Pjh8cDw8MjQpXmI+Pj43LHA9KHA+Pj4xfGI8PDMxKV4ocD4+Pjh8Yjw8MjQpXihwPj4+N3xiPDwyNSksdT12W20tMl0sYj11LmhpZ2gsYz11Lmxvdyx1PShiPj4+MTl8Yzw8MTMpXihiPDxcclxuM3xjPj4+MjkpXmI+Pj42LGM9KGM+Pj4xOXxiPDwxMyleKGM8PDN8Yj4+PjI5KV4oYz4+PjZ8Yjw8MjYpLGI9dlttLTddLFc9Yi5oaWdoLHQ9dlttLTE2XSxxPXQuaGlnaCx0PXQubG93LGI9cCtiLmxvdyxqPWorVysoYj4+PjA8cD4+PjA/MTowKSxiPWIrYyxqPWordSsoYj4+PjA8Yz4+PjA/MTowKSxiPWIrdCxqPWorcSsoYj4+PjA8dD4+PjA/MTowKTtzLmhpZ2g9ajtzLmxvdz1ifXZhciBXPWwmUl5+bCZTLHQ9aCZDXn5oJkQscz1rJnpeayZBXnomQSxUPWcmeF5nJnleeCZ5LHA9KGs+Pj4yOHxnPDw0KV4oazw8MzB8Zz4+PjIpXihrPDwyNXxnPj4+NyksdT0oZz4+PjI4fGs8PDQpXihnPDwzMHxrPj4+MileKGc8PDI1fGs+Pj43KSxjPWVhW21dLGZhPWMuaGlnaCxkYT1jLmxvdyxjPUUrKChoPj4+MTR8bDw8MTgpXihoPj4+MTh8bDw8MTQpXihoPDwyM3xsPj4+OSkpLHE9VisoKGw+Pj4xNHxoPDwxOCleKGw+Pj4xOHxoPDwxNCleKGw8PDIzfGg+Pj45KSkrKGM+Pj4wPEU+Pj4wPzE6XHJcbjApLGM9Yyt0LHE9cStXKyhjPj4+MDx0Pj4+MD8xOjApLGM9YytkYSxxPXErZmErKGM+Pj4wPGRhPj4+MD8xOjApLGM9YytiLHE9cStqKyhjPj4+MDxiPj4+MD8xOjApLGI9dStULHM9cCtzKyhiPj4+MDx1Pj4+MD8xOjApLFY9UyxFPUQsUz1SLEQ9QyxSPWwsQz1oLGg9QitjfDAsbD1VK3ErKGg+Pj4wPEI+Pj4wPzE6MCl8MCxVPUEsQj15LEE9eix5PXgsej1rLHg9ZyxnPWMrYnwwLGs9cStzKyhnPj4+MDxjPj4+MD8xOjApfDB9Sj1GLmxvdz1KK2c7Ri5oaWdoPXcraysoSj4+PjA8Zz4+PjA/MTowKTtLPWUubG93PUsreDtlLmhpZ2g9WCt6KyhLPj4+MDx4Pj4+MD8xOjApO0w9bi5sb3c9TCt5O24uaGlnaD1ZK0ErKEw+Pj4wPHk+Pj4wPzE6MCk7TT1yLmxvdz1NK0I7ci5oaWdoPVorVSsoTT4+PjA8Qj4+PjA/MTowKTtOPUcubG93PU4raDtHLmhpZ2g9JCtsKyhOPj4+MDxoPj4+MD8xOjApO089SC5sb3c9TytDO0guaGlnaD1hYStSKyhPPj4+MDxDPj4+MD8xOjApO1A9SS5sb3c9UCtEO1xyXG5JLmhpZ2g9YmErUysoUD4+PjA8RD4+PjA/MTowKTtRPWYubG93PVErRTtmLmhpZ2g9Y2ErVisoUT4+PjA8RT4+PjA/MTowKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9kYXRhLGQ9YS53b3JkcyxmPTgqdGhpcy5fbkRhdGFCeXRlcyxlPTgqYS5zaWdCeXRlcztkW2U+Pj41XXw9MTI4PDwyNC1lJTMyO2RbKGUrMTI4Pj4+MTA8PDUpKzMwXT1NYXRoLmZsb29yKGYvNDI5NDk2NzI5Nik7ZFsoZSsxMjg+Pj4xMDw8NSkrMzFdPWY7YS5zaWdCeXRlcz00KmQubGVuZ3RoO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpcy5faGFzaC50b1gzMigpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBhPXIuY2xvbmUuY2FsbCh0aGlzKTthLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKTtyZXR1cm4gYX0sYmxvY2tTaXplOjMyfSk7bi5TSEE1MTI9ci5fY3JlYXRlSGVscGVyKGUpO24uSG1hY1NIQTUxMj1yLl9jcmVhdGVIbWFjSGVscGVyKGUpfSkoKTtcclxuXG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgc2hhMzg0LW1pbi5qc1xyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcclxuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy93aWtpL0xpY2Vuc2VcclxuKi9cclxuKGZ1bmN0aW9uKCl7dmFyIGM9Q3J5cHRvSlMsYT1jLng2NCxiPWEuV29yZCxlPWEuV29yZEFycmF5LGE9Yy5hbGdvLGQ9YS5TSEE1MTIsYT1hLlNIQTM4ND1kLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBlLmluaXQoW25ldyBiLmluaXQoMzQxODA3MDM2NSwzMjM4MzcxMDMyKSxuZXcgYi5pbml0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKSxuZXcgYi5pbml0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KSxuZXcgYi5pbml0KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KSxuZXcgYi5pbml0KDE3MzE0MDU0MTUsNDI5MDc3NTg1NyksbmV3IGIuaW5pdCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpLG5ldyBiLmluaXQoMzY3NTAwODUyNSwxNjk0MDc2ODM5KSxuZXcgYi5pbml0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCldKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT1kLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7YS5zaWdCeXRlcy09MTY7cmV0dXJuIGF9fSk7Yy5TSEEzODQ9XHJcbmQuX2NyZWF0ZUhlbHBlcihhKTtjLkhtYWNTSEEzODQ9ZC5fY3JlYXRlSG1hY0hlbHBlcihhKX0pKCk7XHJcblxuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG52YXIgYjY0bWFwPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO3ZhciBiNjRwYWQ9XCI9XCI7ZnVuY3Rpb24gaGV4MmI2NChkKXt2YXIgYjt2YXIgZTt2YXIgYT1cIlwiO2ZvcihiPTA7YiszPD1kLmxlbmd0aDtiKz0zKXtlPXBhcnNlSW50KGQuc3Vic3RyaW5nKGIsYiszKSwxNik7YSs9YjY0bWFwLmNoYXJBdChlPj42KStiNjRtYXAuY2hhckF0KGUmNjMpfWlmKGIrMT09ZC5sZW5ndGgpe2U9cGFyc2VJbnQoZC5zdWJzdHJpbmcoYixiKzEpLDE2KTthKz1iNjRtYXAuY2hhckF0KGU8PDIpfWVsc2V7aWYoYisyPT1kLmxlbmd0aCl7ZT1wYXJzZUludChkLnN1YnN0cmluZyhiLGIrMiksMTYpO2ErPWI2NG1hcC5jaGFyQXQoZT4+MikrYjY0bWFwLmNoYXJBdCgoZSYzKTw8NCl9fWlmKGI2NHBhZCl7d2hpbGUoKGEubGVuZ3RoJjMpPjApe2ErPWI2NHBhZH19cmV0dXJuIGF9ZnVuY3Rpb24gYjY0dG9oZXgoZil7dmFyIGQ9XCJcIjt2YXIgZTt2YXIgYj0wO3ZhciBjO3ZhciBhO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe2lmKGYuY2hhckF0KGUpPT1iNjRwYWQpe2JyZWFrfWE9YjY0bWFwLmluZGV4T2YoZi5jaGFyQXQoZSkpO2lmKGE8MCl7Y29udGludWV9aWYoYj09MCl7ZCs9aW50MmNoYXIoYT4+Mik7Yz1hJjM7Yj0xfWVsc2V7aWYoYj09MSl7ZCs9aW50MmNoYXIoKGM8PDIpfChhPj40KSk7Yz1hJjE1O2I9Mn1lbHNle2lmKGI9PTIpe2QrPWludDJjaGFyKGMpO2QrPWludDJjaGFyKGE+PjIpO2M9YSYzO2I9M31lbHNle2QrPWludDJjaGFyKChjPDwyKXwoYT4+NCkpO2QrPWludDJjaGFyKGEmMTUpO2I9MH19fX1pZihiPT0xKXtkKz1pbnQyY2hhcihjPDwyKX1yZXR1cm4gZH1mdW5jdGlvbiBiNjR0b0JBKGUpe3ZhciBkPWI2NHRvaGV4KGUpO3ZhciBjO3ZhciBiPW5ldyBBcnJheSgpO2ZvcihjPTA7MipjPGQubGVuZ3RoOysrYyl7YltjXT1wYXJzZUludChkLnN1YnN0cmluZygyKmMsMipjKzIpLDE2KX1yZXR1cm4gYn07XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBkYml0czt2YXIgY2FuYXJ5PTI0NDgzNzgxNDA5NDU5MDt2YXIgal9sbT0oKGNhbmFyeSYxNjc3NzIxNSk9PTE1NzE1MDcwKTtmdW5jdGlvbiBCaWdJbnRlZ2VyKGUsZCxmKXtpZihlIT1udWxsKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7dGhpcy5mcm9tTnVtYmVyKGUsZCxmKX1lbHNle2lmKGQ9PW51bGwmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXt0aGlzLmZyb21TdHJpbmcoZSwyNTYpfWVsc2V7dGhpcy5mcm9tU3RyaW5nKGUsZCl9fX19ZnVuY3Rpb24gbmJpKCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpfWZ1bmN0aW9uIGFtMShmLGEsYixlLGgsZyl7d2hpbGUoLS1nPj0wKXt2YXIgZD1hKnRoaXNbZisrXStiW2VdK2g7aD1NYXRoLmZsb29yKGQvNjcxMDg4NjQpO2JbZSsrXT1kJjY3MTA4ODYzfXJldHVybiBofWZ1bmN0aW9uIGFtMihmLHEscixlLG8sYSl7dmFyIGs9cSYzMjc2NyxwPXE+PjE1O3doaWxlKC0tYT49MCl7dmFyIGQ9dGhpc1tmXSYzMjc2Nzt2YXIgZz10aGlzW2YrK10+PjE1O3ZhciBiPXAqZCtnKms7ZD1rKmQrKChiJjMyNzY3KTw8MTUpK3JbZV0rKG8mMTA3Mzc0MTgyMyk7bz0oZD4+PjMwKSsoYj4+PjE1KStwKmcrKG8+Pj4zMCk7cltlKytdPWQmMTA3Mzc0MTgyM31yZXR1cm4gb31mdW5jdGlvbiBhbTMoZixxLHIsZSxvLGEpe3ZhciBrPXEmMTYzODMscD1xPj4xNDt3aGlsZSgtLWE+PTApe3ZhciBkPXRoaXNbZl0mMTYzODM7dmFyIGc9dGhpc1tmKytdPj4xNDt2YXIgYj1wKmQrZyprO2Q9aypkKygoYiYxNjM4Myk8PDE0KStyW2VdK287bz0oZD4+MjgpKyhiPj4xNCkrcCpnO3JbZSsrXT1kJjI2ODQzNTQ1NX1yZXR1cm4gb31pZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWU9PVwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIpKXtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbT1hbTI7ZGJpdHM9MzB9ZWxzZXtpZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWUhPVwiTmV0c2NhcGVcIikpe0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMTtkYml0cz0yNn1lbHNle0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMztkYml0cz0yOH19QmlnSW50ZWdlci5wcm90b3R5cGUuREI9ZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRE09KCgxPDxkYml0cyktMSk7QmlnSW50ZWdlci5wcm90b3R5cGUuRFY9KDE8PGRiaXRzKTt2YXIgQklfRlA9NTI7QmlnSW50ZWdlci5wcm90b3R5cGUuRlY9TWF0aC5wb3coMixCSV9GUCk7QmlnSW50ZWdlci5wcm90b3R5cGUuRjE9QklfRlAtZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRjI9MipkYml0cy1CSV9GUDt2YXIgQklfUk09XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjt2YXIgQklfUkM9bmV3IEFycmF5KCk7dmFyIHJyLHZ2O3JyPVwiMFwiLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTA7dnY8PTk7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJhXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJBXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9ZnVuY3Rpb24gaW50MmNoYXIoYSl7cmV0dXJuIEJJX1JNLmNoYXJBdChhKX1mdW5jdGlvbiBpbnRBdChiLGEpe3ZhciBkPUJJX1JDW2IuY2hhckNvZGVBdChhKV07cmV0dXJuKGQ9PW51bGwpPy0xOmR9ZnVuY3Rpb24gYm5wQ29weVRvKGIpe2Zvcih2YXIgYT10aGlzLnQtMTthPj0wOy0tYSl7YlthXT10aGlzW2FdfWIudD10aGlzLnQ7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBGcm9tSW50KGEpe3RoaXMudD0xO3RoaXMucz0oYTwwKT8tMTowO2lmKGE+MCl7dGhpc1swXT1hfWVsc2V7aWYoYTwtMSl7dGhpc1swXT1hK3RoaXMuRFZ9ZWxzZXt0aGlzLnQ9MH19fWZ1bmN0aW9uIG5idihhKXt2YXIgYj1uYmkoKTtiLmZyb21JbnQoYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhoLGMpe3ZhciBlO2lmKGM9PTE2KXtlPTR9ZWxzZXtpZihjPT04KXtlPTN9ZWxzZXtpZihjPT0yNTYpe2U9OH1lbHNle2lmKGM9PTIpe2U9MX1lbHNle2lmKGM9PTMyKXtlPTV9ZWxzZXtpZihjPT00KXtlPTJ9ZWxzZXt0aGlzLmZyb21SYWRpeChoLGMpO3JldHVybn19fX19fXRoaXMudD0wO3RoaXMucz0wO3ZhciBnPWgubGVuZ3RoLGQ9ZmFsc2UsZj0wO3doaWxlKC0tZz49MCl7dmFyIGE9KGU9PTgpP2hbZ10mMjU1OmludEF0KGgsZyk7aWYoYTwwKXtpZihoLmNoYXJBdChnKT09XCItXCIpe2Q9dHJ1ZX1jb250aW51ZX1kPWZhbHNlO2lmKGY9PTApe3RoaXNbdGhpcy50KytdPWF9ZWxzZXtpZihmK2U+dGhpcy5EQil7dGhpc1t0aGlzLnQtMV18PShhJigoMTw8KHRoaXMuREItZikpLTEpKTw8Zjt0aGlzW3RoaXMudCsrXT0oYT4+KHRoaXMuREItZikpfWVsc2V7dGhpc1t0aGlzLnQtMV18PWE8PGZ9fWYrPWU7aWYoZj49dGhpcy5EQil7Zi09dGhpcy5EQn19aWYoZT09OCYmKGhbMF0mMTI4KSE9MCl7dGhpcy5zPS0xO2lmKGY+MCl7dGhpc1t0aGlzLnQtMV18PSgoMTw8KHRoaXMuREItZikpLTEpPDxmfX10aGlzLmNsYW1wKCk7aWYoZCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIGJucENsYW1wKCl7dmFyIGE9dGhpcy5zJnRoaXMuRE07d2hpbGUodGhpcy50PjAmJnRoaXNbdGhpcy50LTFdPT1hKXstLXRoaXMudH19ZnVuY3Rpb24gYm5Ub1N0cmluZyhjKXtpZih0aGlzLnM8MCl7cmV0dXJuXCItXCIrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhjKX12YXIgZTtpZihjPT0xNil7ZT00fWVsc2V7aWYoYz09OCl7ZT0zfWVsc2V7aWYoYz09Mil7ZT0xfWVsc2V7aWYoYz09MzIpe2U9NX1lbHNle2lmKGM9PTQpe2U9Mn1lbHNle3JldHVybiB0aGlzLnRvUmFkaXgoYyl9fX19fXZhciBnPSgxPDxlKS0xLGwsYT1mYWxzZSxoPVwiXCIsZj10aGlzLnQ7dmFyIGo9dGhpcy5EQi0oZip0aGlzLkRCKSVlO2lmKGYtLT4wKXtpZihqPHRoaXMuREImJihsPXRoaXNbZl0+PmopPjApe2E9dHJ1ZTtoPWludDJjaGFyKGwpfXdoaWxlKGY+PTApe2lmKGo8ZSl7bD0odGhpc1tmXSYoKDE8PGopLTEpKTw8KGUtaik7bHw9dGhpc1stLWZdPj4oais9dGhpcy5EQi1lKX1lbHNle2w9KHRoaXNbZl0+PihqLT1lKSkmZztpZihqPD0wKXtqKz10aGlzLkRCOy0tZn19aWYobD4wKXthPXRydWV9aWYoYSl7aCs9aW50MmNoYXIobCl9fX1yZXR1cm4gYT9oOlwiMFwifWZ1bmN0aW9uIGJuTmVnYXRlKCl7dmFyIGE9bmJpKCk7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5BYnMoKXtyZXR1cm4odGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpc31mdW5jdGlvbiBibkNvbXBhcmVUbyhiKXt2YXIgZD10aGlzLnMtYi5zO2lmKGQhPTApe3JldHVybiBkfXZhciBjPXRoaXMudDtkPWMtYi50O2lmKGQhPTApe3JldHVybih0aGlzLnM8MCk/LWQ6ZH13aGlsZSgtLWM+PTApe2lmKChkPXRoaXNbY10tYltjXSkhPTApe3JldHVybiBkfX1yZXR1cm4gMH1mdW5jdGlvbiBuYml0cyhhKXt2YXIgYz0xLGI7aWYoKGI9YT4+PjE2KSE9MCl7YT1iO2MrPTE2fWlmKChiPWE+PjgpIT0wKXthPWI7Yys9OH1pZigoYj1hPj40KSE9MCl7YT1iO2MrPTR9aWYoKGI9YT4+MikhPTApe2E9YjtjKz0yfWlmKChiPWE+PjEpIT0wKXthPWI7Yys9MX1yZXR1cm4gY31mdW5jdGlvbiBibkJpdExlbmd0aCgpe2lmKHRoaXMudDw9MCl7cmV0dXJuIDB9cmV0dXJuIHRoaXMuREIqKHRoaXMudC0xKStuYml0cyh0aGlzW3RoaXMudC0xXV4odGhpcy5zJnRoaXMuRE0pKX1mdW5jdGlvbiBibnBETFNoaWZ0VG8oYyxiKXt2YXIgYTtmb3IoYT10aGlzLnQtMTthPj0wOy0tYSl7YlthK2NdPXRoaXNbYV19Zm9yKGE9Yy0xO2E+PTA7LS1hKXtiW2FdPTB9Yi50PXRoaXMudCtjO2Iucz10aGlzLnN9ZnVuY3Rpb24gYm5wRFJTaGlmdFRvKGMsYil7Zm9yKHZhciBhPWM7YTx0aGlzLnQ7KythKXtiW2EtY109dGhpc1thXX1iLnQ9TWF0aC5tYXgodGhpcy50LWMsMCk7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBMU2hpZnRUbyhqLGUpe3ZhciBiPWoldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGc9KDE8PGEpLTE7dmFyIGY9TWF0aC5mbG9vcihqL3RoaXMuREIpLGg9KHRoaXMuczw8YikmdGhpcy5ETSxkO2ZvcihkPXRoaXMudC0xO2Q+PTA7LS1kKXtlW2QrZisxXT0odGhpc1tkXT4+YSl8aDtoPSh0aGlzW2RdJmcpPDxifWZvcihkPWYtMTtkPj0wOy0tZCl7ZVtkXT0wfWVbZl09aDtlLnQ9dGhpcy50K2YrMTtlLnM9dGhpcy5zO2UuY2xhbXAoKX1mdW5jdGlvbiBibnBSU2hpZnRUbyhnLGQpe2Qucz10aGlzLnM7dmFyIGU9TWF0aC5mbG9vcihnL3RoaXMuREIpO2lmKGU+PXRoaXMudCl7ZC50PTA7cmV0dXJufXZhciBiPWcldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGY9KDE8PGIpLTE7ZFswXT10aGlzW2VdPj5iO2Zvcih2YXIgYz1lKzE7Yzx0aGlzLnQ7KytjKXtkW2MtZS0xXXw9KHRoaXNbY10mZik8PGE7ZFtjLWVdPXRoaXNbY10+PmJ9aWYoYj4wKXtkW3RoaXMudC1lLTFdfD0odGhpcy5zJmYpPDxhfWQudD10aGlzLnQtZTtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wU3ViVG8oZCxmKXt2YXIgZT0wLGc9MCxiPU1hdGgubWluKGQudCx0aGlzLnQpO3doaWxlKGU8Yil7Zys9dGhpc1tlXS1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9aWYoZC50PHRoaXMudCl7Zy09ZC5zO3doaWxlKGU8dGhpcy50KXtnKz10aGlzW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9dGhpcy5zfWVsc2V7Zys9dGhpcy5zO3doaWxlKGU8ZC50KXtnLT1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zy09ZC5zfWYucz0oZzwwKT8tMTowO2lmKGc8LTEpe2ZbZSsrXT10aGlzLkRWK2d9ZWxzZXtpZihnPjApe2ZbZSsrXT1nfX1mLnQ9ZTtmLmNsYW1wKCl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhjLGUpe3ZhciBiPXRoaXMuYWJzKCksZj1jLmFicygpO3ZhciBkPWIudDtlLnQ9ZCtmLnQ7d2hpbGUoLS1kPj0wKXtlW2RdPTB9Zm9yKGQ9MDtkPGYudDsrK2Qpe2VbZCtiLnRdPWIuYW0oMCxmW2RdLGUsZCwwLGIudCl9ZS5zPTA7ZS5jbGFtcCgpO2lmKHRoaXMucyE9Yy5zKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8oZSxlKX19ZnVuY3Rpb24gYm5wU3F1YXJlVG8oZCl7dmFyIGE9dGhpcy5hYnMoKTt2YXIgYj1kLnQ9MiphLnQ7d2hpbGUoLS1iPj0wKXtkW2JdPTB9Zm9yKGI9MDtiPGEudC0xOysrYil7dmFyIGU9YS5hbShiLGFbYl0sZCwyKmIsMCwxKTtpZigoZFtiK2EudF0rPWEuYW0oYisxLDIqYVtiXSxkLDIqYisxLGUsYS50LWItMSkpPj1hLkRWKXtkW2IrYS50XS09YS5EVjtkW2IrYS50KzFdPTF9fWlmKGQudD4wKXtkW2QudC0xXSs9YS5hbShiLGFbYl0sZCwyKmIsMCwxKX1kLnM9MDtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wRGl2UmVtVG8obixoLGcpe3ZhciB3PW4uYWJzKCk7aWYody50PD0wKXtyZXR1cm59dmFyIGs9dGhpcy5hYnMoKTtpZihrLnQ8dy50KXtpZihoIT1udWxsKXtoLmZyb21JbnQoMCl9aWYoZyE9bnVsbCl7dGhpcy5jb3B5VG8oZyl9cmV0dXJufWlmKGc9PW51bGwpe2c9bmJpKCl9dmFyIGQ9bmJpKCksYT10aGlzLnMsbD1uLnM7dmFyIHY9dGhpcy5EQi1uYml0cyh3W3cudC0xXSk7aWYodj4wKXt3LmxTaGlmdFRvKHYsZCk7ay5sU2hpZnRUbyh2LGcpfWVsc2V7dy5jb3B5VG8oZCk7ay5jb3B5VG8oZyl9dmFyIHA9ZC50O3ZhciBiPWRbcC0xXTtpZihiPT0wKXtyZXR1cm59dmFyIG89YiooMTw8dGhpcy5GMSkrKChwPjEpP2RbcC0yXT4+dGhpcy5GMjowKTt2YXIgQT10aGlzLkZWL28sej0oMTw8dGhpcy5GMSkvbyx4PTE8PHRoaXMuRjI7dmFyIHU9Zy50LHM9dS1wLGY9KGg9PW51bGwpP25iaSgpOmg7ZC5kbFNoaWZ0VG8ocyxmKTtpZihnLmNvbXBhcmVUbyhmKT49MCl7Z1tnLnQrK109MTtnLnN1YlRvKGYsZyl9QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHAsZik7Zi5zdWJUbyhkLGQpO3doaWxlKGQudDxwKXtkW2QudCsrXT0wfXdoaWxlKC0tcz49MCl7dmFyIGM9KGdbLS11XT09Yik/dGhpcy5ETTpNYXRoLmZsb29yKGdbdV0qQSsoZ1t1LTFdK3gpKnopO2lmKChnW3VdKz1kLmFtKDAsYyxnLHMsMCxwKSk8Yyl7ZC5kbFNoaWZ0VG8ocyxmKTtnLnN1YlRvKGYsZyk7d2hpbGUoZ1t1XTwtLWMpe2cuc3ViVG8oZixnKX19fWlmKGghPW51bGwpe2cuZHJTaGlmdFRvKHAsaCk7aWYoYSE9bCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKGgsaCl9fWcudD1wO2cuY2xhbXAoKTtpZih2PjApe2cuclNoaWZ0VG8odixnKX1pZihhPDApe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyhnLGcpfX1mdW5jdGlvbiBibk1vZChiKXt2YXIgYz1uYmkoKTt0aGlzLmFicygpLmRpdlJlbVRvKGIsbnVsbCxjKTtpZih0aGlzLnM8MCYmYy5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXtiLnN1YlRvKGMsYyl9cmV0dXJuIGN9ZnVuY3Rpb24gQ2xhc3NpYyhhKXt0aGlzLm09YX1mdW5jdGlvbiBjQ29udmVydChhKXtpZihhLnM8MHx8YS5jb21wYXJlVG8odGhpcy5tKT49MCl7cmV0dXJuIGEubW9kKHRoaXMubSl9ZWxzZXtyZXR1cm4gYX19ZnVuY3Rpb24gY1JldmVydChhKXtyZXR1cm4gYX1mdW5jdGlvbiBjUmVkdWNlKGEpe2EuZGl2UmVtVG8odGhpcy5tLG51bGwsYSl9ZnVuY3Rpb24gY011bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBjU3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfUNsYXNzaWMucHJvdG90eXBlLmNvbnZlcnQ9Y0NvbnZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0PWNSZXZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmVkdWNlPWNSZWR1Y2U7Q2xhc3NpYy5wcm90b3R5cGUubXVsVG89Y011bFRvO0NsYXNzaWMucHJvdG90eXBlLnNxclRvPWNTcXJUbztmdW5jdGlvbiBibnBJbnZEaWdpdCgpe2lmKHRoaXMudDwxKXtyZXR1cm4gMH12YXIgYT10aGlzWzBdO2lmKChhJjEpPT0wKXtyZXR1cm4gMH12YXIgYj1hJjM7Yj0oYiooMi0oYSYxNSkqYikpJjE1O2I9KGIqKDItKGEmMjU1KSpiKSkmMjU1O2I9KGIqKDItKCgoYSY2NTUzNSkqYikmNjU1MzUpKSkmNjU1MzU7Yj0oYiooMi1hKmIldGhpcy5EVikpJXRoaXMuRFY7cmV0dXJuKGI+MCk/dGhpcy5EVi1iOi1ifWZ1bmN0aW9uIE1vbnRnb21lcnkoYSl7dGhpcy5tPWE7dGhpcy5tcD1hLmludkRpZ2l0KCk7dGhpcy5tcGw9dGhpcy5tcCYzMjc2Nzt0aGlzLm1waD10aGlzLm1wPj4xNTt0aGlzLnVtPSgxPDwoYS5EQi0xNSkpLTE7dGhpcy5tdDI9MiphLnR9ZnVuY3Rpb24gbW9udENvbnZlcnQoYSl7dmFyIGI9bmJpKCk7YS5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQsYik7Yi5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxiKTtpZihhLnM8MCYmYi5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXt0aGlzLm0uc3ViVG8oYixiKX1yZXR1cm4gYn1mdW5jdGlvbiBtb250UmV2ZXJ0KGEpe3ZhciBiPW5iaSgpO2EuY29weVRvKGIpO3RoaXMucmVkdWNlKGIpO3JldHVybiBifWZ1bmN0aW9uIG1vbnRSZWR1Y2UoYSl7d2hpbGUoYS50PD10aGlzLm10Mil7YVthLnQrK109MH1mb3IodmFyIGM9MDtjPHRoaXMubS50OysrYyl7dmFyIGI9YVtjXSYzMjc2Nzt2YXIgZD0oYip0aGlzLm1wbCsoKChiKnRoaXMubXBoKyhhW2NdPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJmEuRE07Yj1jK3RoaXMubS50O2FbYl0rPXRoaXMubS5hbSgwLGQsYSxjLDAsdGhpcy5tLnQpO3doaWxlKGFbYl0+PWEuRFYpe2FbYl0tPWEuRFY7YVsrK2JdKyt9fWEuY2xhbXAoKTthLmRyU2hpZnRUbyh0aGlzLm0udCxhKTtpZihhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gbW9udFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBtb250TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfU1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQ9bW9udENvbnZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0PW1vbnRSZXZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmVkdWNlPW1vbnRSZWR1Y2U7TW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG89bW9udE11bFRvO01vbnRnb21lcnkucHJvdG90eXBlLnNxclRvPW1vbnRTcXJUbztmdW5jdGlvbiBibnBJc0V2ZW4oKXtyZXR1cm4oKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpPT0wfWZ1bmN0aW9uIGJucEV4cChoLGope2lmKGg+NDI5NDk2NzI5NXx8aDwxKXtyZXR1cm4gQmlnSW50ZWdlci5PTkV9dmFyIGY9bmJpKCksYT1uYmkoKSxkPWouY29udmVydCh0aGlzKSxjPW5iaXRzKGgpLTE7ZC5jb3B5VG8oZik7d2hpbGUoLS1jPj0wKXtqLnNxclRvKGYsYSk7aWYoKGgmKDE8PGMpKT4wKXtqLm11bFRvKGEsZCxmKX1lbHNle3ZhciBiPWY7Zj1hO2E9Yn19cmV0dXJuIGoucmV2ZXJ0KGYpfWZ1bmN0aW9uIGJuTW9kUG93SW50KGIsYSl7dmFyIGM7aWYoYjwyNTZ8fGEuaXNFdmVuKCkpe2M9bmV3IENsYXNzaWMoYSl9ZWxzZXtjPW5ldyBNb250Z29tZXJ5KGEpfXJldHVybiB0aGlzLmV4cChiLGMpfUJpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbz1ibnBDb3B5VG87QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludD1ibnBGcm9tSW50O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmc9Ym5wRnJvbVN0cmluZztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGFtcD1ibnBDbGFtcDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG89Ym5wRExTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbz1ibnBEUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG89Ym5wTFNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG89Ym5wUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG89Ym5wU3ViVG87QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbz1ibnBNdWx0aXBseVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvPWJucFNxdWFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvPWJucERpdlJlbVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmludkRpZ2l0PWJucEludkRpZ2l0O0JpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbj1ibnBJc0V2ZW47QmlnSW50ZWdlci5wcm90b3R5cGUuZXhwPWJucEV4cDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZz1iblRvU3RyaW5nO0JpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZT1ibk5lZ2F0ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hYnM9Ym5BYnM7QmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvPWJuQ29tcGFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aD1ibkJpdExlbmd0aDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2Q9Ym5Nb2Q7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50PWJuTW9kUG93SW50O0JpZ0ludGVnZXIuWkVSTz1uYnYoMCk7QmlnSW50ZWdlci5PTkU9bmJ2KDEpO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBibkNsb25lKCl7dmFyIGE9bmJpKCk7dGhpcy5jb3B5VG8oYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5JbnRWYWx1ZSgpe2lmKHRoaXMuczwwKXtpZih0aGlzLnQ9PTEpe3JldHVybiB0aGlzWzBdLXRoaXMuRFZ9ZWxzZXtpZih0aGlzLnQ9PTApe3JldHVybiAtMX19fWVsc2V7aWYodGhpcy50PT0xKXtyZXR1cm4gdGhpc1swXX1lbHNle2lmKHRoaXMudD09MCl7cmV0dXJuIDB9fX1yZXR1cm4oKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXX1mdW5jdGlvbiBibkJ5dGVWYWx1ZSgpe3JldHVybih0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNH1mdW5jdGlvbiBiblNob3J0VmFsdWUoKXtyZXR1cm4odGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTZ9ZnVuY3Rpb24gYm5wQ2h1bmtTaXplKGEpe3JldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2coYSkpfWZ1bmN0aW9uIGJuU2lnTnVtKCl7aWYodGhpcy5zPDApe3JldHVybiAtMX1lbHNle2lmKHRoaXMudDw9MHx8KHRoaXMudD09MSYmdGhpc1swXTw9MCkpe3JldHVybiAwfWVsc2V7cmV0dXJuIDF9fX1mdW5jdGlvbiBibnBUb1JhZGl4KGMpe2lmKGM9PW51bGwpe2M9MTB9aWYodGhpcy5zaWdudW0oKT09MHx8YzwyfHxjPjM2KXtyZXR1cm5cIjBcIn12YXIgZj10aGlzLmNodW5rU2l6ZShjKTt2YXIgZT1NYXRoLnBvdyhjLGYpO3ZhciBpPW5idihlKSxqPW5iaSgpLGg9bmJpKCksZz1cIlwiO3RoaXMuZGl2UmVtVG8oaSxqLGgpO3doaWxlKGouc2lnbnVtKCk+MCl7Zz0oZStoLmludFZhbHVlKCkpLnRvU3RyaW5nKGMpLnN1YnN0cigxKStnO2ouZGl2UmVtVG8oaSxqLGgpfXJldHVybiBoLmludFZhbHVlKCkudG9TdHJpbmcoYykrZ31mdW5jdGlvbiBibnBGcm9tUmFkaXgobSxoKXt0aGlzLmZyb21JbnQoMCk7aWYoaD09bnVsbCl7aD0xMH12YXIgZj10aGlzLmNodW5rU2l6ZShoKTt2YXIgZz1NYXRoLnBvdyhoLGYpLGU9ZmFsc2UsYT0wLGw9MDtmb3IodmFyIGM9MDtjPG0ubGVuZ3RoOysrYyl7dmFyIGs9aW50QXQobSxjKTtpZihrPDApe2lmKG0uY2hhckF0KGMpPT1cIi1cIiYmdGhpcy5zaWdudW0oKT09MCl7ZT10cnVlfWNvbnRpbnVlfWw9aCpsK2s7aWYoKythPj1mKXt0aGlzLmRNdWx0aXBseShnKTt0aGlzLmRBZGRPZmZzZXQobCwwKTthPTA7bD0wfX1pZihhPjApe3RoaXMuZE11bHRpcGx5KE1hdGgucG93KGgsYSkpO3RoaXMuZEFkZE9mZnNldChsLDApfWlmKGUpe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpfX1mdW5jdGlvbiBibnBGcm9tTnVtYmVyKGYsZSxoKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoZjwyKXt0aGlzLmZyb21JbnQoMSl9ZWxzZXt0aGlzLmZyb21OdW1iZXIoZixoKTtpZighdGhpcy50ZXN0Qml0KGYtMSkpe3RoaXMuYml0d2lzZVRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLG9wX29yLHRoaXMpfWlmKHRoaXMuaXNFdmVuKCkpe3RoaXMuZEFkZE9mZnNldCgxLDApfXdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShlKSl7dGhpcy5kQWRkT2Zmc2V0KDIsMCk7aWYodGhpcy5iaXRMZW5ndGgoKT5mKXt0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChmLTEpLHRoaXMpfX19fWVsc2V7dmFyIGQ9bmV3IEFycmF5KCksZz1mJjc7ZC5sZW5ndGg9KGY+PjMpKzE7ZS5uZXh0Qnl0ZXMoZCk7aWYoZz4wKXtkWzBdJj0oKDE8PGcpLTEpfWVsc2V7ZFswXT0wfXRoaXMuZnJvbVN0cmluZyhkLDI1Nil9fWZ1bmN0aW9uIGJuVG9CeXRlQXJyYXkoKXt2YXIgYj10aGlzLnQsYz1uZXcgQXJyYXkoKTtjWzBdPXRoaXMuczt2YXIgZT10aGlzLkRCLShiKnRoaXMuREIpJTgsZixhPTA7aWYoYi0tPjApe2lmKGU8dGhpcy5EQiYmKGY9dGhpc1tiXT4+ZSkhPSh0aGlzLnMmdGhpcy5ETSk+PmUpe2NbYSsrXT1mfCh0aGlzLnM8PCh0aGlzLkRCLWUpKX13aGlsZShiPj0wKXtpZihlPDgpe2Y9KHRoaXNbYl0mKCgxPDxlKS0xKSk8PCg4LWUpO2Z8PXRoaXNbLS1iXT4+KGUrPXRoaXMuREItOCl9ZWxzZXtmPSh0aGlzW2JdPj4oZS09OCkpJjI1NTtpZihlPD0wKXtlKz10aGlzLkRCOy0tYn19aWYoKGYmMTI4KSE9MCl7Znw9LTI1Nn1pZihhPT0wJiYodGhpcy5zJjEyOCkhPShmJjEyOCkpeysrYX1pZihhPjB8fGYhPXRoaXMucyl7Y1thKytdPWZ9fX1yZXR1cm4gY31mdW5jdGlvbiBibkVxdWFscyhiKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYik9PTApfWZ1bmN0aW9uIGJuTWluKGIpe3JldHVybih0aGlzLmNvbXBhcmVUbyhiKTwwKT90aGlzOmJ9ZnVuY3Rpb24gYm5NYXgoYil7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGIpPjApP3RoaXM6Yn1mdW5jdGlvbiBibnBCaXR3aXNlVG8oYyxoLGUpe3ZhciBkLGcsYj1NYXRoLm1pbihjLnQsdGhpcy50KTtmb3IoZD0wO2Q8YjsrK2Qpe2VbZF09aCh0aGlzW2RdLGNbZF0pfWlmKGMudDx0aGlzLnQpe2c9Yy5zJnRoaXMuRE07Zm9yKGQ9YjtkPHRoaXMudDsrK2Qpe2VbZF09aCh0aGlzW2RdLGcpfWUudD10aGlzLnR9ZWxzZXtnPXRoaXMucyZ0aGlzLkRNO2ZvcihkPWI7ZDxjLnQ7KytkKXtlW2RdPWgoZyxjW2RdKX1lLnQ9Yy50fWUucz1oKHRoaXMucyxjLnMpO2UuY2xhbXAoKX1mdW5jdGlvbiBvcF9hbmQoYSxiKXtyZXR1cm4gYSZifWZ1bmN0aW9uIGJuQW5kKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfYW5kLGMpO3JldHVybiBjfWZ1bmN0aW9uIG9wX29yKGEsYil7cmV0dXJuIGF8Yn1mdW5jdGlvbiBibk9yKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3Bfb3IsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gb3BfeG9yKGEsYil7cmV0dXJuIGFeYn1mdW5jdGlvbiBiblhvcihiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX3hvcixjKTtyZXR1cm4gY31mdW5jdGlvbiBvcF9hbmRub3QoYSxiKXtyZXR1cm4gYSZ+Yn1mdW5jdGlvbiBibkFuZE5vdChiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX2FuZG5vdCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibk5vdCgpe3ZhciBiPW5iaSgpO2Zvcih2YXIgYT0wO2E8dGhpcy50OysrYSl7YlthXT10aGlzLkRNJn50aGlzW2FdfWIudD10aGlzLnQ7Yi5zPX50aGlzLnM7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5TaGlmdExlZnQoYil7dmFyIGE9bmJpKCk7aWYoYjwwKXt0aGlzLnJTaGlmdFRvKC1iLGEpfWVsc2V7dGhpcy5sU2hpZnRUbyhiLGEpfXJldHVybiBhfWZ1bmN0aW9uIGJuU2hpZnRSaWdodChiKXt2YXIgYT1uYmkoKTtpZihiPDApe3RoaXMubFNoaWZ0VG8oLWIsYSl9ZWxzZXt0aGlzLnJTaGlmdFRvKGIsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gbGJpdChhKXtpZihhPT0wKXtyZXR1cm4gLTF9dmFyIGI9MDtpZigoYSY2NTUzNSk9PTApe2E+Pj0xNjtiKz0xNn1pZigoYSYyNTUpPT0wKXthPj49ODtiKz04fWlmKChhJjE1KT09MCl7YT4+PTQ7Yis9NH1pZigoYSYzKT09MCl7YT4+PTI7Yis9Mn1pZigoYSYxKT09MCl7KytifXJldHVybiBifWZ1bmN0aW9uIGJuR2V0TG93ZXN0U2V0Qml0KCl7Zm9yKHZhciBhPTA7YTx0aGlzLnQ7KythKXtpZih0aGlzW2FdIT0wKXtyZXR1cm4gYSp0aGlzLkRCK2xiaXQodGhpc1thXSl9fWlmKHRoaXMuczwwKXtyZXR1cm4gdGhpcy50KnRoaXMuREJ9cmV0dXJuIC0xfWZ1bmN0aW9uIGNiaXQoYSl7dmFyIGI9MDt3aGlsZShhIT0wKXthJj1hLTE7KytifXJldHVybiBifWZ1bmN0aW9uIGJuQml0Q291bnQoKXt2YXIgYz0wLGE9dGhpcy5zJnRoaXMuRE07Zm9yKHZhciBiPTA7Yjx0aGlzLnQ7KytiKXtjKz1jYml0KHRoaXNbYl1eYSl9cmV0dXJuIGN9ZnVuY3Rpb24gYm5UZXN0Qml0KGIpe3ZhciBhPU1hdGguZmxvb3IoYi90aGlzLkRCKTtpZihhPj10aGlzLnQpe3JldHVybih0aGlzLnMhPTApfXJldHVybigodGhpc1thXSYoMTw8KGIldGhpcy5EQikpKSE9MCl9ZnVuY3Rpb24gYm5wQ2hhbmdlQml0KGMsYil7dmFyIGE9QmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGMpO3RoaXMuYml0d2lzZVRvKGEsYixhKTtyZXR1cm4gYX1mdW5jdGlvbiBiblNldEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9vcil9ZnVuY3Rpb24gYm5DbGVhckJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF9hbmRub3QpfWZ1bmN0aW9uIGJuRmxpcEJpdChhKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoYSxvcF94b3IpfWZ1bmN0aW9uIGJucEFkZFRvKGQsZil7dmFyIGU9MCxnPTAsYj1NYXRoLm1pbihkLnQsdGhpcy50KTt3aGlsZShlPGIpe2crPXRoaXNbZV0rZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWlmKGQudDx0aGlzLnQpe2crPWQuczt3aGlsZShlPHRoaXMudCl7Zys9dGhpc1tlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPXRoaXMuc31lbHNle2crPXRoaXMuczt3aGlsZShlPGQudCl7Zys9ZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPWQuc31mLnM9KGc8MCk/LTE6MDtpZihnPjApe2ZbZSsrXT1nfWVsc2V7aWYoZzwtMSl7ZltlKytdPXRoaXMuRFYrZ319Zi50PWU7Zi5jbGFtcCgpfWZ1bmN0aW9uIGJuQWRkKGIpe3ZhciBjPW5iaSgpO3RoaXMuYWRkVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBiblN1YnRyYWN0KGIpe3ZhciBjPW5iaSgpO3RoaXMuc3ViVG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBibk11bHRpcGx5KGIpe3ZhciBjPW5iaSgpO3RoaXMubXVsdGlwbHlUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuU3F1YXJlKCl7dmFyIGE9bmJpKCk7dGhpcy5zcXVhcmVUbyhhKTtyZXR1cm4gYX1mdW5jdGlvbiBibkRpdmlkZShiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsYyxudWxsKTtyZXR1cm4gY31mdW5jdGlvbiBiblJlbWFpbmRlcihiKXt2YXIgYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsbnVsbCxjKTtyZXR1cm4gY31mdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihiKXt2YXIgZD1uYmkoKSxjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixkLGMpO3JldHVybiBuZXcgQXJyYXkoZCxjKX1mdW5jdGlvbiBibnBETXVsdGlwbHkoYSl7dGhpc1t0aGlzLnRdPXRoaXMuYW0oMCxhLTEsdGhpcywwLDAsdGhpcy50KTsrK3RoaXMudDt0aGlzLmNsYW1wKCl9ZnVuY3Rpb24gYm5wREFkZE9mZnNldChiLGEpe2lmKGI9PTApe3JldHVybn13aGlsZSh0aGlzLnQ8PWEpe3RoaXNbdGhpcy50KytdPTB9dGhpc1thXSs9Yjt3aGlsZSh0aGlzW2FdPj10aGlzLkRWKXt0aGlzW2FdLT10aGlzLkRWO2lmKCsrYT49dGhpcy50KXt0aGlzW3RoaXMudCsrXT0wfSsrdGhpc1thXX19ZnVuY3Rpb24gTnVsbEV4cCgpe31mdW5jdGlvbiBuTm9wKGEpe3JldHVybiBhfWZ1bmN0aW9uIG5NdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYil9ZnVuY3Rpb24gblNxclRvKGEsYil7YS5zcXVhcmVUbyhiKX1OdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUubXVsVG89bk11bFRvO051bGxFeHAucHJvdG90eXBlLnNxclRvPW5TcXJUbztmdW5jdGlvbiBiblBvdyhhKXtyZXR1cm4gdGhpcy5leHAoYSxuZXcgTnVsbEV4cCgpKX1mdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYixmLGUpe3ZhciBkPU1hdGgubWluKHRoaXMudCtiLnQsZik7ZS5zPTA7ZS50PWQ7d2hpbGUoZD4wKXtlWy0tZF09MH12YXIgYztmb3IoYz1lLnQtdGhpcy50O2Q8YzsrK2Qpe2VbZCt0aGlzLnRdPXRoaXMuYW0oMCxiW2RdLGUsZCwwLHRoaXMudCl9Zm9yKGM9TWF0aC5taW4oYi50LGYpO2Q8YzsrK2Qpe3RoaXMuYW0oMCxiW2RdLGUsZCwwLGYtZCl9ZS5jbGFtcCgpfWZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhiLGUsZCl7LS1lO3ZhciBjPWQudD10aGlzLnQrYi50LWU7ZC5zPTA7d2hpbGUoLS1jPj0wKXtkW2NdPTB9Zm9yKGM9TWF0aC5tYXgoZS10aGlzLnQsMCk7YzxiLnQ7KytjKXtkW3RoaXMudCtjLWVdPXRoaXMuYW0oZS1jLGJbY10sZCwwLDAsdGhpcy50K2MtZSl9ZC5jbGFtcCgpO2QuZHJTaGlmdFRvKDEsZCl9ZnVuY3Rpb24gQmFycmV0dChhKXt0aGlzLnIyPW5iaSgpO3RoaXMucTM9bmJpKCk7QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKDIqYS50LHRoaXMucjIpO3RoaXMubXU9dGhpcy5yMi5kaXZpZGUoYSk7dGhpcy5tPWF9ZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoYSl7aWYoYS5zPDB8fGEudD4yKnRoaXMubS50KXtyZXR1cm4gYS5tb2QodGhpcy5tKX1lbHNle2lmKGEuY29tcGFyZVRvKHRoaXMubSk8MCl7cmV0dXJuIGF9ZWxzZXt2YXIgYj1uYmkoKTthLmNvcHlUbyhiKTt0aGlzLnJlZHVjZShiKTtyZXR1cm4gYn19fWZ1bmN0aW9uIGJhcnJldHRSZXZlcnQoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gYmFycmV0dFJlZHVjZShhKXthLmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO2lmKGEudD50aGlzLm0udCsxKXthLnQ9dGhpcy5tLnQrMTthLmNsYW1wKCl9dGhpcy5tdS5tdWx0aXBseVVwcGVyVG8odGhpcy5yMix0aGlzLm0udCsxLHRoaXMucTMpO3RoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO3doaWxlKGEuY29tcGFyZVRvKHRoaXMucjIpPDApe2EuZEFkZE9mZnNldCgxLHRoaXMubS50KzEpfWEuc3ViVG8odGhpcy5yMixhKTt3aGlsZShhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gYmFycmV0dFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBiYXJyZXR0TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfUJhcnJldHQucHJvdG90eXBlLmNvbnZlcnQ9YmFycmV0dENvbnZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0PWJhcnJldHRSZXZlcnQ7QmFycmV0dC5wcm90b3R5cGUucmVkdWNlPWJhcnJldHRSZWR1Y2U7QmFycmV0dC5wcm90b3R5cGUubXVsVG89YmFycmV0dE11bFRvO0JhcnJldHQucHJvdG90eXBlLnNxclRvPWJhcnJldHRTcXJUbztmdW5jdGlvbiBibk1vZFBvdyhxLGYpe3ZhciBvPXEuYml0TGVuZ3RoKCksaCxiPW5idigxKSx2O2lmKG88PTApe3JldHVybiBifWVsc2V7aWYobzwxOCl7aD0xfWVsc2V7aWYobzw0OCl7aD0zfWVsc2V7aWYobzwxNDQpe2g9NH1lbHNle2lmKG88NzY4KXtoPTV9ZWxzZXtoPTZ9fX19fWlmKG88OCl7dj1uZXcgQ2xhc3NpYyhmKX1lbHNle2lmKGYuaXNFdmVuKCkpe3Y9bmV3IEJhcnJldHQoZil9ZWxzZXt2PW5ldyBNb250Z29tZXJ5KGYpfX12YXIgcD1uZXcgQXJyYXkoKSxkPTMscz1oLTEsYT0oMTw8aCktMTtwWzFdPXYuY29udmVydCh0aGlzKTtpZihoPjEpe3ZhciBBPW5iaSgpO3Yuc3FyVG8ocFsxXSxBKTt3aGlsZShkPD1hKXtwW2RdPW5iaSgpO3YubXVsVG8oQSxwW2QtMl0scFtkXSk7ZCs9Mn19dmFyIGw9cS50LTEseCx1PXRydWUsYz1uYmkoKSx5O289bmJpdHMocVtsXSktMTt3aGlsZShsPj0wKXtpZihvPj1zKXt4PShxW2xdPj4oby1zKSkmYX1lbHNle3g9KHFbbF0mKCgxPDwobysxKSktMSkpPDwocy1vKTtpZihsPjApe3h8PXFbbC0xXT4+KHRoaXMuREIrby1zKX19ZD1oO3doaWxlKCh4JjEpPT0wKXt4Pj49MTstLWR9aWYoKG8tPWQpPDApe28rPXRoaXMuREI7LS1sfWlmKHUpe3BbeF0uY29weVRvKGIpO3U9ZmFsc2V9ZWxzZXt3aGlsZShkPjEpe3Yuc3FyVG8oYixjKTt2LnNxclRvKGMsYik7ZC09Mn1pZihkPjApe3Yuc3FyVG8oYixjKX1lbHNle3k9YjtiPWM7Yz15fXYubXVsVG8oYyxwW3hdLGIpfXdoaWxlKGw+PTAmJihxW2xdJigxPDxvKSk9PTApe3Yuc3FyVG8oYixjKTt5PWI7Yj1jO2M9eTtpZigtLW88MCl7bz10aGlzLkRCLTE7LS1sfX19cmV0dXJuIHYucmV2ZXJ0KGIpfWZ1bmN0aW9uIGJuR0NEKGMpe3ZhciBiPSh0aGlzLnM8MCk/dGhpcy5uZWdhdGUoKTp0aGlzLmNsb25lKCk7dmFyIGg9KGMuczwwKT9jLm5lZ2F0ZSgpOmMuY2xvbmUoKTtpZihiLmNvbXBhcmVUbyhoKTwwKXt2YXIgZT1iO2I9aDtoPWV9dmFyIGQ9Yi5nZXRMb3dlc3RTZXRCaXQoKSxmPWguZ2V0TG93ZXN0U2V0Qml0KCk7aWYoZjwwKXtyZXR1cm4gYn1pZihkPGYpe2Y9ZH1pZihmPjApe2IuclNoaWZ0VG8oZixiKTtoLnJTaGlmdFRvKGYsaCl9d2hpbGUoYi5zaWdudW0oKT4wKXtpZigoZD1iLmdldExvd2VzdFNldEJpdCgpKT4wKXtiLnJTaGlmdFRvKGQsYil9aWYoKGQ9aC5nZXRMb3dlc3RTZXRCaXQoKSk+MCl7aC5yU2hpZnRUbyhkLGgpfWlmKGIuY29tcGFyZVRvKGgpPj0wKXtiLnN1YlRvKGgsYik7Yi5yU2hpZnRUbygxLGIpfWVsc2V7aC5zdWJUbyhiLGgpO2guclNoaWZ0VG8oMSxoKX19aWYoZj4wKXtoLmxTaGlmdFRvKGYsaCl9cmV0dXJuIGh9ZnVuY3Rpb24gYm5wTW9kSW50KGUpe2lmKGU8PTApe3JldHVybiAwfXZhciBjPXRoaXMuRFYlZSxiPSh0aGlzLnM8MCk/ZS0xOjA7aWYodGhpcy50PjApe2lmKGM9PTApe2I9dGhpc1swXSVlfWVsc2V7Zm9yKHZhciBhPXRoaXMudC0xO2E+PTA7LS1hKXtiPShjKmIrdGhpc1thXSklZX19fXJldHVybiBifWZ1bmN0aW9uIGJuTW9kSW52ZXJzZShmKXt2YXIgaj1mLmlzRXZlbigpO2lmKCh0aGlzLmlzRXZlbigpJiZqKXx8Zi5zaWdudW0oKT09MCl7cmV0dXJuIEJpZ0ludGVnZXIuWkVST312YXIgaT1mLmNsb25lKCksaD10aGlzLmNsb25lKCk7dmFyIGc9bmJ2KDEpLGU9bmJ2KDApLGw9bmJ2KDApLGs9bmJ2KDEpO3doaWxlKGkuc2lnbnVtKCkhPTApe3doaWxlKGkuaXNFdmVuKCkpe2kuclNoaWZ0VG8oMSxpKTtpZihqKXtpZighZy5pc0V2ZW4oKXx8IWUuaXNFdmVuKCkpe2cuYWRkVG8odGhpcyxnKTtlLnN1YlRvKGYsZSl9Zy5yU2hpZnRUbygxLGcpfWVsc2V7aWYoIWUuaXNFdmVuKCkpe2Uuc3ViVG8oZixlKX19ZS5yU2hpZnRUbygxLGUpfXdoaWxlKGguaXNFdmVuKCkpe2guclNoaWZ0VG8oMSxoKTtpZihqKXtpZighbC5pc0V2ZW4oKXx8IWsuaXNFdmVuKCkpe2wuYWRkVG8odGhpcyxsKTtrLnN1YlRvKGYsayl9bC5yU2hpZnRUbygxLGwpfWVsc2V7aWYoIWsuaXNFdmVuKCkpe2suc3ViVG8oZixrKX19ay5yU2hpZnRUbygxLGspfWlmKGkuY29tcGFyZVRvKGgpPj0wKXtpLnN1YlRvKGgsaSk7aWYoail7Zy5zdWJUbyhsLGcpfWUuc3ViVG8oayxlKX1lbHNle2guc3ViVG8oaSxoKTtpZihqKXtsLnN1YlRvKGcsbCl9ay5zdWJUbyhlLGspfX1pZihoLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTApe3JldHVybiBCaWdJbnRlZ2VyLlpFUk99aWYoay5jb21wYXJlVG8oZik+PTApe3JldHVybiBrLnN1YnRyYWN0KGYpfWlmKGsuc2lnbnVtKCk8MCl7ay5hZGRUbyhmLGspfWVsc2V7cmV0dXJuIGt9aWYoay5zaWdudW0oKTwwKXtyZXR1cm4gay5hZGQoZil9ZWxzZXtyZXR1cm4ga319dmFyIGxvd3ByaW1lcz1bMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTt2YXIgbHBsaW09KDE8PDI2KS9sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXTtmdW5jdGlvbiBibklzUHJvYmFibGVQcmltZShlKXt2YXIgZCxiPXRoaXMuYWJzKCk7aWYoYi50PT0xJiZiWzBdPD1sb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSl7Zm9yKGQ9MDtkPGxvd3ByaW1lcy5sZW5ndGg7KytkKXtpZihiWzBdPT1sb3dwcmltZXNbZF0pe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9aWYoYi5pc0V2ZW4oKSl7cmV0dXJuIGZhbHNlfWQ9MTt3aGlsZShkPGxvd3ByaW1lcy5sZW5ndGgpe3ZhciBhPWxvd3ByaW1lc1tkXSxjPWQrMTt3aGlsZShjPGxvd3ByaW1lcy5sZW5ndGgmJmE8bHBsaW0pe2EqPWxvd3ByaW1lc1tjKytdfWE9Yi5tb2RJbnQoYSk7d2hpbGUoZDxjKXtpZihhJWxvd3ByaW1lc1tkKytdPT0wKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gYi5taWxsZXJSYWJpbihlKX1mdW5jdGlvbiBibnBNaWxsZXJSYWJpbihmKXt2YXIgZz10aGlzLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTt2YXIgYz1nLmdldExvd2VzdFNldEJpdCgpO2lmKGM8PTApe3JldHVybiBmYWxzZX12YXIgaD1nLnNoaWZ0UmlnaHQoYyk7Zj0oZisxKT4+MTtpZihmPmxvd3ByaW1lcy5sZW5ndGgpe2Y9bG93cHJpbWVzLmxlbmd0aH12YXIgYj1uYmkoKTtmb3IodmFyIGU9MDtlPGY7KytlKXtiLmZyb21JbnQobG93cHJpbWVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsb3dwcmltZXMubGVuZ3RoKV0pO3ZhciBsPWIubW9kUG93KGgsdGhpcyk7aWYobC5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpIT0wJiZsLmNvbXBhcmVUbyhnKSE9MCl7dmFyIGQ9MTt3aGlsZShkKys8YyYmbC5jb21wYXJlVG8oZykhPTApe2w9bC5tb2RQb3dJbnQoMix0aGlzKTtpZihsLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk9PTApe3JldHVybiBmYWxzZX19aWYobC5jb21wYXJlVG8oZykhPTApe3JldHVybiBmYWxzZX19fXJldHVybiB0cnVlfUJpZ0ludGVnZXIucHJvdG90eXBlLmNodW5rU2l6ZT1ibnBDaHVua1NpemU7QmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeD1ibnBUb1JhZGl4O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeD1ibnBGcm9tUmFkaXg7QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbU51bWJlcj1ibnBGcm9tTnVtYmVyO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbz1ibnBCaXR3aXNlVG87QmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0PWJucENoYW5nZUJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGRUbz1ibnBBZGRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHk9Ym5wRE11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQ9Ym5wREFkZE9mZnNldDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseUxvd2VyVG89Ym5wTXVsdGlwbHlMb3dlclRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbz1ibnBNdWx0aXBseVVwcGVyVG87QmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50PWJucE1vZEludDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5taWxsZXJSYWJpbj1ibnBNaWxsZXJSYWJpbjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZT1ibkNsb25lO0JpZ0ludGVnZXIucHJvdG90eXBlLmludFZhbHVlPWJuSW50VmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlPWJuQnl0ZVZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWU9Ym5TaG9ydFZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLnNpZ251bT1iblNpZ051bTtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheT1iblRvQnl0ZUFycmF5O0JpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscz1ibkVxdWFscztCaWdJbnRlZ2VyLnByb3RvdHlwZS5taW49Ym5NaW47QmlnSW50ZWdlci5wcm90b3R5cGUubWF4PWJuTWF4O0JpZ0ludGVnZXIucHJvdG90eXBlLmFuZD1ibkFuZDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5vcj1ibk9yO0JpZ0ludGVnZXIucHJvdG90eXBlLnhvcj1iblhvcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3Q9Ym5BbmROb3Q7QmlnSW50ZWdlci5wcm90b3R5cGUubm90PWJuTm90O0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdD1iblNoaWZ0TGVmdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0PWJuU2hpZnRSaWdodDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5nZXRMb3dlc3RTZXRCaXQ9Ym5HZXRMb3dlc3RTZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQ9Ym5CaXRDb3VudDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0PWJuVGVzdEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zZXRCaXQ9Ym5TZXRCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQ9Ym5DbGVhckJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0PWJuRmxpcEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hZGQ9Ym5BZGQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3Q9Ym5TdWJ0cmFjdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseT1ibk11bHRpcGx5O0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdmlkZT1ibkRpdmlkZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXI9Ym5SZW1haW5kZXI7QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyPWJuRGl2aWRlQW5kUmVtYWluZGVyO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvdz1ibk1vZFBvdztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlPWJuTW9kSW52ZXJzZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3c9Ym5Qb3c7QmlnSW50ZWdlci5wcm90b3R5cGUuZ2NkPWJuR0NEO0JpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZT1ibklzUHJvYmFibGVQcmltZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmU9Ym5TcXVhcmU7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbmZ1bmN0aW9uIEFyY2ZvdXIoKXt0aGlzLmk9MDt0aGlzLmo9MDt0aGlzLlM9bmV3IEFycmF5KCl9ZnVuY3Rpb24gQVJDNGluaXQoZCl7dmFyIGMsYSxiO2ZvcihjPTA7YzwyNTY7KytjKXt0aGlzLlNbY109Y31hPTA7Zm9yKGM9MDtjPDI1NjsrK2Mpe2E9KGErdGhpcy5TW2NdK2RbYyVkLmxlbmd0aF0pJjI1NTtiPXRoaXMuU1tjXTt0aGlzLlNbY109dGhpcy5TW2FdO3RoaXMuU1thXT1ifXRoaXMuaT0wO3RoaXMuaj0wfWZ1bmN0aW9uIEFSQzRuZXh0KCl7dmFyIGE7dGhpcy5pPSh0aGlzLmkrMSkmMjU1O3RoaXMuaj0odGhpcy5qK3RoaXMuU1t0aGlzLmldKSYyNTU7YT10aGlzLlNbdGhpcy5pXTt0aGlzLlNbdGhpcy5pXT10aGlzLlNbdGhpcy5qXTt0aGlzLlNbdGhpcy5qXT1hO3JldHVybiB0aGlzLlNbKGErdGhpcy5TW3RoaXMuaV0pJjI1NV19QXJjZm91ci5wcm90b3R5cGUuaW5pdD1BUkM0aW5pdDtBcmNmb3VyLnByb3RvdHlwZS5uZXh0PUFSQzRuZXh0O2Z1bmN0aW9uIHBybmdfbmV3c3RhdGUoKXtyZXR1cm4gbmV3IEFyY2ZvdXIoKX12YXIgcm5nX3BzaXplPTI1Njtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxudmFyIHJuZ19zdGF0ZTt2YXIgcm5nX3Bvb2w7dmFyIHJuZ19wcHRyO2Z1bmN0aW9uIHJuZ19zZWVkX2ludChhKXtybmdfcG9vbFtybmdfcHB0cisrXV49YSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj44KSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj4xNikmMjU1O3JuZ19wb29sW3JuZ19wcHRyKytdXj0oYT4+MjQpJjI1NTtpZihybmdfcHB0cj49cm5nX3BzaXplKXtybmdfcHB0ci09cm5nX3BzaXplfX1mdW5jdGlvbiBybmdfc2VlZF90aW1lKCl7cm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKX1pZihybmdfcG9vbD09bnVsbCl7cm5nX3Bvb2w9bmV3IEFycmF5KCk7cm5nX3BwdHI9MDt2YXIgdDtpZih3aW5kb3chPT11bmRlZmluZWQmJih3aW5kb3cuY3J5cHRvIT09dW5kZWZpbmVkfHx3aW5kb3cubXNDcnlwdG8hPT11bmRlZmluZWQpKXt2YXIgY3J5cHRvPXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0bztpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgdWE9bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXModWEpO2Zvcih0PTA7dDwzMjsrK3Qpe3JuZ19wb29sW3JuZ19wcHRyKytdPXVhW3RdfX1lbHNle2lmKG5hdmlnYXRvci5hcHBOYW1lPT1cIk5ldHNjYXBlXCImJm5hdmlnYXRvci5hcHBWZXJzaW9uPFwiNVwiKXt2YXIgej13aW5kb3cuY3J5cHRvLnJhbmRvbSgzMik7Zm9yKHQ9MDt0PHoubGVuZ3RoOysrdCl7cm5nX3Bvb2xbcm5nX3BwdHIrK109ei5jaGFyQ29kZUF0KHQpJjI1NX19fX13aGlsZShybmdfcHB0cjxybmdfcHNpemUpe3Q9TWF0aC5mbG9vcig2NTUzNipNYXRoLnJhbmRvbSgpKTtybmdfcG9vbFtybmdfcHB0cisrXT10Pj4+ODtybmdfcG9vbFtybmdfcHB0cisrXT10JjI1NX1ybmdfcHB0cj0wO3JuZ19zZWVkX3RpbWUoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGUoKXtpZihybmdfc3RhdGU9PW51bGwpe3JuZ19zZWVkX3RpbWUoKTtybmdfc3RhdGU9cHJuZ19uZXdzdGF0ZSgpO3JuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtmb3Iocm5nX3BwdHI9MDtybmdfcHB0cjxybmdfcG9vbC5sZW5ndGg7KytybmdfcHB0cil7cm5nX3Bvb2xbcm5nX3BwdHJdPTB9cm5nX3BwdHI9MH1yZXR1cm4gcm5nX3N0YXRlLm5leHQoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGIpe3ZhciBhO2ZvcihhPTA7YTxiLmxlbmd0aDsrK2Epe2JbYV09cm5nX2dldF9ieXRlKCl9fWZ1bmN0aW9uIFNlY3VyZVJhbmRvbSgpe31TZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcz1ybmdfZ2V0X2J5dGVzO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUJpZ0ludChiLGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihiLGEpfWZ1bmN0aW9uIGxpbmVicmsoYyxkKXt2YXIgYT1cIlwiO3ZhciBiPTA7d2hpbGUoYitkPGMubGVuZ3RoKXthKz1jLnN1YnN0cmluZyhiLGIrZCkrXCJcXG5cIjtiKz1kfXJldHVybiBhK2Muc3Vic3RyaW5nKGIsYy5sZW5ndGgpfWZ1bmN0aW9uIGJ5dGUySGV4KGEpe2lmKGE8MTYpe3JldHVyblwiMFwiK2EudG9TdHJpbmcoMTYpfWVsc2V7cmV0dXJuIGEudG9TdHJpbmcoMTYpfX1mdW5jdGlvbiBwa2NzMXBhZDIoZSxoKXtpZihoPGUubGVuZ3RoKzExKXt0aHJvd1wiTWVzc2FnZSB0b28gbG9uZyBmb3IgUlNBXCI7cmV0dXJuIG51bGx9dmFyIGc9bmV3IEFycmF5KCk7dmFyIGQ9ZS5sZW5ndGgtMTt3aGlsZShkPj0wJiZoPjApe3ZhciBmPWUuY2hhckNvZGVBdChkLS0pO2lmKGY8MTI4KXtnWy0taF09Zn1lbHNle2lmKChmPjEyNykmJihmPDIwNDgpKXtnWy0taF09KGYmNjMpfDEyODtnWy0taF09KGY+PjYpfDE5Mn1lbHNle2dbLS1oXT0oZiY2Myl8MTI4O2dbLS1oXT0oKGY+PjYpJjYzKXwxMjg7Z1stLWhdPShmPj4xMil8MjI0fX19Z1stLWhdPTA7dmFyIGI9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBhPW5ldyBBcnJheSgpO3doaWxlKGg+Mil7YVswXT0wO3doaWxlKGFbMF09PTApe2IubmV4dEJ5dGVzKGEpfWdbLS1oXT1hWzBdfWdbLS1oXT0yO2dbLS1oXT0wO3JldHVybiBuZXcgQmlnSW50ZWdlcihnKX1mdW5jdGlvbiBvYWVwX21nZjFfYXJyKGMsYSxlKXt2YXIgYj1cIlwiLGQ9MDt3aGlsZShiLmxlbmd0aDxhKXtiKz1lKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGMuY29uY2F0KFsoZCY0Mjc4MTkwMDgwKT4+MjQsKGQmMTY3MTE2ODApPj4xNiwoZCY2NTI4MCk+PjgsZCYyNTVdKSkpO2QrPTF9cmV0dXJuIGJ9ZnVuY3Rpb24gb2FlcF9wYWQocSxhLGYsbCl7dmFyIGM9S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdDt2YXIgbz1LSlVSLmNyeXB0by5VdGlsO3ZhciBiPW51bGw7aWYoIWYpe2Y9XCJzaGExXCJ9aWYodHlwZW9mIGY9PT1cInN0cmluZ1wiKXtiPWMuZ2V0Q2Fub25pY2FsQWxnTmFtZShmKTtsPWMuZ2V0SGFzaExlbmd0aChiKTtmPWZ1bmN0aW9uKGkpe3JldHVybiBoZXh0b3JzdHIoby5oYXNoSGV4KHJzdHJ0b2hleChpKSxiKSl9fWlmKHEubGVuZ3RoKzIqbCsyPmEpe3Rocm93XCJNZXNzYWdlIHRvbyBsb25nIGZvciBSU0FcIn12YXIgaz1cIlwiLGU7Zm9yKGU9MDtlPGEtcS5sZW5ndGgtMipsLTI7ZSs9MSl7ays9XCJcXHgwMFwifXZhciBoPWYoXCJcIikraytcIlxceDAxXCIrcTt2YXIgZz1uZXcgQXJyYXkobCk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhnKTt2YXIgaj1vYWVwX21nZjFfYXJyKGcsaC5sZW5ndGgsZik7dmFyIHA9W107Zm9yKGU9MDtlPGgubGVuZ3RoO2UrPTEpe3BbZV09aC5jaGFyQ29kZUF0KGUpXmouY2hhckNvZGVBdChlKX12YXIgbT1vYWVwX21nZjFfYXJyKHAsZy5sZW5ndGgsZik7dmFyIGQ9WzBdO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKz0xKXtkW2UrMV09Z1tlXV5tLmNoYXJDb2RlQXQoZSl9cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGQuY29uY2F0KHApKX1mdW5jdGlvbiBSU0FLZXkoKXt0aGlzLm49bnVsbDt0aGlzLmU9MDt0aGlzLmQ9bnVsbDt0aGlzLnA9bnVsbDt0aGlzLnE9bnVsbDt0aGlzLmRtcDE9bnVsbDt0aGlzLmRtcTE9bnVsbDt0aGlzLmNvZWZmPW51bGx9ZnVuY3Rpb24gUlNBU2V0UHVibGljKGIsYSl7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMuaXNQcml2YXRlPWZhbHNlO2lmKHR5cGVvZiBiIT09XCJzdHJpbmdcIil7dGhpcy5uPWI7dGhpcy5lPWF9ZWxzZXtpZihiIT1udWxsJiZhIT1udWxsJiZiLmxlbmd0aD4wJiZhLmxlbmd0aD4wKXt0aGlzLm49cGFyc2VCaWdJbnQoYiwxNik7dGhpcy5lPXBhcnNlSW50KGEsMTYpfWVsc2V7dGhyb3dcIkludmFsaWQgUlNBIHB1YmxpYyBrZXlcIn19fWZ1bmN0aW9uIFJTQURvUHVibGljKGEpe3JldHVybiBhLm1vZFBvd0ludCh0aGlzLmUsdGhpcy5uKX1mdW5jdGlvbiBSU0FFbmNyeXB0KGQpe3ZhciBhPXBrY3MxcGFkMihkLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMpO2lmKGE9PW51bGwpe3JldHVybiBudWxsfXZhciBlPXRoaXMuZG9QdWJsaWMoYSk7aWYoZT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGI9ZS50b1N0cmluZygxNik7aWYoKGIubGVuZ3RoJjEpPT0wKXtyZXR1cm4gYn1lbHNle3JldHVyblwiMFwiK2J9fWZ1bmN0aW9uIFJTQUVuY3J5cHRPQUVQKGYsZSxiKXt2YXIgYT1vYWVwX3BhZChmLCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMsZSxiKTtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgZz10aGlzLmRvUHVibGljKGEpO2lmKGc9PW51bGwpe3JldHVybiBudWxsfXZhciBkPWcudG9TdHJpbmcoMTYpO2lmKChkLmxlbmd0aCYxKT09MCl7cmV0dXJuIGR9ZWxzZXtyZXR1cm5cIjBcIitkfX1SU0FLZXkucHJvdG90eXBlLmRvUHVibGljPVJTQURvUHVibGljO1JTQUtleS5wcm90b3R5cGUuc2V0UHVibGljPVJTQVNldFB1YmxpYztSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQ9UlNBRW5jcnlwdDtSU0FLZXkucHJvdG90eXBlLmVuY3J5cHRPQUVQPVJTQUVuY3J5cHRPQUVQO1JTQUtleS5wcm90b3R5cGUudHlwZT1cIlJTQVwiO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBFQ0ZpZWxkRWxlbWVudEZwKGIsYSl7dGhpcy54PWE7dGhpcy5xPWJ9ZnVuY3Rpb24gZmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLnguZXF1YWxzKGEueCkpfWZ1bmN0aW9uIGZlRnBUb0JpZ0ludGVnZXIoKXtyZXR1cm4gdGhpcy54fWZ1bmN0aW9uIGZlRnBOZWdhdGUoKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5uZWdhdGUoKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcEFkZChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5hZGQoYS50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBTdWJ0cmFjdChhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5zdWJ0cmFjdChhLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcE11bHRpcGx5KGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54Lm11bHRpcGx5KGEudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwU3F1YXJlKCl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguc3F1YXJlKCkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBEaXZpZGUoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubXVsdGlwbHkoYS50b0JpZ0ludGVnZXIoKS5tb2RJbnZlcnNlKHRoaXMucSkpLm1vZCh0aGlzLnEpKX1FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5lcXVhbHM9ZmVGcEVxdWFscztFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS50b0JpZ0ludGVnZXI9ZmVGcFRvQmlnSW50ZWdlcjtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5uZWdhdGU9ZmVGcE5lZ2F0ZTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5hZGQ9ZmVGcEFkZDtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zdWJ0cmFjdD1mZUZwU3VidHJhY3Q7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubXVsdGlwbHk9ZmVGcE11bHRpcGx5O0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnNxdWFyZT1mZUZwU3F1YXJlO0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmRpdmlkZT1mZUZwRGl2aWRlO2Z1bmN0aW9uIEVDUG9pbnRGcChjLGEsZCxiKXt0aGlzLmN1cnZlPWM7dGhpcy54PWE7dGhpcy55PWQ7aWYoYj09bnVsbCl7dGhpcy56PUJpZ0ludGVnZXIuT05FfWVsc2V7dGhpcy56PWJ9dGhpcy56aW52PW51bGx9ZnVuY3Rpb24gcG9pbnRGcEdldFgoKXtpZih0aGlzLnppbnY9PW51bGwpe3RoaXMuemludj10aGlzLnoubW9kSW52ZXJzZSh0aGlzLmN1cnZlLnEpfXJldHVybiB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnppbnYpLm1vZCh0aGlzLmN1cnZlLnEpKX1mdW5jdGlvbiBwb2ludEZwR2V0WSgpe2lmKHRoaXMuemludj09bnVsbCl7dGhpcy56aW52PXRoaXMuei5tb2RJbnZlcnNlKHRoaXMuY3VydmUucSl9cmV0dXJuIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMuemludikubW9kKHRoaXMuY3VydmUucSkpfWZ1bmN0aW9uIHBvaW50RnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiBhLmlzSW5maW5pdHkoKX1pZihhLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpfXZhciBjLGI7Yz1hLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYS56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoIWMuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpe3JldHVybiBmYWxzZX1iPWEueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShhLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gYi5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwSXNJbmZpbml0eSgpe2lmKCh0aGlzLng9PW51bGwpJiYodGhpcy55PT1udWxsKSl7cmV0dXJuIHRydWV9cmV0dXJuIHRoaXMuei5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSYmIXRoaXMueS50b0JpZ0ludGVnZXIoKS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKX1mdW5jdGlvbiBwb2ludEZwTmVnYXRlKCl7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLngsdGhpcy55Lm5lZ2F0ZSgpLHRoaXMueil9ZnVuY3Rpb24gcG9pbnRGcEFkZChsKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGx9aWYobC5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfXZhciBwPWwueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShsLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgbz1sLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkobC56KSkubW9kKHRoaXMuY3VydmUucSk7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhvKSl7aWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyhwKSl7cmV0dXJuIHRoaXMudHdpY2UoKX1yZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBqPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgZT10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIG49dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBjPWwueC50b0JpZ0ludGVnZXIoKTt2YXIgaz1sLnkudG9CaWdJbnRlZ2VyKCk7dmFyIG09by5zcXVhcmUoKTt2YXIgaT1tLm11bHRpcGx5KG8pO3ZhciBkPWUubXVsdGlwbHkobSk7dmFyIGc9cC5zcXVhcmUoKS5tdWx0aXBseSh0aGlzLnopO3ZhciBhPWcuc3VidHJhY3QoZC5zaGlmdExlZnQoMSkpLm11bHRpcGx5KGwueikuc3VidHJhY3QoaSkubXVsdGlwbHkobykubW9kKHRoaXMuY3VydmUucSk7dmFyIGg9ZC5tdWx0aXBseShqKS5tdWx0aXBseShwKS5zdWJ0cmFjdChuLm11bHRpcGx5KGkpKS5zdWJ0cmFjdChnLm11bHRpcGx5KHApKS5tdWx0aXBseShsLnopLmFkZChwLm11bHRpcGx5KGkpKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1pLm11bHRpcGx5KHRoaXMueikubXVsdGlwbHkobC56KS5tb2QodGhpcy5jdXJ2ZS5xKTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoYSksdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihoKSxmKX1mdW5jdGlvbiBwb2ludEZwVHdpY2UoKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPW5ldyBCaWdJbnRlZ2VyKFwiM1wiKTt2YXIgYz10aGlzLngudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy55LnRvQmlnSW50ZWdlcigpO3ZhciBlPWgubXVsdGlwbHkodGhpcy56KTt2YXIgaj1lLm11bHRpcGx5KGgpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBpPXRoaXMuY3VydmUuYS50b0JpZ0ludGVnZXIoKTt2YXIgaz1jLnNxdWFyZSgpLm11bHRpcGx5KGcpO2lmKCFCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKGkpKXtrPWsuYWRkKHRoaXMuei5zcXVhcmUoKS5tdWx0aXBseShpKSl9az1rLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBiPWsuc3F1YXJlKCkuc3VidHJhY3QoYy5zaGlmdExlZnQoMykubXVsdGlwbHkoaikpLnNoaWZ0TGVmdCgxKS5tdWx0aXBseShlKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgZj1rLm11bHRpcGx5KGcpLm11bHRpcGx5KGMpLnN1YnRyYWN0KGouc2hpZnRMZWZ0KDEpKS5zaGlmdExlZnQoMikubXVsdGlwbHkoaikuc3VidHJhY3Qoay5zcXVhcmUoKS5tdWx0aXBseShrKSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGQ9ZS5zcXVhcmUoKS5tdWx0aXBseShlKS5zaGlmdExlZnQoMykubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGIpLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoZiksZCl9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5KGQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZihkLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBtPWQ7dmFyIGw9bS5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBiPXRoaXMubmVnYXRlKCk7dmFyIGo9dGhpczt2YXIgcT10aGlzLmN1cnZlLnEuc3VidHJhY3QoZCk7dmFyIG89cS5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO3ZhciBjPW5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLngsdGhpcy55KTt2YXIgYT1jLm5lZ2F0ZSgpO3ZhciBnO2ZvcihnPWwuYml0TGVuZ3RoKCktMjtnPjA7LS1nKXtqPWoudHdpY2UoKTt2YXIgbj1sLnRlc3RCaXQoZyk7dmFyIGY9bS50ZXN0Qml0KGcpO2lmKG4hPWYpe2o9ai5hZGQobj90aGlzOmIpfX1mb3IoZz1vLmJpdExlbmd0aCgpLTI7Zz4wOy0tZyl7Yz1jLnR3aWNlKCk7dmFyIHA9by50ZXN0Qml0KGcpO3ZhciByPXEudGVzdEJpdChnKTtpZihwIT1yKXtjPWMuYWRkKHA/YzphKX19cmV0dXJuIGp9ZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5VHdvKGMsYSxiKXt2YXIgZDtpZihjLmJpdExlbmd0aCgpPmIuYml0TGVuZ3RoKCkpe2Q9Yy5iaXRMZW5ndGgoKS0xfWVsc2V7ZD1iLmJpdExlbmd0aCgpLTF9dmFyIGY9dGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpO3ZhciBlPXRoaXMuYWRkKGEpO3doaWxlKGQ+PTApe2Y9Zi50d2ljZSgpO2lmKGMudGVzdEJpdChkKSl7aWYoYi50ZXN0Qml0KGQpKXtmPWYuYWRkKGUpfWVsc2V7Zj1mLmFkZCh0aGlzKX19ZWxzZXtpZihiLnRlc3RCaXQoZCkpe2Y9Zi5hZGQoYSl9fS0tZH1yZXR1cm4gZn1FQ1BvaW50RnAucHJvdG90eXBlLmdldFg9cG9pbnRGcEdldFg7RUNQb2ludEZwLnByb3RvdHlwZS5nZXRZPXBvaW50RnBHZXRZO0VDUG9pbnRGcC5wcm90b3R5cGUuZXF1YWxzPXBvaW50RnBFcXVhbHM7RUNQb2ludEZwLnByb3RvdHlwZS5pc0luZmluaXR5PXBvaW50RnBJc0luZmluaXR5O0VDUG9pbnRGcC5wcm90b3R5cGUubmVnYXRlPXBvaW50RnBOZWdhdGU7RUNQb2ludEZwLnByb3RvdHlwZS5hZGQ9cG9pbnRGcEFkZDtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlPXBvaW50RnBUd2ljZTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5PXBvaW50RnBNdWx0aXBseTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5VHdvPXBvaW50RnBNdWx0aXBseVR3bztmdW5jdGlvbiBFQ0N1cnZlRnAoZSxkLGMpe3RoaXMucT1lO3RoaXMuYT10aGlzLmZyb21CaWdJbnRlZ2VyKGQpO3RoaXMuYj10aGlzLmZyb21CaWdJbnRlZ2VyKGMpO3RoaXMuaW5maW5pdHk9bmV3IEVDUG9pbnRGcCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gY3VydmVGcEdldFEoKXtyZXR1cm4gdGhpcy5xfWZ1bmN0aW9uIGN1cnZlRnBHZXRBKCl7cmV0dXJuIHRoaXMuYX1mdW5jdGlvbiBjdXJ2ZUZwR2V0Qigpe3JldHVybiB0aGlzLmJ9ZnVuY3Rpb24gY3VydmVGcEVxdWFscyhhKXtpZihhPT10aGlzKXtyZXR1cm4gdHJ1ZX1yZXR1cm4odGhpcy5xLmVxdWFscyhhLnEpJiZ0aGlzLmEuZXF1YWxzKGEuYSkmJnRoaXMuYi5lcXVhbHMoYS5iKSl9ZnVuY3Rpb24gY3VydmVGcEdldEluZmluaXR5KCl7cmV0dXJuIHRoaXMuaW5maW5pdHl9ZnVuY3Rpb24gY3VydmVGcEZyb21CaWdJbnRlZ2VyKGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsYSl9ZnVuY3Rpb24gY3VydmVGcERlY29kZVBvaW50SGV4KGQpe3N3aXRjaChwYXJzZUludChkLnN1YnN0cigwLDIpLDE2KSl7Y2FzZSAwOnJldHVybiB0aGlzLmluZmluaXR5O2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG51bGw7Y2FzZSA0OmNhc2UgNjpjYXNlIDc6dmFyIGE9KGQubGVuZ3RoLTIpLzI7dmFyIGM9ZC5zdWJzdHIoMixhKTt2YXIgYj1kLnN1YnN0cihhKzIsYSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcyx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGMsMTYpKSx0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKGIsMTYpKSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRRPWN1cnZlRnBHZXRRO0VDQ3VydmVGcC5wcm90b3R5cGUuZ2V0QT1jdXJ2ZUZwR2V0QTtFQ0N1cnZlRnAucHJvdG90eXBlLmdldEI9Y3VydmVGcEdldEI7RUNDdXJ2ZUZwLnByb3RvdHlwZS5lcXVhbHM9Y3VydmVGcEVxdWFscztFQ0N1cnZlRnAucHJvdG90eXBlLmdldEluZmluaXR5PWN1cnZlRnBHZXRJbmZpbml0eTtFQ0N1cnZlRnAucHJvdG90eXBlLmZyb21CaWdJbnRlZ2VyPWN1cnZlRnBGcm9tQmlnSW50ZWdlcjtFQ0N1cnZlRnAucHJvdG90eXBlLmRlY29kZVBvaW50SGV4PWN1cnZlRnBEZWNvZGVQb2ludEhleDtcbi8qISAoYykgU3RlZmFuIFRob21hcyB8IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYml0Y29pbmpzLWxpYlxyXG4gKi9cclxuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZ2V0Qnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKCh0aGlzLnRvQmlnSW50ZWdlcigpLmJpdExlbmd0aCgpKzcpLzgpfTtFQ1BvaW50RnAucHJvdG90eXBlLmdldEVuY29kZWQ9ZnVuY3Rpb24oYyl7dmFyIGQ9ZnVuY3Rpb24oaCxmKXt2YXIgZz1oLnRvQnl0ZUFycmF5VW5zaWduZWQoKTtpZihmPGcubGVuZ3RoKXtnPWcuc2xpY2UoZy5sZW5ndGgtZil9ZWxzZXt3aGlsZShmPmcubGVuZ3RoKXtnLnVuc2hpZnQoMCl9fXJldHVybiBnfTt2YXIgYT10aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgZT10aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgYj1kKGEsMzIpO2lmKGMpe2lmKGUuaXNFdmVuKCkpe2IudW5zaGlmdCgyKX1lbHNle2IudW5zaGlmdCgzKX19ZWxzZXtiLnVuc2hpZnQoNCk7Yj1iLmNvbmNhdChkKGUsMzIpKX1yZXR1cm4gYn07RUNQb2ludEZwLmRlY29kZUZyb209ZnVuY3Rpb24oZyxjKXt2YXIgZj1jWzBdO3ZhciBlPWMubGVuZ3RoLTE7dmFyIGQ9Yy5zbGljZSgxLDErZS8yKTt2YXIgYj1jLnNsaWNlKDErZS8yLDErZSk7ZC51bnNoaWZ0KDApO2IudW5zaGlmdCgwKTt2YXIgYT1uZXcgQmlnSW50ZWdlcihkKTt2YXIgaD1uZXcgQmlnSW50ZWdlcihiKTtyZXR1cm4gbmV3IEVDUG9pbnRGcChnLGcuZnJvbUJpZ0ludGVnZXIoYSksZy5mcm9tQmlnSW50ZWdlcihoKSl9O0VDUG9pbnRGcC5kZWNvZGVGcm9tSGV4PWZ1bmN0aW9uKGcsYyl7dmFyIGY9Yy5zdWJzdHIoMCwyKTt2YXIgZT1jLmxlbmd0aC0yO3ZhciBkPWMuc3Vic3RyKDIsZS8yKTt2YXIgYj1jLnN1YnN0cigyK2UvMixlLzIpO3ZhciBhPW5ldyBCaWdJbnRlZ2VyKGQsMTYpO3ZhciBoPW5ldyBCaWdJbnRlZ2VyKGIsMTYpO3JldHVybiBuZXcgRUNQb2ludEZwKGcsZy5mcm9tQmlnSW50ZWdlcihhKSxnLmZyb21CaWdJbnRlZ2VyKGgpKX07RUNQb2ludEZwLnByb3RvdHlwZS5hZGQyRD1mdW5jdGlvbihjKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGN9aWYoYy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueC5lcXVhbHMoYy54KSl7aWYodGhpcy55LmVxdWFscyhjLnkpKXtyZXR1cm4gdGhpcy50d2ljZSgpfXJldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9Yy54LnN1YnRyYWN0KHRoaXMueCk7dmFyIGU9Yy55LnN1YnRyYWN0KHRoaXMueSk7dmFyIGE9ZS5kaXZpZGUoZyk7dmFyIGQ9YS5zcXVhcmUoKS5zdWJ0cmFjdCh0aGlzLngpLnN1YnRyYWN0KGMueCk7dmFyIGY9YS5tdWx0aXBseSh0aGlzLnguc3VidHJhY3QoZCkpLnN1YnRyYWN0KHRoaXMueSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSxkLGYpfTtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlMkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBiPXRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKDIpKTt2YXIgZT10aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZigzKSk7dmFyIGE9dGhpcy54LnNxdWFyZSgpLm11bHRpcGx5KGUpLmFkZCh0aGlzLmN1cnZlLmEpLmRpdmlkZSh0aGlzLnkubXVsdGlwbHkoYikpO3ZhciBjPWEuc3F1YXJlKCkuc3VidHJhY3QodGhpcy54Lm11bHRpcGx5KGIpKTt2YXIgZD1hLm11bHRpcGx5KHRoaXMueC5zdWJ0cmFjdChjKSkuc3VidHJhY3QodGhpcy55KTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLGMsZCl9O0VDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHkyRD1mdW5jdGlvbihiKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYoYi5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1iO3ZhciBmPWcubXVsdGlwbHkobmV3IEJpZ0ludGVnZXIoXCIzXCIpKTt2YXIgbD10aGlzLm5lZ2F0ZSgpO3ZhciBkPXRoaXM7dmFyIGM7Zm9yKGM9Zi5iaXRMZW5ndGgoKS0yO2M+MDstLWMpe2Q9ZC50d2ljZSgpO3ZhciBhPWYudGVzdEJpdChjKTt2YXIgaj1nLnRlc3RCaXQoYyk7aWYoYSE9ail7ZD1kLmFkZDJEKGE/dGhpczpsKX19cmV0dXJuIGR9O0VDUG9pbnRGcC5wcm90b3R5cGUuaXNPbkN1cnZlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGY9dGhpcy5jdXJ2ZS5nZXRBKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGM9dGhpcy5jdXJ2ZS5nZXRCKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy5jdXJ2ZS5nZXRRKCk7dmFyIGU9aS5tdWx0aXBseShpKS5tb2QoaCk7dmFyIGc9ZC5tdWx0aXBseShkKS5tdWx0aXBseShkKS5hZGQoZi5tdWx0aXBseShkKSkuYWRkKGMpLm1vZChoKTtyZXR1cm4gZS5lcXVhbHMoZyl9O0VDUG9pbnRGcC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIihcIit0aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpK1wiLFwiK3RoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkrXCIpXCJ9O0VDUG9pbnRGcC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmN1cnZlLmdldFEoKTtpZih0aGlzLmlzSW5maW5pdHkoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgYXQgaW5maW5pdHkuXCIpfXZhciBhPXRoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBiPXRoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO2lmKGEuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxhLmNvbXBhcmVUbyhjLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSk+MCl7dGhyb3cgbmV3IEVycm9yKFwieCBjb29yZGluYXRlIG91dCBvZiBib3VuZHNcIil9aWYoYi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGIuY29tcGFyZVRvKGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKT4wKXt0aHJvdyBuZXcgRXJyb3IoXCJ5IGNvb3JkaW5hdGUgb3V0IG9mIGJvdW5kc1wiKX1pZighdGhpcy5pc09uQ3VydmUoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgbm90IG9uIHRoZSBjdXJ2ZS5cIil9aWYodGhpcy5tdWx0aXBseShjKS5pc0luZmluaXR5KCkpe3Rocm93IG5ldyBFcnJvcihcIlBvaW50IGlzIG5vdCBhIHNjYWxhciBtdWx0aXBsZSBvZiBHLlwiKX1yZXR1cm4gdHJ1ZX07XG4vKiEgTWlrZSBTYW11ZWwgKGMpIDIwMDkgfCBjb2RlLmdvb2dsZS5jb20vcC9qc29uLXNhbnMtZXZhbFxyXG4gKi9cclxudmFyIGpzb25QYXJzZT0oZnVuY3Rpb24oKXt2YXIgZT1cIig/Oi0/XFxcXGIoPzowfFsxLTldWzAtOV0qKSg/OlxcXFwuWzAtOV0rKT8oPzpbZUVdWystXT9bMC05XSspP1xcXFxiKVwiO3ZhciBqPScoPzpbXlxcXFwwLVxcXFx4MDhcXFxceDBhLVxcXFx4MWZcIlxcXFxcXFxcXXxcXFxcXFxcXCg/OltcIi9cXFxcXFxcXGJmbnJ0XXx1WzAtOUEtRmEtZl17NH0pKSc7dmFyIGk9Jyg/OlwiJytqKycqXCIpJzt2YXIgZD1uZXcgUmVnRXhwKFwiKD86ZmFsc2V8dHJ1ZXxudWxsfFtcXFxce1xcXFx9XFxcXFtcXFxcXV18XCIrZStcInxcIitpK1wiKVwiLFwiZ1wiKTt2YXIgaz1uZXcgUmVnRXhwKFwiXFxcXFxcXFwoPzooW151XSl8dSguezR9KSlcIixcImdcIik7dmFyIGc9eydcIic6J1wiJyxcIi9cIjpcIi9cIixcIlxcXFxcIjpcIlxcXFxcIixiOlwiXFxiXCIsZjpcIlxcZlwiLG46XCJcXG5cIixyOlwiXFxyXCIsdDpcIlxcdFwifTtmdW5jdGlvbiBoKGwsbSxuKXtyZXR1cm4gbT9nW21dOlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobiwxNikpfXZhciBjPW5ldyBTdHJpbmcoXCJcIik7dmFyIGE9XCJcXFxcXCI7dmFyIGY9e1wie1wiOk9iamVjdCxcIltcIjpBcnJheX07dmFyIGI9T2JqZWN0Lmhhc093blByb3BlcnR5O3JldHVybiBmdW5jdGlvbih1LHEpe3ZhciBwPXUubWF0Y2goZCk7dmFyIHg7dmFyIHY9cFswXTt2YXIgbD1mYWxzZTtpZihcIntcIj09PXYpe3g9e319ZWxzZXtpZihcIltcIj09PXYpe3g9W119ZWxzZXt4PVtdO2w9dHJ1ZX19dmFyIHQ7dmFyIHI9W3hdO2Zvcih2YXIgbz0xLWwsbT1wLmxlbmd0aDtvPG07KytvKXt2PXBbb107dmFyIHc7c3dpdGNoKHYuY2hhckNvZGVBdCgwKSl7ZGVmYXVsdDp3PXJbMF07d1t0fHx3Lmxlbmd0aF09Kyh2KTt0PXZvaWQgMDticmVhaztjYXNlIDM0OnY9di5zdWJzdHJpbmcoMSx2Lmxlbmd0aC0xKTtpZih2LmluZGV4T2YoYSkhPT0tMSl7dj12LnJlcGxhY2UoayxoKX13PXJbMF07aWYoIXQpe2lmKHcgaW5zdGFuY2VvZiBBcnJheSl7dD13Lmxlbmd0aH1lbHNle3Q9dnx8YzticmVha319d1t0XT12O3Q9dm9pZCAwO2JyZWFrO2Nhc2UgOTE6dz1yWzBdO3IudW5zaGlmdCh3W3R8fHcubGVuZ3RoXT1bXSk7dD12b2lkIDA7YnJlYWs7Y2FzZSA5MzpyLnNoaWZ0KCk7YnJlYWs7Y2FzZSAxMDI6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPWZhbHNlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTEwOnc9clswXTt3W3R8fHcubGVuZ3RoXT1udWxsO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTE2Onc9clswXTt3W3R8fHcubGVuZ3RoXT10cnVlO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTIzOnc9clswXTtyLnVuc2hpZnQod1t0fHx3Lmxlbmd0aF09e30pO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMTI1OnIuc2hpZnQoKTticmVha319aWYobCl7aWYoci5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoKX14PXhbMF19ZWxzZXtpZihyLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCl9fWlmKHEpe3ZhciBzPWZ1bmN0aW9uKEMsQil7dmFyIEQ9Q1tCXTtpZihEJiZ0eXBlb2YgRD09PVwib2JqZWN0XCIpe3ZhciBuPW51bGw7Zm9yKHZhciB6IGluIEQpe2lmKGIuY2FsbChELHopJiZEIT09Qyl7dmFyIHk9cyhELHopO2lmKHkhPT12b2lkIDApe0Rbel09eX1lbHNle2lmKCFuKXtuPVtdfW4ucHVzaCh6KX19fWlmKG4pe2Zvcih2YXIgQT1uLmxlbmd0aDstLUE+PTA7KXtkZWxldGUgRFtuW0FdXX19fXJldHVybiBxLmNhbGwoQyxCLEQpfTt4PXMoe1wiXCI6eH0sXCJcIil9cmV0dXJuIHh9fSkoKTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5hc24xPT1cInVuZGVmaW5lZFwifHwhS0pVUi5hc24xKXtLSlVSLmFzbjE9e319S0pVUi5hc24xLkFTTjFVdGlsPW5ldyBmdW5jdGlvbigpe3RoaXMuaW50ZWdlclRvQnl0ZUhleD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKDE2KTtpZigoYi5sZW5ndGglMik9PTEpe2I9XCIwXCIrYn1yZXR1cm4gYn07dGhpcy5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleD1mdW5jdGlvbihqKXt2YXIgZj1qLnRvU3RyaW5nKDE2KTtpZihmLnN1YnN0cigwLDEpIT1cIi1cIil7aWYoZi5sZW5ndGglMj09MSl7Zj1cIjBcIitmfWVsc2V7aWYoIWYubWF0Y2goL15bMC03XS8pKXtmPVwiMDBcIitmfX19ZWxzZXt2YXIgYT1mLnN1YnN0cigxKTt2YXIgZT1hLmxlbmd0aDtpZihlJTI9PTEpe2UrPTF9ZWxzZXtpZighZi5tYXRjaCgvXlswLTddLykpe2UrPTJ9fXZhciBnPVwiXCI7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Zys9XCJmXCJ9dmFyIGM9bmV3IEJpZ0ludGVnZXIoZywxNik7dmFyIGI9Yy54b3IoaikuYWRkKEJpZ0ludGVnZXIuT05FKTtmPWIudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14tLyxcIlwiKX1yZXR1cm4gZn07dGhpcy5nZXRQRU1TdHJpbmdGcm9tSGV4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGhleHRvcGVtKGEsYil9O3RoaXMubmV3T2JqZWN0PWZ1bmN0aW9uKGspe3ZhciBGPUtKVVIsbz1GLmFzbjEsdj1vLkFTTjFPYmplY3QsQj1vLkRFUkJvb2xlYW4sZT1vLkRFUkludGVnZXIsdD1vLkRFUkJpdFN0cmluZyxoPW8uREVST2N0ZXRTdHJpbmcseD1vLkRFUk51bGwseT1vLkRFUk9iamVjdElkZW50aWZpZXIsbT1vLkRFUkVudW1lcmF0ZWQsZz1vLkRFUlVURjhTdHJpbmcsZj1vLkRFUk51bWVyaWNTdHJpbmcsQT1vLkRFUlByaW50YWJsZVN0cmluZyx3PW8uREVSVGVsZXRleFN0cmluZyxxPW8uREVSSUE1U3RyaW5nLEU9by5ERVJVVENUaW1lLGo9by5ERVJHZW5lcmFsaXplZFRpbWUsYj1vLkRFUlZpc2libGVTdHJpbmcsbD1vLkRFUkJNUFN0cmluZyxuPW8uREVSU2VxdWVuY2UsYz1vLkRFUlNldCxzPW8uREVSVGFnZ2VkT2JqZWN0LHA9by5BU04xVXRpbC5uZXdPYmplY3Q7aWYoayBpbnN0YW5jZW9mIG8uQVNOMU9iamVjdCl7cmV0dXJuIGt9dmFyIHU9T2JqZWN0LmtleXMoayk7aWYodS5sZW5ndGghPTEpe3Rocm93IG5ldyBFcnJvcihcImtleSBvZiBwYXJhbSBzaGFsbCBiZSBvbmx5IG9uZS5cIil9dmFyIEg9dVswXTtpZihcIjphc24xOmJvb2w6aW50OmJpdHN0cjpvY3RzdHI6bnVsbDpvaWQ6ZW51bTp1dGY4c3RyOm51bXN0cjpwcm5zdHI6dGVsc3RyOmlhNXN0cjp1dGN0aW1lOmdlbnRpbWU6dmlzc3RyOmJtcHN0cjpzZXE6c2V0OnRhZzpcIi5pbmRleE9mKFwiOlwiK0grXCI6XCIpPT0tMSl7dGhyb3cgbmV3IEVycm9yKFwidW5kZWZpbmVkIGtleTogXCIrSCl9aWYoSD09XCJib29sXCIpe3JldHVybiBuZXcgQihrW0hdKX1pZihIPT1cImludFwiKXtyZXR1cm4gbmV3IGUoa1tIXSl9aWYoSD09XCJiaXRzdHJcIil7cmV0dXJuIG5ldyB0KGtbSF0pfWlmKEg9PVwib2N0c3RyXCIpe3JldHVybiBuZXcgaChrW0hdKX1pZihIPT1cIm51bGxcIil7cmV0dXJuIG5ldyB4KGtbSF0pfWlmKEg9PVwib2lkXCIpe3JldHVybiBuZXcgeShrW0hdKX1pZihIPT1cImVudW1cIil7cmV0dXJuIG5ldyBtKGtbSF0pfWlmKEg9PVwidXRmOHN0clwiKXtyZXR1cm4gbmV3IGcoa1tIXSl9aWYoSD09XCJudW1zdHJcIil7cmV0dXJuIG5ldyBmKGtbSF0pfWlmKEg9PVwicHJuc3RyXCIpe3JldHVybiBuZXcgQShrW0hdKX1pZihIPT1cInRlbHN0clwiKXtyZXR1cm4gbmV3IHcoa1tIXSl9aWYoSD09XCJpYTVzdHJcIil7cmV0dXJuIG5ldyBxKGtbSF0pfWlmKEg9PVwidXRjdGltZVwiKXtyZXR1cm4gbmV3IEUoa1tIXSl9aWYoSD09XCJnZW50aW1lXCIpe3JldHVybiBuZXcgaihrW0hdKX1pZihIPT1cInZpc3N0clwiKXtyZXR1cm4gbmV3IGIoa1tIXSl9aWYoSD09XCJibXBzdHJcIil7cmV0dXJuIG5ldyBsKGtbSF0pfWlmKEg9PVwiYXNuMVwiKXtyZXR1cm4gbmV3IHYoa1tIXSl9aWYoSD09XCJzZXFcIil7dmFyIGQ9a1tIXTt2YXIgRz1bXTtmb3IodmFyIHo9MDt6PGQubGVuZ3RoO3orKyl7dmFyIEQ9cChkW3pdKTtHLnB1c2goRCl9cmV0dXJuIG5ldyBuKHthcnJheTpHfSl9aWYoSD09XCJzZXRcIil7dmFyIGQ9a1tIXTt2YXIgRz1bXTtmb3IodmFyIHo9MDt6PGQubGVuZ3RoO3orKyl7dmFyIEQ9cChkW3pdKTtHLnB1c2goRCl9cmV0dXJuIG5ldyBjKHthcnJheTpHfSl9aWYoSD09XCJ0YWdcIil7dmFyIEM9a1tIXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQyk9PT1cIltvYmplY3QgQXJyYXldXCImJkMubGVuZ3RoPT0zKXt2YXIgcj1wKENbMl0pO3JldHVybiBuZXcgcyh7dGFnOkNbMF0sZXhwbGljaXQ6Q1sxXSxvYmo6cn0pfWVsc2V7cmV0dXJuIG5ldyBzKEMpfX19O3RoaXMuanNvblRvQVNOMUhFWD1mdW5jdGlvbihiKXt2YXIgYT10aGlzLm5ld09iamVjdChiKTtyZXR1cm4gYS5nZXRFbmNvZGVkSGV4KCl9fTtLSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQ9ZnVuY3Rpb24oYSl7dmFyIGo9XCJcIjt2YXIgaz1wYXJzZUludChhLnN1YnN0cigwLDIpLDE2KTt2YXIgZD1NYXRoLmZsb29yKGsvNDApO3ZhciBjPWslNDA7dmFyIGo9ZCtcIi5cIitjO3ZhciBlPVwiXCI7Zm9yKHZhciBmPTI7ZjxhLmxlbmd0aDtmKz0yKXt2YXIgZz1wYXJzZUludChhLnN1YnN0cihmLDIpLDE2KTt2YXIgaD0oXCIwMDAwMDAwMFwiK2cudG9TdHJpbmcoMikpLnNsaWNlKC04KTtlPWUraC5zdWJzdHIoMSw3KTtpZihoLnN1YnN0cigwLDEpPT1cIjBcIil7dmFyIGI9bmV3IEJpZ0ludGVnZXIoZSwyKTtqPWorXCIuXCIrYi50b1N0cmluZygxMCk7ZT1cIlwifX1yZXR1cm4gan07S0pVUi5hc24xLkFTTjFVdGlsLm9pZEludFRvSGV4PWZ1bmN0aW9uKGYpe3ZhciBlPWZ1bmN0aW9uKGEpe3ZhciBrPWEudG9TdHJpbmcoMTYpO2lmKGsubGVuZ3RoPT0xKXtrPVwiMFwiK2t9cmV0dXJuIGt9O3ZhciBkPWZ1bmN0aW9uKG8pe3ZhciBuPVwiXCI7dmFyIGs9bmV3IEJpZ0ludGVnZXIobywxMCk7dmFyIGE9ay50b1N0cmluZygyKTt2YXIgbD03LWEubGVuZ3RoJTc7aWYobD09Nyl7bD0wfXZhciBxPVwiXCI7Zm9yKHZhciBtPTA7bTxsO20rKyl7cSs9XCIwXCJ9YT1xK2E7Zm9yKHZhciBtPTA7bTxhLmxlbmd0aC0xO20rPTcpe3ZhciBwPWEuc3Vic3RyKG0sNyk7aWYobSE9YS5sZW5ndGgtNyl7cD1cIjFcIitwfW4rPWUocGFyc2VJbnQocCwyKSl9cmV0dXJuIG59O2lmKCFmLm1hdGNoKC9eWzAtOS5dKyQvKSl7dGhyb3dcIm1hbGZvcm1lZCBvaWQgc3RyaW5nOiBcIitmfXZhciBnPVwiXCI7dmFyIGI9Zi5zcGxpdChcIi5cIik7dmFyIGo9cGFyc2VJbnQoYlswXSkqNDArcGFyc2VJbnQoYlsxXSk7Zys9ZShqKTtiLnNwbGljZSgwLDIpO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXtnKz1kKGJbY10pfXJldHVybiBnfTtLSlVSLmFzbjEuQVNOMU9iamVjdD1mdW5jdGlvbihlKXt2YXIgYz10cnVlO3ZhciBiPW51bGw7dmFyIGQ9XCIwMFwiO3ZhciBmPVwiMDBcIjt2YXIgYT1cIlwiO3RoaXMucGFyYW1zPW51bGw7dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWU9ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5oVj09XCJ1bmRlZmluZWRcInx8dGhpcy5oVj09bnVsbCl7dGhyb3cgbmV3IEVycm9yKFwidGhpcy5oViBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKX1pZih0aGlzLmhWLmxlbmd0aCUyPT0xKXt0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBoZXggbXVzdCBiZSBldmVuIGxlbmd0aDogbj1cIithLmxlbmd0aCtcIix2PVwiK3RoaXMuaFYpfXZhciBqPXRoaXMuaFYubGVuZ3RoLzI7dmFyIGk9ai50b1N0cmluZygxNik7aWYoaS5sZW5ndGglMj09MSl7aT1cIjBcIitpfWlmKGo8MTI4KXtyZXR1cm4gaX1lbHNle3ZhciBoPWkubGVuZ3RoLzI7aWYoaD4xNSl7dGhyb3dcIkFTTi4xIGxlbmd0aCB0b28gbG9uZyB0byByZXByZXNlbnQgYnkgOHg6IG4gPSBcIitqLnRvU3RyaW5nKDE2KX12YXIgZz0xMjgraDtyZXR1cm4gZy50b1N0cmluZygxNikraX19O3RoaXMuZ2V0RW5jb2RlZEhleD1mdW5jdGlvbigpe2lmKHRoaXMuaFRMVj09bnVsbHx8dGhpcy5pc01vZGlmaWVkKXt0aGlzLmhWPXRoaXMuZ2V0RnJlc2hWYWx1ZUhleCgpO3RoaXMuaEw9dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWUoKTt0aGlzLmhUTFY9dGhpcy5oVCt0aGlzLmhMK3RoaXMuaFY7dGhpcy5pc01vZGlmaWVkPWZhbHNlfXJldHVybiB0aGlzLmhUTFZ9O3RoaXMuZ2V0VmFsdWVIZXg9ZnVuY3Rpb24oKXt0aGlzLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gdGhpcy5oVn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn07dGhpcy5zZXRCeVBhcmFtPWZ1bmN0aW9uKGcpe3RoaXMucGFyYW1zPWd9O2lmKGUhPXVuZGVmaW5lZCl7aWYoZS50bHYhPXVuZGVmaW5lZCl7dGhpcy5oVExWPWUudGx2O3RoaXMuaXNNb2RpZmllZD1mYWxzZX19fTtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmc9ZnVuY3Rpb24oYyl7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYj1udWxsO3ZhciBhPW51bGw7dGhpcy5nZXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfTt0aGlzLnNldFN0cmluZz1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9ZDt0aGlzLmhWPXV0Zjh0b2hleCh0aGlzLnMpLnRvTG93ZXJDYXNlKCl9O3RoaXMuc2V0U3RyaW5nSGV4PWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9ZH07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBjIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYz09XCJzdHJpbmdcIil7dGhpcy5zZXRTdHJpbmcoYyl9ZWxzZXtpZih0eXBlb2YgYy5zdHIhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0U3RyaW5nKGMuc3RyKX1lbHNle2lmKHR5cGVvZiBjLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRTdHJpbmdIZXgoYy5oZXgpfX19fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lPWZ1bmN0aW9uKGMpe0tKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt0aGlzLmxvY2FsRGF0ZVRvVVRDPWZ1bmN0aW9uKGcpe3ZhciBlPWcuZ2V0VGltZSgpKyhnLmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDApO3ZhciBmPW5ldyBEYXRlKGUpO3JldHVybiBmfTt0aGlzLmZvcm1hdERhdGU9ZnVuY3Rpb24obSxvLGUpe3ZhciBnPXRoaXMuemVyb1BhZGRpbmc7dmFyIG49dGhpcy5sb2NhbERhdGVUb1VUQyhtKTt2YXIgcD1TdHJpbmcobi5nZXRGdWxsWWVhcigpKTtpZihvPT1cInV0Y1wiKXtwPXAuc3Vic3RyKDIsMil9dmFyIGw9ZyhTdHJpbmcobi5nZXRNb250aCgpKzEpLDIpO3ZhciBxPWcoU3RyaW5nKG4uZ2V0RGF0ZSgpKSwyKTt2YXIgaD1nKFN0cmluZyhuLmdldEhvdXJzKCkpLDIpO3ZhciBpPWcoU3RyaW5nKG4uZ2V0TWludXRlcygpKSwyKTt2YXIgaj1nKFN0cmluZyhuLmdldFNlY29uZHMoKSksMik7dmFyIHI9cCtsK3EraCtpK2o7aWYoZT09PXRydWUpe3ZhciBmPW4uZ2V0TWlsbGlzZWNvbmRzKCk7aWYoZiE9MCl7dmFyIGs9ZyhTdHJpbmcoZiksMyk7az1rLnJlcGxhY2UoL1swXSskLyxcIlwiKTtyPXIrXCIuXCIra319cmV0dXJuIHIrXCJaXCJ9O3RoaXMuemVyb1BhZGRpbmc9ZnVuY3Rpb24oZSxkKXtpZihlLmxlbmd0aD49ZCl7cmV0dXJuIGV9cmV0dXJuIG5ldyBBcnJheShkLWUubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2V9O3RoaXMuZ2V0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc307dGhpcy5zZXRTdHJpbmc9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPWQ7dGhpcy5oVj1zdG9oZXgoZCl9O3RoaXMuc2V0QnlEYXRlVmFsdWU9ZnVuY3Rpb24oaCxqLGUsZCxmLGcpe3ZhciBpPW5ldyBEYXRlKERhdGUuVVRDKGgsai0xLGUsZCxmLGcsMCkpO3RoaXMuc2V0QnlEYXRlKGkpfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQ9ZnVuY3Rpb24oYil7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYT1udWxsO3RoaXMuc2V0QnlBU04xT2JqZWN0QXJyYXk9ZnVuY3Rpb24oYyl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5hc24xQXJyYXk9Y307dGhpcy5hcHBlbmRBU04xT2JqZWN0PWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuYXNuMUFycmF5LnB1c2goYyl9O3RoaXMuYXNuMUFycmF5PW5ldyBBcnJheSgpO2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYi5hcnJheSE9XCJ1bmRlZmluZWRcIil7dGhpcy5hc24xQXJyYXk9Yi5hcnJheX19fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQm9vbGVhbj1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSQm9vbGVhbi5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjAxXCI7aWYoYT09ZmFsc2Upe3RoaXMuaFRMVj1cIjAxMDEwMFwifWVsc2V7dGhpcy5oVExWPVwiMDEwMWZmXCJ9fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSQm9vbGVhbixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkludGVnZXI9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkludGVnZXIuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwMlwiO3RoaXMuc2V0QnlCaWdJbnRlZ2VyPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9S0pVUi5hc24xLkFTTjFVdGlsLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4KGIpfTt0aGlzLnNldEJ5SW50ZWdlcj1mdW5jdGlvbihjKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihTdHJpbmcoYyksMTApO3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGIpfTt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFY9Yn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5iaWdpbnQhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGEuYmlnaW50KX1lbHNle2lmKHR5cGVvZiBhW1wiaW50XCJdIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5SW50ZWdlcihhW1wiaW50XCJdKX1lbHNle2lmKHR5cGVvZiBhPT1cIm51bWJlclwiKXt0aGlzLnNldEJ5SW50ZWdlcihhKX1lbHNle2lmKHR5cGVvZiBhLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRWYWx1ZUhleChhLmhleCl9fX19fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkludGVnZXIsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJCaXRTdHJpbmc9ZnVuY3Rpb24oYil7aWYoYiE9PXVuZGVmaW5lZCYmdHlwZW9mIGIub2JqIT09XCJ1bmRlZmluZWRcIil7dmFyIGE9S0pVUi5hc24xLkFTTjFVdGlsLm5ld09iamVjdChiLm9iaik7Yi5oZXg9XCIwMFwiK2EuZ2V0RW5jb2RlZEhleCgpfUtKVVIuYXNuMS5ERVJCaXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwM1wiO3RoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzPWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9Y307dGhpcy5zZXRVbnVzZWRCaXRzQW5kSGV4VmFsdWU9ZnVuY3Rpb24oYyxlKXtpZihjPDB8fDc8Yyl7dGhyb3dcInVudXNlZCBiaXRzIHNoYWxsIGJlIGZyb20gMCB0byA3OiB1ID0gXCIrY312YXIgZD1cIjBcIitjO3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9ZCtlfTt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nPWZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKC8wKyQvLFwiXCIpO3ZhciBmPTgtZS5sZW5ndGglODtpZihmPT04KXtmPTB9Zm9yKHZhciBnPTA7Zzw9ZjtnKyspe2UrPVwiMFwifXZhciBqPVwiXCI7Zm9yKHZhciBnPTA7ZzxlLmxlbmd0aC0xO2crPTgpe3ZhciBkPWUuc3Vic3RyKGcsOCk7dmFyIGM9cGFyc2VJbnQoZCwyKS50b1N0cmluZygxNik7aWYoYy5sZW5ndGg9PTEpe2M9XCIwXCIrY31qKz1jfXRoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9XCIwXCIrZitqfTt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5PWZ1bmN0aW9uKGUpe3ZhciBkPVwiXCI7Zm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe2lmKGVbY109PXRydWUpe2QrPVwiMVwifWVsc2V7ZCs9XCIwXCJ9fXRoaXMuc2V0QnlCaW5hcnlTdHJpbmcoZCl9O3RoaXMubmV3RmFsc2VBcnJheT1mdW5jdGlvbihlKXt2YXIgYz1uZXcgQXJyYXkoZSk7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Y1tkXT1mYWxzZX1yZXR1cm4gY307dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYj09XCJzdHJpbmdcIiYmYi50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eWzAtOWEtZl0rJC8pKXt0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyhiKX1lbHNle2lmKHR5cGVvZiBiLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHMoYi5oZXgpfWVsc2V7aWYodHlwZW9mIGIuYmluIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nKGIuYmluKX1lbHNle2lmKHR5cGVvZiBiLmFycmF5IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5KGIuYXJyYXkpfX19fX19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPY3RldFN0cmluZz1mdW5jdGlvbihiKXtpZihiIT09dW5kZWZpbmVkJiZ0eXBlb2YgYi5vYmohPT1cInVuZGVmaW5lZFwiKXt2YXIgYT1LSlVSLmFzbjEuQVNOMVV0aWwubmV3T2JqZWN0KGIub2JqKTtiLmhleD1hLmdldEVuY29kZWRIZXgoKX1LSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYik7dGhpcy5oVD1cIjA0XCJ9O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJPY3RldFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJOdWxsPWZ1bmN0aW9uKCl7S0pVUi5hc24xLkRFUk51bGwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwNVwiO3RoaXMuaFRMVj1cIjA1MDBcIn07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUk51bGwsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDZcIjt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9Yn07dGhpcy5zZXRWYWx1ZU9pZFN0cmluZz1mdW5jdGlvbihiKXt2YXIgYz1vaWR0b2hleChiKTtpZihjPT1udWxsKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgb2lkIHN0cmluZzogXCIrYil9dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPW51bGw7dGhpcy5oVj1jfTt0aGlzLnNldFZhbHVlTmFtZT1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmFzbjEueDUwOS5PSUQubmFtZTJvaWQoYyk7aWYoYiE9PVwiXCIpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYil9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoXCJERVJPYmplY3RJZGVudGlmaWVyIG9pZE5hbWUgdW5kZWZpbmVkOiBcIitjKX19O3RoaXMuc2V0VmFsdWVOYW1lT3JPaWQ9ZnVuY3Rpb24oYil7aWYoYi5tYXRjaCgvXlswLTJdLlswLTkuXSskLykpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYil9ZWxzZXt0aGlzLnNldFZhbHVlTmFtZShiKX19O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTt0aGlzLnNldEJ5UGFyYW09ZnVuY3Rpb24oYil7aWYodHlwZW9mIGI9PT1cInN0cmluZ1wiKXt0aGlzLnNldFZhbHVlTmFtZU9yT2lkKGIpfWVsc2V7aWYoYi5vaWQhPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVOYW1lT3JPaWQoYi5vaWQpfWVsc2V7aWYoYi5uYW1lIT09dW5kZWZpbmVkKXt0aGlzLnNldFZhbHVlTmFtZU9yT2lkKGIubmFtZSl9ZWxzZXtpZihiLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRWYWx1ZUhleChiLmhleCl9fX19fTtpZihhIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5UGFyYW0oYSl9fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllcixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkVudW1lcmF0ZWQ9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkVudW1lcmF0ZWQuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwYVwiO3RoaXMuc2V0QnlCaWdJbnRlZ2VyPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9S0pVUi5hc24xLkFTTjFVdGlsLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4KGIpfTt0aGlzLnNldEJ5SW50ZWdlcj1mdW5jdGlvbihjKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihTdHJpbmcoYyksMTApO3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGIpfTt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFY9Yn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYVtcImludFwiXSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUludGVnZXIoYVtcImludFwiXSl9ZWxzZXtpZih0eXBlb2YgYT09XCJudW1iZXJcIil7dGhpcy5zZXRCeUludGVnZXIoYSl9ZWxzZXtpZih0eXBlb2YgYS5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0VmFsdWVIZXgoYS5oZXgpfX19fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkVudW1lcmF0ZWQsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJVVEY4U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJVVEY4U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIwY1wifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSVVRGOFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxMlwifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSTnVtZXJpY1N0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTNcIn07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxNFwifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJJQTVTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUklBNVN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTZcIn07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUklBNVN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJWaXNpYmxlU3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJJQTVTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjFhXCJ9O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJWaXNpYmxlU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUkJNUFN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSQk1QU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxZVwifTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSQk1QU3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUlVUQ1RpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlVUQ1RpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE3XCI7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMuZGF0ZT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMucz09XCJ1bmRlZmluZWRcIil7dGhpcy5kYXRlPW5ldyBEYXRlKCk7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJ1dGNcIik7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTJ9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fX19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJVVENUaW1lLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUpO0tKVVIuYXNuMS5ERVJHZW5lcmFsaXplZFRpbWU9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMThcIjt0aGlzLndpdGhNaWxsaXM9ZmFsc2U7dGhpcy5zZXRCeURhdGU9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5kYXRlPWI7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJnZW5cIix0aGlzLndpdGhNaWxsaXMpO3RoaXMuaFY9c3RvaGV4KHRoaXMucyl9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe2lmKHRoaXMuZGF0ZT09PXVuZGVmaW5lZCYmdGhpcy5zPT09dW5kZWZpbmVkKXt0aGlzLmRhdGU9bmV3IERhdGUoKTt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcImdlblwiLHRoaXMud2l0aE1pbGxpcyk7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX1yZXR1cm4gdGhpcy5oVn07aWYoYSE9PXVuZGVmaW5lZCl7aWYoYS5zdHIhPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nKGEuc3RyKX1lbHNle2lmKHR5cGVvZiBhPT1cInN0cmluZ1wiJiZhLm1hdGNoKC9eWzAtOV17MTR9WiQvKSl7dGhpcy5zZXRTdHJpbmcoYSl9ZWxzZXtpZihhLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmdIZXgoYS5oZXgpfWVsc2V7aWYoYS5kYXRlIT09dW5kZWZpbmVkKXt0aGlzLnNldEJ5RGF0ZShhLmRhdGUpfX19fWlmKGEubWlsbGlzPT09dHJ1ZSl7dGhpcy53aXRoTWlsbGlzPXRydWV9fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZSxLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lKTtLSlVSLmFzbjEuREVSU2VxdWVuY2U9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlNlcXVlbmNlLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMFwiO3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3ZhciBjPVwiXCI7Zm9yKHZhciBiPTA7Yjx0aGlzLmFzbjFBcnJheS5sZW5ndGg7YisrKXt2YXIgZD10aGlzLmFzbjFBcnJheVtiXTtjKz1kLmdldEVuY29kZWRIZXgoKX10aGlzLmhWPWM7cmV0dXJuIHRoaXMuaFZ9fTtleHRlbmRDbGFzcyhLSlVSLmFzbjEuREVSU2VxdWVuY2UsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZCk7S0pVUi5hc24xLkRFUlNldD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSU2V0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIzMVwiO3RoaXMuc29ydEZsYWc9dHJ1ZTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPHRoaXMuYXNuMUFycmF5Lmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuYXNuMUFycmF5W2NdO2IucHVzaChkLmdldEVuY29kZWRIZXgoKSl9aWYodGhpcy5zb3J0RmxhZz09dHJ1ZSl7Yi5zb3J0KCl9dGhpcy5oVj1iLmpvaW4oXCJcIik7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5zb3J0ZmxhZyE9XCJ1bmRlZmluZWRcIiYmYS5zb3J0ZmxhZz09ZmFsc2Upe3RoaXMuc29ydEZsYWc9ZmFsc2V9fX07ZXh0ZW5kQ2xhc3MoS0pVUi5hc24xLkRFUlNldCxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0PWZ1bmN0aW9uKGIpe0tKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3Quc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBhPUtKVVIuYXNuMTt0aGlzLmhUPVwiYTBcIjt0aGlzLmhWPVwiXCI7dGhpcy5pc0V4cGxpY2l0PXRydWU7dGhpcy5hc24xT2JqZWN0PW51bGw7dGhpcy5zZXRBU04xT2JqZWN0PWZ1bmN0aW9uKGMsZCxlKXt0aGlzLmhUPWQ7dGhpcy5pc0V4cGxpY2l0PWM7dGhpcy5hc24xT2JqZWN0PWU7aWYodGhpcy5pc0V4cGxpY2l0KXt0aGlzLmhWPXRoaXMuYXNuMU9iamVjdC5nZXRFbmNvZGVkSGV4KCk7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWV9ZWxzZXt0aGlzLmhWPW51bGw7dGhpcy5oVExWPWUuZ2V0RW5jb2RlZEhleCgpO3RoaXMuaFRMVj10aGlzLmhUTFYucmVwbGFjZSgvXi4uLyxkKTt0aGlzLmlzTW9kaWZpZWQ9ZmFsc2V9fTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07dGhpcy5zZXRCeVBhcmFtPWZ1bmN0aW9uKGMpe2lmKGMudGFnIT11bmRlZmluZWQpe3RoaXMuaFQ9Yy50YWd9aWYoYy5leHBsaWNpdCE9dW5kZWZpbmVkKXt0aGlzLmlzRXhwbGljaXQ9Yy5leHBsaWNpdH1pZihjLnRhZ2UhPXVuZGVmaW5lZCl7dGhpcy5oVD1jLnRhZ2U7dGhpcy5pc0V4cGxpY2l0PXRydWV9aWYoYy50YWdpIT11bmRlZmluZWQpe3RoaXMuaFQ9Yy50YWdpO3RoaXMuaXNFeHBsaWNpdD1mYWxzZX1pZihjLm9iaiE9dW5kZWZpbmVkKXtpZihjLm9iaiBpbnN0YW5jZW9mIGEuQVNOMU9iamVjdCl7dGhpcy5hc24xT2JqZWN0PWMub2JqO3RoaXMuc2V0QVNOMU9iamVjdCh0aGlzLmlzRXhwbGljaXQsdGhpcy5oVCx0aGlzLmFzbjFPYmplY3QpfWVsc2V7aWYodHlwZW9mIGMub2JqPT1cIm9iamVjdFwiKXt0aGlzLmFzbjFPYmplY3Q9YS5BU04xVXRpbC5uZXdPYmplY3QoYy5vYmopO3RoaXMuc2V0QVNOMU9iamVjdCh0aGlzLmlzRXhwbGljaXQsdGhpcy5oVCx0aGlzLmFzbjFPYmplY3QpfX19fTtpZihiIT11bmRlZmluZWQpe3RoaXMuc2V0QnlQYXJhbShiKX19O2V4dGVuZENsYXNzKEtKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3QsS0pVUi5hc24xLkFTTjFPYmplY3QpO1xudmFyIEFTTjFIRVg9bmV3IGZ1bmN0aW9uKCl7fTtBU04xSEVYLmdldExibGVuPWZ1bmN0aW9uKGMsYSl7aWYoYy5zdWJzdHIoYSsyLDEpIT1cIjhcIil7cmV0dXJuIDF9dmFyIGI9cGFyc2VJbnQoYy5zdWJzdHIoYSszLDEpKTtpZihiPT0wKXtyZXR1cm4gLTF9aWYoMDxiJiZiPDEwKXtyZXR1cm4gYisxfXJldHVybiAtMn07QVNOMUhFWC5nZXRMPWZ1bmN0aW9uKGMsYil7dmFyIGE9QVNOMUhFWC5nZXRMYmxlbihjLGIpO2lmKGE8MSl7cmV0dXJuXCJcIn1yZXR1cm4gYy5zdWJzdHIoYisyLGEqMil9O0FTTjFIRVguZ2V0VmJsZW49ZnVuY3Rpb24oZCxhKXt2YXIgYyxiO2M9QVNOMUhFWC5nZXRMKGQsYSk7aWYoYz09XCJcIil7cmV0dXJuIC0xfWlmKGMuc3Vic3RyKDAsMSk9PT1cIjhcIil7Yj1uZXcgQmlnSW50ZWdlcihjLnN1YnN0cigyKSwxNil9ZWxzZXtiPW5ldyBCaWdJbnRlZ2VyKGMsMTYpfXJldHVybiBiLmludFZhbHVlKCl9O0FTTjFIRVguZ2V0VmlkeD1mdW5jdGlvbihjLGIpe3ZhciBhPUFTTjFIRVguZ2V0TGJsZW4oYyxiKTtpZihhPDApe3JldHVybiBhfXJldHVybiBiKyhhKzEpKjJ9O0FTTjFIRVguZ2V0Vj1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gZC5zdWJzdHIoYyxiKjIpfTtBU04xSEVYLmdldFRMVj1mdW5jdGlvbihiLGEpe3JldHVybiBiLnN1YnN0cihhLDIpK0FTTjFIRVguZ2V0TChiLGEpK0FTTjFIRVguZ2V0VihiLGEpfTtBU04xSEVYLmdldFRMVmJsZW49ZnVuY3Rpb24oYixhKXtyZXR1cm4gMitBU04xSEVYLmdldExibGVuKGIsYSkqMitBU04xSEVYLmdldFZibGVuKGIsYSkqMn07QVNOMUhFWC5nZXROZXh0U2libGluZ0lkeD1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gYytiKjJ9O0FTTjFIRVguZ2V0Q2hpbGRJZHg9ZnVuY3Rpb24oZSxrKXt2YXIgbD1BU04xSEVYO3ZhciBqPVtdO3ZhciBjLGYsZztjPWwuZ2V0VmlkeChlLGspO2Y9bC5nZXRWYmxlbihlLGspKjI7aWYoZS5zdWJzdHIoaywyKT09XCIwM1wiKXtjKz0yO2YtPTJ9Zz0wO3ZhciBkPWM7d2hpbGUoZzw9Zil7dmFyIGI9bC5nZXRUTFZibGVuKGUsZCk7Zys9YjtpZihnPD1mKXtqLnB1c2goZCl9ZCs9YjtpZihnPj1mKXticmVha319cmV0dXJuIGp9O0FTTjFIRVguZ2V0TnRoQ2hpbGRJZHg9ZnVuY3Rpb24oZCxiLGUpe3ZhciBjPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZCxiKTtyZXR1cm4gY1tlXX07QVNOMUhFWC5nZXRJZHhieUxpc3Q9ZnVuY3Rpb24oZSxkLGMsaSl7dmFyIGc9QVNOMUhFWDt2YXIgZixiO2lmKGMubGVuZ3RoPT0wKXtpZihpIT09dW5kZWZpbmVkKXtpZihlLnN1YnN0cihkLDIpIT09aSl7cmV0dXJuIC0xfX1yZXR1cm4gZH1mPWMuc2hpZnQoKTtiPWcuZ2V0Q2hpbGRJZHgoZSxkKTtpZihmPj1iLmxlbmd0aCl7cmV0dXJuIC0xfXJldHVybiBnLmdldElkeGJ5TGlzdChlLGJbZl0sYyxpKX07QVNOMUhFWC5nZXRJZHhieUxpc3RFeD1mdW5jdGlvbihmLGssYixnKXt2YXIgbT1BU04xSEVYO3ZhciBkLGw7aWYoYi5sZW5ndGg9PTApe2lmKGchPT11bmRlZmluZWQpe2lmKGYuc3Vic3RyKGssMikhPT1nKXtyZXR1cm4gLTF9fXJldHVybiBrfWQ9Yi5zaGlmdCgpO2w9bS5nZXRDaGlsZElkeChmLGspO3ZhciBqPTA7Zm9yKHZhciBlPTA7ZTxsLmxlbmd0aDtlKyspe3ZhciBjPWYuc3Vic3RyKGxbZV0sMik7aWYoKHR5cGVvZiBkPT1cIm51bWJlclwiJiYoIW0uaXNDb250ZXh0VGFnKGMpKSYmaj09ZCl8fCh0eXBlb2YgZD09XCJzdHJpbmdcIiYmbS5pc0NvbnRleHRUYWcoYyxkKSkpe3JldHVybiBtLmdldElkeGJ5TGlzdEV4KGYsbFtlXSxiLGcpfWlmKCFtLmlzQ29udGV4dFRhZyhjKSl7aisrfX1yZXR1cm4gLTF9O0FTTjFIRVguZ2V0VExWYnlMaXN0PWZ1bmN0aW9uKGQsYyxiLGYpe3ZhciBlPUFTTjFIRVg7dmFyIGE9ZS5nZXRJZHhieUxpc3QoZCxjLGIsZik7aWYoYT09LTEpe3JldHVybiBudWxsfWlmKGE+PWQubGVuZ3RoKXtyZXR1cm4gbnVsbH1yZXR1cm4gZS5nZXRUTFYoZCxhKX07QVNOMUhFWC5nZXRUTFZieUxpc3RFeD1mdW5jdGlvbihkLGMsYixmKXt2YXIgZT1BU04xSEVYO3ZhciBhPWUuZ2V0SWR4YnlMaXN0RXgoZCxjLGIsZik7aWYoYT09LTEpe3JldHVybiBudWxsfXJldHVybiBlLmdldFRMVihkLGEpfTtBU04xSEVYLmdldFZieUxpc3Q9ZnVuY3Rpb24oZSxjLGIsZyxpKXt2YXIgZj1BU04xSEVYO3ZhciBhLGQ7YT1mLmdldElkeGJ5TGlzdChlLGMsYixnKTtpZihhPT0tMSl7cmV0dXJuIG51bGx9aWYoYT49ZS5sZW5ndGgpe3JldHVybiBudWxsfWQ9Zi5nZXRWKGUsYSk7aWYoaT09PXRydWUpe2Q9ZC5zdWJzdHIoMil9cmV0dXJuIGR9O0FTTjFIRVguZ2V0VmJ5TGlzdEV4PWZ1bmN0aW9uKGIsZSxhLGQsZil7dmFyIGo9QVNOMUhFWDt2YXIgZyxjLGk7Zz1qLmdldElkeGJ5TGlzdEV4KGIsZSxhLGQpO2lmKGc9PS0xKXtyZXR1cm4gbnVsbH1pPWouZ2V0VihiLGcpO2lmKGIuc3Vic3RyKGcsMik9PVwiMDNcIiYmZiE9PWZhbHNlKXtpPWkuc3Vic3RyKDIpfXJldHVybiBpfTtBU04xSEVYLmdldEludD1mdW5jdGlvbihlLGIsZil7aWYoZj09dW5kZWZpbmVkKXtmPS0xfXRyeXt2YXIgYz1lLnN1YnN0cihiLDIpO2lmKGMhPVwiMDJcIiYmYyE9XCIwM1wiKXtyZXR1cm4gZn12YXIgYT1BU04xSEVYLmdldFYoZSxiKTtpZihjPT1cIjAyXCIpe3JldHVybiBwYXJzZUludChhLDE2KX1lbHNle3JldHVybiBiaXRzdHJ0b2ludChhKX19Y2F0Y2goZCl7cmV0dXJuIGZ9fTtBU04xSEVYLmdldE9JRD1mdW5jdGlvbihjLGEsZCl7aWYoZD09dW5kZWZpbmVkKXtkPW51bGx9dHJ5e2lmKGMuc3Vic3RyKGEsMikhPVwiMDZcIil7cmV0dXJuIGR9dmFyIGU9QVNOMUhFWC5nZXRWKGMsYSk7cmV0dXJuIGhleHRvb2lkKGUpfWNhdGNoKGIpe3JldHVybiBkfX07QVNOMUhFWC5nZXRPSUROYW1lPWZ1bmN0aW9uKGQsYSxmKXtpZihmPT11bmRlZmluZWQpe2Y9bnVsbH10cnl7dmFyIGU9QVNOMUhFWC5nZXRPSUQoZCxhLGYpO2lmKGU9PWYpe3JldHVybiBmfXZhciBiPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQybmFtZShlKTtpZihiPT1cIlwiKXtyZXR1cm4gZX1yZXR1cm4gYn1jYXRjaChjKXtyZXR1cm4gZn19O0FTTjFIRVguZ2V0U3RyaW5nPWZ1bmN0aW9uKGQsYixlKXtpZihlPT11bmRlZmluZWQpe2U9bnVsbH10cnl7dmFyIGE9QVNOMUhFWC5nZXRWKGQsYik7cmV0dXJuIGhleHRvcnN0cihhKX1jYXRjaChjKXtyZXR1cm4gZX19O0FTTjFIRVguaGV4dG9vaWRzdHI9ZnVuY3Rpb24oZSl7dmFyIGg9ZnVuY3Rpb24oYixhKXtpZihiLmxlbmd0aD49YSl7cmV0dXJuIGJ9cmV0dXJuIG5ldyBBcnJheShhLWIubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2J9O3ZhciBsPVtdO3ZhciBvPWUuc3Vic3RyKDAsMik7dmFyIGY9cGFyc2VJbnQobywxNik7bFswXT1uZXcgU3RyaW5nKE1hdGguZmxvb3IoZi80MCkpO2xbMV09bmV3IFN0cmluZyhmJTQwKTt2YXIgbT1lLnN1YnN0cigyKTt2YXIgaz1bXTtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoLzI7ZysrKXtrLnB1c2gocGFyc2VJbnQobS5zdWJzdHIoZyoyLDIpLDE2KSl9dmFyIGo9W107dmFyIGQ9XCJcIjtmb3IodmFyIGc9MDtnPGsubGVuZ3RoO2crKyl7aWYoa1tnXSYxMjgpe2Q9ZCtoKChrW2ddJjEyNykudG9TdHJpbmcoMiksNyl9ZWxzZXtkPWQraCgoa1tnXSYxMjcpLnRvU3RyaW5nKDIpLDcpO2oucHVzaChuZXcgU3RyaW5nKHBhcnNlSW50KGQsMikpKTtkPVwiXCJ9fXZhciBuPWwuam9pbihcIi5cIik7aWYoai5sZW5ndGg+MCl7bj1uK1wiLlwiK2ouam9pbihcIi5cIil9cmV0dXJuIG59O0FTTjFIRVguZHVtcD1mdW5jdGlvbih0LGMsbCxnKXt2YXIgcD1BU04xSEVYO3ZhciBqPXAuZ2V0Vjt2YXIgeT1wLmR1bXA7dmFyIHc9cC5nZXRDaGlsZElkeDt2YXIgZT10O2lmKHQgaW5zdGFuY2VvZiBLSlVSLmFzbjEuQVNOMU9iamVjdCl7ZT10LmdldEVuY29kZWRIZXgoKX12YXIgcT1mdW5jdGlvbihBLGkpe2lmKEEubGVuZ3RoPD1pKjIpe3JldHVybiBBfWVsc2V7dmFyIHY9QS5zdWJzdHIoMCxpKStcIi4uKHRvdGFsIFwiK0EubGVuZ3RoLzIrXCJieXRlcykuLlwiK0Euc3Vic3RyKEEubGVuZ3RoLWksaSk7cmV0dXJuIHZ9fTtpZihjPT09dW5kZWZpbmVkKXtjPXtvbW1pdF9sb25nX29jdGV0OjMyfX1pZihsPT09dW5kZWZpbmVkKXtsPTB9aWYoZz09PXVuZGVmaW5lZCl7Zz1cIlwifXZhciB4PWMub21taXRfbG9uZ19vY3RldDt2YXIgej1lLnN1YnN0cihsLDIpO2lmKHo9PVwiMDFcIil7dmFyIGg9aihlLGwpO2lmKGg9PVwiMDBcIil7cmV0dXJuIGcrXCJCT09MRUFOIEZBTFNFXFxuXCJ9ZWxzZXtyZXR1cm4gZytcIkJPT0xFQU4gVFJVRVxcblwifX1pZih6PT1cIjAyXCIpe3ZhciBoPWooZSxsKTtyZXR1cm4gZytcIklOVEVHRVIgXCIrcShoLHgpK1wiXFxuXCJ9aWYoej09XCIwM1wiKXt2YXIgaD1qKGUsbCk7aWYocC5pc0FTTjFIRVgoaC5zdWJzdHIoMikpKXt2YXIgaz1nK1wiQklUU1RSSU5HLCBlbmNhcHN1bGF0ZXNcXG5cIjtrPWsreShoLnN1YnN0cigyKSxjLDAsZytcIiAgXCIpO3JldHVybiBrfWVsc2V7cmV0dXJuIGcrXCJCSVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9fWlmKHo9PVwiMDRcIil7dmFyIGg9aihlLGwpO2lmKHAuaXNBU04xSEVYKGgpKXt2YXIgaz1nK1wiT0NURVRTVFJJTkcsIGVuY2Fwc3VsYXRlc1xcblwiO2s9ayt5KGgsYywwLGcrXCIgIFwiKTtyZXR1cm4ga31lbHNle3JldHVybiBnK1wiT0NURVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9fWlmKHo9PVwiMDVcIil7cmV0dXJuIGcrXCJOVUxMXFxuXCJ9aWYoej09XCIwNlwiKXt2YXIgbT1qKGUsbCk7dmFyIGI9S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50KG0pO3ZhciBvPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQybmFtZShiKTt2YXIgYT1iLnJlcGxhY2UoL1xcLi9nLFwiIFwiKTtpZihvIT1cIlwiKXtyZXR1cm4gZytcIk9iamVjdElkZW50aWZpZXIgXCIrbytcIiAoXCIrYStcIilcXG5cIn1lbHNle3JldHVybiBnK1wiT2JqZWN0SWRlbnRpZmllciAoXCIrYStcIilcXG5cIn19aWYoej09XCIwYVwiKXtyZXR1cm4gZytcIkVOVU1FUkFURUQgXCIrcGFyc2VJbnQoaihlLGwpKStcIlxcblwifWlmKHo9PVwiMGNcIil7cmV0dXJuIGcrXCJVVEY4U3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZih6PT1cIjEzXCIpe3JldHVybiBnK1wiUHJpbnRhYmxlU3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZih6PT1cIjE0XCIpe3JldHVybiBnK1wiVGVsZXRleFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoej09XCIxNlwiKXtyZXR1cm4gZytcIklBNVN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoej09XCIxN1wiKXtyZXR1cm4gZytcIlVUQ1RpbWUgXCIraGV4dG91dGY4KGooZSxsKSkrXCJcXG5cIn1pZih6PT1cIjE4XCIpe3JldHVybiBnK1wiR2VuZXJhbGl6ZWRUaW1lIFwiK2hleHRvdXRmOChqKGUsbCkpK1wiXFxuXCJ9aWYoej09XCIxYVwiKXtyZXR1cm4gZytcIlZpc3VhbFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoej09XCIxZVwiKXtyZXR1cm4gZytcIkJNUFN0cmluZyAnXCIrdWNzMmhleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKHo9PVwiMzBcIil7aWYoZS5zdWJzdHIobCw0KT09XCIzMDAwXCIpe3JldHVybiBnK1wiU0VRVUVOQ0Uge31cXG5cIn12YXIgaz1nK1wiU0VRVUVOQ0VcXG5cIjt2YXIgZD13KGUsbCk7dmFyIGY9YztpZigoZC5sZW5ndGg9PTJ8fGQubGVuZ3RoPT0zKSYmZS5zdWJzdHIoZFswXSwyKT09XCIwNlwiJiZlLnN1YnN0cihkW2QubGVuZ3RoLTFdLDIpPT1cIjA0XCIpe3ZhciBvPXAub2lkbmFtZShqKGUsZFswXSkpO3ZhciByPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpO3IueDUwOUV4dE5hbWU9bztmPXJ9Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsZixkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga31pZih6PT1cIjMxXCIpe3ZhciBrPWcrXCJTRVRcXG5cIjt2YXIgZD13KGUsbCk7Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsYyxkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga312YXIgej1wYXJzZUludCh6LDE2KTtpZigoeiYxMjgpIT0wKXt2YXIgbj16JjMxO2lmKCh6JjMyKSE9MCl7dmFyIGs9ZytcIltcIituK1wiXVxcblwiO3ZhciBkPXcoZSxsKTtmb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxjLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfWVsc2V7dmFyIGg9aihlLGwpO2lmKEFTTjFIRVguaXNBU04xSEVYKGgpKXt2YXIgaz1nK1wiW1wiK24rXCJdXFxuXCI7az1rK3koaCxjLDAsZytcIiAgXCIpO3JldHVybiBrfWVsc2V7aWYoaC5zdWJzdHIoMCw4KT09XCI2ODc0NzQ3MFwiKXtoPWhleHRvdXRmOChoKX1lbHNle2lmKGMueDUwOUV4dE5hbWU9PT1cInN1YmplY3RBbHROYW1lXCImJm49PTIpe2g9aGV4dG91dGY4KGgpfX19dmFyIGs9ZytcIltcIituK1wiXSBcIitoK1wiXFxuXCI7cmV0dXJuIGt9fXJldHVybiBnK1wiVU5LTk9XTihcIit6K1wiKSBcIitqKGUsbCkrXCJcXG5cIn07QVNOMUhFWC5pc0NvbnRleHRUYWc9ZnVuY3Rpb24oYyxiKXtjPWMudG9Mb3dlckNhc2UoKTt2YXIgZixlO3RyeXtmPXBhcnNlSW50KGMsMTYpfWNhdGNoKGQpe3JldHVybiAtMX1pZihiPT09dW5kZWZpbmVkKXtpZigoZiYxOTIpPT0xMjgpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX10cnl7dmFyIGE9Yi5tYXRjaCgvXlxcW1swLTldK1xcXSQvKTtpZihhPT1udWxsKXtyZXR1cm4gZmFsc2V9ZT1wYXJzZUludChiLnN1YnN0cigxLGIubGVuZ3RoLTEpLDEwKTtpZihlPjMxKXtyZXR1cm4gZmFsc2V9aWYoKChmJjE5Mik9PTEyOCkmJigoZiYzMSk9PWUpKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9Y2F0Y2goZCl7cmV0dXJuIGZhbHNlfX07QVNOMUhFWC5pc0FTTjFIRVg9ZnVuY3Rpb24oZSl7dmFyIGQ9QVNOMUhFWDtpZihlLmxlbmd0aCUyPT0xKXtyZXR1cm4gZmFsc2V9dmFyIGM9ZC5nZXRWYmxlbihlLDApO3ZhciBiPWUuc3Vic3RyKDAsMik7dmFyIGY9ZC5nZXRMKGUsMCk7dmFyIGE9ZS5sZW5ndGgtYi5sZW5ndGgtZi5sZW5ndGg7aWYoYT09YyoyKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O0FTTjFIRVguY2hlY2tTdHJpY3RERVI9ZnVuY3Rpb24oZyxvLGQsYyxyKXt2YXIgcz1BU04xSEVYO2lmKGQ9PT11bmRlZmluZWQpe2lmKHR5cGVvZiBnIT1cInN0cmluZ1wiKXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgaGV4IHN0cmluZ1wiKX1nPWcudG9Mb3dlckNhc2UoKTtpZighS0pVUi5sYW5nLlN0cmluZy5pc0hleChnKSl7dGhyb3cgbmV3IEVycm9yKFwibm90IGhleCBzdHJpbmdcIil9ZD1nLmxlbmd0aDtjPWcubGVuZ3RoLzI7aWYoYzwxMjgpe3I9MX1lbHNle3I9TWF0aC5jZWlsKGMudG9TdHJpbmcoMTYpKSsxfX12YXIgaz1zLmdldEwoZyxvKTtpZihrLmxlbmd0aD5yKjIpe3Rocm93IG5ldyBFcnJvcihcIkwgb2YgVExWIHRvbyBsb25nOiBpZHg9XCIrbyl9dmFyIG49cy5nZXRWYmxlbihnLG8pO2lmKG4+Yyl7dGhyb3cgbmV3IEVycm9yKFwidmFsdWUgb2YgTCB0b28gbG9uZyB0aGFuIGhleDogaWR4PVwiK28pfXZhciBxPXMuZ2V0VExWKGcsbyk7dmFyIGY9cS5sZW5ndGgtMi1zLmdldEwoZyxvKS5sZW5ndGg7aWYoZiE9PShuKjIpKXt0aHJvdyBuZXcgRXJyb3IoXCJWIHN0cmluZyBsZW5ndGggYW5kIEwncyB2YWx1ZSBub3QgdGhlIHNhbWU6XCIrZitcIi9cIisobioyKSl9aWYobz09PTApe2lmKGcubGVuZ3RoIT1xLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKFwidG90YWwgbGVuZ3RoIGFuZCBUTFYgbGVuZ3RoIHVubWF0Y2g6XCIrZy5sZW5ndGgrXCIhPVwiK3EubGVuZ3RoKX19dmFyIGI9Zy5zdWJzdHIobywyKTtpZihiPT09XCIwMlwiKXt2YXIgYT1zLmdldFZpZHgoZyxvKTtpZihnLnN1YnN0cihhLDIpPT1cIjAwXCImJmcuY2hhckNvZGVBdChhKzIpPDU2KXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgbGVhc3QgemVyb3MgZm9yIERFUiBJTlRFR0VSXCIpfX1pZihwYXJzZUludChiLDE2KSYzMil7dmFyIHA9cy5nZXRWYmxlbihnLG8pO3ZhciBtPTA7dmFyIGw9cy5nZXRDaGlsZElkeChnLG8pO2Zvcih2YXIgZT0wO2U8bC5sZW5ndGg7ZSsrKXt2YXIgaj1zLmdldFRMVihnLGxbZV0pO20rPWoubGVuZ3RoO3MuY2hlY2tTdHJpY3RERVIoZyxsW2VdLGQsYyxyKX1pZigocCoyKSE9bSl7dGhyb3cgbmV3IEVycm9yKFwic3VtIG9mIGNoaWxkcmVuJ3MgVExWIGxlbmd0aCBhbmQgTCB1bm1hdGNoOiBcIisocCoyKStcIiE9XCIrbSl9fX07QVNOMUhFWC5vaWRuYW1lPWZ1bmN0aW9uKGEpe3ZhciBjPUtKVVIuYXNuMTtpZihLSlVSLmxhbmcuU3RyaW5nLmlzSGV4KGEpKXthPWMuQVNOMVV0aWwub2lkSGV4VG9JbnQoYSl9dmFyIGI9Yy54NTA5Lk9JRC5vaWQybmFtZShhKTtpZihiPT09XCJcIil7Yj1hfXJldHVybiBifTtcbnZhciBLSlVSO2lmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5sYW5nPT1cInVuZGVmaW5lZFwifHwhS0pVUi5sYW5nKXtLSlVSLmxhbmc9e319S0pVUi5sYW5nLlN0cmluZz1mdW5jdGlvbigpe307ZnVuY3Rpb24gQmFzZTY0eCgpe31mdW5jdGlvbiBzdG9CQShkKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPGQubGVuZ3RoO2MrKyl7YltjXT1kLmNoYXJDb2RlQXQoYyl9cmV0dXJuIGJ9ZnVuY3Rpb24gQkF0b3MoYil7dmFyIGQ9XCJcIjtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7ZD1kK1N0cmluZy5mcm9tQ2hhckNvZGUoYltjXSl9cmV0dXJuIGR9ZnVuY3Rpb24gQkF0b2hleChiKXt2YXIgZT1cIlwiO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgYz1iW2RdLnRvU3RyaW5nKDE2KTtpZihjLmxlbmd0aD09MSl7Yz1cIjBcIitjfWU9ZStjfXJldHVybiBlfWZ1bmN0aW9uIHN0b2hleChhKXtyZXR1cm4gQkF0b2hleChzdG9CQShhKSl9ZnVuY3Rpb24gc3RvYjY0KGEpe3JldHVybiBoZXgyYjY0KHN0b2hleChhKSl9ZnVuY3Rpb24gc3RvYjY0dShhKXtyZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoc3RvaGV4KGEpKSl9ZnVuY3Rpb24gYjY0dXRvcyhhKXtyZXR1cm4gQkF0b3MoYjY0dG9CQShiNjR1dG9iNjQoYSkpKX1mdW5jdGlvbiBiNjR0b2I2NHUoYSl7YT1hLnJlcGxhY2UoL1xcPS9nLFwiXCIpO2E9YS5yZXBsYWNlKC9cXCsvZyxcIi1cIik7YT1hLnJlcGxhY2UoL1xcLy9nLFwiX1wiKTtyZXR1cm4gYX1mdW5jdGlvbiBiNjR1dG9iNjQoYSl7aWYoYS5sZW5ndGglND09Mil7YT1hK1wiPT1cIn1lbHNle2lmKGEubGVuZ3RoJTQ9PTMpe2E9YStcIj1cIn19YT1hLnJlcGxhY2UoLy0vZyxcIitcIik7YT1hLnJlcGxhY2UoL18vZyxcIi9cIik7cmV0dXJuIGF9ZnVuY3Rpb24gaGV4dG9iNjR1KGEpe2lmKGEubGVuZ3RoJTI9PTEpe2E9XCIwXCIrYX1yZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoYSkpfWZ1bmN0aW9uIGI2NHV0b2hleChhKXtyZXR1cm4gYjY0dG9oZXgoYjY0dXRvYjY0KGEpKX12YXIgdXRmOHRvYjY0dSxiNjR1dG91dGY4O2lmKHR5cGVvZiBCdWZmZXI9PT1cImZ1bmN0aW9uXCIpe3V0Zjh0b2I2NHU9ZnVuY3Rpb24oYSl7cmV0dXJuIGI2NHRvYjY0dShCdWZmZXIuZnJvbShhLFwidXRmOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSl9O2I2NHV0b3V0Zjg9ZnVuY3Rpb24oYSl7cmV0dXJuIEJ1ZmZlci5mcm9tKGI2NHV0b2I2NChhKSxcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIil9fWVsc2V7dXRmOHRvYjY0dT1mdW5jdGlvbihhKXtyZXR1cm4gaGV4dG9iNjR1KHVyaWNtcHRvaGV4KGVuY29kZVVSSUNvbXBvbmVudEFsbChhKSkpfTtiNjR1dG91dGY4PWZ1bmN0aW9uKGEpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoaGV4dG91cmljbXAoYjY0dXRvaGV4KGEpKSl9fWZ1bmN0aW9uIHV0Zjh0b2I2NChhKXtyZXR1cm4gaGV4MmI2NCh1cmljbXB0b2hleChlbmNvZGVVUklDb21wb25lbnRBbGwoYSkpKX1mdW5jdGlvbiBiNjR0b3V0ZjgoYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChiNjR0b2hleChhKSkpfWZ1bmN0aW9uIHV0Zjh0b2hleChhKXtyZXR1cm4gdXJpY21wdG9oZXgoZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpKX1mdW5jdGlvbiBoZXh0b3V0ZjgoYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChhKSl9ZnVuY3Rpb24gaGV4dG9yc3RyKGMpe3ZhciBiPVwiXCI7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aC0xO2ErPTIpe2IrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYy5zdWJzdHIoYSwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIHJzdHJ0b2hleChjKXt2YXIgYT1cIlwiO2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7YisrKXthKz0oXCIwXCIrYy5jaGFyQ29kZUF0KGIpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfXJldHVybiBhfWZ1bmN0aW9uIGhleHRvYjY0KGEpe3JldHVybiBoZXgyYjY0KGEpfWZ1bmN0aW9uIGhleHRvYjY0bmwoYil7dmFyIGE9aGV4dG9iNjQoYik7dmFyIGM9YS5yZXBsYWNlKC8oLns2NH0pL2csXCIkMVxcclxcblwiKTtjPWMucmVwbGFjZSgvXFxyXFxuJC8sXCJcIik7cmV0dXJuIGN9ZnVuY3Rpb24gYjY0bmx0b2hleChiKXt2YXIgYT1iLnJlcGxhY2UoL1teMC05QS1aYS16XFwvKz1dKi9nLFwiXCIpO3ZhciBjPWI2NHRvaGV4KGEpO3JldHVybiBjfWZ1bmN0aW9uIGhleHRvcGVtKGEsYil7dmFyIGM9aGV4dG9iNjRubChhKTtyZXR1cm5cIi0tLS0tQkVHSU4gXCIrYitcIi0tLS0tXFxyXFxuXCIrYytcIlxcclxcbi0tLS0tRU5EIFwiK2IrXCItLS0tLVxcclxcblwifWZ1bmN0aW9uIHBlbXRvaGV4KGEsYil7aWYoYS5pbmRleE9mKFwiLS0tLS1CRUdJTiBcIik9PS0xKXt0aHJvd1wiY2FuJ3QgZmluZCBQRU0gaGVhZGVyOiBcIitifWlmKGIhPT11bmRlZmluZWQpe2E9YS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJeW15dKi0tLS0tQkVHSU4gXCIrYitcIi0tLS0tXCIpLFwiXCIpO2E9YS5yZXBsYWNlKG5ldyBSZWdFeHAoXCItLS0tLUVORCBcIitiK1wiLS0tLS1bXl0qJFwiKSxcIlwiKX1lbHNle2E9YS5yZXBsYWNlKC9eW15dKi0tLS0tQkVHSU4gW14tXSstLS0tLS8sXCJcIik7YT1hLnJlcGxhY2UoLy0tLS0tRU5EIFteLV0rLS0tLS1bXl0qJC8sXCJcIil9cmV0dXJuIGI2NG5sdG9oZXgoYSl9ZnVuY3Rpb24gaGV4dG9BcnJheUJ1ZmZlcihkKXtpZihkLmxlbmd0aCUyIT0wKXt0aHJvd1wiaW5wdXQgaXMgbm90IGV2ZW4gbGVuZ3RoXCJ9aWYoZC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKT09bnVsbCl7dGhyb3dcImlucHV0IGlzIG5vdCBoZXhhZGVjaW1hbFwifXZhciBiPW5ldyBBcnJheUJ1ZmZlcihkLmxlbmd0aC8yKTt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aC8yO2MrKyl7YS5zZXRVaW50OChjLHBhcnNlSW50KGQuc3Vic3RyKGMqMiwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIEFycmF5QnVmZmVydG9oZXgoYil7dmFyIGQ9XCJcIjt2YXIgYT1uZXcgRGF0YVZpZXcoYik7Zm9yKHZhciBjPTA7YzxiLmJ5dGVMZW5ndGg7YysrKXtkKz0oXCIwMFwiK2EuZ2V0VWludDgoYykudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGR9ZnVuY3Rpb24genVsdXRvbXNlYyhuKXt2YXIgbCxqLG0sZSxmLGksYixrO3ZhciBhLGgsZyxjO2M9bi5tYXRjaCgvXihcXGR7Mn18XFxkezR9KShcXGRcXGQpKFxcZFxcZCkoXFxkXFxkKShcXGRcXGQpKFxcZFxcZCkofFxcLlxcZCspWiQvKTtpZihjKXthPWNbMV07bD1wYXJzZUludChhKTtpZihhLmxlbmd0aD09PTIpe2lmKDUwPD1sJiZsPDEwMCl7bD0xOTAwK2x9ZWxzZXtpZigwPD1sJiZsPDUwKXtsPTIwMDArbH19fWo9cGFyc2VJbnQoY1syXSktMTttPXBhcnNlSW50KGNbM10pO2U9cGFyc2VJbnQoY1s0XSk7Zj1wYXJzZUludChjWzVdKTtpPXBhcnNlSW50KGNbNl0pO2I9MDtoPWNbN107aWYoaCE9PVwiXCIpe2c9KGguc3Vic3RyKDEpK1wiMDBcIikuc3Vic3RyKDAsMyk7Yj1wYXJzZUludChnKX1yZXR1cm4gRGF0ZS5VVEMobCxqLG0sZSxmLGksYil9dGhyb3dcInVuc3VwcG9ydGVkIHp1bHUgZm9ybWF0OiBcIitufWZ1bmN0aW9uIHp1bHV0b3NlYyhhKXt2YXIgYj16dWx1dG9tc2VjKGEpO3JldHVybiB+fihiLzEwMDApfWZ1bmN0aW9uIHp1bHV0b2RhdGUoYSl7cmV0dXJuIG5ldyBEYXRlKHp1bHV0b21zZWMoYSkpfWZ1bmN0aW9uIGRhdGV0b3p1bHUoZyxlLGYpe3ZhciBiO3ZhciBhPWcuZ2V0VVRDRnVsbFllYXIoKTtpZihlKXtpZihhPDE5NTB8fDIwNDk8YSl7dGhyb3dcIm5vdCBwcm9wZXIgeWVhciBmb3IgVVRDVGltZTogXCIrYX1iPShcIlwiK2EpLnNsaWNlKC0yKX1lbHNle2I9KFwiMDAwXCIrYSkuc2xpY2UoLTQpfWIrPShcIjBcIisoZy5nZXRVVENNb250aCgpKzEpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDRGF0ZSgpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpO2lmKGYpe3ZhciBjPWcuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7aWYoYyE9PTApe2M9KFwiMDBcIitjKS5zbGljZSgtMyk7Yz1jLnJlcGxhY2UoLzArJC9nLFwiXCIpO2IrPVwiLlwiK2N9fWIrPVwiWlwiO3JldHVybiBifWZ1bmN0aW9uIHVyaWNtcHRvaGV4KGEpe3JldHVybiBhLnJlcGxhY2UoLyUvZyxcIlwiKX1mdW5jdGlvbiBoZXh0b3VyaWNtcChhKXtyZXR1cm4gYS5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIil9ZnVuY3Rpb24gaXB2NnRvaGV4KGcpe3ZhciBiPVwibWFsZm9ybWVkIElQdjYgYWRkcmVzc1wiO2lmKCFnLm1hdGNoKC9eWzAtOUEtRmEtZjpdKyQvKSl7dGhyb3cgYn1nPWcudG9Mb3dlckNhc2UoKTt2YXIgZD1nLnNwbGl0KFwiOlwiKS5sZW5ndGgtMTtpZihkPDIpe3Rocm93IGJ9dmFyIGU9XCI6XCIucmVwZWF0KDctZCsyKTtnPWcucmVwbGFjZShcIjo6XCIsZSk7dmFyIGM9Zy5zcGxpdChcIjpcIik7aWYoYy5sZW5ndGghPTgpe3Rocm93IGJ9Zm9yKHZhciBmPTA7Zjw4O2YrKyl7Y1tmXT0oXCIwMDAwXCIrY1tmXSkuc2xpY2UoLTQpfXJldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gaGV4dG9pcHY2KGUpe2lmKCFlLm1hdGNoKC9eWzAtOUEtRmEtZl17MzJ9JC8pKXt0aHJvd1wibWFsZm9ybWVkIElQdjYgYWRkcmVzcyBvY3RldFwifWU9ZS50b0xvd2VyQ2FzZSgpO3ZhciBiPWUubWF0Y2goLy57MSw0fS9nKTtmb3IodmFyIGQ9MDtkPDg7ZCsrKXtiW2RdPWJbZF0ucmVwbGFjZSgvXjArLyxcIlwiKTtpZihiW2RdPT1cIlwiKXtiW2RdPVwiMFwifX1lPVwiOlwiK2Iuam9pbihcIjpcIikrXCI6XCI7dmFyIGM9ZS5tYXRjaCgvOigwOil7Mix9L2cpO2lmKGM9PT1udWxsKXtyZXR1cm4gZS5zbGljZSgxLC0xKX12YXIgZj1cIlwiO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtpZihjW2RdLmxlbmd0aD5mLmxlbmd0aCl7Zj1jW2RdfX1lPWUucmVwbGFjZShmLFwiOjpcIik7cmV0dXJuIGUuc2xpY2UoMSwtMSl9ZnVuY3Rpb24gaGV4dG9pcChiKXt2YXIgZD1cIm1hbGZvcm1lZCBoZXggdmFsdWVcIjtpZighYi5tYXRjaCgvXihbMC05QS1GYS1mXVswLTlBLUZhLWZdKXsxLH0kLykpe3Rocm93IGR9aWYoYi5sZW5ndGg9PTgpe3ZhciBjO3RyeXtjPXBhcnNlSW50KGIuc3Vic3RyKDAsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDIsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDQsMiksMTYpK1wiLlwiK3BhcnNlSW50KGIuc3Vic3RyKDYsMiksMTYpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93IGR9fWVsc2V7aWYoYi5sZW5ndGg9PTMyKXtyZXR1cm4gaGV4dG9pcHY2KGIpfWVsc2V7cmV0dXJuIGJ9fX1mdW5jdGlvbiBpcHRvaGV4KGYpe3ZhciBqPVwibWFsZm9ybWVkIElQIGFkZHJlc3NcIjtmPWYudG9Mb3dlckNhc2UoZik7aWYoZi5tYXRjaCgvXlswLTkuXSskLykpe3ZhciBiPWYuc3BsaXQoXCIuXCIpO2lmKGIubGVuZ3RoIT09NCl7dGhyb3cgan12YXIgZz1cIlwiO3RyeXtmb3IodmFyIGU9MDtlPDQ7ZSsrKXt2YXIgaD1wYXJzZUludChiW2VdKTtnKz0oXCIwXCIraC50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gZ31jYXRjaChjKXt0aHJvdyBqfX1lbHNle2lmKGYubWF0Y2goL15bMC05YS1mOl0rJC8pJiZmLmluZGV4T2YoXCI6XCIpIT09LTEpe3JldHVybiBpcHY2dG9oZXgoZil9ZWxzZXt0aHJvdyBqfX19ZnVuY3Rpb24gdWNzMmhleHRvdXRmOChkKXtmdW5jdGlvbiBlKGYpe3ZhciBoPXBhcnNlSW50KGYuc3Vic3RyKDAsMiksMTYpO3ZhciBhPXBhcnNlSW50KGYuc3Vic3RyKDIpLDE2KTtpZihoPT0wJmE8MTI4KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhKX1pZihoPDgpe3ZhciBqPTE5MnwoKGgmNyk8PDMpfCgoYSYxOTIpPj42KTt2YXIgaT0xMjh8KGEmNjMpO3JldHVybiBoZXh0b3V0Zjgoai50b1N0cmluZygxNikraS50b1N0cmluZygxNikpfXZhciBqPTIyNHwoKGgmMjQwKT4+NCk7dmFyIGk9MTI4fCgoaCYxNSk8PDIpfCgoYSYxOTIpPj42KTt2YXIgZz0xMjh8KGEmNjMpO3JldHVybiBoZXh0b3V0Zjgoai50b1N0cmluZygxNikraS50b1N0cmluZygxNikrZy50b1N0cmluZygxNikpfXZhciBjPWQubWF0Y2goLy57NH0vZyk7dmFyIGI9Yy5tYXAoZSk7cmV0dXJuIGIuam9pbihcIlwiKX1mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRBbGwoYSl7dmFyIGQ9ZW5jb2RlVVJJQ29tcG9uZW50KGEpO3ZhciBiPVwiXCI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGRbY109PVwiJVwiKXtiPWIrZC5zdWJzdHIoYywzKTtjPWMrMn1lbHNle2I9YitcIiVcIitzdG9oZXgoZFtjXSl9fXJldHVybiBifWZ1bmN0aW9uIG5ld2xpbmVfdG9Vbml4KGEpe2E9YS5yZXBsYWNlKC9cXHJcXG4vbWcsXCJcXG5cIik7cmV0dXJuIGF9ZnVuY3Rpb24gbmV3bGluZV90b0RvcyhhKXthPWEucmVwbGFjZSgvXFxyXFxuL21nLFwiXFxuXCIpO2E9YS5yZXBsYWNlKC9cXG4vbWcsXCJcXHJcXG5cIik7cmV0dXJuIGF9S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXI9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXlswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtpZihhLm1hdGNoKC9eLVswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX07S0pVUi5sYW5nLlN0cmluZy5pc0hleD1mdW5jdGlvbihhKXtyZXR1cm4gaXNoZXgoYSl9O2Z1bmN0aW9uIGlzaGV4KGEpe2lmKGEubGVuZ3RoJTI9PTAmJihhLm1hdGNoKC9eWzAtOWEtZl0rJC8pfHxhLm1hdGNoKC9eWzAtOUEtRl0rJC8pKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fUtKVVIubGFuZy5TdHJpbmcuaXNCYXNlNjQ9ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccysvZyxcIlwiKTtpZihhLm1hdGNoKC9eWzAtOUEtWmEteitcXC9dKz17MCwzfSQvKSYmYS5sZW5ndGglND09MCl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtLSlVSLmxhbmcuU3RyaW5nLmlzQmFzZTY0VVJMPWZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL1srLz1dLykpe3JldHVybiBmYWxzZX1hPWI2NHV0b2I2NChhKTtyZXR1cm4gS0pVUi5sYW5nLlN0cmluZy5pc0Jhc2U2NChhKX07S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXJBcnJheT1mdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzKy9nLFwiXCIpO2lmKGEubWF0Y2goL15cXFtbMC05LF0rXFxdJC8pKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0tKVVIubGFuZy5TdHJpbmcuaXNQcmludGFibGU9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXlswLTlBLVphLXogJygpKywtLi86PT9dKiQvKSE9PW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07S0pVUi5sYW5nLlN0cmluZy5pc0lBNT1mdW5jdGlvbihhKXtpZihhLm1hdGNoKC9eW1xceDIwLVxceDIxXFx4MjMtXFx4N2ZdKiQvKSE9PW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07S0pVUi5sYW5nLlN0cmluZy5pc01haWw9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXltBLVphLXowLTldezF9W0EtWmEtejAtOV8uLV0qQHsxfVtBLVphLXowLTlfLi1dezEsfVxcLltBLVphLXowLTldezEsfSQvKSE9PW51bGwpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07ZnVuY3Rpb24gaGV4dG9wb3NoZXgoYSl7aWYoYS5sZW5ndGglMj09MSl7cmV0dXJuXCIwXCIrYX1pZihhLnN1YnN0cigwLDEpPlwiN1wiKXtyZXR1cm5cIjAwXCIrYX1yZXR1cm4gYX1mdW5jdGlvbiBpbnRhcnlzdHJ0b2hleChiKXtiPWIucmVwbGFjZSgvXlxccypcXFtcXHMqLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKlxcXVxccyokLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKi9nLFwiXCIpO3RyeXt2YXIgYz1iLnNwbGl0KC8sLykubWFwKGZ1bmN0aW9uKGcsZSxoKXt2YXIgZj1wYXJzZUludChnKTtpZihmPDB8fDI1NTxmKXt0aHJvd1wiaW50ZWdlciBub3QgaW4gcmFuZ2UgMC0yNTVcIn12YXIgZD0oXCIwMFwiK2YudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7cmV0dXJuIGR9KS5qb2luKFwiXCIpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93XCJtYWxmb3JtZWQgaW50ZWdlciBhcnJheSBzdHJpbmc6IFwiK2F9fXZhciBzdHJkaWZmaWR4PWZ1bmN0aW9uKGMsYSl7dmFyIGQ9Yy5sZW5ndGg7aWYoYy5sZW5ndGg+YS5sZW5ndGgpe2Q9YS5sZW5ndGh9Zm9yKHZhciBiPTA7YjxkO2IrKyl7aWYoYy5jaGFyQ29kZUF0KGIpIT1hLmNoYXJDb2RlQXQoYikpe3JldHVybiBifX1pZihjLmxlbmd0aCE9YS5sZW5ndGgpe3JldHVybiBkfXJldHVybiAtMX07ZnVuY3Rpb24gb2lkdG9oZXgoZyl7dmFyIGY9ZnVuY3Rpb24oYSl7dmFyIGw9YS50b1N0cmluZygxNik7aWYobC5sZW5ndGg9PTEpe2w9XCIwXCIrbH1yZXR1cm4gbH07dmFyIGU9ZnVuY3Rpb24ocCl7dmFyIG89XCJcIjt2YXIgbD1wYXJzZUludChwLDEwKTt2YXIgYT1sLnRvU3RyaW5nKDIpO3ZhciBtPTctYS5sZW5ndGglNztpZihtPT03KXttPTB9dmFyIHI9XCJcIjtmb3IodmFyIG49MDtuPG07bisrKXtyKz1cIjBcIn1hPXIrYTtmb3IodmFyIG49MDtuPGEubGVuZ3RoLTE7bis9Nyl7dmFyIHE9YS5zdWJzdHIobiw3KTtpZihuIT1hLmxlbmd0aC03KXtxPVwiMVwiK3F9bys9ZihwYXJzZUludChxLDIpKX1yZXR1cm4gb307dHJ5e2lmKCFnLm1hdGNoKC9eWzAtOS5dKyQvKSl7cmV0dXJuIG51bGx9dmFyIGo9XCJcIjt2YXIgYj1nLnNwbGl0KFwiLlwiKTt2YXIgaz1wYXJzZUludChiWzBdLDEwKSo0MCtwYXJzZUludChiWzFdLDEwKTtqKz1mKGspO2Iuc3BsaWNlKDAsMik7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe2orPWUoYltkXSl9cmV0dXJuIGp9Y2F0Y2goYyl7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGhleHRvb2lkKGcpe2lmKCFpc2hleChnKSl7cmV0dXJuIG51bGx9dHJ5e3ZhciBtPVtdO3ZhciBwPWcuc3Vic3RyKDAsMik7dmFyIGU9cGFyc2VJbnQocCwxNik7bVswXT1uZXcgU3RyaW5nKE1hdGguZmxvb3IoZS80MCkpO21bMV09bmV3IFN0cmluZyhlJTQwKTt2YXIgbj1nLnN1YnN0cigyKTt2YXIgbD1bXTtmb3IodmFyIGY9MDtmPG4ubGVuZ3RoLzI7ZisrKXtsLnB1c2gocGFyc2VJbnQobi5zdWJzdHIoZioyLDIpLDE2KSl9dmFyIGs9W107dmFyIGQ9XCJcIjtmb3IodmFyIGY9MDtmPGwubGVuZ3RoO2YrKyl7aWYobFtmXSYxMjgpe2Q9ZCtzdHJwYWQoKGxbZl0mMTI3KS50b1N0cmluZygyKSw3KX1lbHNle2Q9ZCtzdHJwYWQoKGxbZl0mMTI3KS50b1N0cmluZygyKSw3KTtrLnB1c2gobmV3IFN0cmluZyhwYXJzZUludChkLDIpKSk7ZD1cIlwifX12YXIgbz1tLmpvaW4oXCIuXCIpO2lmKGsubGVuZ3RoPjApe289bytcIi5cIitrLmpvaW4oXCIuXCIpfXJldHVybiBvfWNhdGNoKGope3JldHVybiBudWxsfX12YXIgc3RycGFkPWZ1bmN0aW9uKGMsYixhKXtpZihhPT11bmRlZmluZWQpe2E9XCIwXCJ9aWYoYy5sZW5ndGg+PWIpe3JldHVybiBjfXJldHVybiBuZXcgQXJyYXkoYi1jLmxlbmd0aCsxKS5qb2luKGEpK2N9O2Z1bmN0aW9uIGJpdHN0cnRvaW50KGUpe3RyeXt2YXIgYT1lLnN1YnN0cigwLDIpO2lmKGE9PVwiMDBcIil7cmV0dXJuIHBhcnNlSW50KGUuc3Vic3RyKDIpLDE2KX12YXIgYj1wYXJzZUludChhLDE2KTt2YXIgZj1lLnN1YnN0cigyKTt2YXIgZD1wYXJzZUludChmLDE2KS50b1N0cmluZygyKTtpZihkPT1cIjBcIil7ZD1cIjAwMDAwMDAwXCJ9ZD1kLnNsaWNlKDAsMC1iKTtyZXR1cm4gcGFyc2VJbnQoZCwyKX1jYXRjaChjKXtyZXR1cm4gLTF9fWZ1bmN0aW9uIGludHRvYml0c3RyKGUpe3ZhciBjPU51bWJlcihlKS50b1N0cmluZygyKTt2YXIgYj04LWMubGVuZ3RoJTg7aWYoYj09OCl7Yj0wfWM9YytzdHJwYWQoXCJcIixiLFwiMFwiKTt2YXIgZD1wYXJzZUludChjLDIpLnRvU3RyaW5nKDE2KTtpZihkLmxlbmd0aCUyPT0xKXtkPVwiMFwiK2R9dmFyIGE9XCIwXCIrYjtyZXR1cm4gYStkfWZ1bmN0aW9uIGV4dGVuZENsYXNzKGMsYSl7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPWEucHJvdG90eXBlO2MucHJvdG90eXBlPW5ldyBiKCk7Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9YztjLnN1cGVyY2xhc3M9YS5wcm90b3R5cGU7aWYoYS5wcm90b3R5cGUuY29uc3RydWN0b3I9PU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3Ipe2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWF9fTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uVXRpbD1uZXcgZnVuY3Rpb24oKXt0aGlzLkRJR0VTVElORk9IRUFEPXtzaGExOlwiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0XCIsc2hhMjI0OlwiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWNcIixzaGEyNTY6XCIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMFwiLHNoYTM4NDpcIjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwXCIsc2hhNTEyOlwiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDBcIixtZDI6XCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjAyMDUwMDA0MTBcIixtZDU6XCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTBcIixyaXBlbWQxNjA6XCIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTRcIix9O3RoaXMuREVGQVVMVFBST1ZJREVSPXttZDU6XCJjcnlwdG9qc1wiLHNoYTE6XCJjcnlwdG9qc1wiLHNoYTIyNDpcImNyeXB0b2pzXCIsc2hhMjU2OlwiY3J5cHRvanNcIixzaGEzODQ6XCJjcnlwdG9qc1wiLHNoYTUxMjpcImNyeXB0b2pzXCIscmlwZW1kMTYwOlwiY3J5cHRvanNcIixobWFjbWQ1OlwiY3J5cHRvanNcIixobWFjc2hhMTpcImNyeXB0b2pzXCIsaG1hY3NoYTIyNDpcImNyeXB0b2pzXCIsaG1hY3NoYTI1NjpcImNyeXB0b2pzXCIsaG1hY3NoYTM4NDpcImNyeXB0b2pzXCIsaG1hY3NoYTUxMjpcImNyeXB0b2pzXCIsaG1hY3JpcGVtZDE2MDpcImNyeXB0b2pzXCIsTUQ1d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTM4NHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTUxMndpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLE1ENXdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTM4NHdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixSSVBFTUQxNjB3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixNRDV3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEEzODR3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIix9O3RoaXMuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRT17bWQ1OkNyeXB0b0pTLmFsZ28uTUQ1LHNoYTE6Q3J5cHRvSlMuYWxnby5TSEExLHNoYTIyNDpDcnlwdG9KUy5hbGdvLlNIQTIyNCxzaGEyNTY6Q3J5cHRvSlMuYWxnby5TSEEyNTYsc2hhMzg0OkNyeXB0b0pTLmFsZ28uU0hBMzg0LHNoYTUxMjpDcnlwdG9KUy5hbGdvLlNIQTUxMixyaXBlbWQxNjA6Q3J5cHRvSlMuYWxnby5SSVBFTUQxNjB9O3RoaXMuZ2V0RGlnZXN0SW5mb0hleD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiB0aGlzLkRJR0VTVElORk9IRUFEW2JdPT1cInVuZGVmaW5lZFwiKXt0aHJvd1wiYWxnIG5vdCBzdXBwb3J0ZWQgaW4gVXRpbC5ESUdFU1RJTkZPSEVBRDogXCIrYn1yZXR1cm4gdGhpcy5ESUdFU1RJTkZPSEVBRFtiXSthfTt0aGlzLmdldFBhZGRlZERpZ2VzdEluZm9IZXg9ZnVuY3Rpb24oaCxhLGope3ZhciBjPXRoaXMuZ2V0RGlnZXN0SW5mb0hleChoLGEpO3ZhciBkPWovNDtpZihjLmxlbmd0aCsyMj5kKXt0aHJvd1wia2V5IGlzIHRvbyBzaG9ydCBmb3IgU2lnQWxnOiBrZXlsZW49XCIraitcIixcIithfXZhciBiPVwiMDAwMVwiO3ZhciBrPVwiMDBcIitjO3ZhciBnPVwiXCI7dmFyIGw9ZC1iLmxlbmd0aC1rLmxlbmd0aDtmb3IodmFyIGY9MDtmPGw7Zis9Mil7Zys9XCJmZlwifXZhciBlPWIrZytrO3JldHVybiBlfTt0aGlzLmhhc2hTdHJpbmc9ZnVuY3Rpb24oYSxjKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOmN9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuaGFzaEhleD1mdW5jdGlvbihiLGMpe3ZhciBhPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6Y30pO3JldHVybiBhLmRpZ2VzdEhleChiKX07dGhpcy5zaGExPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc2hTdHJpbmcoYSxcInNoYTFcIil9O3RoaXMuc2hhMjU2PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc2hTdHJpbmcoYSxcInNoYTI1NlwiKX07dGhpcy5zaGEyNTZIZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGFzaEhleChhLFwic2hhMjU2XCIpfTt0aGlzLnNoYTUxMj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oYXNoU3RyaW5nKGEsXCJzaGE1MTJcIil9O3RoaXMuc2hhNTEySGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc2hIZXgoYSxcInNoYTUxMlwiKX07dGhpcy5pc0tleT1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgUlNBS2V5fHxhIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRFNBfHxhIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0Epe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX19O0tKVVIuY3J5cHRvLlV0aWwubWQ1PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJtZDVcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07S0pVUi5jcnlwdG8uVXRpbC5yaXBlbWQxNjA9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInJpcGVtZDE2MFwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTj1uZXcgU2VjdXJlUmFuZG9tKCk7S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcz1mdW5jdGlvbihiKXt2YXIgYT1uZXcgQXJyYXkoYik7S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU4ubmV4dEJ5dGVzKGEpO3JldHVybiBCQXRvaGV4KGEpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoS0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcyhhKSwxNil9O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYml0cz1mdW5jdGlvbihkKXt2YXIgYz1kJTg7dmFyIGE9KGQtYykvODt2YXIgYj1uZXcgQXJyYXkoYSsxKTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTi5uZXh0Qnl0ZXMoYik7YlswXT0oKCgyNTU8PGMpJjI1NSleMjU1KSZiWzBdO3JldHVybiBCQXRvaGV4KGIpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJpdHMoYSksMTYpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXg9ZnVuY3Rpb24oYil7dmFyIGE9Yi5iaXRMZW5ndGgoKTt3aGlsZSgxKXt2YXIgYz1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzKGEpO2lmKGIuY29tcGFyZVRvKGMpIT0tMSl7cmV0dXJuIGN9fX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXg9ZnVuY3Rpb24oZSxiKXt2YXIgYz1lLmNvbXBhcmVUbyhiKTtpZihjPT0xKXt0aHJvd1wiYmlNaW4gaXMgZ3JlYXRlciB0aGFuIGJpTWF4XCJ9aWYoYz09MCl7cmV0dXJuIGV9dmFyIGE9Yi5zdWJ0cmFjdChlKTt2YXIgZD1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgoYSk7cmV0dXJuIGQuYWRkKGUpfTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0PWZ1bmN0aW9uKGMpe3ZhciBiPW51bGw7dmFyIGE9bnVsbDt2YXIgZD1udWxsO3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24oZyxmKXtnPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZShnKTtpZihnIT09bnVsbCYmZj09PXVuZGVmaW5lZCl7Zj1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUltnXX1pZihcIjptZDU6c2hhMTpzaGEyMjQ6c2hhMjU2OnNoYTM4NDpzaGE1MTI6cmlwZW1kMTYwOlwiLmluZGV4T2YoZykhPS0xJiZmPT1cImNyeXB0b2pzXCIpe3RyeXt0aGlzLm1kPUtKVVIuY3J5cHRvLlV0aWwuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRVtnXS5jcmVhdGUoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaCl7dmFyIGk9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShoKTt0aGlzLm1kLnVwZGF0ZShpKX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLm1kLmZpbmFsaXplKCk7cmV0dXJuIGgudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19aWYoXCI6c2hhMjU2OlwiLmluZGV4T2YoZykhPS0xJiZmPT1cInNqY2xcIil7dHJ5e3RoaXMubWQ9bmV3IHNqY2wuaGFzaC5zaGEyNTYoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaSl7dmFyIGg9c2pjbC5jb2RlYy5oZXgudG9CaXRzKGkpO3RoaXMubWQudXBkYXRlKGgpfTt0aGlzLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBoPXRoaXMubWQuZmluYWxpemUoKTtyZXR1cm4gc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoaCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihlKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGUpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvd1wiZGlnZXN0KCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGUpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oZSl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTtpZihjIT09dW5kZWZpbmVkKXtpZihjLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPWMuYWxnO2lmKGMucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfXRoaXMuc2V0QWxnQW5kUHJvdmlkZXIodGhpcy5hbGdOYW1lLHRoaXMucHJvdk5hbWUpfX19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZT1mdW5jdGlvbihhKXtpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpe2E9YS50b0xvd2VyQ2FzZSgpO2E9YS5yZXBsYWNlKC8tLyxcIlwiKX1yZXR1cm4gYX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdC5nZXRIYXNoTGVuZ3RoPWZ1bmN0aW9uKGMpe3ZhciBiPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Q7dmFyIGE9Yi5nZXRDYW5vbmljYWxBbGdOYW1lKGMpO2lmKGIuSEFTSExFTkdUSFthXT09PXVuZGVmaW5lZCl7dGhyb3dcIm5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIitjfXJldHVybiBiLkhBU0hMRU5HVEhbYV19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuSEFTSExFTkdUSD17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJpcGVtZDE2MDoyMH07S0pVUi5jcnlwdG8uTWFjPWZ1bmN0aW9uKGQpe3ZhciBmPW51bGw7dmFyIGM9bnVsbDt2YXIgYT1udWxsO3ZhciBlPW51bGw7dmFyIGI9bnVsbDt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKGssaSl7az1rLnRvTG93ZXJDYXNlKCk7aWYoaz09bnVsbCl7az1cImhtYWNzaGExXCJ9az1rLnRvTG93ZXJDYXNlKCk7aWYoay5zdWJzdHIoMCw0KSE9XCJobWFjXCIpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciB1bnN1cHBvcnRlZCBITUFDIGFsZzogXCIra31pZihpPT09dW5kZWZpbmVkKXtpPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW2tdfXRoaXMuYWxnUHJvdj1rK1wiL1wiK2k7dmFyIGc9ay5zdWJzdHIoNCk7aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKGcpIT0tMSYmaT09XCJjcnlwdG9qc1wiKXt0cnl7dmFyIGo9S0pVUi5jcnlwdG8uVXRpbC5DUllQVE9KU01FU1NBR0VESUdFU1ROQU1FW2ddO3RoaXMubWFjPUNyeXB0b0pTLmFsZ28uSE1BQy5jcmVhdGUoaix0aGlzLnBhc3MpfWNhdGNoKGgpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBoYXNoQWxnPVwiK2crXCIvXCIraH10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihsKXt0aGlzLm1hYy51cGRhdGUobCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGwpe3ZhciBtPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UobCk7dGhpcy5tYWMudXBkYXRlKG0pfTt0aGlzLmRvRmluYWw9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLm1hYy5maW5hbGl6ZSgpO3JldHVybiBsLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpfTt0aGlzLmRvRmluYWxTdHJpbmc9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVTdHJpbmcobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVIZXgobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfX19O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbD1mdW5jdGlvbigpe3Rocm93XCJkaWdlc3QoKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbFN0cmluZz1mdW5jdGlvbihnKXt0aHJvd1wiZGlnZXN0U3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24oZyl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5zZXRQYXNzd29yZD1mdW5jdGlvbihoKXtpZih0eXBlb2YgaD09XCJzdHJpbmdcIil7dmFyIGc9aDtpZihoLmxlbmd0aCUyPT0xfHwhaC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7Zz1yc3RydG9oZXgoaCl9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyk7cmV0dXJufWlmKHR5cGVvZiBoIT1cIm9iamVjdFwiKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dmFyIGc9bnVsbDtpZihoLmhleCE9PXVuZGVmaW5lZCl7aWYoaC5oZXgubGVuZ3RoJTIhPTB8fCFoLmhleC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7dGhyb3dcIk1hYzogd3JvbmcgaGV4IHBhc3N3b3JkOiBcIitoLmhleH1nPWguaGV4fWlmKGgudXRmOCE9PXVuZGVmaW5lZCl7Zz11dGY4dG9oZXgoaC51dGY4KX1pZihoLnJzdHIhPT11bmRlZmluZWQpe2c9cnN0cnRvaGV4KGgucnN0cil9aWYoaC5iNjQhPT11bmRlZmluZWQpe2c9YjY0dG9oZXgoaC5iNjQpfWlmKGguYjY0dSE9PXVuZGVmaW5lZCl7Zz1iNjR1dG9oZXgoaC5iNjR1KX1pZihnPT1udWxsKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyl9O2lmKGQhPT11bmRlZmluZWQpe2lmKGQucGFzcyE9PXVuZGVmaW5lZCl7dGhpcy5zZXRQYXNzd29yZChkLnBhc3MpfWlmKGQuYWxnIT09dW5kZWZpbmVkKXt0aGlzLmFsZ05hbWU9ZC5hbGc7aWYoZC5wcm92PT09dW5kZWZpbmVkKXt0aGlzLnByb3ZOYW1lPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW3RoaXMuYWxnTmFtZV19dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSl9fX07S0pVUi5jcnlwdG8uU2lnbmF0dXJlPWZ1bmN0aW9uKG8pe3ZhciBxPW51bGw7dmFyIG49bnVsbDt2YXIgcj1udWxsO3ZhciBjPW51bGw7dmFyIGw9bnVsbDt2YXIgZD1udWxsO3ZhciBrPW51bGw7dmFyIGg9bnVsbDt2YXIgcD1udWxsO3ZhciBlPW51bGw7dmFyIGI9LTE7dmFyIGc9bnVsbDt2YXIgaj1udWxsO3ZhciBhPW51bGw7dmFyIGk9bnVsbDt2YXIgZj1udWxsO3RoaXMuX3NldEFsZ05hbWVzPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5hbGdOYW1lLm1hdGNoKC9eKC4rKXdpdGgoLispJC8pO2lmKHMpe3RoaXMubWRBbGdOYW1lPXNbMV0udG9Mb3dlckNhc2UoKTt0aGlzLnB1YmtleUFsZ05hbWU9c1syXS50b0xvd2VyQ2FzZSgpO2lmKHRoaXMucHVia2V5QWxnTmFtZT09XCJyc2FhbmRtZ2YxXCImJnRoaXMubWRBbGdOYW1lPT1cInNoYVwiKXt0aGlzLm1kQWxnTmFtZT1cInNoYTFcIn19fTt0aGlzLl96ZXJvUGFkZGluZ09mU2lnbmF0dXJlPWZ1bmN0aW9uKHgsdyl7dmFyIHY9XCJcIjt2YXIgdD13LzQteC5sZW5ndGg7Zm9yKHZhciB1PTA7dTx0O3UrKyl7dj12K1wiMFwifXJldHVybiB2K3h9O3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24odSx0KXt0aGlzLl9zZXRBbGdOYW1lcygpO2lmKHQhPVwiY3J5cHRvanMvanNyc2FcIil7dGhyb3cgbmV3IEVycm9yKFwicHJvdmlkZXIgbm90IHN1cHBvcnRlZDogXCIrdCl9aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKHRoaXMubWRBbGdOYW1lKSE9LTEpe3RyeXt0aGlzLm1kPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6dGhpcy5tZEFsZ05hbWV9KX1jYXRjaChzKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBhbGc9XCIrdGhpcy5tZEFsZ05hbWUrXCIvXCIrcyl9dGhpcy5pbml0PWZ1bmN0aW9uKHcseCl7dmFyIHk9bnVsbDt0cnl7aWYoeD09PXVuZGVmaW5lZCl7eT1LRVlVVElMLmdldEtleSh3KX1lbHNle3k9S0VZVVRJTC5nZXRLZXkodyx4KX19Y2F0Y2godil7dGhyb3dcImluaXQgZmFpbGVkOlwiK3Z9aWYoeS5pc1ByaXZhdGU9PT10cnVlKXt0aGlzLnBydktleT15O3RoaXMuc3RhdGU9XCJTSUdOXCJ9ZWxzZXtpZih5LmlzUHVibGljPT09dHJ1ZSl7dGhpcy5wdWJLZXk9eTt0aGlzLnN0YXRlPVwiVkVSSUZZXCJ9ZWxzZXt0aHJvd1wiaW5pdCBmYWlsZWQuOlwiK3l9fX07dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24odil7dGhpcy5tZC51cGRhdGVTdHJpbmcodil9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKHYpe3RoaXMubWQudXBkYXRlSGV4KHYpfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aGlzLnNIYXNoSGV4PXRoaXMubWQuZGlnZXN0KCk7aWYodGhpcy5wcnZLZXk9PT11bmRlZmluZWQmJnRoaXMuZWNwcnZoZXghPT11bmRlZmluZWQmJnRoaXMuZWNjdXJ2ZW5hbWUhPT11bmRlZmluZWQmJktKVVIuY3J5cHRvLkVDRFNBIT09dW5kZWZpbmVkKXt0aGlzLnBydktleT1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOnRoaXMuZWNjdXJ2ZW5hbWUscHJ2OnRoaXMuZWNwcnZoZXh9KX1pZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaFBTUyh0aGlzLnNIYXNoSGV4LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdGhpcy5tZEFsZ05hbWUpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSl7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHByaXZhdGUga2V5IGFsZzogXCIrdGhpcy5wdWJrZXlBbGdOYW1lfX19fXJldHVybiB0aGlzLmhTaWdufTt0aGlzLnNpZ25TdHJpbmc9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVTdHJpbmcodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnNpZ25IZXg9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVIZXgodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnZlcmlmeT1mdW5jdGlvbih2KXt0aGlzLnNIYXNoSGV4PXRoaXMubWQuZGlnZXN0KCk7aWYodGhpcy5wdWJLZXk9PT11bmRlZmluZWQmJnRoaXMuZWNwdWJoZXghPT11bmRlZmluZWQmJnRoaXMuZWNjdXJ2ZW5hbWUhPT11bmRlZmluZWQmJktKVVIuY3J5cHRvLkVDRFNBIT09dW5kZWZpbmVkKXt0aGlzLnB1YktleT1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOnRoaXMuZWNjdXJ2ZW5hbWUscHViOnRoaXMuZWNwdWJoZXh9KX1pZih0aGlzLnB1YktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1ModGhpcy5zSGFzaEhleCx2LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnB1YktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7aWYoS0pVUi5jcnlwdG8uRUNEU0EhPT11bmRlZmluZWQmJnRoaXMucHViS2V5IGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0Epe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle2lmKEtKVVIuY3J5cHRvLkRTQSE9PXVuZGVmaW5lZCYmdGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHB1YmxpYyBrZXkgYWxnOiBcIit0aGlzLnB1YmtleUFsZ05hbWV9fX19fX19O3RoaXMuaW5pdD1mdW5jdGlvbihzLHQpe3Rocm93XCJpbml0KGtleSwgcGFzcykgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihzKXt0aHJvd1widXBkYXRlSGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aHJvd1wic2lnbigpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5zaWduU3RyaW5nPWZ1bmN0aW9uKHMpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuc2lnbkhleD1mdW5jdGlvbihzKXt0aHJvd1wiZGlnZXN0SGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnZlcmlmeT1mdW5jdGlvbihzKXt0aHJvd1widmVyaWZ5KGhTaWdWYWwpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5pbml0UGFyYW1zPW87aWYobyE9PXVuZGVmaW5lZCl7aWYoby5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1vLmFsZztpZihvLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX1lbHNle3RoaXMucHJvdk5hbWU9by5wcm92fXRoaXMuYWxnUHJvdk5hbWU9dGhpcy5hbGdOYW1lK1wiOlwiK3RoaXMucHJvdk5hbWU7dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSk7dGhpcy5fc2V0QWxnTmFtZXMoKX1pZihvLnBzc3NhbHRsZW4hPT11bmRlZmluZWQpe3RoaXMucHNzU2FsdExlbj1vLnBzc3NhbHRsZW59aWYoby5wcnZrZXlwZW0hPT11bmRlZmluZWQpe2lmKG8ucHJ2a2V5cGFzIT09dW5kZWZpbmVkKXt0aHJvd1wiYm90aCBwcnZrZXlwZW0gYW5kIHBydmtleXBhcyBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWRcIn1lbHNle3RyeXt2YXIgcT1LRVlVVElMLmdldEtleShvLnBydmtleXBlbSk7dGhpcy5pbml0KHEpfWNhdGNoKG0pe3Rocm93XCJmYXRhbCBlcnJvciB0byBsb2FkIHBlbSBwcml2YXRlIGtleTogXCIrbX19fX19O0tKVVIuY3J5cHRvLkNpcGhlcj1mdW5jdGlvbihhKXt9O0tKVVIuY3J5cHRvLkNpcGhlci5lbmNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHVibGljKXt2YXIgYz1LSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lKGYsZCk7aWYoYz09PVwiUlNBXCIpe3JldHVybiBmLmVuY3J5cHQoZSl9aWYoYz09PVwiUlNBT0FFUFwiKXtyZXR1cm4gZi5lbmNyeXB0T0FFUChlLFwic2hhMVwiKX12YXIgYj1jLm1hdGNoKC9eUlNBT0FFUChcXGQrKSQvKTtpZihiIT09bnVsbCl7cmV0dXJuIGYuZW5jcnlwdE9BRVAoZSxcInNoYVwiK2JbMV0pfXRocm93XCJDaXBoZXIuZW5jcnlwdDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBSU0FLZXk6IFwiK2R9ZWxzZXt0aHJvd1wiQ2lwaGVyLmVuY3J5cHQ6IHVuc3VwcG9ydGVkIGtleSBvciBhbGdvcml0aG1cIn19O0tKVVIuY3J5cHRvLkNpcGhlci5kZWNyeXB0PWZ1bmN0aW9uKGUsZixkKXtpZihmIGluc3RhbmNlb2YgUlNBS2V5JiZmLmlzUHJpdmF0ZSl7dmFyIGM9S0pVUi5jcnlwdG8uQ2lwaGVyLmdldEFsZ0J5S2V5QW5kTmFtZShmLGQpO2lmKGM9PT1cIlJTQVwiKXtyZXR1cm4gZi5kZWNyeXB0KGUpfWlmKGM9PT1cIlJTQU9BRVBcIil7cmV0dXJuIGYuZGVjcnlwdE9BRVAoZSxcInNoYTFcIil9dmFyIGI9Yy5tYXRjaCgvXlJTQU9BRVAoXFxkKykkLyk7aWYoYiE9PW51bGwpe3JldHVybiBmLmRlY3J5cHRPQUVQKGUsXCJzaGFcIitiWzFdKX10aHJvd1wiQ2lwaGVyLmRlY3J5cHQ6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgUlNBS2V5OiBcIitkfWVsc2V7dGhyb3dcIkNpcGhlci5kZWNyeXB0OiB1bnN1cHBvcnRlZCBrZXkgb3IgYWxnb3JpdGhtXCJ9fTtLSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lPWZ1bmN0aW9uKGIsYSl7aWYoYiBpbnN0YW5jZW9mIFJTQUtleSl7aWYoXCI6UlNBOlJTQU9BRVA6UlNBT0FFUDIyNDpSU0FPQUVQMjU2OlJTQU9BRVAzODQ6UlNBT0FFUDUxMjpcIi5pbmRleE9mKGEpIT0tMSl7cmV0dXJuIGF9aWYoYT09PW51bGx8fGE9PT11bmRlZmluZWQpe3JldHVyblwiUlNBXCJ9dGhyb3dcImdldEFsZ0J5S2V5QW5kTmFtZTogbm90IHN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZSBmb3IgUlNBS2V5OiBcIithfXRocm93XCJnZXRBbGdCeUtleUFuZE5hbWU6IG5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWU6IFwiK2F9O0tKVVIuY3J5cHRvLk9JRD1uZXcgZnVuY3Rpb24oKXt0aGlzLm9pZGhleDJuYW1lPXtcIjJhODY0ODg2ZjcwZDAxMDEwMVwiOlwicnNhRW5jcnlwdGlvblwiLFwiMmE4NjQ4Y2UzZDAyMDFcIjpcImVjUHVibGljS2V5XCIsXCIyYTg2NDhjZTM4MDQwMVwiOlwiZHNhXCIsXCIyYTg2NDhjZTNkMDMwMTA3XCI6XCJzZWNwMjU2cjFcIixcIjJiODEwNDAwMWZcIjpcInNlY3AxOTJrMVwiLFwiMmI4MTA0MDAyMVwiOlwic2VjcDIyNHIxXCIsXCIyYjgxMDQwMDBhXCI6XCJzZWNwMjU2azFcIixcIjJiODEwNDAwMjNcIjpcInNlY3A1MjFyMVwiLFwiMmI4MTA0MDAyMlwiOlwic2VjcDM4NHIxXCIsXCIyYTg2NDhjZTM4MDQwM1wiOlwiU0hBMXdpdGhEU0FcIixcIjYwODY0ODAxNjUwMzA0MDMwMVwiOlwiU0hBMjI0d2l0aERTQVwiLFwiNjA4NjQ4MDE2NTAzMDQwMzAyXCI6XCJTSEEyNTZ3aXRoRFNBXCIsfX07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuY3J5cHRvPT1cInVuZGVmaW5lZFwifHwhS0pVUi5jcnlwdG8pe0tKVVIuY3J5cHRvPXt9fUtKVVIuY3J5cHRvLkVDRFNBPWZ1bmN0aW9uKGUpe3ZhciBnPVwic2VjcDI1NnIxXCI7dmFyIHA9bnVsbDt2YXIgYj1udWxsO3ZhciBpPW51bGw7dmFyIGo9RXJyb3IsZj1CaWdJbnRlZ2VyLGg9RUNQb2ludEZwLG09S0pVUi5jcnlwdG8uRUNEU0EsYz1LSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLGQ9bS5nZXROYW1lLHE9QVNOMUhFWCxuPXEuZ2V0VmJ5TGlzdEV4LGs9cS5pc0FTTjFIRVg7dmFyIGE9bmV3IFNlY3VyZVJhbmRvbSgpO3ZhciBvPW51bGw7dGhpcy50eXBlPVwiRUNcIjt0aGlzLmlzUHJpdmF0ZT1mYWxzZTt0aGlzLmlzUHVibGljPWZhbHNlO2Z1bmN0aW9uIGwoeCx0LHcscyl7dmFyIHI9TWF0aC5tYXgodC5iaXRMZW5ndGgoKSxzLmJpdExlbmd0aCgpKTt2YXIgeT14LmFkZDJEKHcpO3ZhciB2PXguY3VydmUuZ2V0SW5maW5pdHkoKTtmb3IodmFyIHU9ci0xO3U+PTA7LS11KXt2PXYudHdpY2UyRCgpO3Yuej1mLk9ORTtpZih0LnRlc3RCaXQodSkpe2lmKHMudGVzdEJpdCh1KSl7dj12LmFkZDJEKHkpfWVsc2V7dj12LmFkZDJEKHgpfX1lbHNle2lmKHMudGVzdEJpdCh1KSl7dj12LmFkZDJEKHcpfX19cmV0dXJuIHZ9dGhpcy5nZXRCaWdSYW5kb209ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBmKHIuYml0TGVuZ3RoKCksYSkubW9kKHIuc3VidHJhY3QoZi5PTkUpKS5hZGQoZi5PTkUpfTt0aGlzLnNldE5hbWVkQ3VydmU9ZnVuY3Rpb24ocil7dGhpcy5lY3BhcmFtcz1jLmdldEJ5TmFtZShyKTt0aGlzLnBydktleUhleD1udWxsO3RoaXMucHViS2V5SGV4PW51bGw7dGhpcy5jdXJ2ZU5hbWU9cn07dGhpcy5zZXRQcml2YXRlS2V5SGV4PWZ1bmN0aW9uKHIpe3RoaXMuaXNQcml2YXRlPXRydWU7dGhpcy5wcnZLZXlIZXg9cn07dGhpcy5zZXRQdWJsaWNLZXlIZXg9ZnVuY3Rpb24ocil7dGhpcy5pc1B1YmxpYz10cnVlO3RoaXMucHViS2V5SGV4PXJ9O3RoaXMuZ2V0UHVibGljS2V5WFlIZXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnB1YktleUhleDtpZih0LnN1YnN0cigwLDIpIT09XCIwNFwiKXt0aHJvd1widGhpcyBtZXRob2Qgc3VwcG9ydHMgdW5jb21wcmVzc2VkIGZvcm1hdCgwNCkgb25seVwifXZhciBzPXRoaXMuZWNwYXJhbXMua2V5bGVuLzQ7aWYodC5sZW5ndGghPT0yK3MqMil7dGhyb3dcIm1hbGZvcm1lZCBwdWJsaWMga2V5IGhleCBsZW5ndGhcIn12YXIgcj17fTtyLng9dC5zdWJzdHIoMixzKTtyLnk9dC5zdWJzdHIoMitzKTtyZXR1cm4gcn07dGhpcy5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5jdXJ2ZU5hbWU7aWYocj09PVwic2VjcDI1NnIxXCJ8fHI9PT1cIk5JU1QgUC0yNTZcInx8cj09PVwiUC0yNTZcInx8cj09PVwicHJpbWUyNTZ2MVwiKXtyZXR1cm5cIlAtMjU2XCJ9aWYocj09PVwic2VjcDM4NHIxXCJ8fHI9PT1cIk5JU1QgUC0zODRcInx8cj09PVwiUC0zODRcIil7cmV0dXJuXCJQLTM4NFwifXJldHVybiBudWxsfTt0aGlzLmdlbmVyYXRlS2V5UGFpckhleD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWNwYXJhbXMubjt2YXIgdz10aGlzLmdldEJpZ1JhbmRvbSh0KTt2YXIgdT10aGlzLmVjcGFyYW1zLkcubXVsdGlwbHkodyk7dmFyIHo9dS5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIHg9dS5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIHI9dGhpcy5lY3BhcmFtcy5rZXlsZW4vNDt2YXIgdj0oXCIwMDAwMDAwMDAwXCIrdy50b1N0cmluZygxNikpLnNsaWNlKC1yKTt2YXIgQT0oXCIwMDAwMDAwMDAwXCIrei50b1N0cmluZygxNikpLnNsaWNlKC1yKTt2YXIgeT0oXCIwMDAwMDAwMDAwXCIreC50b1N0cmluZygxNikpLnNsaWNlKC1yKTt2YXIgcz1cIjA0XCIrQSt5O3RoaXMuc2V0UHJpdmF0ZUtleUhleCh2KTt0aGlzLnNldFB1YmxpY0tleUhleChzKTtyZXR1cm57ZWNwcnZoZXg6dixlY3B1YmhleDpzfX07dGhpcy5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnNpZ25IZXgocix0aGlzLnBydktleUhleCl9O3RoaXMuc2lnbkhleD1mdW5jdGlvbih4LHUpe3ZhciBBPW5ldyBmKHUsMTYpO3ZhciB2PXRoaXMuZWNwYXJhbXMubjt2YXIgej1uZXcgZih4LnN1YnN0cmluZygwLHRoaXMuZWNwYXJhbXMua2V5bGVuLzQpLDE2KTtkb3t2YXIgdz10aGlzLmdldEJpZ1JhbmRvbSh2KTt2YXIgQj10aGlzLmVjcGFyYW1zLkc7dmFyIHk9Qi5tdWx0aXBseSh3KTt2YXIgdD15LmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2Qodil9d2hpbGUodC5jb21wYXJlVG8oZi5aRVJPKTw9MCk7dmFyIEM9dy5tb2RJbnZlcnNlKHYpLm11bHRpcGx5KHouYWRkKEEubXVsdGlwbHkodCkpKS5tb2Qodik7cmV0dXJuIG0uYmlSU1NpZ1RvQVNOMVNpZyh0LEMpfTt0aGlzLnNpZ249ZnVuY3Rpb24odyxCKXt2YXIgej1CO3ZhciB1PXRoaXMuZWNwYXJhbXMubjt2YXIgeT1mLmZyb21CeXRlQXJyYXlVbnNpZ25lZCh3KTtkb3t2YXIgdj10aGlzLmdldEJpZ1JhbmRvbSh1KTt2YXIgQT10aGlzLmVjcGFyYW1zLkc7dmFyIHg9QS5tdWx0aXBseSh2KTt2YXIgdD14LmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2QodSl9d2hpbGUodC5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKTw9MCk7dmFyIEM9di5tb2RJbnZlcnNlKHUpLm11bHRpcGx5KHkuYWRkKHoubXVsdGlwbHkodCkpKS5tb2QodSk7cmV0dXJuIHRoaXMuc2VyaWFsaXplU2lnKHQsQyl9O3RoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKHMscil7cmV0dXJuIHRoaXMudmVyaWZ5SGV4KHMscix0aGlzLnB1YktleUhleCl9O3RoaXMudmVyaWZ5SGV4PWZ1bmN0aW9uKHYseSx1KXt0cnl7dmFyIHQsQjt2YXIgdz1tLnBhcnNlU2lnSGV4KHkpO3Q9dy5yO0I9dy5zO3ZhciB4PWguZGVjb2RlRnJvbUhleCh0aGlzLmVjcGFyYW1zLmN1cnZlLHUpO3ZhciB6PW5ldyBmKHYuc3Vic3RyaW5nKDAsdGhpcy5lY3BhcmFtcy5rZXlsZW4vNCksMTYpO3JldHVybiB0aGlzLnZlcmlmeVJhdyh6LHQsQix4KX1jYXRjaChBKXtyZXR1cm4gZmFsc2V9fTt0aGlzLnZlcmlmeT1mdW5jdGlvbih6LEEsdSl7dmFyIHcsdDtpZihCaXRjb2luLlV0aWwuaXNBcnJheShBKSl7dmFyIHk9dGhpcy5wYXJzZVNpZyhBKTt3PXkucjt0PXkuc31lbHNle2lmKFwib2JqZWN0XCI9PT10eXBlb2YgQSYmQS5yJiZBLnMpe3c9QS5yO3Q9QS5zfWVsc2V7dGhyb3dcIkludmFsaWQgdmFsdWUgZm9yIHNpZ25hdHVyZVwifX12YXIgdjtpZih1IGluc3RhbmNlb2YgRUNQb2ludEZwKXt2PXV9ZWxzZXtpZihCaXRjb2luLlV0aWwuaXNBcnJheSh1KSl7dj1oLmRlY29kZUZyb20odGhpcy5lY3BhcmFtcy5jdXJ2ZSx1KX1lbHNle3Rocm93XCJJbnZhbGlkIGZvcm1hdCBmb3IgcHVia2V5IHZhbHVlLCBtdXN0IGJlIGJ5dGUgYXJyYXkgb3IgRUNQb2ludEZwXCJ9fXZhciB4PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHopO3JldHVybiB0aGlzLnZlcmlmeVJhdyh4LHcsdCx2KX07dGhpcy52ZXJpZnlSYXc9ZnVuY3Rpb24oeix0LEUseSl7dmFyIHg9dGhpcy5lY3BhcmFtcy5uO3ZhciBEPXRoaXMuZWNwYXJhbXMuRztpZih0LmNvbXBhcmVUbyhmLk9ORSk8MHx8dC5jb21wYXJlVG8oeCk+PTApe3JldHVybiBmYWxzZX1pZihFLmNvbXBhcmVUbyhmLk9ORSk8MHx8RS5jb21wYXJlVG8oeCk+PTApe3JldHVybiBmYWxzZX12YXIgQT1FLm1vZEludmVyc2UoeCk7dmFyIHc9ei5tdWx0aXBseShBKS5tb2QoeCk7dmFyIHU9dC5tdWx0aXBseShBKS5tb2QoeCk7dmFyIEI9RC5tdWx0aXBseSh3KS5hZGQoeS5tdWx0aXBseSh1KSk7dmFyIEM9Qi5nZXRYKCkudG9CaWdJbnRlZ2VyKCkubW9kKHgpO3JldHVybiBDLmVxdWFscyh0KX07dGhpcy5zZXJpYWxpemVTaWc9ZnVuY3Rpb24odix1KXt2YXIgdz12LnRvQnl0ZUFycmF5U2lnbmVkKCk7dmFyIHQ9dS50b0J5dGVBcnJheVNpZ25lZCgpO3ZhciB4PVtdO3gucHVzaCgyKTt4LnB1c2gody5sZW5ndGgpO3g9eC5jb25jYXQodyk7eC5wdXNoKDIpO3gucHVzaCh0Lmxlbmd0aCk7eD14LmNvbmNhdCh0KTt4LnVuc2hpZnQoeC5sZW5ndGgpO3gudW5zaGlmdCg0OCk7cmV0dXJuIHh9O3RoaXMucGFyc2VTaWc9ZnVuY3Rpb24oeSl7dmFyIHg7aWYoeVswXSE9NDgpe3Rocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3QgYSB2YWxpZCBERVJTZXF1ZW5jZVwiKX14PTI7aWYoeVt4XSE9Mil7dGhyb3cgbmV3IEVycm9yKFwiRmlyc3QgZWxlbWVudCBpbiBzaWduYXR1cmUgbXVzdCBiZSBhIERFUkludGVnZXJcIil9dmFyIHc9eS5zbGljZSh4KzIseCsyK3lbeCsxXSk7eCs9Mit5W3grMV07aWYoeVt4XSE9Mil7dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kIGVsZW1lbnQgaW4gc2lnbmF0dXJlIG11c3QgYmUgYSBERVJJbnRlZ2VyXCIpfXZhciB0PXkuc2xpY2UoeCsyLHgrMit5W3grMV0pO3grPTIreVt4KzFdO3ZhciB2PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHcpO3ZhciB1PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHQpO3JldHVybntyOnYsczp1fX07dGhpcy5wYXJzZVNpZ0NvbXBhY3Q9ZnVuY3Rpb24odyl7aWYody5sZW5ndGghPT02NSl7dGhyb3dcIlNpZ25hdHVyZSBoYXMgdGhlIHdyb25nIGxlbmd0aFwifXZhciB0PXdbMF0tMjc7aWYodDwwfHx0Pjcpe3Rocm93XCJJbnZhbGlkIHNpZ25hdHVyZSB0eXBlXCJ9dmFyIHg9dGhpcy5lY3BhcmFtcy5uO3ZhciB2PWYuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKHcuc2xpY2UoMSwzMykpLm1vZCh4KTt2YXIgdT1mLmZyb21CeXRlQXJyYXlVbnNpZ25lZCh3LnNsaWNlKDMzLDY1KSkubW9kKHgpO3JldHVybntyOnYsczp1LGk6dH19O3RoaXMucmVhZFBLQ1M1UHJ2S2V5SGV4PWZ1bmN0aW9uKHUpe2lmKGsodSk9PT1mYWxzZSl7dGhyb3cgbmV3IEVycm9yKFwibm90IEFTTi4xIGhleCBzdHJpbmdcIil9dmFyIHIsdCx2O3RyeXtyPW4odSwwLFtcIlswXVwiLDBdLFwiMDZcIik7dD1uKHUsMCxbMV0sXCIwNFwiKTt0cnl7dj1uKHUsMCxbXCJbMV1cIiwwXSxcIjAzXCIpfWNhdGNoKHMpe319Y2F0Y2gocyl7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIFBLQ1MjMS81IHBsYWluIEVDQyBwcml2YXRlIGtleVwiKX10aGlzLmN1cnZlTmFtZT1kKHIpO2lmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgodik7dGhpcy5zZXRQcml2YXRlS2V5SGV4KHQpO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHJ2S2V5SGV4PWZ1bmN0aW9uKHYpe2lmKGsodik9PT1mYWxzZSl7dGhyb3cgbmV3IGooXCJub3QgQVNOLjEgaGV4IHN0cmluZ1wiKX12YXIgdCxyLHUsdzt0cnl7dD1uKHYsMCxbMSwwXSxcIjA2XCIpO3I9bih2LDAsWzEsMV0sXCIwNlwiKTt1PW4odiwwLFsyLDAsMV0sXCIwNFwiKTt0cnl7dz1uKHYsMCxbMiwwLFwiWzFdXCIsMF0sXCIwM1wiKX1jYXRjaChzKXt9fWNhdGNoKHMpe3Rocm93IG5ldyBqKFwibWFsZm9ybWVkIFBLQ1MjOCBwbGFpbiBFQ0MgcHJpdmF0ZSBrZXlcIil9dGhpcy5jdXJ2ZU5hbWU9ZChyKTtpZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IGooXCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCIpfXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgodyk7dGhpcy5zZXRQcml2YXRlS2V5SGV4KHUpO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKHUpe2lmKGsodSk9PT1mYWxzZSl7dGhyb3cgbmV3IGooXCJub3QgQVNOLjEgaGV4IHN0cmluZ1wiKX12YXIgdCxyLHY7dHJ5e3Q9bih1LDAsWzAsMF0sXCIwNlwiKTtyPW4odSwwLFswLDFdLFwiMDZcIik7dj1uKHUsMCxbMV0sXCIwM1wiKX1jYXRjaChzKXt0aHJvdyBuZXcgaihcIm1hbGZvcm1lZCBQS0NTIzggRUNDIHB1YmxpYyBrZXlcIil9dGhpcy5jdXJ2ZU5hbWU9ZChyKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93IG5ldyBqKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwiKX10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KHYpfTt0aGlzLnJlYWRDZXJ0UHViS2V5SGV4PWZ1bmN0aW9uKHQsdil7aWYoayh0KT09PWZhbHNlKXt0aHJvdyBuZXcgaihcIm5vdCBBU04uMSBoZXggc3RyaW5nXCIpfXZhciByLHU7dHJ5e3I9bih0LDAsWzAsNSwwLDFdLFwiMDZcIik7dT1uKHQsMCxbMCw1LDFdLFwiMDNcIil9Y2F0Y2gocyl7dGhyb3cgbmV3IGooXCJtYWxmb3JtZWQgWC41MDkgY2VydGlmaWNhdGUgRUNDIHB1YmxpYyBrZXlcIil9dGhpcy5jdXJ2ZU5hbWU9ZChyKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93IG5ldyBqKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwiKX10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KHUpfTtpZihlIT09dW5kZWZpbmVkKXtpZihlLmN1cnZlIT09dW5kZWZpbmVkKXt0aGlzLmN1cnZlTmFtZT1lLmN1cnZlfX1pZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhpcy5jdXJ2ZU5hbWU9Z310aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO2lmKGUhPT11bmRlZmluZWQpe2lmKGUucHJ2IT09dW5kZWZpbmVkKXt0aGlzLnNldFByaXZhdGVLZXlIZXgoZS5wcnYpfWlmKGUucHViIT09dW5kZWZpbmVkKXt0aGlzLnNldFB1YmxpY0tleUhleChlLnB1Yil9fX07S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXg9ZnVuY3Rpb24oYSl7dmFyIGI9S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXhJbkhleFJTKGEpO3ZhciBkPW5ldyBCaWdJbnRlZ2VyKGIuciwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYi5zLDE2KTtyZXR1cm57cjpkLHM6Y319O0tKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUz1mdW5jdGlvbihmKXt2YXIgaj1BU04xSEVYLGk9ai5nZXRDaGlsZElkeCxnPWouZ2V0VjtqLmNoZWNrU3RyaWN0REVSKGYsMCk7aWYoZi5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJzaWduYXR1cmUgaXMgbm90IGEgQVNOLjEgc2VxdWVuY2VcIil9dmFyIGg9aShmLDApO2lmKGgubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJzaWduYXR1cmUgc2hhbGwgaGF2ZSB0d28gZWxlbWVudHNcIil9dmFyIGU9aFswXTt2YXIgZD1oWzFdO2lmKGYuc3Vic3RyKGUsMikhPVwiMDJcIil7dGhyb3cgbmV3IEVycm9yKFwiMXN0IGl0ZW0gbm90IEFTTi4xIGludGVnZXJcIil9aWYoZi5zdWJzdHIoZCwyKSE9XCIwMlwiKXt0aHJvdyBuZXcgRXJyb3IoXCIybmQgaXRlbSBub3QgQVNOLjEgaW50ZWdlclwiKX12YXIgYz1nKGYsZSk7dmFyIGI9ZyhmLGQpO3JldHVybntyOmMsczpifX07S0pVUi5jcnlwdG8uRUNEU0EuYXNuMVNpZ1RvQ29uY2F0U2lnPWZ1bmN0aW9uKGMpe3ZhciBkPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUyhjKTt2YXIgYj1kLnI7dmFyIGE9ZC5zO2lmKGIuc3Vic3RyKDAsMik9PVwiMDBcIiYmKGIubGVuZ3RoJTMyKT09Mil7Yj1iLnN1YnN0cigyKX1pZihhLnN1YnN0cigwLDIpPT1cIjAwXCImJihhLmxlbmd0aCUzMik9PTIpe2E9YS5zdWJzdHIoMil9aWYoKGIubGVuZ3RoJTMyKT09MzApe2I9XCIwMFwiK2J9aWYoKGEubGVuZ3RoJTMyKT09MzApe2E9XCIwMFwiK2F9aWYoYi5sZW5ndGglMzIhPTApe3Rocm93XCJ1bmtub3duIEVDRFNBIHNpZyByIGxlbmd0aCBlcnJvclwifWlmKGEubGVuZ3RoJTMyIT0wKXt0aHJvd1widW5rbm93biBFQ0RTQSBzaWcgcyBsZW5ndGggZXJyb3JcIn1yZXR1cm4gYithfTtLSlVSLmNyeXB0by5FQ0RTQS5jb25jYXRTaWdUb0FTTjFTaWc9ZnVuY3Rpb24oYSl7aWYoKCgoYS5sZW5ndGgvMikqOCklKDE2KjgpKSE9MCl7dGhyb3dcInVua25vd24gRUNEU0EgY29uY2F0aW5hdGVkIHItcyBzaWcgIGxlbmd0aCBlcnJvclwifXZhciBjPWEuc3Vic3RyKDAsYS5sZW5ndGgvMik7dmFyIGI9YS5zdWJzdHIoYS5sZW5ndGgvMik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnKGMsYil9O0tKVVIuY3J5cHRvLkVDRFNBLmhleFJTU2lnVG9BU04xU2lnPWZ1bmN0aW9uKGIsYSl7dmFyIGQ9bmV3IEJpZ0ludGVnZXIoYiwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYSwxNik7cmV0dXJuIEtKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWcoZCxjKX07S0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZz1mdW5jdGlvbihmLGQpe3ZhciBjPUtKVVIuYXNuMTt2YXIgYj1uZXcgYy5ERVJJbnRlZ2VyKHtiaWdpbnQ6Zn0pO3ZhciBhPW5ldyBjLkRFUkludGVnZXIoe2JpZ2ludDpkfSk7dmFyIGU9bmV3IGMuREVSU2VxdWVuY2Uoe2FycmF5OltiLGFdfSk7cmV0dXJuIGUuZ2V0RW5jb2RlZEhleCgpfTtLSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lPWZ1bmN0aW9uKGEpe2lmKGE9PT1cIjJiODEwNDAwMWZcIil7cmV0dXJuXCJzZWNwMTkyazFcIn1pZihhPT09XCIyYTg2NDhjZTNkMDMwMTA3XCIpe3JldHVyblwic2VjcDI1NnIxXCJ9aWYoYT09PVwiMmI4MTA0MDAwYVwiKXtyZXR1cm5cInNlY3AyNTZrMVwifWlmKGE9PT1cIjJiODEwNDAwMjFcIil7cmV0dXJuXCJzZWNwMjI0cjFcIn1pZihhPT09XCIyYjgxMDQwMDIyXCIpe3JldHVyblwic2VjcDM4NHIxXCJ9aWYoXCJ8c2VjcDI1NnIxfE5JU1QgUC0yNTZ8UC0yNTZ8cHJpbWUyNTZ2MXxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDI1NnIxXCJ9aWYoXCJ8c2VjcDI1NmsxfFwiLmluZGV4T2YoYSkhPT0tMSl7cmV0dXJuXCJzZWNwMjU2azFcIn1pZihcInxzZWNwMjI0cjF8TklTVCBQLTIyNHxQLTIyNHxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDIyNHIxXCJ9aWYoXCJ8c2VjcDM4NHIxfE5JU1QgUC0zODR8UC0zODR8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AzODRyMVwifXJldHVybiBudWxsfTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQj1uZXcgZnVuY3Rpb24oKXt2YXIgYj17fTt2YXIgYz17fTtmdW5jdGlvbiBhKGQpe3JldHVybiBuZXcgQmlnSW50ZWdlcihkLDE2KX10aGlzLmdldEJ5TmFtZT1mdW5jdGlvbihlKXt2YXIgZD1lO2lmKHR5cGVvZiBjW2RdIT1cInVuZGVmaW5lZFwiKXtkPWNbZV19aWYodHlwZW9mIGJbZF0hPVwidW5kZWZpbmVkXCIpe3JldHVybiBiW2RdfXRocm93XCJ1bnJlZ2lzdGVyZWQgRUMgY3VydmUgbmFtZTogXCIrZH07dGhpcy5yZWdpc3Q9ZnVuY3Rpb24oQSxsLG8sZyxtLGUsaixmLGssdSxkLHgpe2JbQV09e307dmFyIHM9YShvKTt2YXIgej1hKGcpO3ZhciB5PWEobSk7dmFyIHQ9YShlKTt2YXIgdz1hKGopO3ZhciByPW5ldyBFQ0N1cnZlRnAocyx6LHkpO3ZhciBxPXIuZGVjb2RlUG9pbnRIZXgoXCIwNFwiK2Yrayk7YltBXVtcIm5hbWVcIl09QTtiW0FdW1wia2V5bGVuXCJdPWw7YltBXVtcImN1cnZlXCJdPXI7YltBXVtcIkdcIl09cTtiW0FdW1wiblwiXT10O2JbQV1bXCJoXCJdPXc7YltBXVtcIm9pZFwiXT1kO2JbQV1bXCJpbmZvXCJdPXg7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe2NbdVt2XV09QX19fTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxMjhyMVwiLDEyOCxcIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiRTg3NTc5QzExMDc5RjQzREQ4MjQ5OTNDMkNFRTVFRDNcIixcIkZGRkZGRkZFMDAwMDAwMDA3NUEzMEQxQjkwMzhBMTE1XCIsXCIxXCIsXCIxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NlwiLFwiQ0Y1QUM4Mzk1QkFGRUIxM0MwMkRBMjkyRERFRDdBODNcIixbXSxcIlwiLFwic2VjcDEyOHIxIDogU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZFwiKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxNjBrMVwiLDE2MCxcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkFDNzNcIixcIjBcIixcIjdcIixcIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFCOEZBMTZERkFCOUFDQTE2QjZCM1wiLFwiMVwiLFwiM0I0QzM4MkNFMzdBQTE5MkE0MDE5RTc2MzAzNkY0RjVERDREN0VCQlwiLFwiOTM4Q0Y5MzUzMThGRENFRDZCQzI4Mjg2NTMxNzMzQzNGMDNDNEZFRVwiLFtdLFwiXCIsXCJzZWNwMTYwazEgOiBTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkXCIpO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE2MHIxXCIsMTYwLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGQ1wiLFwiMUM5N0JFRkM1NEJEN0E4QjY1QUNGODlGODFENEQ0QURDNTY1RkE0NVwiLFwiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUY0QzhGOTI3QUVEM0NBNzUyMjU3XCIsXCIxXCIsXCI0QTk2QjU2ODhFRjU3MzI4NDY2NDY5ODk2OEMzOEJCOTEzQ0JGQzgyXCIsXCIyM0E2Mjg1NTMxNjg5NDdENTlEQ0M5MTIwNDIzNTEzNzdBQzVGQjMyXCIsW10sXCJcIixcInNlY3AxNjByMSA6IFNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGRcIik7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkyazFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkVFMzdcIixcIjBcIixcIjNcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTI2RjJGQzE3MEY2OTQ2NkE3NERFRkQ4RFwiLFwiMVwiLFwiREI0RkYxMEVDMDU3RTlBRTI2QjA3RDAyODBCN0Y0MzQxREE1RDFCMUVBRTA2QzdEXCIsXCI5QjJGMkY2RDlDNTYyOEE3ODQ0MTYzRDAxNUJFODYzNDQwODJBQTg4RDk1RTJGOURcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTkycjFcIiwxOTIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQ1wiLFwiNjQyMTA1MTlFNTlDODBFNzBGQTdFOUFCNzIyNDMwNDlGRUI4REVFQ0MxNDZCOUIxXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzFcIixcIjFcIixcIjE4OERBODBFQjAzMDkwRjY3Q0JGMjBFQjQzQTE4ODAwRjRGRjBBRkQ4MkZGMTAxMlwiLFwiMDcxOTJCOTVGRkM4REE3ODYzMTAxMUVENkIyNENERDU3M0Y5NzdBMTFFNzk0ODExXCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDIyNHIxXCIsMjI0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFXCIsXCJCNDA1MEE4NTBDMDRCM0FCRjU0MTMyNTY1MDQ0QjBCN0Q3QkZEOEJBMjcwQjM5NDMyMzU1RkZCNFwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0RcIixcIjFcIixcIkI3MEUwQ0JENkJCNEJGN0YzMjEzOTBCOTRBMDNDMUQzNTZDMjExMjIzNDMyODBENjExNUMxRDIxXCIsXCJCRDM3NjM4OEI1RjcyM0ZCNEMyMkRGRTZDRDQzNzVBMDVBMDc0NzY0NDRENTgxOTk4NTAwN0UzNFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AyNTZrMVwiLDI1NixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZDMkZcIixcIjBcIixcIjdcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDFcIixcIjFcIixcIjc5QkU2NjdFRjlEQ0JCQUM1NUEwNjI5NUNFODcwQjA3MDI5QkZDREIyRENFMjhEOTU5RjI4MTVCMTZGODE3OThcIixcIjQ4M0FEQTc3MjZBM0M0NjU1REE0RkJGQzBFMTEwOEE4RkQxN0I0NDhBNjg1NTQxOTlDNDdEMDhGRkIxMEQ0QjhcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMjU2cjFcIiwyNTYsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCI1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCXCIsXCJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxXCIsXCIxXCIsXCI2QjE3RDFGMkUxMkM0MjQ3RjhCQ0U2RTU2M0E0NDBGMjc3MDM3RDgxMkRFQjMzQTBGNEExMzk0NUQ4OThDMjk2XCIsXCI0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1XCIsW1wiTklTVCBQLTI1NlwiLFwiUC0yNTZcIixcInByaW1lMjU2djFcIl0pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDM4NHIxXCIsMzg0LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkNcIixcIkIzMzEyRkE3RTIzRUU3RTQ5ODhFMDU2QkUzRjgyRDE5MTgxRDlDNkVGRTgxNDExMjAzMTQwODhGNTAxMzg3NUFDNjU2Mzk4RDhBMkVEMTlEMkE4NUM4RUREM0VDMkFFRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzc2MzREODFGNDM3MkRERjU4MUEwREIyNDhCMEE3N0FFQ0VDMTk2QUNDQzUyOTczXCIsXCIxXCIsXCJBQTg3Q0EyMkJFOEIwNTM3OEVCMUM3MUVGMzIwQUQ3NDZFMUQzQjYyOEJBNzlCOTg1OUY3NDFFMDgyNTQyQTM4NTUwMkYyNURCRjU1Mjk2QzNBNTQ1RTM4NzI3NjBBQjdcIixcIjM2MTdkZTRhOTYyNjJjNmY1ZDllOThiZjkyOTJkYzI5ZjhmNDFkYmQyODlhMTQ3Y2U5ZGEzMTEzYjVmMGI4YzAwYTYwYjFjZTFkN2U4MTlkN2E0MzFkN2M5MGVhMGU1ZlwiLFtcIk5JU1QgUC0zODRcIixcIlAtMzg0XCJdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3A1MjFyMVwiLDUyMSxcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGXCIsXCIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiMDUxOTUzRUI5NjE4RTFDOUExRjkyOUEyMUEwQjY4NTQwRUVBMkRBNzI1Qjk5QjMxNUYzQjhCNDg5OTE4RUYxMDlFMTU2MTkzOTUxRUM3RTkzN0IxNjUyQzBCRDNCQjFCRjA3MzU3M0RGODgzRDJDMzRGMUVGNDUxRkQ0NkI1MDNGMDBcIixcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE1MTg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5XCIsXCIxXCIsXCJDNjg1OEUwNkI3MDQwNEU5Q0Q5RTNFQ0I2NjIzOTVCNDQyOUM2NDgxMzkwNTNGQjUyMUY4MjhBRjYwNkI0RDNEQkFBMTRCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZGQThERTMzNDhCM0MxODU2QTQyOUJGOTdFN0UzMUMyRTVCRDY2XCIsXCIwMTE4MzkyOTZhNzg5YTNiYzAwNDVjOGE1ZmI0MmM3ZDFiZDk5OGY1NDQ0OTU3OWI0NDY4MTdhZmJkMTcyNzNlNjYyYzk3ZWU3Mjk5NWVmNDI2NDBjNTUwYjkwMTNmYWQwNzYxMzUzYzcwODZhMjcyYzI0MDg4YmU5NDc2OWZkMTY2NTBcIixbXCJOSVNUIFAtNTIxXCIsXCJQLTUyMVwiXSk7XG52YXIgS0VZVVRJTD1mdW5jdGlvbigpe3ZhciBkPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gayhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgZT1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGsoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGE9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBrKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBrPWZ1bmN0aW9uKHMseCx1LHEpe3ZhciByPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeCk7dmFyIHc9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB0PXt9O3Qua2V5PXc7dC5pdj1wO3QuY2lwaGVydGV4dD1yO3ZhciB2PXMuZGVjcnlwdCh0LHcse2l2OnB9KTtyZXR1cm4gQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodil9O3ZhciBsPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gZyhDcnlwdG9KUy5BRVMscCxyLHEpfTt2YXIgbz1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGcoQ3J5cHRvSlMuVHJpcGxlREVTLHAscixxKX07dmFyIGY9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBnKENyeXB0b0pTLkRFUyxwLHIscSl9O3ZhciBnPWZ1bmN0aW9uKHQseSx2LHEpe3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoeSk7dmFyIHg9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHEpO3ZhciB3PXQuZW5jcnlwdChzLHgse2l2OnB9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHcudG9TdHJpbmcoKSk7dmFyIHU9Q3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkocik7cmV0dXJuIHV9O3ZhciBpPXtcIkFFUy0yNTYtQ0JDXCI6e3Byb2M6ZCxlcHJvYzpsLGtleWxlbjozMixpdmxlbjoxNn0sXCJBRVMtMTkyLUNCQ1wiOntwcm9jOmQsZXByb2M6bCxrZXlsZW46MjQsaXZsZW46MTZ9LFwiQUVTLTEyOC1DQkNcIjp7cHJvYzpkLGVwcm9jOmwsa2V5bGVuOjE2LGl2bGVuOjE2fSxcIkRFUy1FREUzLUNCQ1wiOntwcm9jOmUsZXByb2M6byxrZXlsZW46MjQsaXZsZW46OH0sXCJERVMtQ0JDXCI6e3Byb2M6YSxlcHJvYzpmLGtleWxlbjo4LGl2bGVuOjh9fTt2YXIgYz1mdW5jdGlvbihwKXtyZXR1cm4gaVtwXVtcInByb2NcIl19O3ZhciBtPWZ1bmN0aW9uKHApe3ZhciByPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKHApO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHIpO3JldHVybiBxfTt2YXIgbj1mdW5jdGlvbih2KXt2YXIgdz17fTt2YXIgcT12Lm1hdGNoKG5ldyBSZWdFeHAoXCJERUstSW5mbzogKFteLF0rKSwoWzAtOUEtRmEtZl0rKVwiLFwibVwiKSk7aWYocSl7dy5jaXBoZXI9cVsxXTt3Lml2c2FsdD1xWzJdfXZhciBwPXYubWF0Y2gobmV3IFJlZ0V4cChcIi0tLS0tQkVHSU4gKFtBLVpdKykgUFJJVkFURSBLRVktLS0tLVwiKSk7aWYocCl7dy50eXBlPXBbMV19dmFyIHU9LTE7dmFyIHg9MDtpZih2LmluZGV4T2YoXCJcXHJcXG5cXHJcXG5cIikhPS0xKXt1PXYuaW5kZXhPZihcIlxcclxcblxcclxcblwiKTt4PTJ9aWYodi5pbmRleE9mKFwiXFxuXFxuXCIpIT0tMSl7dT12LmluZGV4T2YoXCJcXG5cXG5cIik7eD0xfXZhciB0PXYuaW5kZXhPZihcIi0tLS0tRU5EXCIpO2lmKHUhPS0xJiZ0IT0tMSl7dmFyIHI9di5zdWJzdHJpbmcodSt4KjIsdC14KTtyPXIucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3cuZGF0YT1yfXJldHVybiB3fTt2YXIgaj1mdW5jdGlvbihxLHkscCl7dmFyIHY9cC5zdWJzdHJpbmcoMCwxNik7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh2KTt2YXIgcj1DcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh5KTt2YXIgdT1pW3FdW1wia2V5bGVuXCJdK2lbcV1bXCJpdmxlblwiXTt2YXIgeD1cIlwiO3ZhciB3PW51bGw7Zm9yKDs7KXt2YXIgcz1DcnlwdG9KUy5hbGdvLk1ENS5jcmVhdGUoKTtpZih3IT1udWxsKXtzLnVwZGF0ZSh3KX1zLnVwZGF0ZShyKTtzLnVwZGF0ZSh0KTt3PXMuZmluYWxpemUoKTt4PXgrQ3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodyk7aWYoeC5sZW5ndGg+PXUqMil7YnJlYWt9fXZhciB6PXt9O3oua2V5aGV4PXguc3Vic3RyKDAsaVtxXVtcImtleWxlblwiXSoyKTt6Lml2aGV4PXguc3Vic3RyKGlbcV1bXCJrZXlsZW5cIl0qMixpW3FdW1wiaXZsZW5cIl0qMik7cmV0dXJuIHp9O3ZhciBiPWZ1bmN0aW9uKHAsdixyLHcpe3ZhciBzPUNyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UocCk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7dmFyIHU9aVt2XVtcInByb2NcIl07dmFyIHQ9dShxLHIsdyk7cmV0dXJuIHR9O3ZhciBoPWZ1bmN0aW9uKHAscyxxLHUpe3ZhciByPWlbc11bXCJlcHJvY1wiXTt2YXIgdD1yKHAscSx1KTtyZXR1cm4gdH07cmV0dXJue3ZlcnNpb246XCIxLjAuMFwiLHBhcnNlUEtDUzVQRU06ZnVuY3Rpb24ocCl7cmV0dXJuIG4ocCl9LGdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdDpmdW5jdGlvbihxLHAscil7cmV0dXJuIGoocSxwLHIpfSxkZWNyeXB0S2V5QjY0OmZ1bmN0aW9uKHAscixxLHMpe3JldHVybiBiKHAscixxLHMpfSxnZXREZWNyeXB0ZWRLZXlIZXg6ZnVuY3Rpb24oeSx4KXt2YXIgcT1uKHkpO3ZhciB0PXEudHlwZTt2YXIgcj1xLmNpcGhlcjt2YXIgcD1xLml2c2FsdDt2YXIgcz1xLmRhdGE7dmFyIHc9aihyLHgscCk7dmFyIHY9dy5rZXloZXg7dmFyIHU9YihzLHIsdixwKTtyZXR1cm4gdX0sZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4OmZ1bmN0aW9uKHgscyxBLHQscil7dmFyIHA9XCJcIjtpZih0eXBlb2YgdD09XCJ1bmRlZmluZWRcInx8dD09bnVsbCl7dD1cIkFFUy0yNTYtQ0JDXCJ9aWYodHlwZW9mIGlbdF09PVwidW5kZWZpbmVkXCIpe3Rocm93IG5ldyBFcnJvcihcIktFWVVUSUwgdW5zdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIit0KX1pZih0eXBlb2Ygcj09XCJ1bmRlZmluZWRcInx8cj09bnVsbCl7dmFyIHY9aVt0XVtcIml2bGVuXCJdO3ZhciB1PW0odik7cj11LnRvVXBwZXJDYXNlKCl9dmFyIHo9aih0LEEscik7dmFyIHk9ei5rZXloZXg7dmFyIHc9aChzLHQseSxyKTt2YXIgcT13LnJlcGxhY2UoLyguezY0fSkvZyxcIiQxXFxyXFxuXCIpO3ZhciBwPVwiLS0tLS1CRUdJTiBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtwKz1cIlByb2MtVHlwZTogNCxFTkNSWVBURURcXHJcXG5cIjtwKz1cIkRFSy1JbmZvOiBcIit0K1wiLFwiK3IrXCJcXHJcXG5cIjtwKz1cIlxcclxcblwiO3ArPXE7cCs9XCJcXHJcXG4tLS0tLUVORCBcIit4K1wiIFBSSVZBVEUgS0VZLS0tLS1cXHJcXG5cIjtyZXR1cm4gcH0scGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4OmZ1bmN0aW9uKHkpe3ZhciBCPUFTTjFIRVg7dmFyIHo9Qi5nZXRDaGlsZElkeDt2YXIgdz1CLmdldFY7dmFyIHQ9e307dmFyIHI9eih5LDApO2lmKHIubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwKS5pdGVtcyAhPSAyOiBcIityLmxlbmd0aCl9dC5jaXBoZXJ0ZXh0PXcoeSxyWzFdKTt2YXIgQT16KHksclswXSk7aWYoQS5sZW5ndGghPTIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMCkuaXRlbXMgIT0gMjogXCIrQS5sZW5ndGgpfWlmKHcoeSxBWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGRcIil7dGhyb3cgbmV3IEVycm9yKFwidGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJFUzJcIil9dmFyIHA9eih5LEFbMV0pO2lmKEEubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMSkuaXRlbXMgIT0gMjogXCIrcC5sZW5ndGgpfXZhciBxPXooeSxwWzFdKTtpZihxLmxlbmd0aCE9Mil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMSkuaXRlbXMgIT0gMjogXCIrcS5sZW5ndGgpfWlmKHcoeSxxWzBdKSE9XCIyYTg2NDg4NmY3MGQwMzA3XCIpe3Rocm93XCJ0aGlzIG9ubHkgc3VwcG9ydHMgVHJpcGxlREVTXCJ9dC5lbmNyeXB0aW9uU2NoZW1lQWxnPVwiVHJpcGxlREVTXCI7dC5lbmNyeXB0aW9uU2NoZW1lSVY9dyh5LHFbMV0pO3ZhciBzPXooeSxwWzBdKTtpZihzLmxlbmd0aCE9Mil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMCkuaXRlbXMgIT0gMjogXCIrcy5sZW5ndGgpfWlmKHcoeSxzWzBdKSE9XCIyYTg2NDg4NmY3MGQwMTA1MGNcIil7dGhyb3cgbmV3IEVycm9yKFwidGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJLREYyXCIpfXZhciB4PXooeSxzWzFdKTtpZih4Lmxlbmd0aDwyKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMS4wLjEpLml0ZW1zIDwgMjogXCIreC5sZW5ndGgpfXQucGJrZGYyU2FsdD13KHkseFswXSk7dmFyIHU9dyh5LHhbMV0pO3RyeXt0LnBia2RmMkl0ZXI9cGFyc2VJbnQodSwxNil9Y2F0Y2godil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIGZvcm1hdCBwYmtkZjJJdGVyOiBcIit1KX1yZXR1cm4gdH0sZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtOmZ1bmN0aW9uKHUscCl7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1LnBia2RmMlNhbHQpO3ZhciBxPXUucGJrZGYySXRlcjt2YXIgcz1DcnlwdG9KUy5QQktERjIocCx0LHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOnF9KTt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTtyZXR1cm4gcn0sX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24oeCx5KXt2YXIgcj1wZW10b2hleCh4LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpO3ZhciBwPXRoaXMucGFyc2VIZXhPZkVuY3J5cHRlZFBLQ1M4KHIpO3ZhciB1PUtFWVVUSUwuZ2V0UEJLREYyS2V5SGV4RnJvbVBhcmFtKHAseSk7dmFyIHY9e307di5jaXBoZXJ0ZXh0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5jaXBoZXJ0ZXh0KTt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUpO3ZhciBzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocC5lbmNyeXB0aW9uU2NoZW1lSVYpO3ZhciB3PUNyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KHYsdCx7aXY6c30pO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHcpO3JldHVybiBxfSxnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU06ZnVuY3Rpb24ocyxxKXt2YXIgcD10aGlzLl9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNKHMscSk7dmFyIHI9dGhpcy5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgocCk7cmV0dXJuIHJ9LHBhcnNlUGxhaW5Qcml2YXRlUEtDUzhIZXg6ZnVuY3Rpb24ocyl7dmFyIHY9QVNOMUhFWDt2YXIgdT12LmdldENoaWxkSWR4O3ZhciB0PXYuZ2V0Vjt2YXIgcT17fTtxLmFsZ3BhcmFtPW51bGw7aWYocy5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgcGxhaW4gUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDEpXCIpfXZhciByPXUocywwKTtpZihyLmxlbmd0aDwzKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgcGxhaW4gUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDIpXCIpfWlmKHMuc3Vic3RyKHJbMV0sMikhPVwiMzBcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDAzKVwiKX12YXIgcD11KHMsclsxXSk7aWYocC5sZW5ndGghPTIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwNClcIil9aWYocy5zdWJzdHIocFswXSwyKSE9XCIwNlwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDUpXCIpfXEuYWxnb2lkPXQocyxwWzBdKTtpZihzLnN1YnN0cihwWzFdLDIpPT1cIjA2XCIpe3EuYWxncGFyYW09dChzLHBbMV0pfWlmKHMuc3Vic3RyKHJbMl0sMikhPVwiMDRcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDA2KVwiKX1xLmtleWlkeD12LmdldFZpZHgocyxyWzJdKTtyZXR1cm4gcX0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNOmZ1bmN0aW9uKHEpe3ZhciBwPXBlbXRvaGV4KHEsXCJQUklWQVRFIEtFWVwiKTt2YXIgcj10aGlzLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleChwKTtyZXR1cm4gcn0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4OmZ1bmN0aW9uKHApe3ZhciBxPXRoaXMucGFyc2VQbGFpblByaXZhdGVQS0NTOEhleChwKTt2YXIgcjtpZihxLmFsZ29pZD09XCIyYTg2NDg4NmY3MGQwMTAxMDFcIil7cj1uZXcgUlNBS2V5KCl9ZWxzZXtpZihxLmFsZ29pZD09XCIyYTg2NDhjZTM4MDQwMVwiKXtyPW5ldyBLSlVSLmNyeXB0by5EU0EoKX1lbHNle2lmKHEuYWxnb2lkPT1cIjJhODY0OGNlM2QwMjAxXCIpe3I9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBwcml2YXRlIGtleSBhbGdvcml0aG1cIil9fX1yLnJlYWRQS0NTOFBydktleUhleChwKTtyZXR1cm4gcn0sX2dldEtleUZyb21QdWJsaWNQS0NTOEhleDpmdW5jdGlvbihxKXt2YXIgcDt2YXIgcj1BU04xSEVYLmdldFZieUxpc3QocSwwLFswLDBdLFwiMDZcIik7aWYocj09PVwiMmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3A9bmV3IFJTQUtleSgpfWVsc2V7aWYocj09PVwiMmE4NjQ4Y2UzODA0MDFcIil7cD1uZXcgS0pVUi5jcnlwdG8uRFNBKCl9ZWxzZXtpZihyPT09XCIyYTg2NDhjZTNkMDIwMVwiKXtwPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSgpfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgUEtDUyM4IHB1YmxpYyBrZXkgaGV4XCIpfX19cC5yZWFkUEtDUzhQdWJLZXlIZXgocSk7cmV0dXJuIHB9LHBhcnNlUHVibGljUmF3UlNBS2V5SGV4OmZ1bmN0aW9uKHIpe3ZhciB1PUFTTjFIRVg7dmFyIHQ9dS5nZXRDaGlsZElkeDt2YXIgcz11LmdldFY7dmFyIHA9e307aWYoci5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMSlcIil9dmFyIHE9dChyLDApO2lmKHEubGVuZ3RoIT0yKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMilcIil9aWYoci5zdWJzdHIocVswXSwyKSE9XCIwMlwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMylcIil9cC5uPXMocixxWzBdKTtpZihyLnN1YnN0cihxWzFdLDIpIT1cIjAyXCIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDA0KVwiKX1wLmU9cyhyLHFbMV0pO3JldHVybiBwfSxwYXJzZVB1YmxpY1BLQ1M4SGV4OmZ1bmN0aW9uKHQpe3ZhciB2PUFTTjFIRVg7dmFyIHU9di5nZXRDaGlsZElkeDt2YXIgcz12LmdldFY7dmFyIHE9e307cS5hbGdwYXJhbT1udWxsO3ZhciByPXUodCwwKTtpZihyLmxlbmd0aCE9Mil7dGhyb3cgbmV3IEVycm9yKFwib3V0ZXIgREVSU2VxdWVuY2Ugc2hhbGwgaGF2ZSAyIGVsZW1lbnRzOiBcIityLmxlbmd0aCl9dmFyIHc9clswXTtpZih0LnN1YnN0cih3LDIpIT1cIjMwXCIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAxKVwiKX12YXIgcD11KHQsdyk7aWYocC5sZW5ndGghPTIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAyKVwiKX1pZih0LnN1YnN0cihwWzBdLDIpIT1cIjA2XCIpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAzKVwiKX1xLmFsZ29pZD1zKHQscFswXSk7aWYodC5zdWJzdHIocFsxXSwyKT09XCIwNlwiKXtxLmFsZ3BhcmFtPXModCxwWzFdKX1lbHNle2lmKHQuc3Vic3RyKHBbMV0sMik9PVwiMzBcIil7cS5hbGdwYXJhbT17fTtxLmFsZ3BhcmFtLnA9di5nZXRWYnlMaXN0KHQscFsxXSxbMF0sXCIwMlwiKTtxLmFsZ3BhcmFtLnE9di5nZXRWYnlMaXN0KHQscFsxXSxbMV0sXCIwMlwiKTtxLmFsZ3BhcmFtLmc9di5nZXRWYnlMaXN0KHQscFsxXSxbMl0sXCIwMlwiKX19aWYodC5zdWJzdHIoclsxXSwyKSE9XCIwM1wiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwNClcIil9cS5rZXk9cyh0LHJbMV0pLnN1YnN0cigyKTtyZXR1cm4gcX0sfX0oKTtLRVlVVElMLmdldEtleT1mdW5jdGlvbihsLGssbil7dmFyIEc9QVNOMUhFWCxMPUcuZ2V0Q2hpbGRJZHgsdj1HLmdldFYsZD1HLmdldFZieUxpc3QsYz1LSlVSLmNyeXB0byxpPWMuRUNEU0EsQz1jLkRTQSx3PVJTQUtleSxNPXBlbXRvaGV4LEY9S0VZVVRJTDtpZih0eXBlb2YgdyE9XCJ1bmRlZmluZWRcIiYmbCBpbnN0YW5jZW9mIHcpe3JldHVybiBsfWlmKHR5cGVvZiBpIT1cInVuZGVmaW5lZFwiJiZsIGluc3RhbmNlb2YgaSl7cmV0dXJuIGx9aWYodHlwZW9mIEMhPVwidW5kZWZpbmVkXCImJmwgaW5zdGFuY2VvZiBDKXtyZXR1cm4gbH1pZihsLmN1cnZlIT09dW5kZWZpbmVkJiZsLnh5IT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3JldHVybiBuZXcgaSh7cHViOmwueHksY3VydmU6bC5jdXJ2ZX0pfWlmKGwuY3VydmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7cmV0dXJuIG5ldyBpKHtwcnY6bC5kLGN1cnZlOmwuY3VydmV9KX1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhsLm4sbC5lKTtyZXR1cm4gUH1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCYmbC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZHAhPT11bmRlZmluZWQmJmwuZHEhPT11bmRlZmluZWQmJmwuY28hPT11bmRlZmluZWQmJmwucWk9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlRXgobC5uLGwuZSxsLmQsbC5wLGwucSxsLmRwLGwuZHEsbC5jbyk7cmV0dXJuIFB9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQmJmwucD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGUobC5uLGwuZSxsLmQpO3JldHVybiBQfWlmKGwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmchPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC54PT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgQygpO1Auc2V0UHVibGljKGwucCxsLnEsbC5nLGwueSk7cmV0dXJuIFB9aWYobC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZyE9PXVuZGVmaW5lZCYmbC55IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQpe3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKGwucCxsLnEsbC5nLGwueSxsLngpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkJiZsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5kcCE9PXVuZGVmaW5lZCYmbC5kcSE9PXVuZGVmaW5lZCYmbC5xaSE9PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGVFeChiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSxiNjR1dG9oZXgobC5wKSxiNjR1dG9oZXgobC5xKSxiNjR1dG9oZXgobC5kcCksYjY0dXRvaGV4KGwuZHEpLGI2NHV0b2hleChsLnFpKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZShiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7ai5zZXRQdWJsaWNLZXlIZXgodSk7cmV0dXJuIGp9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7dmFyIGI9KFwiMDAwMDAwMDAwMFwiK2I2NHV0b2hleChsLmQpKS5zbGljZSgtdCk7ai5zZXRQdWJsaWNLZXlIZXgodSk7ai5zZXRQcml2YXRlS2V5SGV4KGIpO3JldHVybiBqfWlmKG49PT1cInBrY3M1cHJ2XCIpe3ZhciBKPWwsRz1BU04xSEVYLE4sUDtOPUwoSiwwKTtpZihOLmxlbmd0aD09PTkpe1A9bmV3IHcoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle2lmKE4ubGVuZ3RoPT09Nil7UD1uZXcgQygpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7aWYoTi5sZW5ndGg+MiYmSi5zdWJzdHIoTlsxXSwyKT09PVwiMDRcIil7UD1uZXcgaSgpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgUEtDUyMxLzUgaGV4YWRlY2ltYWwga2V5XCIpfX19cmV0dXJuIFB9aWYobj09PVwicGtjczhwcnZcIil7dmFyIFA9Ri5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgobCk7cmV0dXJuIFB9aWYobj09PVwicGtjczhwdWJcIil7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChsKX1pZihuPT09XCJ4NTA5cHViXCIpe3JldHVybiBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGwpfWlmKGwuaW5kZXhPZihcIi1FTkQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFg1MDkgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFRSVVNURUQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xKXtyZXR1cm4gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydFBFTShsKX1pZihsLmluZGV4T2YoXCItRU5EIFBVQkxJQyBLRVktXCIpIT0tMSl7dmFyIE89cGVtdG9oZXgobCxcIlBVQkxJQyBLRVlcIik7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChPKX1pZihsLmluZGV4T2YoXCItRU5EIFJTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKT09LTEpe3ZhciBtPU0obCxcIlJTQSBQUklWQVRFIEtFWVwiKTtyZXR1cm4gRi5nZXRLZXkobSxudWxsLFwicGtjczVwcnZcIil9aWYobC5pbmRleE9mKFwiLUVORCBEU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgST1NKGwsXCJEU0EgUFJJVkFURSBLRVlcIik7dmFyIEU9ZChJLDAsWzFdLFwiMDJcIik7dmFyIEQ9ZChJLDAsWzJdLFwiMDJcIik7dmFyIEs9ZChJLDAsWzNdLFwiMDJcIik7dmFyIHI9ZChJLDAsWzRdLFwiMDJcIik7dmFyIHM9ZChJLDAsWzVdLFwiMDJcIik7dmFyIFA9bmV3IEMoKTtQLnNldFByaXZhdGUobmV3IEJpZ0ludGVnZXIoRSwxNiksbmV3IEJpZ0ludGVnZXIoRCwxNiksbmV3IEJpZ0ludGVnZXIoSywxNiksbmV3IEJpZ0ludGVnZXIociwxNiksbmV3IEJpZ0ludGVnZXIocywxNikpO3JldHVybiBQfWlmKGwuaW5kZXhPZihcIi1FTkQgRUMgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgbT1NKGwsXCJFQyBQUklWQVRFIEtFWVwiKTtyZXR1cm4gRi5nZXRLZXkobSxudWxsLFwicGtjczVwcnZcIil9aWYobC5pbmRleE9mKFwiLUVORCBQUklWQVRFIEtFWS1cIikhPS0xKXtyZXR1cm4gRi5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU0obCl9aWYobC5pbmRleE9mKFwiLUVORCBSU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgbz1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBIPW5ldyBSU0FLZXkoKTtILnJlYWRQS0NTNVBydktleUhleChvKTtyZXR1cm4gSH1pZihsLmluZGV4T2YoXCItRU5EIEVDIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpIT0tMSl7dmFyIEk9Ri5nZXREZWNyeXB0ZWRLZXlIZXgobCxrKTt2YXIgUD1kKEksMCxbMV0sXCIwNFwiKTt2YXIgZj1kKEksMCxbMiwwXSxcIjA2XCIpO3ZhciBBPWQoSSwwLFszLDBdLFwiMDNcIikuc3Vic3RyKDIpO3ZhciBlPVwiXCI7aWYoS0pVUi5jcnlwdG8uT0lELm9pZGhleDJuYW1lW2ZdIT09dW5kZWZpbmVkKXtlPUtKVVIuY3J5cHRvLk9JRC5vaWRoZXgybmFtZVtmXX1lbHNle3Rocm93IG5ldyBFcnJvcihcInVuZGVmaW5lZCBPSUQoaGV4KSBpbiBLSlVSLmNyeXB0by5PSUQ6IFwiK2YpfXZhciBqPW5ldyBpKHtjdXJ2ZTplfSk7ai5zZXRQdWJsaWNLZXlIZXgoQSk7ai5zZXRQcml2YXRlS2V5SGV4KFApO2ouaXNQdWJsaWM9ZmFsc2U7cmV0dXJuIGp9aWYobC5pbmRleE9mKFwiLUVORCBEU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgST1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBFPWQoSSwwLFsxXSxcIjAyXCIpO3ZhciBEPWQoSSwwLFsyXSxcIjAyXCIpO3ZhciBLPWQoSSwwLFszXSxcIjAyXCIpO3ZhciByPWQoSSwwLFs0XSxcIjAyXCIpO3ZhciBzPWQoSSwwLFs1XSxcIjAyXCIpO3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKG5ldyBCaWdJbnRlZ2VyKEUsMTYpLG5ldyBCaWdJbnRlZ2VyKEQsMTYpLG5ldyBCaWdJbnRlZ2VyKEssMTYpLG5ldyBCaWdJbnRlZ2VyKHIsMTYpLG5ldyBCaWdJbnRlZ2VyKHMsMTYpKTtyZXR1cm4gUH1pZihsLmluZGV4T2YoXCItRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS1cIikhPS0xKXtyZXR1cm4gRi5nZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU0obCxrKX10aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGFyZ3VtZW50XCIpfTtLRVlVVElMLmdlbmVyYXRlS2V5cGFpcj1mdW5jdGlvbihhLGMpe2lmKGE9PVwiUlNBXCIpe3ZhciBiPWM7dmFyIGg9bmV3IFJTQUtleSgpO2guZ2VuZXJhdGUoYixcIjEwMDAxXCIpO2guaXNQcml2YXRlPXRydWU7aC5pc1B1YmxpYz10cnVlO3ZhciBmPW5ldyBSU0FLZXkoKTt2YXIgZT1oLm4udG9TdHJpbmcoMTYpO3ZhciBpPWguZS50b1N0cmluZygxNik7Zi5zZXRQdWJsaWMoZSxpKTtmLmlzUHJpdmF0ZT1mYWxzZTtmLmlzUHVibGljPXRydWU7dmFyIGs9e307ay5wcnZLZXlPYmo9aDtrLnB1YktleU9iaj1mO3JldHVybiBrfWVsc2V7aWYoYT09XCJFQ1wiKXt2YXIgZD1jO3ZhciBnPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6ZH0pO3ZhciBqPWcuZ2VuZXJhdGVLZXlQYWlySGV4KCk7dmFyIGg9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTpkfSk7aC5zZXRQdWJsaWNLZXlIZXgoai5lY3B1YmhleCk7aC5zZXRQcml2YXRlS2V5SGV4KGouZWNwcnZoZXgpO2guaXNQcml2YXRlPXRydWU7aC5pc1B1YmxpYz1mYWxzZTt2YXIgZj1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOmR9KTtmLnNldFB1YmxpY0tleUhleChqLmVjcHViaGV4KTtmLmlzUHJpdmF0ZT1mYWxzZTtmLmlzUHVibGljPXRydWU7dmFyIGs9e307ay5wcnZLZXlPYmo9aDtrLnB1YktleU9iaj1mO3JldHVybiBrfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBhbGdvcml0aG06IFwiK2EpfX19O0tFWVVUSUwuZ2V0UEVNPWZ1bmN0aW9uKGIsRCx5LG0scSxqKXt2YXIgRj1LSlVSLGs9Ri5hc24xLHo9ay5ERVJPYmplY3RJZGVudGlmaWVyLGY9ay5ERVJJbnRlZ2VyLGw9ay5BU04xVXRpbC5uZXdPYmplY3QsYT1rLng1MDksQz1hLlN1YmplY3RQdWJsaWNLZXlJbmZvLGU9Ri5jcnlwdG8sdT1lLkRTQSxyPWUuRUNEU0Esbj1SU0FLZXk7ZnVuY3Rpb24gQShzKXt2YXIgRz1sKHtzZXE6W3tcImludFwiOjB9LHtcImludFwiOntiaWdpbnQ6cy5ufX0se1wiaW50XCI6cy5lfSx7XCJpbnRcIjp7YmlnaW50OnMuZH19LHtcImludFwiOntiaWdpbnQ6cy5wfX0se1wiaW50XCI6e2JpZ2ludDpzLnF9fSx7XCJpbnRcIjp7YmlnaW50OnMuZG1wMX19LHtcImludFwiOntiaWdpbnQ6cy5kbXExfX0se1wiaW50XCI6e2JpZ2ludDpzLmNvZWZmfX1dfSk7cmV0dXJuIEd9ZnVuY3Rpb24gQihHKXt2YXIgcz1sKHtzZXE6W3tcImludFwiOjF9LHtvY3RzdHI6e2hleDpHLnBydktleUhleH19LHt0YWc6W1wiYTBcIix0cnVlLHtvaWQ6e25hbWU6Ry5jdXJ2ZU5hbWV9fV19LHt0YWc6W1wiYTFcIix0cnVlLHtiaXRzdHI6e2hleDpcIjAwXCIrRy5wdWJLZXlIZXh9fV19XX0pO3JldHVybiBzfWZ1bmN0aW9uIHgocyl7dmFyIEc9bCh7c2VxOlt7XCJpbnRcIjowfSx7XCJpbnRcIjp7YmlnaW50OnMucH19LHtcImludFwiOntiaWdpbnQ6cy5xfX0se1wiaW50XCI6e2JpZ2ludDpzLmd9fSx7XCJpbnRcIjp7YmlnaW50OnMueX19LHtcImludFwiOntiaWdpbnQ6cy54fX1dfSk7cmV0dXJuIEd9aWYoKChuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2Ygbil8fCh1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSl8fChyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgcikpJiZiLmlzUHVibGljPT10cnVlJiYoRD09PXVuZGVmaW5lZHx8RD09XCJQS0NTOFBVQlwiKSl7dmFyIEU9bmV3IEMoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJQVUJMSUMgS0VZXCIpfWlmKEQ9PVwiUEtDUzFQUlZcIiYmbiE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPUEoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJSU0EgUFJJVkFURSBLRVlcIil9aWYoRD09XCJQS0NTMVBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGk9bmV3IHooe25hbWU6Yi5jdXJ2ZU5hbWV9KTt2YXIgdj1pLmdldEVuY29kZWRIZXgoKTt2YXIgaD1CKGIpO3ZhciB0PWguZ2V0RW5jb2RlZEhleCgpO3ZhciBwPVwiXCI7cCs9aGV4dG9wZW0odixcIkVDIFBBUkFNRVRFUlNcIik7cCs9aGV4dG9wZW0odCxcIkVDIFBSSVZBVEUgS0VZXCIpO3JldHVybiBwfWlmKEQ9PVwiUEtDUzFQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPXgoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJEU0EgUFJJVkFURSBLRVlcIil9aWYoRD09XCJQS0NTNVBSVlwiJiZuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QShiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiUlNBXCIsdyx5LG0sail9aWYoRD09XCJQS0NTNVBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QihiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiRUNcIix3LHksbSxqKX1pZihEPT1cIlBLQ1M1UFJWXCImJnUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1JiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT14KGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJEU0FcIix3LHksbSxqKX12YXIgbz1mdW5jdGlvbihHLHMpe3ZhciBJPWMoRyxzKTt2YXIgSD1uZXcgbCh7c2VxOlt7c2VxOlt7b2lkOntuYW1lOlwicGtjczVQQkVTMlwifX0se3NlcTpbe3NlcTpbe29pZDp7bmFtZTpcInBrY3M1UEJLREYyXCJ9fSx7c2VxOlt7b2N0c3RyOntoZXg6SS5wYmtkZjJTYWx0fX0se1wiaW50XCI6SS5wYmtkZjJJdGVyfV19XX0se3NlcTpbe29pZDp7bmFtZTpcImRlcy1FREUzLUNCQ1wifX0se29jdHN0cjp7aGV4OkkuZW5jcnlwdGlvblNjaGVtZUlWfX1dfV19XX0se29jdHN0cjp7aGV4OkkuY2lwaGVydGV4dH19XX0pO3JldHVybiBILmdldEVuY29kZWRIZXgoKX07dmFyIGM9ZnVuY3Rpb24oTixPKXt2YXIgSD0xMDA7dmFyIE09Q3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oOCk7dmFyIEw9XCJERVMtRURFMy1DQkNcIjt2YXIgcz1DcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbSg4KTt2YXIgST1DcnlwdG9KUy5QQktERjIoTyxNLHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOkh9KTt2YXIgSj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKE4pO3ZhciBLPUNyeXB0b0pTLlRyaXBsZURFUy5lbmNyeXB0KEosSSx7aXY6c30pK1wiXCI7dmFyIEc9e307Ry5jaXBoZXJ0ZXh0PUs7Ry5wYmtkZjJTYWx0PUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KE0pO0cucGJrZGYySXRlcj1IO0cuZW5jcnlwdGlvblNjaGVtZUFsZz1MO0cuZW5jcnlwdGlvblNjaGVtZUlWPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHMpO3JldHVybiBHfTtpZihEPT1cIlBLQ1M4UFJWXCImJm4hPXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1BKGIpO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcInJzYUVuY3J5cHRpb25cIn19LHtcIm51bGxcIjp0cnVlfV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19aWYoRD09XCJQS0NTOFBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPW5ldyBsKHtzZXE6W3tcImludFwiOjF9LHtvY3RzdHI6e2hleDpiLnBydktleUhleH19LHt0YWc6W1wiYTFcIix0cnVlLHtiaXRzdHI6e2hleDpcIjAwXCIrYi5wdWJLZXlIZXh9fV19XX0pO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcImVjUHVibGljS2V5XCJ9fSx7b2lkOntuYW1lOmIuY3VydmVOYW1lfX1dfSx7b2N0c3RyOntoZXg6ZH19XX0pO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpe3JldHVybiBoZXh0b3BlbSh3LFwiUFJJVkFURSBLRVlcIil9ZWxzZXt2YXIgdD1vKHcseSk7cmV0dXJuIGhleHRvcGVtKHQsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIil9fWlmKEQ9PVwiUEtDUzhQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1uZXcgZih7YmlnaW50OmIueH0pO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcImRzYVwifX0se3NlcTpbe1wiaW50XCI6e2JpZ2ludDpiLnB9fSx7XCJpbnRcIjp7YmlnaW50OmIucX19LHtcImludFwiOntiaWdpbnQ6Yi5nfX1dfV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgb2JqZWN0IG5vciBmb3JtYXRcIil9O0tFWVVUSUwuZ2V0S2V5RnJvbUNTUlBFTT1mdW5jdGlvbihiKXt2YXIgYT1wZW10b2hleChiLFwiQ0VSVElGSUNBVEUgUkVRVUVTVFwiKTt2YXIgYz1LRVlVVElMLmdldEtleUZyb21DU1JIZXgoYSk7cmV0dXJuIGN9O0tFWVVUSUwuZ2V0S2V5RnJvbUNTUkhleD1mdW5jdGlvbihhKXt2YXIgYz1LRVlVVElMLnBhcnNlQ1NSSGV4KGEpO3ZhciBiPUtFWVVUSUwuZ2V0S2V5KGMucDhwdWJrZXloZXgsbnVsbCxcInBrY3M4cHViXCIpO3JldHVybiBifTtLRVlVVElMLnBhcnNlQ1NSSGV4PWZ1bmN0aW9uKGQpe3ZhciBpPUFTTjFIRVg7dmFyIGY9aS5nZXRDaGlsZElkeDt2YXIgYz1pLmdldFRMVjt2YXIgYj17fTt2YXIgZz1kO2lmKGcuc3Vic3RyKDAsMikhPVwiMzBcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIENTUihjb2RlOjAwMSlcIil9dmFyIGU9ZihnLDApO2lmKGUubGVuZ3RoPDEpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBDU1IoY29kZTowMDIpXCIpfWlmKGcuc3Vic3RyKGVbMF0sMikhPVwiMzBcIil7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIENTUihjb2RlOjAwMylcIil9dmFyIGE9ZihnLGVbMF0pO2lmKGEubGVuZ3RoPDMpe3Rocm93IG5ldyBFcnJvcihcIm1hbGZvcm1lZCBDU1IoY29kZTowMDQpXCIpfWIucDhwdWJrZXloZXg9YyhnLGFbMl0pO3JldHVybiBifTtLRVlVVElMLmdldEtleUlEPWZ1bmN0aW9uKGYpe3ZhciBjPUtFWVVUSUw7dmFyIGU9QVNOMUhFWDtpZih0eXBlb2YgZj09PVwic3RyaW5nXCImJmYuaW5kZXhPZihcIkJFR0lOIFwiKSE9LTEpe2Y9Yy5nZXRLZXkoZil9dmFyIGQ9cGVtdG9oZXgoYy5nZXRQRU0oZikpO3ZhciBiPWUuZ2V0SWR4YnlMaXN0KGQsMCxbMV0pO3ZhciBhPWUuZ2V0VihkLGIpLnN1YnN0cmluZygyKTtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGEsXCJzaGExXCIpfTtLRVlVVElMLmdldEpXS0Zyb21LZXk9ZnVuY3Rpb24oZCl7dmFyIGI9e307aWYoZCBpbnN0YW5jZW9mIFJTQUtleSYmZC5pc1ByaXZhdGUpe2Iua3R5PVwiUlNBXCI7Yi5uPWhleHRvYjY0dShkLm4udG9TdHJpbmcoMTYpKTtiLmU9aGV4dG9iNjR1KGQuZS50b1N0cmluZygxNikpO2IuZD1oZXh0b2I2NHUoZC5kLnRvU3RyaW5nKDE2KSk7Yi5wPWhleHRvYjY0dShkLnAudG9TdHJpbmcoMTYpKTtiLnE9aGV4dG9iNjR1KGQucS50b1N0cmluZygxNikpO2IuZHA9aGV4dG9iNjR1KGQuZG1wMS50b1N0cmluZygxNikpO2IuZHE9aGV4dG9iNjR1KGQuZG1xMS50b1N0cmluZygxNikpO2IucWk9aGV4dG9iNjR1KGQuY29lZmYudG9TdHJpbmcoMTYpKTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBSU0FLZXkmJmQuaXNQdWJsaWMpe2Iua3R5PVwiUlNBXCI7Yi5uPWhleHRvYjY0dShkLm4udG9TdHJpbmcoMTYpKTtiLmU9aGV4dG9iNjR1KGQuZS50b1N0cmluZygxNikpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBJiZkLmlzUHJpdmF0ZSl7dmFyIGE9ZC5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lKCk7aWYoYSE9PVwiUC0yNTZcIiYmYSE9PVwiUC0zODRcIil7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithKX12YXIgYz1kLmdldFB1YmxpY0tleVhZSGV4KCk7Yi5rdHk9XCJFQ1wiO2IuY3J2PWE7Yi54PWhleHRvYjY0dShjLngpO2IueT1oZXh0b2I2NHUoYy55KTtiLmQ9aGV4dG9iNjR1KGQucHJ2S2V5SGV4KTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSYmZC5pc1B1YmxpYyl7dmFyIGE9ZC5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lKCk7aWYoYSE9PVwiUC0yNTZcIiYmYSE9PVwiUC0zODRcIil7dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgY3VydmUgbmFtZSBmb3IgSldUOiBcIithKX12YXIgYz1kLmdldFB1YmxpY0tleVhZSGV4KCk7Yi5rdHk9XCJFQ1wiO2IuY3J2PWE7Yi54PWhleHRvYjY0dShjLngpO2IueT1oZXh0b2I2NHUoYy55KTtyZXR1cm4gYn19fX10aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGtleSBvYmplY3RcIil9O1xuUlNBS2V5LmdldFBvc0FycmF5T2ZDaGlsZHJlbkZyb21IZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIEFTTjFIRVguZ2V0Q2hpbGRJZHgoYSwwKX07UlNBS2V5LmdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleD1mdW5jdGlvbihmKXt2YXIgbj1BU04xSEVYO3ZhciBpPW4uZ2V0Vjt2YXIgaz1SU0FLZXkuZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleChmKTt2YXIgZT1pKGYsa1swXSk7dmFyIGo9aShmLGtbMV0pO3ZhciBiPWkoZixrWzJdKTt2YXIgYz1pKGYsa1szXSk7dmFyIGg9aShmLGtbNF0pO3ZhciBnPWkoZixrWzVdKTt2YXIgbT1pKGYsa1s2XSk7dmFyIGw9aShmLGtbN10pO3ZhciBkPWkoZixrWzhdKTt2YXIgaz1uZXcgQXJyYXkoKTtrLnB1c2goZSxqLGIsYyxoLGcsbSxsLGQpO3JldHVybiBrfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZz1mdW5jdGlvbihkKXt2YXIgYz1wZW10b2hleChkKTt2YXIgYj1SU0FLZXkuZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4KGMpO3RoaXMuc2V0UHJpdmF0ZUV4KGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10sYls4XSl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M1UHJ2S2V5SGV4PWZ1bmN0aW9uKGMpe3ZhciBiPVJTQUtleS5nZXRIZXhWYWx1ZUFycmF5T2ZDaGlsZHJlbkZyb21IZXgoYyk7dGhpcy5zZXRQcml2YXRlRXgoYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdLGJbNl0sYls3XSxiWzhdKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzhQcnZLZXlIZXg9ZnVuY3Rpb24oZSl7dmFyIGMsaSxrLGIsYSxmLGQsajt2YXIgbT1BU04xSEVYO3ZhciBsPW0uZ2V0VmJ5TGlzdEV4O2lmKG0uaXNBU04xSEVYKGUpPT09ZmFsc2Upe3Rocm93IG5ldyBFcnJvcihcIm5vdCBBU04uMSBoZXggc3RyaW5nXCIpfXRyeXtjPWwoZSwwLFsyLDAsMV0sXCIwMlwiKTtpPWwoZSwwLFsyLDAsMl0sXCIwMlwiKTtrPWwoZSwwLFsyLDAsM10sXCIwMlwiKTtiPWwoZSwwLFsyLDAsNF0sXCIwMlwiKTthPWwoZSwwLFsyLDAsNV0sXCIwMlwiKTtmPWwoZSwwLFsyLDAsNl0sXCIwMlwiKTtkPWwoZSwwLFsyLDAsN10sXCIwMlwiKTtqPWwoZSwwLFsyLDAsOF0sXCIwMlwiKX1jYXRjaChnKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUEtDUyM4IHBsYWluIFJTQSBwcml2YXRlIGtleVwiKX10aGlzLnNldFByaXZhdGVFeChjLGksayxiLGEsZixkLGopfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTNVB1YktleUhleD1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBiPWUuZ2V0VjtpZihlLmlzQVNOMUhFWChjKT09PWZhbHNlKXt0aHJvdyBuZXcgRXJyb3IoXCJrZXlIZXggaXMgbm90IEFTTi4xIGhleCBzdHJpbmdcIil9dmFyIGE9ZS5nZXRDaGlsZElkeChjLDApO2lmKGEubGVuZ3RoIT09Mnx8Yy5zdWJzdHIoYVswXSwyKSE9PVwiMDJcInx8Yy5zdWJzdHIoYVsxXSwyKSE9PVwiMDJcIil7dGhyb3cgbmV3IEVycm9yKFwid3JvbmcgaGV4IGZvciBQS0NTIzUgcHVibGljIGtleVwiKX12YXIgZj1iKGMsYVswXSk7dmFyIGQ9YihjLGFbMV0pO3RoaXMuc2V0UHVibGljKGYsZCl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKGIpe3ZhciBjPUFTTjFIRVg7aWYoYy5pc0FTTjFIRVgoYik9PT1mYWxzZSl7dGhyb3cgbmV3IEVycm9yKFwibm90IEFTTi4xIGhleCBzdHJpbmdcIil9aWYoYy5nZXRUTFZieUxpc3RFeChiLDAsWzAsMF0pIT09XCIwNjA5MmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3Rocm93IG5ldyBFcnJvcihcIm5vdCBQS0NTOCBSU0EgcHVibGljIGtleVwiKX12YXIgYT1jLmdldFRMVmJ5TGlzdEV4KGIsMCxbMSwwXSk7dGhpcy5yZWFkUEtDUzVQdWJLZXlIZXgoYSl9O1JTQUtleS5wcm90b3R5cGUucmVhZENlcnRQdWJLZXlIZXg9ZnVuY3Rpb24oYixkKXt2YXIgYSxjO2E9bmV3IFg1MDkoKTthLnJlYWRDZXJ0SGV4KGIpO2M9YS5nZXRQdWJsaWNLZXlIZXgoKTt0aGlzLnJlYWRQS0NTOFB1YktleUhleChjKX07XG52YXIgX1JFX0hFWERFQ09OTFk9bmV3IFJlZ0V4cChcIlteMC05YS1mXVwiLFwiZ2lcIik7ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyhkLGUsYSl7dmFyIGI9ZnVuY3Rpb24oZil7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhmLGEpfTt2YXIgYz1iKGQpO3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmdldFBhZGRlZERpZ2VzdEluZm9IZXgoYyxhLGUpfWZ1bmN0aW9uIF96ZXJvUGFkZGluZ09mU2lnbmF0dXJlKGUsZCl7dmFyIGM9XCJcIjt2YXIgYT1kLzQtZS5sZW5ndGg7Zm9yKHZhciBiPTA7YjxhO2IrKyl7Yz1jK1wiMFwifXJldHVybiBjK2V9UlNBS2V5LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGQsYSl7dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhlLGEpfTt2YXIgYz1iKGQpO3JldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2goYyxhKX07UlNBS2V5LnByb3RvdHlwZS5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGUsYyl7dmFyIGY9S0pVUi5jcnlwdG8uVXRpbC5nZXRQYWRkZWREaWdlc3RJbmZvSGV4KGUsYyx0aGlzLm4uYml0TGVuZ3RoKCkpO3ZhciBiPXBhcnNlQmlnSW50KGYsMTYpO3ZhciBkPXRoaXMuZG9Qcml2YXRlKGIpO3ZhciBhPWQudG9TdHJpbmcoMTYpO3JldHVybiBfemVyb1BhZGRpbmdPZlNpZ25hdHVyZShhLHRoaXMubi5iaXRMZW5ndGgoKSl9O2Z1bmN0aW9uIHBzc19tZ2YxX3N0cihjLGEsZSl7dmFyIGI9XCJcIixkPTA7d2hpbGUoYi5sZW5ndGg8YSl7Yis9aGV4dG9yc3RyKGUocnN0cnRvaGV4KGMrU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsWyhkJjQyNzgxOTAwODApPj4yNCwoZCYxNjcxMTY4MCk+PjE2LChkJjY1MjgwKT4+OCxkJjI1NV0pKSkpO2QrPTF9cmV0dXJuIGJ9UlNBS2V5LnByb3RvdHlwZS5zaWduUFNTPWZ1bmN0aW9uKGUsYSxkKXt2YXIgYz1mdW5jdGlvbihmKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGYsYSl9O3ZhciBiPWMocnN0cnRvaGV4KGUpKTtpZihkPT09dW5kZWZpbmVkKXtkPS0xfXJldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1MoYixhLGQpfTtSU0FLZXkucHJvdG90eXBlLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1M9ZnVuY3Rpb24obCxhLGspe3ZhciBiPWhleHRvcnN0cihsKTt2YXIgZz1iLmxlbmd0aDt2YXIgbT10aGlzLm4uYml0TGVuZ3RoKCktMTt2YXIgYz1NYXRoLmNlaWwobS84KTt2YXIgZDt2YXIgbz1mdW5jdGlvbihpKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGksYSl9O2lmKGs9PT0tMXx8az09PXVuZGVmaW5lZCl7az1nfWVsc2V7aWYoaz09PS0yKXtrPWMtZy0yfWVsc2V7aWYoazwtMil7dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzYWx0IGxlbmd0aFwiKX19fWlmKGM8KGcraysyKSl7dGhyb3cgbmV3IEVycm9yKFwiZGF0YSB0b28gbG9uZ1wiKX12YXIgZj1cIlwiO2lmKGs+MCl7Zj1uZXcgQXJyYXkoayk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhmKTtmPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGYpfXZhciBuPWhleHRvcnN0cihvKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitiK2YpKSk7dmFyIGo9W107Zm9yKGQ9MDtkPGMtay1nLTI7ZCs9MSl7altkXT0wfXZhciBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGopK1wiXFx4MDFcIitmO3ZhciBoPXBzc19tZ2YxX3N0cihuLGUubGVuZ3RoLG8pO3ZhciBxPVtdO2ZvcihkPTA7ZDxlLmxlbmd0aDtkKz0xKXtxW2RdPWUuY2hhckNvZGVBdChkKV5oLmNoYXJDb2RlQXQoZCl9dmFyIHA9KDY1MjgwPj4oOCpjLW0pKSYyNTU7cVswXSY9fnA7Zm9yKGQ9MDtkPGc7ZCsrKXtxLnB1c2gobi5jaGFyQ29kZUF0KGQpKX1xLnB1c2goMTg4KTtyZXR1cm4gX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUodGhpcy5kb1ByaXZhdGUobmV3IEJpZ0ludGVnZXIocSkpLnRvU3RyaW5nKDE2KSx0aGlzLm4uYml0TGVuZ3RoKCkpfTtmdW5jdGlvbiBfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkoYSxkLGMpe3ZhciBiPW5ldyBSU0FLZXkoKTtiLnNldFB1YmxpYyhkLGMpO3ZhciBlPWIuZG9QdWJsaWMoYSk7cmV0dXJuIGV9ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4RGlnZXN0SW5mb0Zyb21TaWcoYSxjLGIpe3ZhciBlPV9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSShhLGMsYik7dmFyIGQ9ZS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTtyZXR1cm4gZH1mdW5jdGlvbiBfcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhmKXtmb3IodmFyIGUgaW4gS0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRCl7dmFyIGQ9S0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRFtlXTt2YXIgYj1kLmxlbmd0aDtpZihmLnN1YnN0cmluZygwLGIpPT1kKXt2YXIgYz1bZSxmLnN1YnN0cmluZyhiKV07cmV0dXJuIGN9fXJldHVybltdfVJTQUtleS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGYsbCl7bD1sLnRvTG93ZXJDYXNlKCk7aWYobC5tYXRjaCgvXlswLTlhLWZdKyQvKT09bnVsbCl7cmV0dXJuIGZhbHNlfXZhciBiPXBhcnNlQmlnSW50KGwsMTYpO3ZhciBrPXRoaXMubi5iaXRMZW5ndGgoKTtpZihiLmJpdExlbmd0aCgpPmspe3JldHVybiBmYWxzZX12YXIgaj10aGlzLmRvUHVibGljKGIpO3ZhciBpPWoudG9TdHJpbmcoMTYpO2lmKGkubGVuZ3RoKzMhPWsvNCl7cmV0dXJuIGZhbHNlfXZhciBlPWkucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgZz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhlKTtpZihnLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWdbMF07dmFyIGg9Z1sxXTt2YXIgYT1mdW5jdGlvbihtKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoU3RyaW5nKG0sZCl9O3ZhciBjPWEoZik7cmV0dXJuKGg9PWMpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihlLGEpe2lmKGEubGVuZ3RoIT1NYXRoLmNlaWwodGhpcy5uLmJpdExlbmd0aCgpLzQpKXtyZXR1cm4gZmFsc2V9dmFyIGI9cGFyc2VCaWdJbnQoYSwxNik7aWYoYi5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiAwfXZhciBoPXRoaXMuZG9QdWJsaWMoYik7dmFyIGc9aC50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTt2YXIgYz1fcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhnKTtpZihjLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfXZhciBkPWNbMF07dmFyIGY9Y1sxXTtyZXR1cm4oZj09ZSl9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5UFNTPWZ1bmN0aW9uKGMsYixhLGYpe3ZhciBlPWZ1bmN0aW9uKGcpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoZyxhKX07dmFyIGQ9ZShyc3RydG9oZXgoYykpO2lmKGY9PT11bmRlZmluZWQpe2Y9LTF9cmV0dXJuIHRoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTKGQsYixhLGYpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUz1mdW5jdGlvbihmLHMsbCxjKXtpZihzLmxlbmd0aCE9TWF0aC5jZWlsKHRoaXMubi5iaXRMZW5ndGgoKS80KSl7cmV0dXJuIGZhbHNlfXZhciBrPW5ldyBCaWdJbnRlZ2VyKHMsMTYpO3ZhciByPWZ1bmN0aW9uKGkpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoaSxsKX07dmFyIGo9aGV4dG9yc3RyKGYpO3ZhciBoPWoubGVuZ3RoO3ZhciBnPXRoaXMubi5iaXRMZW5ndGgoKS0xO3ZhciBtPU1hdGguY2VpbChnLzgpO3ZhciBxO2lmKGM9PT0tMXx8Yz09PXVuZGVmaW5lZCl7Yz1ofWVsc2V7aWYoYz09PS0yKXtjPW0taC0yfWVsc2V7aWYoYzwtMil7dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzYWx0IGxlbmd0aFwiKX19fWlmKG08KGgrYysyKSl7dGhyb3cgbmV3IEVycm9yKFwiZGF0YSB0b28gbG9uZ1wiKX12YXIgYT10aGlzLmRvUHVibGljKGspLnRvQnl0ZUFycmF5KCk7Zm9yKHE9MDtxPGEubGVuZ3RoO3ErPTEpe2FbcV0mPTI1NX13aGlsZShhLmxlbmd0aDxtKXthLnVuc2hpZnQoMCl9aWYoYVttLTFdIT09MTg4KXt0aHJvdyBuZXcgRXJyb3IoXCJlbmNvZGVkIG1lc3NhZ2UgZG9lcyBub3QgZW5kIGluIDB4YmNcIil9YT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTt2YXIgZD1hLnN1YnN0cigwLG0taC0xKTt2YXIgZT1hLnN1YnN0cihkLmxlbmd0aCxoKTt2YXIgcD0oNjUyODA+Pig4Km0tZykpJjI1NTtpZigoZC5jaGFyQ29kZUF0KDApJnApIT09MCl7dGhyb3cgbmV3IEVycm9yKFwiYml0cyBiZXlvbmQga2V5c2l6ZSBub3QgemVyb1wiKX12YXIgbj1wc3NfbWdmMV9zdHIoZSxkLmxlbmd0aCxyKTt2YXIgbz1bXTtmb3IocT0wO3E8ZC5sZW5ndGg7cSs9MSl7b1txXT1kLmNoYXJDb2RlQXQocSlebi5jaGFyQ29kZUF0KHEpfW9bMF0mPX5wO3ZhciBiPW0taC1jLTI7Zm9yKHE9MDtxPGI7cSs9MSl7aWYob1txXSE9PTApe3Rocm93IG5ldyBFcnJvcihcImxlZnRtb3N0IG9jdGV0cyBub3QgemVyb1wiKX19aWYob1tiXSE9PTEpe3Rocm93IG5ldyBFcnJvcihcIjB4MDEgbWFya2VyIG5vdCBmb3VuZFwiKX1yZXR1cm4gZT09PWhleHRvcnN0cihyKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitqK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLG8uc2xpY2UoLWMpKSkpKX07UlNBS2V5LlNBTFRfTEVOX0hMRU49LTE7UlNBS2V5LlNBTFRfTEVOX01BWD0tMjtSU0FLZXkuU0FMVF9MRU5fUkVDT1ZFUj0tMjtcbmZ1bmN0aW9uIFg1MDkocSl7dmFyIGo9QVNOMUhFWCxuPWouZ2V0Q2hpbGRJZHgsZz1qLmdldFYsYj1qLmdldFRMVixjPWouZ2V0VmJ5TGlzdCxrPWouZ2V0VmJ5TGlzdEV4LGE9ai5nZXRUTFZieUxpc3QsbD1qLmdldFRMVmJ5TGlzdEV4LGg9ai5nZXRJZHhieUxpc3QsZT1qLmdldElkeGJ5TGlzdEV4LGk9ai5nZXRWaWR4LHM9ai5nZXRJbnQscD1qLm9pZG5hbWUsbT1qLmhleHRvb2lkc3RyLGQ9WDUwOSxyPXBlbXRvaGV4LGY7dHJ5e2Y9S0pVUi5hc24xLng1MDkuQWxnb3JpdGhtSWRlbnRpZmllci5QU1NOQU1FMkFTTjFUTFZ9Y2F0Y2gobyl7fXRoaXMuSEVYMlNUQUc9e1wiMGNcIjpcInV0ZjhcIixcIjEzXCI6XCJwcm5cIixcIjE2XCI6XCJpYTVcIixcIjFhXCI6XCJ2aXNcIixcIjFlXCI6XCJibXBcIn07dGhpcy5oZXg9bnVsbDt0aGlzLnZlcnNpb249MDt0aGlzLmZvZmZzZXQ9MDt0aGlzLmFFeHRJbmZvPW51bGw7dGhpcy5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7aWYodGhpcy5oZXg9PT1udWxsfHx0aGlzLnZlcnNpb24hPT0wKXtyZXR1cm4gdGhpcy52ZXJzaW9ufXZhciB1PWEodGhpcy5oZXgsMCxbMCwwXSk7aWYodS5zdWJzdHIoMCwyKT09XCJhMFwiKXt2YXIgdj1hKHUsMCxbMF0pO3ZhciB0PXModiwwKTtpZih0PDB8fDI8dCl7dGhyb3cgbmV3IEVycm9yKFwibWFsZm9ybWVkIHZlcnNpb24gZmllbGRcIil9dGhpcy52ZXJzaW9uPXQrMTtyZXR1cm4gdGhpcy52ZXJzaW9ufWVsc2V7dGhpcy52ZXJzaW9uPTE7dGhpcy5mb2Zmc2V0PS0xO3JldHVybiAxfX07dGhpcy5nZXRTZXJpYWxOdW1iZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLmhleCwwLFswLDBdLFwiMDJcIil9O3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQ9ZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMuaGV4LDAsWzAsMV0pO3JldHVybiB0aGlzLmdldEFsZ29yaXRobUlkZW50aWZpZXJOYW1lKHQpfTt0aGlzLmdldEFsZ29yaXRobUlkZW50aWZpZXJOYW1lPWZ1bmN0aW9uKHQpe2Zvcih2YXIgdSBpbiBmKXtpZih0PT09Zlt1XSl7cmV0dXJuIHV9fXJldHVybiBwKGsodCwwLFswXSxcIjA2XCIpKX07dGhpcy5nZXRJc3N1ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYNTAwTmFtZSh0aGlzLmdldElzc3VlckhleCgpKX07dGhpcy5nZXRJc3N1ZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLmhleCwwLFswLDMrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldElzc3VlclN0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0SXNzdWVyKCk7cmV0dXJuIHQuc3RyfTt0aGlzLmdldFN1YmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYNTAwTmFtZSh0aGlzLmdldFN1YmplY3RIZXgoKSl9O3RoaXMuZ2V0U3ViamVjdEhleD1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMuaGV4LDAsWzAsNSt0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0U3ViamVjdFN0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0U3ViamVjdCgpO3JldHVybiB0LnN0cn07dGhpcy5nZXROb3RCZWZvcmU9ZnVuY3Rpb24oKXt2YXIgdD1jKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMF0pO3Q9dC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7dD1kZWNvZGVVUklDb21wb25lbnQodCk7cmV0dXJuIHR9O3RoaXMuZ2V0Tm90QWZ0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1jKHRoaXMuaGV4LDAsWzAsNCt0aGlzLmZvZmZzZXQsMV0pO3Q9dC5yZXBsYWNlKC8oLi4pL2csXCIlJDFcIik7dD1kZWNvZGVVUklDb21wb25lbnQodCk7cmV0dXJuIHR9O3RoaXMuZ2V0UHVibGljS2V5SGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGouZ2V0VExWYnlMaXN0KHRoaXMuaGV4LDAsWzAsNit0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5SWR4PWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5oZXgsMCxbMCw2K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXlDb250ZW50SWR4PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQdWJsaWNLZXlJZHgoKTtyZXR1cm4gaCh0aGlzLmhleCx0LFsxLDBdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIEtFWVVUSUwuZ2V0S2V5KHRoaXMuZ2V0UHVibGljS2V5SGV4KCksbnVsbCxcInBrY3M4cHViXCIpfTt0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWU9ZnVuY3Rpb24oKXt2YXIgdD1hKHRoaXMuaGV4LDAsWzFdLFwiMzBcIik7cmV0dXJuIHRoaXMuZ2V0QWxnb3JpdGhtSWRlbnRpZmllck5hbWUodCl9O3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLmhleCwwLFsyXSxcIjAzXCIsdHJ1ZSl9O3RoaXMudmVyaWZ5U2lnbmF0dXJlPWZ1bmN0aW9uKHYpe3ZhciB3PXRoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQoKTt2YXIgdD10aGlzLmdldFNpZ25hdHVyZVZhbHVlSGV4KCk7dmFyIHU9YSh0aGlzLmhleCwwLFswXSxcIjMwXCIpO3ZhciB4PW5ldyBLSlVSLmNyeXB0by5TaWduYXR1cmUoe2FsZzp3fSk7eC5pbml0KHYpO3gudXBkYXRlSGV4KHUpO3JldHVybiB4LnZlcmlmeSh0KX07dGhpcy5wYXJzZUV4dD1mdW5jdGlvbihDKXt2YXIgdix0LHg7aWYoQz09PXVuZGVmaW5lZCl7eD10aGlzLmhleDtpZih0aGlzLnZlcnNpb24hPT0zKXtyZXR1cm4gLTF9dj1oKHgsMCxbMCw3LDBdLFwiMzBcIik7dD1uKHgsdil9ZWxzZXt4PXBlbXRvaGV4KEMpO3ZhciB5PWgoeCwwLFswLDMsMCwwXSxcIjA2XCIpO2lmKGcoeCx5KSE9XCIyYTg2NDg4NmY3MGQwMTA5MGVcIil7dGhpcy5hRXh0SW5mbz1uZXcgQXJyYXkoKTtyZXR1cm59dj1oKHgsMCxbMCwzLDAsMSwwXSxcIjMwXCIpO3Q9bih4LHYpO3RoaXMuaGV4PXh9dGhpcy5hRXh0SW5mbz1uZXcgQXJyYXkoKTtmb3IodmFyIHc9MDt3PHQubGVuZ3RoO3crKyl7dmFyIEE9e307QS5jcml0aWNhbD1mYWxzZTt2YXIgej1uKHgsdFt3XSk7dmFyIHU9MDtpZih6Lmxlbmd0aD09PTMpe0EuY3JpdGljYWw9dHJ1ZTt1PTF9QS5vaWQ9ai5oZXh0b29pZHN0cihjKHgsdFt3XSxbMF0sXCIwNlwiKSk7dmFyIEI9aCh4LHRbd10sWzErdV0pO0EudmlkeD1pKHgsQik7dGhpcy5hRXh0SW5mby5wdXNoKEEpfX07dGhpcy5nZXRFeHRJbmZvPWZ1bmN0aW9uKHYpe3ZhciB0PXRoaXMuYUV4dEluZm87dmFyIHc9djtpZighdi5tYXRjaCgvXlswLTkuXSskLykpe3c9S0pVUi5hc24xLng1MDkuT0lELm5hbWUyb2lkKHYpfWlmKHc9PT1cIlwiKXtyZXR1cm4gdW5kZWZpbmVkfWZvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKXtpZih0W3VdLm9pZD09PXcpe3JldHVybiB0W3VdfX1yZXR1cm4gdW5kZWZpbmVkfTt0aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHM9ZnVuY3Rpb24odSx5KXtpZih1PT09dW5kZWZpbmVkJiZ5PT09dW5kZWZpbmVkKXt2YXIgdz10aGlzLmdldEV4dEluZm8oXCJiYXNpY0NvbnN0cmFpbnRzXCIpO2lmKHc9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dT1iKHRoaXMuaGV4LHcudmlkeCk7eT13LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwiYmFzaWNDb25zdHJhaW50c1wifTtpZih5KXt0LmNyaXRpY2FsPXRydWV9aWYodT09PVwiMzAwMFwiKXtyZXR1cm4gdH1pZih1PT09XCIzMDAzMDEwMWZmXCIpe3QuY0E9dHJ1ZTtyZXR1cm4gdH1pZih1LnN1YnN0cigwLDEyKT09PVwiMzAwNjAxMDFmZjAyXCIpe3ZhciB4PWcodSwxMCk7dmFyIHY9cGFyc2VJbnQoeCwxNik7dC5jQT10cnVlO3QucGF0aExlbj12O3JldHVybiB0fXRocm93IG5ldyBFcnJvcihcImhFeHRWIHBhcnNlIGVycm9yOiBcIit1KX07dGhpcy5nZXRFeHRLZXlVc2FnZT1mdW5jdGlvbih1LHcpe2lmKHU9PT11bmRlZmluZWQmJnc9PT11bmRlZmluZWQpe3ZhciB2PXRoaXMuZ2V0RXh0SW5mbyhcImtleVVzYWdlXCIpO2lmKHY9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dT1iKHRoaXMuaGV4LHYudmlkeCk7dz12LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwia2V5VXNhZ2VcIn07aWYodyl7dC5jcml0aWNhbD10cnVlfXQubmFtZXM9dGhpcy5nZXRFeHRLZXlVc2FnZVN0cmluZyh1KS5zcGxpdChcIixcIik7cmV0dXJuIHR9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VCaW49ZnVuY3Rpb24odSl7aWYodT09PXVuZGVmaW5lZCl7dmFyIHY9dGhpcy5nZXRFeHRJbmZvKFwia2V5VXNhZ2VcIik7aWYodj09PXVuZGVmaW5lZCl7cmV0dXJuXCJcIn11PWIodGhpcy5oZXgsdi52aWR4KX1pZih1Lmxlbmd0aCE9OCYmdS5sZW5ndGghPTEwKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQga2V5IHVzYWdlIHZhbHVlOiBcIit1KX12YXIgdD1cIjAwMDAwMDAwMDAwMDAwMFwiK3BhcnNlSW50KHUuc3Vic3RyKDYpLDE2KS50b1N0cmluZygyKTtpZih1Lmxlbmd0aD09OCl7dD10LnNsaWNlKC04KX1pZih1Lmxlbmd0aD09MTApe3Q9dC5zbGljZSgtMTYpfXQ9dC5yZXBsYWNlKC8wKyQvLFwiXCIpO2lmKHQ9PVwiXCIpe3Q9XCIwXCJ9cmV0dXJuIHR9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VTdHJpbmc9ZnVuY3Rpb24odil7dmFyIHc9dGhpcy5nZXRFeHRLZXlVc2FnZUJpbih2KTt2YXIgdD1uZXcgQXJyYXkoKTtmb3IodmFyIHU9MDt1PHcubGVuZ3RoO3UrKyl7aWYody5zdWJzdHIodSwxKT09XCIxXCIpe3QucHVzaChYNTA5LktFWVVTQUdFX05BTUVbdV0pfX1yZXR1cm4gdC5qb2luKFwiLFwiKX07dGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcj1mdW5jdGlvbih2LHgpe2lmKHY9PT11bmRlZmluZWQmJng9PT11bmRlZmluZWQpe3ZhciB3PXRoaXMuZ2V0RXh0SW5mbyhcInN1YmplY3RLZXlJZGVudGlmaWVyXCIpO2lmKHc9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dj1iKHRoaXMuaGV4LHcudmlkeCk7eD13LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwic3ViamVjdEtleUlkZW50aWZpZXJcIn07aWYoeCl7dC5jcml0aWNhbD10cnVlfXZhciB1PWcodiwwKTt0LmtpZD17aGV4OnV9O3JldHVybiB0fTt0aGlzLmdldEV4dEF1dGhvcml0eUtleUlkZW50aWZpZXI9ZnVuY3Rpb24oeix4KXtpZih6PT09dW5kZWZpbmVkJiZ4PT09dW5kZWZpbmVkKXt2YXIgdD10aGlzLmdldEV4dEluZm8oXCJhdXRob3JpdHlLZXlJZGVudGlmaWVyXCIpO2lmKHQ9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9ej1iKHRoaXMuaGV4LHQudmlkeCk7eD10LmNyaXRpY2FsfXZhciBBPXtleHRuYW1lOlwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwifTtpZih4KXtBLmNyaXRpY2FsPXRydWV9dmFyIHk9bih6LDApO2Zvcih2YXIgdT0wO3U8eS5sZW5ndGg7dSsrKXt2YXIgQj16LnN1YnN0cih5W3VdLDIpO2lmKEI9PT1cIjgwXCIpe0Eua2lkPXtoZXg6Zyh6LHlbdV0pfX1pZihCPT09XCJhMVwiKXt2YXIgdz1iKHoseVt1XSk7dmFyIHY9dGhpcy5nZXRHZW5lcmFsTmFtZXModyk7QS5pc3N1ZXI9dlswXVtcImRuXCJdfWlmKEI9PT1cIjgyXCIpe0Euc249e2hleDpnKHoseVt1XSl9fX1yZXR1cm4gQX07dGhpcy5nZXRFeHRFeHRLZXlVc2FnZT1mdW5jdGlvbih3LHkpe2lmKHc9PT11bmRlZmluZWQmJnk9PT11bmRlZmluZWQpe3ZhciB4PXRoaXMuZ2V0RXh0SW5mbyhcImV4dEtleVVzYWdlXCIpO2lmKHg9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9dz1iKHRoaXMuaGV4LHgudmlkeCk7eT14LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwiZXh0S2V5VXNhZ2VcIixhcnJheTpbXX07aWYoeSl7dC5jcml0aWNhbD10cnVlfXZhciB1PW4odywwKTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7dC5hcnJheS5wdXNoKHAoZyh3LHVbdl0pKSl9cmV0dXJuIHR9O3RoaXMuZ2V0RXh0RXh0S2V5VXNhZ2VOYW1lPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5nZXRFeHRJbmZvKFwiZXh0S2V5VXNhZ2VcIik7aWYoeD09PXVuZGVmaW5lZCl7cmV0dXJuIHh9dmFyIHQ9bmV3IEFycmF5KCk7dmFyIHc9Yih0aGlzLmhleCx4LnZpZHgpO2lmKHc9PT1cIlwiKXtyZXR1cm4gdH12YXIgdT1uKHcsMCk7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe3QucHVzaChwKGcodyx1W3ZdKSkpfXJldHVybiB0fTt0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lPWZ1bmN0aW9uKHUsdyl7aWYodT09PXVuZGVmaW5lZCYmdz09PXVuZGVmaW5lZCl7dmFyIHY9dGhpcy5nZXRFeHRJbmZvKFwic3ViamVjdEFsdE5hbWVcIik7aWYodj09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH11PWIodGhpcy5oZXgsdi52aWR4KTt3PXYuY3JpdGljYWx9dmFyIHQ9e2V4dG5hbWU6XCJzdWJqZWN0QWx0TmFtZVwiLGFycmF5OltdfTtpZih3KXt0LmNyaXRpY2FsPXRydWV9dC5hcnJheT10aGlzLmdldEdlbmVyYWxOYW1lcyh1KTtyZXR1cm4gdH07dGhpcy5nZXRFeHRJc3N1ZXJBbHROYW1lPWZ1bmN0aW9uKHUsdyl7aWYodT09PXVuZGVmaW5lZCYmdz09PXVuZGVmaW5lZCl7dmFyIHY9dGhpcy5nZXRFeHRJbmZvKFwiaXNzdWVyQWx0TmFtZVwiKTtpZih2PT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkfXU9Yih0aGlzLmhleCx2LnZpZHgpO3c9di5jcml0aWNhbH12YXIgdD17ZXh0bmFtZTpcImlzc3VlckFsdE5hbWVcIixhcnJheTpbXX07aWYodyl7dC5jcml0aWNhbD10cnVlfXQuYXJyYXk9dGhpcy5nZXRHZW5lcmFsTmFtZXModSk7cmV0dXJuIHR9O3RoaXMuZ2V0R2VuZXJhbE5hbWVzPWZ1bmN0aW9uKHgpe3ZhciB2PW4oeCwwKTt2YXIgdD1bXTtmb3IodmFyIHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIHU9dGhpcy5nZXRHZW5lcmFsTmFtZShiKHgsdlt3XSkpO2lmKHUhPT11bmRlZmluZWQpe3QucHVzaCh1KX19cmV0dXJuIHR9O3RoaXMuZ2V0R2VuZXJhbE5hbWU9ZnVuY3Rpb24odSl7dmFyIHQ9dS5zdWJzdHIoMCwyKTt2YXIgdz1nKHUsMCk7dmFyIHY9aGV4dG9yc3RyKHcpO2lmKHQ9PVwiODFcIil7cmV0dXJue3JmYzgyMjp2fX1pZih0PT1cIjgyXCIpe3JldHVybntkbnM6dn19aWYodD09XCI4NlwiKXtyZXR1cm57dXJpOnZ9fWlmKHQ9PVwiODdcIil7cmV0dXJue2lwOmhleHRvaXAodyl9fWlmKHQ9PVwiYTRcIil7cmV0dXJue2RuOnRoaXMuZ2V0WDUwME5hbWUodyl9fXJldHVybiB1bmRlZmluZWR9O3RoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyPWZ1bmN0aW9uKCl7dmFyIHgsQSx6O3ZhciB5PXRoaXMuZ2V0RXh0SW5mbyhcInN1YmplY3RBbHROYW1lXCIpO2lmKHk9PT11bmRlZmluZWQpe3JldHVybiB5fXZhciB0PW5ldyBBcnJheSgpO3ZhciB3PWIodGhpcy5oZXgseS52aWR4KTt2YXIgdT1uKHcsMCk7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe3o9dy5zdWJzdHIodVt2XSwyKTt4PWcodyx1W3ZdKTtpZih6PT09XCI4MVwiKXtBPWhleHRvdXRmOCh4KTt0LnB1c2goW1wiTUFJTFwiLEFdKX1pZih6PT09XCI4MlwiKXtBPWhleHRvdXRmOCh4KTt0LnB1c2goW1wiRE5TXCIsQV0pfWlmKHo9PT1cIjg0XCIpe0E9WDUwOS5oZXgyZG4oeCwwKTt0LnB1c2goW1wiRE5cIixBXSl9aWYoej09PVwiODZcIil7QT1oZXh0b3V0ZjgoeCk7dC5wdXNoKFtcIlVSSVwiLEFdKX1pZih6PT09XCI4N1wiKXtBPWhleHRvaXAoeCk7dC5wdXNoKFtcIklQXCIsQV0pfX1yZXR1cm4gdH07dGhpcy5nZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHM9ZnVuY3Rpb24oeCx6KXtpZih4PT09dW5kZWZpbmVkJiZ6PT09dW5kZWZpbmVkKXt2YXIgeT10aGlzLmdldEV4dEluZm8oXCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIik7aWYoeT09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH14PWIodGhpcy5oZXgseS52aWR4KTt6PXkuY3JpdGljYWx9dmFyIHU9e2V4dG5hbWU6XCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIixhcnJheTpbXX07aWYoeil7dS5jcml0aWNhbD10cnVlfXZhciB2PW4oeCwwKTtmb3IodmFyIHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIHQ9Yih4LHZbd10pO3UuYXJyYXkucHVzaCh0aGlzLmdldERpc3RyaWJ1dGlvblBvaW50KHQpKX1yZXR1cm4gdX07dGhpcy5nZXREaXN0cmlidXRpb25Qb2ludD1mdW5jdGlvbih5KXt2YXIgdj17fTt2YXIgdz1uKHksMCk7Zm9yKHZhciB4PTA7eDx3Lmxlbmd0aDt4Kyspe3ZhciB1PXkuc3Vic3RyKHdbeF0sMik7dmFyIHQ9Yih5LHdbeF0pO2lmKHU9PVwiYTBcIil7di5kcG5hbWU9dGhpcy5nZXREaXN0cmlidXRpb25Qb2ludE5hbWUodCl9fXJldHVybiB2fTt0aGlzLmdldERpc3RyaWJ1dGlvblBvaW50TmFtZT1mdW5jdGlvbih5KXt2YXIgdj17fTt2YXIgdz1uKHksMCk7Zm9yKHZhciB4PTA7eDx3Lmxlbmd0aDt4Kyspe3ZhciB1PXkuc3Vic3RyKHdbeF0sMik7dmFyIHQ9Yih5LHdbeF0pO2lmKHU9PVwiYTBcIil7di5mdWxsPXRoaXMuZ2V0R2VuZXJhbE5hbWVzKHQpfX1yZXR1cm4gdn07dGhpcy5nZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkk9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmdldEV4dEluZm8oXCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIik7aWYoeT09PXVuZGVmaW5lZCl7cmV0dXJuIHl9dmFyIHQ9bmV3IEFycmF5KCk7dmFyIHU9bih0aGlzLmhleCx5LnZpZHgpO2Zvcih2YXIgdz0wO3c8dS5sZW5ndGg7dysrKXt0cnl7dmFyIHo9Yyh0aGlzLmhleCx1W3ddLFswLDAsMF0sXCI4NlwiKTt2YXIgeD1oZXh0b3V0Zjgoeik7dC5wdXNoKHgpfWNhdGNoKHYpe319cmV0dXJuIHR9O3RoaXMuZ2V0RXh0QUlBSW5mbz1mdW5jdGlvbigpe3ZhciB4PXRoaXMuZ2V0RXh0SW5mbyhcImF1dGhvcml0eUluZm9BY2Nlc3NcIik7aWYoeD09PXVuZGVmaW5lZCl7cmV0dXJuIHh9dmFyIHQ9e29jc3A6W10sY2Fpc3N1ZXI6W119O3ZhciB1PW4odGhpcy5oZXgseC52aWR4KTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7dmFyIHk9Yyh0aGlzLmhleCx1W3ZdLFswXSxcIjA2XCIpO3ZhciB3PWModGhpcy5oZXgsdVt2XSxbMV0sXCI4NlwiKTtpZih5PT09XCIyYjA2MDEwNTA1MDczMDAxXCIpe3Qub2NzcC5wdXNoKGhleHRvdXRmOCh3KSl9aWYoeT09PVwiMmIwNjAxMDUwNTA3MzAwMlwiKXt0LmNhaXNzdWVyLnB1c2goaGV4dG91dGY4KHcpKX19cmV0dXJuIHR9O3RoaXMuZ2V0RXh0QXV0aG9yaXR5SW5mb0FjY2Vzcz1mdW5jdGlvbihBLHkpe2lmKEE9PT11bmRlZmluZWQmJnk9PT11bmRlZmluZWQpe3ZhciB0PXRoaXMuZ2V0RXh0SW5mbyhcImF1dGhvcml0eUluZm9BY2Nlc3NcIik7aWYodD09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH1BPWIodGhpcy5oZXgsdC52aWR4KTt5PXQuY3JpdGljYWx9dmFyIEI9e2V4dG5hbWU6XCJhdXRob3JpdHlJbmZvQWNjZXNzXCIsYXJyYXk6W119O2lmKHkpe0IuY3JpdGljYWw9dHJ1ZX12YXIgej1uKEEsMCk7Zm9yKHZhciB1PTA7dTx6Lmxlbmd0aDt1Kyspe3ZhciB4PWsoQSx6W3VdLFswXSxcIjA2XCIpO3ZhciB2PWMoQSx6W3VdLFsxXSxcIjg2XCIpO3ZhciB3PWhleHRvdXRmOCh2KTtpZih4PT1cIjJiMDYwMTA1MDUwNzMwMDFcIil7Qi5hcnJheS5wdXNoKHtvY3NwOnd9KX1lbHNle2lmKHg9PVwiMmIwNjAxMDUwNTA3MzAwMlwiKXtCLmFycmF5LnB1c2goe2NhaXNzdWVyOnd9KX1lbHNle3Rocm93IG5ldyBFcnJvcihcInVua25vd24gbWV0aG9kOiBcIit4KX19fXJldHVybiBCfTt0aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXM9ZnVuY3Rpb24oeCxBKXtpZih4PT09dW5kZWZpbmVkJiZBPT09dW5kZWZpbmVkKXt2YXIgej10aGlzLmdldEV4dEluZm8oXCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpO2lmKHo9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWR9eD1iKHRoaXMuaGV4LHoudmlkeCk7QT16LmNyaXRpY2FsfXZhciB0PXtleHRuYW1lOlwiY2VydGlmaWNhdGVQb2xpY2llc1wiLGFycmF5OltdfTtpZihBKXt0LmNyaXRpY2FsPXRydWV9dmFyIHU9bih4LDApO2Zvcih2YXIgdj0wO3Y8dS5sZW5ndGg7disrKXt2YXIgeT1iKHgsdVt2XSk7dmFyIHc9dGhpcy5nZXRQb2xpY3lJbmZvcm1hdGlvbih5KTt0LmFycmF5LnB1c2godyl9cmV0dXJuIHR9O3RoaXMuZ2V0UG9saWN5SW5mb3JtYXRpb249ZnVuY3Rpb24oeCl7dmFyIHQ9e307dmFyIHo9Yyh4LDAsWzBdLFwiMDZcIik7dC5wb2xpY3lvaWQ9cCh6KTt2YXIgQT1lKHgsMCxbMV0sXCIzMFwiKTtpZihBIT0tMSl7dC5hcnJheT1bXTt2YXIgdT1uKHgsQSk7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2Kyspe3ZhciB5PWIoeCx1W3ZdKTt2YXIgdz10aGlzLmdldFBvbGljeVF1YWxpZmllckluZm8oeSk7dC5hcnJheS5wdXNoKHcpfX1yZXR1cm4gdH07dGhpcy5nZXRQb2xpY3lRdWFsaWZpZXJJbmZvPWZ1bmN0aW9uKHUpe3ZhciB0PXt9O3ZhciB2PWModSwwLFswXSxcIjA2XCIpO2lmKHY9PT1cIjJiMDYwMTA1MDUwNzAyMDFcIil7dmFyIHg9ayh1LDAsWzFdLFwiMTZcIik7dC5jcHM9aGV4dG9yc3RyKHgpfWVsc2V7aWYodj09PVwiMmIwNjAxMDUwNTA3MDIwMlwiKXt2YXIgdz1hKHUsMCxbMV0sXCIzMFwiKTt0LnVub3RpY2U9dGhpcy5nZXRVc2VyTm90aWNlKHcpfX1yZXR1cm4gdH07dGhpcy5nZXRVc2VyTm90aWNlPWZ1bmN0aW9uKHgpe3ZhciB1PXt9O3ZhciB2PW4oeCwwKTtmb3IodmFyIHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIHQ9Yih4LHZbd10pO2lmKHQuc3Vic3RyKDAsMikhPVwiMzBcIil7dS5leHB0ZXh0PXRoaXMuZ2V0RGlzcGxheVRleHQodCl9fXJldHVybiB1fTt0aGlzLmdldERpc3BsYXlUZXh0PWZ1bmN0aW9uKHUpe3ZhciB2PXtcIjBjXCI6XCJ1dGY4XCIsXCIxNlwiOlwiaWE1XCIsXCIxYVwiOlwidmlzXCIsXCIxZVwiOlwiYm1wXCJ9O3ZhciB0PXt9O3QudHlwZT12W3Uuc3Vic3RyKDAsMildO3Quc3RyPWhleHRvcnN0cihnKHUsMCkpO3JldHVybiB0fTt0aGlzLmdldEV4dENSTE51bWJlcj1mdW5jdGlvbih1LHYpe3ZhciB0PXtleHRuYW1lOlwiY1JMTnVtYmVyXCJ9O2lmKHYpe3QuY3JpdGljYWw9dHJ1ZX1pZih1LnN1YnN0cigwLDIpPT1cIjAyXCIpe3QubnVtPXtoZXg6Zyh1LDApfTtyZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoXCJoRXh0ViBwYXJzZSBlcnJvcjogXCIrdSl9O3RoaXMuZ2V0RXh0Q1JMUmVhc29uPWZ1bmN0aW9uKHUsdil7dmFyIHQ9e2V4dG5hbWU6XCJjUkxSZWFzb25cIn07aWYodil7dC5jcml0aWNhbD10cnVlfWlmKHUuc3Vic3RyKDAsMik9PVwiMGFcIil7dC5jb2RlPXBhcnNlSW50KGcodSwwKSwxNik7cmV0dXJuIHR9dGhyb3cgbmV3IEVycm9yKFwiaEV4dFYgcGFyc2UgZXJyb3I6IFwiK3UpfTt0aGlzLmdldEV4dE9jc3BOb25jZT1mdW5jdGlvbih1LHcpe3ZhciB0PXtleHRuYW1lOlwib2NzcE5vbmNlXCJ9O2lmKHcpe3QuY3JpdGljYWw9dHJ1ZX12YXIgdj1nKHUsMCk7dC5oZXg9djtyZXR1cm4gdH07dGhpcy5nZXRFeHRPY3NwTm9DaGVjaz1mdW5jdGlvbih1LHYpe3ZhciB0PXtleHRuYW1lOlwib2NzcE5vQ2hlY2tcIn07aWYodil7dC5jcml0aWNhbD10cnVlfXJldHVybiB0fTt0aGlzLmdldEV4dEFkb2JlVGltZVN0YW1wPWZ1bmN0aW9uKHcseil7aWYodz09PXVuZGVmaW5lZCYmej09PXVuZGVmaW5lZCl7dmFyIHk9dGhpcy5nZXRFeHRJbmZvKFwiYWRvYmVUaW1lU3RhbXBcIik7aWYoeT09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZH13PWIodGhpcy5oZXgseS52aWR4KTt6PXkuY3JpdGljYWx9dmFyIHQ9e2V4dG5hbWU6XCJhZG9iZVRpbWVTdGFtcFwifTtpZih6KXt0LmNyaXRpY2FsPXRydWV9dmFyIHY9bih3LDApO2lmKHYubGVuZ3RoPjEpe3ZhciBBPWIodyx2WzFdKTt2YXIgdT10aGlzLmdldEdlbmVyYWxOYW1lKEEpO2lmKHUudXJpIT11bmRlZmluZWQpe3QudXJpPXUudXJpfX1pZih2Lmxlbmd0aD4yKXt2YXIgeD1iKHcsdlsyXSk7aWYoeD09XCIwMTAxZmZcIil7dC5yZXFhdXRoPXRydWV9aWYoeD09XCIwMTAxMDBcIil7dC5yZXFhdXRoPWZhbHNlfX1yZXR1cm4gdH07dGhpcy5nZXRYNTAwTmFtZVJ1bGU9ZnVuY3Rpb24odCl7dmFyIEE9dHJ1ZTt2YXIgRT10cnVlO3ZhciBEPWZhbHNlO3ZhciB1PVwiXCI7dmFyIHg9XCJcIjt2YXIgRz1udWxsO3ZhciBCPVtdO2Zvcih2YXIgdz0wO3c8dC5sZW5ndGg7dysrKXt2YXIgeT10W3ddO2Zvcih2YXIgdj0wO3Y8eS5sZW5ndGg7disrKXtCLnB1c2goeVt2XSl9fWZvcih2YXIgdz0wO3c8Qi5sZW5ndGg7dysrKXt2YXIgRj1CW3ddO3ZhciBIPUYuZHM7dmFyIEM9Ri52YWx1ZTt2YXIgej1GLnR5cGU7dSs9XCI6XCIrSDtpZihIIT1cInByblwiJiZIIT1cInV0ZjhcIiYmSCE9XCJpYTVcIil7cmV0dXJuXCJtaXhlZFwifWlmKEg9PVwiaWE1XCIpe2lmKHohPVwiQ05cIil7cmV0dXJuXCJtaXhlZFwifWVsc2V7aWYoIUtKVVIubGFuZy5TdHJpbmcuaXNNYWlsKEMpKXtyZXR1cm5cIm1peGVkXCJ9ZWxzZXtjb250aW51ZX19fWlmKHo9PVwiQ1wiKXtpZihIPT1cInByblwiKXtjb250aW51ZX1lbHNle3JldHVyblwibWl4ZWRcIn19eCs9XCI6XCIrSDtpZihHPT1udWxsKXtHPUh9ZWxzZXtpZihHIT09SCl7cmV0dXJuXCJtaXhlZFwifX19aWYoRz09bnVsbCl7cmV0dXJuXCJwcm5cIn1lbHNle3JldHVybiBHfX07dGhpcy5nZXRYNTAwTmFtZT1mdW5jdGlvbih2KXt2YXIgdD10aGlzLmdldFg1MDBOYW1lQXJyYXkodik7dmFyIHU9dGhpcy5kbmFycmF5dG9zdHIodCk7cmV0dXJue2FycmF5OnQsc3RyOnV9fTt0aGlzLmdldFg1MDBOYW1lQXJyYXk9ZnVuY3Rpb24odyl7dmFyIHQ9W107dmFyIHU9bih3LDApO2Zvcih2YXIgdj0wO3Y8dS5sZW5ndGg7disrKXt0LnB1c2godGhpcy5nZXRSRE4oYih3LHVbdl0pKSl9cmV0dXJuIHR9O3RoaXMuZ2V0UkROPWZ1bmN0aW9uKHcpe3ZhciB0PVtdO3ZhciB1PW4odywwKTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7dC5wdXNoKHRoaXMuZ2V0QXR0clR5cGVBbmRWYWx1ZShiKHcsdVt2XSkpKX1yZXR1cm4gdH07dGhpcy5nZXRBdHRyVHlwZUFuZFZhbHVlPWZ1bmN0aW9uKHYpe3ZhciB0PXt0eXBlOm51bGwsdmFsdWU6bnVsbCxkczpudWxsfTt2YXIgdT1uKHYsMCk7dmFyIHk9Yyh2LHVbMF0sW10sXCIwNlwiKTt2YXIgeD1jKHYsdVsxXSxbXSk7dmFyIHc9S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50KHkpO3QudHlwZT1LSlVSLmFzbjEueDUwOS5PSUQub2lkMmF0eXBlKHcpO3QuZHM9dGhpcy5IRVgyU1RBR1t2LnN1YnN0cih1WzFdLDIpXTtpZih0LmRzIT1cImJtcFwiKXt0LnZhbHVlPWhleHRvdXRmOCh4KX1lbHNle3QudmFsdWU9dWNzMmhleHRvdXRmOCh4KX1yZXR1cm4gdH07dGhpcy5yZWFkQ2VydFBFTT1mdW5jdGlvbih0KXt0aGlzLnJlYWRDZXJ0SGV4KHIodCkpfTt0aGlzLnJlYWRDZXJ0SGV4PWZ1bmN0aW9uKHQpe3RoaXMuaGV4PXQ7dGhpcy5nZXRWZXJzaW9uKCk7dHJ5e2godGhpcy5oZXgsMCxbMCw3XSxcImEzXCIpO3RoaXMucGFyc2VFeHQoKX1jYXRjaCh1KXt9fTt0aGlzLmdldFBhcmFtPWZ1bmN0aW9uKCl7dmFyIHQ9e307dC52ZXJzaW9uPXRoaXMuZ2V0VmVyc2lvbigpO3Quc2VyaWFsPXtoZXg6dGhpcy5nZXRTZXJpYWxOdW1iZXJIZXgoKX07dC5zaWdhbGc9dGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCgpO3QuaXNzdWVyPXRoaXMuZ2V0SXNzdWVyKCk7dC5ub3RiZWZvcmU9dGhpcy5nZXROb3RCZWZvcmUoKTt0Lm5vdGFmdGVyPXRoaXMuZ2V0Tm90QWZ0ZXIoKTt0LnN1YmplY3Q9dGhpcy5nZXRTdWJqZWN0KCk7dC5zYmpwdWJrZXk9aGV4dG9wZW0odGhpcy5nZXRQdWJsaWNLZXlIZXgoKSxcIlBVQkxJQyBLRVlcIik7aWYodGhpcy5hRXh0SW5mby5sZW5ndGg+MCl7dC5leHQ9dGhpcy5nZXRFeHRQYXJhbUFycmF5KCl9dC5zaWdoZXg9dGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleCgpO3JldHVybiB0fTt0aGlzLmdldEV4dFBhcmFtQXJyYXk9ZnVuY3Rpb24odSl7aWYodT09dW5kZWZpbmVkKXt2YXIgdz1lKHRoaXMuaGV4LDAsWzAsXCJbM11cIl0pO2lmKHchPS0xKXt1PWwodGhpcy5oZXgsMCxbMCxcIlszXVwiLDBdLFwiMzBcIil9fXZhciB0PVtdO3ZhciB2PW4odSwwKTtmb3IodmFyIHg9MDt4PHYubGVuZ3RoO3grKyl7dmFyIHo9Yih1LHZbeF0pO3ZhciB5PXRoaXMuZ2V0RXh0UGFyYW0oeik7aWYoeSE9bnVsbCl7dC5wdXNoKHkpfX1yZXR1cm4gdH07dGhpcy5nZXRFeHRQYXJhbT1mdW5jdGlvbih1KXt2YXIgQj17fTt2YXIgdz1uKHUsMCk7dmFyIHg9dy5sZW5ndGg7aWYoeCE9MiYmeCE9Myl7dGhyb3cgbmV3IEVycm9yKFwid3JvbmcgbnVtYmVyIGVsZW1lbnRzIGluIEV4dGVuc2lvbjogXCIreCtcIiBcIit1KX12YXIgdj1tKGModSwwLFswXSxcIjA2XCIpKTt2YXIgej1mYWxzZTtpZih4PT0zJiZhKHUsMCxbMV0pPT1cIjAxMDFmZlwiKXt6PXRydWV9dmFyIEE9YSh1LDAsW3gtMSwwXSk7dmFyIHk9dW5kZWZpbmVkO2lmKHY9PVwiMi41LjI5LjE0XCIpe3k9dGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcihBLHopfWVsc2V7aWYodj09XCIyLjUuMjkuMTVcIil7eT10aGlzLmdldEV4dEtleVVzYWdlKEEseil9ZWxzZXtpZih2PT1cIjIuNS4yOS4xN1wiKXt5PXRoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjE4XCIpe3k9dGhpcy5nZXRFeHRJc3N1ZXJBbHROYW1lKEEseil9ZWxzZXtpZih2PT1cIjIuNS4yOS4xOVwiKXt5PXRoaXMuZ2V0RXh0QmFzaWNDb25zdHJhaW50cyhBLHopfWVsc2V7aWYodj09XCIyLjUuMjkuMzFcIil7eT10aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50cyhBLHopfWVsc2V7aWYodj09XCIyLjUuMjkuMzJcIil7eT10aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXMoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjM1XCIpe3k9dGhpcy5nZXRFeHRBdXRob3JpdHlLZXlJZGVudGlmaWVyKEEseil9ZWxzZXtpZih2PT1cIjIuNS4yOS4zN1wiKXt5PXRoaXMuZ2V0RXh0RXh0S2V5VXNhZ2UoQSx6KX1lbHNle2lmKHY9PVwiMS4zLjYuMS41LjUuNy4xLjFcIil7eT10aGlzLmdldEV4dEF1dGhvcml0eUluZm9BY2Nlc3MoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjIwXCIpe3k9dGhpcy5nZXRFeHRDUkxOdW1iZXIoQSx6KX1lbHNle2lmKHY9PVwiMi41LjI5LjIxXCIpe3k9dGhpcy5nZXRFeHRDUkxSZWFzb24oQSx6KX1lbHNle2lmKHY9PVwiMS4zLjYuMS41LjUuNy40OC4xLjJcIil7eT10aGlzLmdldEV4dE9jc3BOb25jZShBLHopfWVsc2V7aWYodj09XCIxLjMuNi4xLjUuNS43LjQ4LjEuNVwiKXt5PXRoaXMuZ2V0RXh0T2NzcE5vQ2hlY2soQSx6KX1lbHNle2lmKHY9PVwiMS4yLjg0MC4xMTM1ODMuMS4xLjkuMVwiKXt5PXRoaXMuZ2V0RXh0QWRvYmVUaW1lU3RhbXAoQSx6KX19fX19fX19fX19fX19fWlmKHkhPXVuZGVmaW5lZCl7cmV0dXJuIHl9dmFyIHQ9e2V4dG5hbWU6dixleHRuOkF9O2lmKHope3QuY3JpdGljYWw9dHJ1ZX1yZXR1cm4gdH07dGhpcy5maW5kRXh0PWZ1bmN0aW9uKHUsdil7Zm9yKHZhciB0PTA7dDx1Lmxlbmd0aDt0Kyspe2lmKHVbdF0uZXh0bmFtZT09dil7cmV0dXJuIHVbdF19fXJldHVybiBudWxsfTt0aGlzLnVwZGF0ZUV4dENEUEZ1bGxVUkk9ZnVuY3Rpb24oeCx0KXt2YXIgdz10aGlzLmZpbmRFeHQoeCxcImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKTtpZih3PT1udWxsKXtyZXR1cm59aWYody5hcnJheT09dW5kZWZpbmVkKXtyZXR1cm59dmFyIHo9dy5hcnJheTtmb3IodmFyIHY9MDt2PHoubGVuZ3RoO3YrKyl7aWYoelt2XS5kcG5hbWU9PXVuZGVmaW5lZCl7Y29udGludWV9aWYoelt2XS5kcG5hbWUuZnVsbD09dW5kZWZpbmVkKXtjb250aW51ZX12YXIgQT16W3ZdLmRwbmFtZS5mdWxsO2Zvcih2YXIgdT0wO3U8QS5sZW5ndGg7dSsrKXt2YXIgeT1BW3ZdO2lmKHkudXJpPT11bmRlZmluZWQpe2NvbnRpbnVlfXkudXJpPXR9fX07dGhpcy51cGRhdGVFeHRBSUFPQ1NQPWZ1bmN0aW9uKHgsdSl7dmFyIHc9dGhpcy5maW5kRXh0KHgsXCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpO2lmKHc9PW51bGwpe3JldHVybn1pZih3LmFycmF5PT11bmRlZmluZWQpe3JldHVybn12YXIgdD13LmFycmF5O2Zvcih2YXIgdj0wO3Y8dC5sZW5ndGg7disrKXtpZih0W3ZdLm9jc3AhPXVuZGVmaW5lZCl7dFt2XS5vY3NwPXV9fX07dGhpcy51cGRhdGVFeHRBSUFDQUlzc3Vlcj1mdW5jdGlvbih4LHUpe3ZhciB3PXRoaXMuZmluZEV4dCh4LFwiYXV0aG9yaXR5SW5mb0FjY2Vzc1wiKTtpZih3PT1udWxsKXtyZXR1cm59aWYody5hcnJheT09dW5kZWZpbmVkKXtyZXR1cm59dmFyIHQ9dy5hcnJheTtmb3IodmFyIHY9MDt2PHQubGVuZ3RoO3YrKyl7aWYodFt2XS5jYWlzc3VlciE9dW5kZWZpbmVkKXt0W3ZdLmNhaXNzdWVyPXV9fX07dGhpcy5kbmFycmF5dG9zdHI9ZnVuY3Rpb24odil7ZnVuY3Rpb24gdCh3KXtyZXR1cm4gdy5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHUoeSkucmVwbGFjZSgvXFwrLyxcIlxcXFwrXCIpfSkuam9pbihcIitcIil9ZnVuY3Rpb24gdSh3KXtyZXR1cm4gdy50eXBlK1wiPVwiK3cudmFsdWV9cmV0dXJuXCIvXCIrdi5tYXAoZnVuY3Rpb24odyl7cmV0dXJuIHQodykucmVwbGFjZSgvXFwvLyxcIlxcXFwvXCIpfSkuam9pbihcIi9cIil9O3RoaXMuZ2V0SW5mbz1mdW5jdGlvbigpe3ZhciB1PWZ1bmN0aW9uKE0pe3ZhciBMPUpTT04uc3RyaW5naWZ5KE0uYXJyYXkpLnJlcGxhY2UoL1tcXFtcXF1cXHtcXH1cXFwiXS9nLFwiXCIpO3JldHVybiBMfTt2YXIgQT1mdW5jdGlvbihSKXt2YXIgUD1cIlwiO3ZhciBMPVIuYXJyYXk7Zm9yKHZhciBPPTA7TzxMLmxlbmd0aDtPKyspe3ZhciBRPUxbT107UCs9XCIgICAgcG9saWN5IG9pZDogXCIrUS5wb2xpY3lvaWQrXCJcXG5cIjtpZihRLmFycmF5PT09dW5kZWZpbmVkKXtjb250aW51ZX1mb3IodmFyIE49MDtOPFEuYXJyYXkubGVuZ3RoO04rKyl7dmFyIE09US5hcnJheVtOXTtpZihNLmNwcyE9PXVuZGVmaW5lZCl7UCs9XCIgICAgY3BzOiBcIitNLmNwcytcIlxcblwifX19cmV0dXJuIFB9O3ZhciBEPWZ1bmN0aW9uKFApe3ZhciBPPVwiXCI7dmFyIEw9UC5hcnJheTtmb3IodmFyIE49MDtOPEwubGVuZ3RoO04rKyl7dmFyIFE9TFtOXTt0cnl7aWYoUS5kcG5hbWUuZnVsbFswXS51cmkhPT11bmRlZmluZWQpe08rPVwiICAgIFwiK1EuZHBuYW1lLmZ1bGxbMF0udXJpK1wiXFxuXCJ9fWNhdGNoKE0pe310cnl7aWYoUS5kbmFtZS5mdWxsWzBdLmRuLmhleCE9PXVuZGVmaW5lZCl7Tys9XCIgICAgXCIrWDUwOS5oZXgyZG4oUS5kcG5hbWUuZnVsbFswXS5kbi5oZXgpK1wiXFxuXCJ9fWNhdGNoKE0pe319cmV0dXJuIE99O3ZhciBCPWZ1bmN0aW9uKFApe3ZhciBPPVwiXCI7dmFyIEw9UC5hcnJheTtmb3IodmFyIE09MDtNPEwubGVuZ3RoO00rKyl7dmFyIE49TFtNXTtpZihOLmNhaXNzdWVyIT09dW5kZWZpbmVkKXtPKz1cIiAgICBjYWlzc3VlcjogXCIrTi5jYWlzc3VlcitcIlxcblwifWlmKE4ub2NzcCE9PXVuZGVmaW5lZCl7Tys9XCIgICAgb2NzcDogXCIrTi5vY3NwK1wiXFxuXCJ9fXJldHVybiBPfTt2YXIgdj1YNTA5O3ZhciBGLEUsSztGPVwiQmFzaWMgRmllbGRzXFxuXCI7Ris9XCIgIHNlcmlhbCBudW1iZXI6IFwiK3RoaXMuZ2V0U2VyaWFsTnVtYmVySGV4KCkrXCJcXG5cIjtGKz1cIiAgc2lnbmF0dXJlIGFsZ29yaXRobTogXCIrdGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCgpK1wiXFxuXCI7Ris9XCIgIGlzc3VlcjogXCIrdGhpcy5nZXRJc3N1ZXJTdHJpbmcoKStcIlxcblwiO0YrPVwiICBub3RCZWZvcmU6IFwiK3RoaXMuZ2V0Tm90QmVmb3JlKCkrXCJcXG5cIjtGKz1cIiAgbm90QWZ0ZXI6IFwiK3RoaXMuZ2V0Tm90QWZ0ZXIoKStcIlxcblwiO0YrPVwiICBzdWJqZWN0OiBcIit0aGlzLmdldFN1YmplY3RTdHJpbmcoKStcIlxcblwiO0YrPVwiICBzdWJqZWN0IHB1YmxpYyBrZXkgaW5mbzogXFxuXCI7RT10aGlzLmdldFB1YmxpY0tleSgpO0YrPVwiICAgIGtleSBhbGdvcml0aG06IFwiK0UudHlwZStcIlxcblwiO2lmKEUudHlwZT09PVwiUlNBXCIpe0YrPVwiICAgIG49XCIraGV4dG9wb3NoZXgoRS5uLnRvU3RyaW5nKDE2KSkuc3Vic3RyKDAsMTYpK1wiLi4uXFxuXCI7Ris9XCIgICAgZT1cIitoZXh0b3Bvc2hleChFLmUudG9TdHJpbmcoMTYpKStcIlxcblwifUs9dGhpcy5hRXh0SW5mbztpZihLIT09dW5kZWZpbmVkJiZLIT09bnVsbCl7Ris9XCJYNTA5djMgRXh0ZW5zaW9uczpcXG5cIjtmb3IodmFyIEg9MDtIPEsubGVuZ3RoO0grKyl7dmFyIEo9S1tIXTt2YXIgdD1LSlVSLmFzbjEueDUwOS5PSUQub2lkMm5hbWUoSi5vaWQpO2lmKHQ9PT1cIlwiKXt0PUoub2lkfXZhciBHPVwiXCI7aWYoSi5jcml0aWNhbD09PXRydWUpe0c9XCJDUklUSUNBTFwifUYrPVwiICBcIit0K1wiIFwiK0crXCI6XFxuXCI7aWYodD09PVwiYmFzaWNDb25zdHJhaW50c1wiKXt2YXIgdz10aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHMoKTtpZih3LmNBPT09dW5kZWZpbmVkKXtGKz1cIiAgICB7fVxcblwifWVsc2V7Ris9XCIgICAgY0E9dHJ1ZVwiO2lmKHcucGF0aExlbiE9PXVuZGVmaW5lZCl7Ris9XCIsIHBhdGhMZW49XCIrdy5wYXRoTGVufUYrPVwiXFxuXCJ9fWVsc2V7aWYodD09PVwia2V5VXNhZ2VcIil7Ris9XCIgICAgXCIrdGhpcy5nZXRFeHRLZXlVc2FnZVN0cmluZygpK1wiXFxuXCJ9ZWxzZXtpZih0PT09XCJzdWJqZWN0S2V5SWRlbnRpZmllclwiKXtGKz1cIiAgICBcIit0aGlzLmdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyKCkua2lkLmhleCtcIlxcblwifWVsc2V7aWYodD09PVwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwiKXt2YXIgeD10aGlzLmdldEV4dEF1dGhvcml0eUtleUlkZW50aWZpZXIoKTtpZih4LmtpZCE9PXVuZGVmaW5lZCl7Ris9XCIgICAga2lkPVwiK3gua2lkLmhleCtcIlxcblwifX1lbHNle2lmKHQ9PT1cImV4dEtleVVzYWdlXCIpe3ZhciBJPXRoaXMuZ2V0RXh0RXh0S2V5VXNhZ2UoKS5hcnJheTtGKz1cIiAgICBcIitJLmpvaW4oXCIsIFwiKStcIlxcblwifWVsc2V7aWYodD09PVwic3ViamVjdEFsdE5hbWVcIil7dmFyIHk9dSh0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lKCkpO0YrPVwiICAgIFwiK3krXCJcXG5cIn1lbHNle2lmKHQ9PT1cImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKXt2YXIgQz10aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50cygpO0YrPUQoQyl9ZWxzZXtpZih0PT09XCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpe3ZhciB6PXRoaXMuZ2V0RXh0QXV0aG9yaXR5SW5mb0FjY2VzcygpO0YrPUIoeil9ZWxzZXtpZih0PT09XCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpe0YrPUEodGhpcy5nZXRFeHRDZXJ0aWZpY2F0ZVBvbGljaWVzKCkpfX19fX19fX19fX1GKz1cInNpZ25hdHVyZSBhbGdvcml0aG06IFwiK3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZSgpK1wiXFxuXCI7Ris9XCJzaWduYXR1cmU6IFwiK3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXgoKS5zdWJzdHIoMCwxNikrXCIuLi5cXG5cIjtyZXR1cm4gRn07aWYodHlwZW9mIHE9PVwic3RyaW5nXCIpe2lmKHEuaW5kZXhPZihcIi0tLS0tQkVHSU5cIikhPS0xKXt0aGlzLnJlYWRDZXJ0UEVNKHEpfWVsc2V7aWYoS0pVUi5sYW5nLlN0cmluZy5pc0hleChxKSl7dGhpcy5yZWFkQ2VydEhleChxKX19fX1YNTA5LmhleDJkbj1mdW5jdGlvbihlLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH12YXIgYT1uZXcgWDUwOSgpO3ZhciBjPUFTTjFIRVguZ2V0VExWKGUsYik7dmFyIGQ9YS5nZXRYNTAwTmFtZShlKTtyZXR1cm4gZC5zdHJ9O1g1MDkuaGV4MnJkbj1mdW5jdGlvbihmLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH1pZihmLnN1YnN0cihiLDIpIT09XCIzMVwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgUkROXCIpfXZhciBjPW5ldyBBcnJheSgpO3ZhciBkPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZixiKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyl7Yy5wdXNoKFg1MDkuaGV4MmF0dHJUeXBlVmFsdWUoZixkW2VdKSl9Yz1jLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKFwiK1wiLFwiXFxcXCtcIil9KTtyZXR1cm4gYy5qb2luKFwiK1wiKX07WDUwOS5oZXgyYXR0clR5cGVWYWx1ZT1mdW5jdGlvbihkLGkpe3ZhciBqPUFTTjFIRVg7dmFyIGg9ai5nZXRWO2lmKGk9PT11bmRlZmluZWQpe2k9MH1pZihkLnN1YnN0cihpLDIpIT09XCIzMFwiKXt0aHJvdyBuZXcgRXJyb3IoXCJtYWxmb3JtZWQgYXR0cmlidXRlIHR5cGUgYW5kIHZhbHVlXCIpfXZhciBnPWouZ2V0Q2hpbGRJZHgoZCxpKTtpZihnLmxlbmd0aCE9PTJ8fGQuc3Vic3RyKGdbMF0sMikhPT1cIjA2XCIpe1wibWFsZm9ybWVkIGF0dHJpYnV0ZSB0eXBlIGFuZCB2YWx1ZVwifXZhciBiPWgoZCxnWzBdKTt2YXIgZj1LSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQoYik7dmFyIGU9S0pVUi5hc24xLng1MDkuT0lELm9pZDJhdHlwZShmKTt2YXIgYT1oKGQsZ1sxXSk7dmFyIGM9aGV4dG9yc3RyKGEpO3JldHVybiBlK1wiPVwiK2N9O1g1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRIZXg9ZnVuY3Rpb24oYil7dmFyIGE9bmV3IFg1MDkoKTthLnJlYWRDZXJ0SGV4KGIpO3JldHVybiBhLmdldFB1YmxpY0tleSgpfTtYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0UEVNPWZ1bmN0aW9uKGIpe3ZhciBhPW5ldyBYNTA5KCk7YS5yZWFkQ2VydFBFTShiKTtyZXR1cm4gYS5nZXRQdWJsaWNLZXkoKX07WDUwOS5nZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTT1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBnPWUuZ2V0VmJ5TGlzdDt2YXIgYj17fTt2YXIgYSxmLGQ7Yi5hbGdwYXJhbT1udWxsO2E9bmV3IFg1MDkoKTthLnJlYWRDZXJ0UEVNKGMpO2Y9YS5nZXRQdWJsaWNLZXlIZXgoKTtiLmtleWhleD1nKGYsMCxbMV0sXCIwM1wiKS5zdWJzdHIoMik7Yi5hbGdvaWQ9ZyhmLDAsWzAsMF0sXCIwNlwiKTtpZihiLmFsZ29pZD09PVwiMmE4NjQ4Y2UzZDAyMDFcIil7Yi5hbGdwYXJhbT1nKGYsMCxbMCwxXSxcIjA2XCIpfXJldHVybiBifTtYNTA5LktFWVVTQUdFX05BTUU9W1wiZGlnaXRhbFNpZ25hdHVyZVwiLFwibm9uUmVwdWRpYXRpb25cIixcImtleUVuY2lwaGVybWVudFwiLFwiZGF0YUVuY2lwaGVybWVudFwiLFwia2V5QWdyZWVtZW50XCIsXCJrZXlDZXJ0U2lnblwiLFwiY1JMU2lnblwiLFwiZW5jaXBoZXJPbmx5XCIsXCJkZWNpcGhlck9ubHlcIl07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuandzPT1cInVuZGVmaW5lZFwifHwhS0pVUi5qd3Mpe0tKVVIuandzPXt9fUtKVVIuandzLkpXUz1mdW5jdGlvbigpe3ZhciBiPUtKVVIsYT1iLmp3cy5KV1MsYz1hLmlzU2FmZUpTT05TdHJpbmc7dGhpcy5wYXJzZUpXUz1mdW5jdGlvbihnLGope2lmKCh0aGlzLnBhcnNlZEpXUyE9PXVuZGVmaW5lZCkmJihqfHwodGhpcy5wYXJzZWRKV1Muc2lndmFsSCE9PXVuZGVmaW5lZCkpKXtyZXR1cm59dmFyIGk9Zy5tYXRjaCgvXihbXi5dKylcXC4oW14uXSspXFwuKFteLl0rKSQvKTtpZihpPT1udWxsKXt0aHJvd1wiSldTIHNpZ25hdHVyZSBpcyBub3QgYSBmb3JtIG9mICdIZWFkLlBheWxvYWQuU2lnVmFsdWUnLlwifXZhciBrPWlbMV07dmFyIGU9aVsyXTt2YXIgbD1pWzNdO3ZhciBuPWsrXCIuXCIrZTt0aGlzLnBhcnNlZEpXUz17fTt0aGlzLnBhcnNlZEpXUy5oZWFkQjY0VT1rO3RoaXMucGFyc2VkSldTLnBheWxvYWRCNjRVPWU7dGhpcy5wYXJzZWRKV1Muc2lndmFsQjY0VT1sO3RoaXMucGFyc2VkSldTLnNpPW47aWYoIWope3ZhciBoPWI2NHV0b2hleChsKTt2YXIgZj1wYXJzZUJpZ0ludChoLDE2KTt0aGlzLnBhcnNlZEpXUy5zaWd2YWxIPWg7dGhpcy5wYXJzZWRKV1Muc2lndmFsQkk9Zn12YXIgZD1iNjR1dG91dGY4KGspO3ZhciBtPWI2NHV0b3V0ZjgoZSk7dGhpcy5wYXJzZWRKV1MuaGVhZFM9ZDt0aGlzLnBhcnNlZEpXUy5wYXlsb2FkUz1tO2lmKCFjKGQsdGhpcy5wYXJzZWRKV1MsXCJoZWFkUFwiKSl7dGhyb3dcIm1hbGZvcm1lZCBKU09OIHN0cmluZyBmb3IgSldTIEhlYWQ6IFwiK2R9fX07S0pVUi5qd3MuSldTLnNpZ249ZnVuY3Rpb24oaix3LHosQSxhKXt2YXIgeD1LSlVSLG49eC5qd3Mscj1uLkpXUyxoPXIucmVhZFNhZmVKU09OU3RyaW5nLHE9ci5pc1NhZmVKU09OU3RyaW5nLGQ9eC5jcnlwdG8sbD1kLkVDRFNBLHA9ZC5NYWMsYz1kLlNpZ25hdHVyZSx1PUpTT047dmFyIHQsayxvO2lmKHR5cGVvZiB3IT1cInN0cmluZ1wiJiZ0eXBlb2YgdyE9XCJvYmplY3RcIil7dGhyb3dcInNwSGVhZGVyIG11c3QgYmUgSlNPTiBzdHJpbmcgb3Igb2JqZWN0OiBcIit3fWlmKHR5cGVvZiB3PT1cIm9iamVjdFwiKXtrPXc7dD11LnN0cmluZ2lmeShrKX1pZih0eXBlb2Ygdz09XCJzdHJpbmdcIil7dD13O2lmKCFxKHQpKXt0aHJvd1wiSldTIEhlYWQgaXMgbm90IHNhZmUgSlNPTiBzdHJpbmc6IFwiK3R9az1oKHQpfW89ejtpZih0eXBlb2Ygej09XCJvYmplY3RcIil7bz11LnN0cmluZ2lmeSh6KX1pZigoaj09XCJcInx8aj09bnVsbCkmJmsuYWxnIT09dW5kZWZpbmVkKXtqPWsuYWxnfWlmKChqIT1cIlwiJiZqIT1udWxsKSYmay5hbGc9PT11bmRlZmluZWQpe2suYWxnPWo7dD11LnN0cmluZ2lmeShrKX1pZihqIT09ay5hbGcpe3Rocm93XCJhbGcgYW5kIHNIZWFkZXIuYWxnIGRvZXNuJ3QgbWF0Y2g6IFwiK2orXCIhPVwiK2suYWxnfXZhciBzPW51bGw7aWYoci5qd3NhbGcyc2lnYWxnW2pdPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgYWxnIG5hbWU6IFwiK2p9ZWxzZXtzPXIuandzYWxnMnNpZ2FsZ1tqXX12YXIgZT11dGY4dG9iNjR1KHQpO3ZhciBtPXV0Zjh0b2I2NHUobyk7dmFyIGI9ZStcIi5cIittO3ZhciB5PVwiXCI7aWYocy5zdWJzdHIoMCw0KT09XCJIbWFjXCIpe2lmKEE9PT11bmRlZmluZWQpe3Rocm93XCJtYWMga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSFMqIGFsZ1wifXZhciBpPW5ldyBwKHthbGc6cyxwcm92OlwiY3J5cHRvanNcIixwYXNzOkF9KTtpLnVwZGF0ZVN0cmluZyhiKTt5PWkuZG9GaW5hbCgpfWVsc2V7aWYocy5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGY9bmV3IGMoe2FsZzpzfSk7Zi5pbml0KEEsYSk7Zi51cGRhdGVTdHJpbmcoYik7dmFyIGc9Zi5zaWduKCk7eT1LSlVSLmNyeXB0by5FQ0RTQS5hc24xU2lnVG9Db25jYXRTaWcoZyl9ZWxzZXtpZihzIT1cIm5vbmVcIil7dmFyIGY9bmV3IGMoe2FsZzpzfSk7Zi5pbml0KEEsYSk7Zi51cGRhdGVTdHJpbmcoYik7eT1mLnNpZ24oKX19fXZhciB2PWhleHRvYjY0dSh5KTtyZXR1cm4gYitcIi5cIit2fTtLSlVSLmp3cy5KV1MudmVyaWZ5PWZ1bmN0aW9uKHcsQixuKXt2YXIgeD1LSlVSLHE9eC5qd3MsdD1xLkpXUyxpPXQucmVhZFNhZmVKU09OU3RyaW5nLGU9eC5jcnlwdG8scD1lLkVDRFNBLHM9ZS5NYWMsZD1lLlNpZ25hdHVyZSxtO2lmKHR5cGVvZiBSU0FLZXkhPT11bmRlZmluZWQpe209UlNBS2V5fXZhciB5PXcuc3BsaXQoXCIuXCIpO2lmKHkubGVuZ3RoIT09Myl7cmV0dXJuIGZhbHNlfXZhciBmPXlbMF07dmFyIHI9eVsxXTt2YXIgYz1mK1wiLlwiK3I7dmFyIEE9YjY0dXRvaGV4KHlbMl0pO3ZhciBsPWkoYjY0dXRvdXRmOCh5WzBdKSk7dmFyIGs9bnVsbDt2YXIgej1udWxsO2lmKGwuYWxnPT09dW5kZWZpbmVkKXt0aHJvd1wiYWxnb3JpdGhtIG5vdCBzcGVjaWZpZWQgaW4gaGVhZGVyXCJ9ZWxzZXtrPWwuYWxnO3o9ay5zdWJzdHIoMCwyKX1pZihuIT1udWxsJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobik9PT1cIltvYmplY3QgQXJyYXldXCImJm4ubGVuZ3RoPjApe3ZhciBiPVwiOlwiK24uam9pbihcIjpcIikrXCI6XCI7aWYoYi5pbmRleE9mKFwiOlwiK2srXCI6XCIpPT0tMSl7dGhyb3dcImFsZ29yaXRobSAnXCIraytcIicgbm90IGFjY2VwdGVkIGluIHRoZSBsaXN0XCJ9fWlmKGshPVwibm9uZVwiJiZCPT09bnVsbCl7dGhyb3dcImtleSBzaGFsbCBiZSBzcGVjaWZpZWQgdG8gdmVyaWZ5LlwifWlmKHR5cGVvZiBCPT1cInN0cmluZ1wiJiZCLmluZGV4T2YoXCItLS0tLUJFR0lOIFwiKSE9LTEpe0I9S0VZVVRJTC5nZXRLZXkoQil9aWYoej09XCJSU1wifHx6PT1cIlBTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIG0pKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgUlNBS2V5IG9iaiBmb3IgUlMqIGFuZCBQUyogYWxnc1wifX1pZih6PT1cIkVTXCIpe2lmKCEoQiBpbnN0YW5jZW9mIHApKXt0aHJvd1wia2V5IHNoYWxsIGJlIGEgRUNEU0Egb2JqIGZvciBFUyogYWxnc1wifX1pZihrPT1cIm5vbmVcIil7fXZhciB1PW51bGw7aWYodC5qd3NhbGcyc2lnYWxnW2wuYWxnXT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGFsZyBuYW1lOiBcIitrfWVsc2V7dT10Lmp3c2FsZzJzaWdhbGdba119aWYodT09XCJub25lXCIpe3Rocm93XCJub3Qgc3VwcG9ydGVkXCJ9ZWxzZXtpZih1LnN1YnN0cigwLDQpPT1cIkhtYWNcIil7dmFyIG89bnVsbDtpZihCPT09dW5kZWZpbmVkKXt0aHJvd1wiaGV4YWRlY2ltYWwga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSE1BQ1wifXZhciBqPW5ldyBzKHthbGc6dSxwYXNzOkJ9KTtqLnVwZGF0ZVN0cmluZyhjKTtvPWouZG9GaW5hbCgpO3JldHVybiBBPT1vfWVsc2V7aWYodS5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGg9bnVsbDt0cnl7aD1wLmNvbmNhdFNpZ1RvQVNOMVNpZyhBKX1jYXRjaCh2KXtyZXR1cm4gZmFsc2V9dmFyIGc9bmV3IGQoe2FsZzp1fSk7Zy5pbml0KEIpO2cudXBkYXRlU3RyaW5nKGMpO3JldHVybiBnLnZlcmlmeShoKX1lbHNle3ZhciBnPW5ldyBkKHthbGc6dX0pO2cuaW5pdChCKTtnLnVwZGF0ZVN0cmluZyhjKTtyZXR1cm4gZy52ZXJpZnkoQSl9fX19O0tKVVIuandzLkpXUy5wYXJzZT1mdW5jdGlvbihnKXt2YXIgYz1nLnNwbGl0KFwiLlwiKTt2YXIgYj17fTt2YXIgZixlLGQ7aWYoYy5sZW5ndGghPTImJmMubGVuZ3RoIT0zKXt0aHJvd1wibWFsZm9ybWVkIHNKV1M6IHdyb25nIG51bWJlciBvZiAnLicgc3BsaXR0ZWQgZWxlbWVudHNcIn1mPWNbMF07ZT1jWzFdO2lmKGMubGVuZ3RoPT0zKXtkPWNbMl19Yi5oZWFkZXJPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGYpKTtiLnBheWxvYWRPYmo9S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZyhiNjR1dG91dGY4KGUpKTtiLmhlYWRlclBQPUpTT04uc3RyaW5naWZ5KGIuaGVhZGVyT2JqLG51bGwsXCIgIFwiKTtpZihiLnBheWxvYWRPYmo9PW51bGwpe2IucGF5bG9hZFBQPWI2NHV0b3V0ZjgoZSl9ZWxzZXtiLnBheWxvYWRQUD1KU09OLnN0cmluZ2lmeShiLnBheWxvYWRPYmosbnVsbCxcIiAgXCIpfWlmKGQhPT11bmRlZmluZWQpe2Iuc2lnSGV4PWI2NHV0b2hleChkKX1yZXR1cm4gYn07S0pVUi5qd3MuSldTLnZlcmlmeUpXVD1mdW5jdGlvbihlLGwscil7dmFyIGQ9S0pVUixqPWQuandzLG89ai5KV1Msbj1vLnJlYWRTYWZlSlNPTlN0cmluZyxwPW8uaW5BcnJheSxmPW8uaW5jbHVkZWRBcnJheTt2YXIgaz1lLnNwbGl0KFwiLlwiKTt2YXIgYz1rWzBdO3ZhciBpPWtbMV07dmFyIHE9YytcIi5cIitpO3ZhciBtPWI2NHV0b2hleChrWzJdKTt2YXIgaD1uKGI2NHV0b3V0ZjgoYykpO3ZhciBnPW4oYjY0dXRvdXRmOChpKSk7aWYoaC5hbGc9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZX1pZihyLmFsZz09PXVuZGVmaW5lZCl7dGhyb3dcImFjY2VwdEZpZWxkLmFsZyBzaGFsbCBiZSBzcGVjaWZpZWRcIn1pZighcChoLmFsZyxyLmFsZykpe3JldHVybiBmYWxzZX1pZihnLmlzcyE9PXVuZGVmaW5lZCYmdHlwZW9mIHIuaXNzPT09XCJvYmplY3RcIil7aWYoIXAoZy5pc3Msci5pc3MpKXtyZXR1cm4gZmFsc2V9fWlmKGcuc3ViIT09dW5kZWZpbmVkJiZ0eXBlb2Ygci5zdWI9PT1cIm9iamVjdFwiKXtpZighcChnLnN1YixyLnN1Yikpe3JldHVybiBmYWxzZX19aWYoZy5hdWQhPT11bmRlZmluZWQmJnR5cGVvZiByLmF1ZD09PVwib2JqZWN0XCIpe2lmKHR5cGVvZiBnLmF1ZD09XCJzdHJpbmdcIil7aWYoIXAoZy5hdWQsci5hdWQpKXtyZXR1cm4gZmFsc2V9fWVsc2V7aWYodHlwZW9mIGcuYXVkPT1cIm9iamVjdFwiKXtpZighZihnLmF1ZCxyLmF1ZCkpe3JldHVybiBmYWxzZX19fX12YXIgYj1qLkludERhdGUuZ2V0Tm93KCk7aWYoci52ZXJpZnlBdCE9PXVuZGVmaW5lZCYmdHlwZW9mIHIudmVyaWZ5QXQ9PT1cIm51bWJlclwiKXtiPXIudmVyaWZ5QXR9aWYoci5ncmFjZVBlcmlvZD09PXVuZGVmaW5lZHx8dHlwZW9mIHIuZ3JhY2VQZXJpb2QhPT1cIm51bWJlclwiKXtyLmdyYWNlUGVyaW9kPTB9aWYoZy5leHAhPT11bmRlZmluZWQmJnR5cGVvZiBnLmV4cD09XCJudW1iZXJcIil7aWYoZy5leHArci5ncmFjZVBlcmlvZDxiKXtyZXR1cm4gZmFsc2V9fWlmKGcubmJmIT09dW5kZWZpbmVkJiZ0eXBlb2YgZy5uYmY9PVwibnVtYmVyXCIpe2lmKGI8Zy5uYmYtci5ncmFjZVBlcmlvZCl7cmV0dXJuIGZhbHNlfX1pZihnLmlhdCE9PXVuZGVmaW5lZCYmdHlwZW9mIGcuaWF0PT1cIm51bWJlclwiKXtpZihiPGcuaWF0LXIuZ3JhY2VQZXJpb2Qpe3JldHVybiBmYWxzZX19aWYoZy5qdGkhPT11bmRlZmluZWQmJnIuanRpIT09dW5kZWZpbmVkKXtpZihnLmp0aSE9PXIuanRpKXtyZXR1cm4gZmFsc2V9fWlmKCFvLnZlcmlmeShlLGwsci5hbGcpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbmNsdWRlZEFycmF5PWZ1bmN0aW9uKGIsYSl7dmFyIGM9S0pVUi5qd3MuSldTLmluQXJyYXk7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe2lmKCFjKGJbZF0sYSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O0tKVVIuandzLkpXUy5pbkFycmF5PWZ1bmN0aW9uKGQsYil7aWYoYj09PW51bGwpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYiE9PVwib2JqZWN0XCIpe3JldHVybiBmYWxzZX1pZih0eXBlb2YgYi5sZW5ndGghPT1cIm51bWJlclwiKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2lmKGJbY109PWQpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O0tKVVIuandzLkpXUy5qd3NhbGcyc2lnYWxnPXtIUzI1NjpcIkhtYWNTSEEyNTZcIixIUzM4NDpcIkhtYWNTSEEzODRcIixIUzUxMjpcIkhtYWNTSEE1MTJcIixSUzI1NjpcIlNIQTI1NndpdGhSU0FcIixSUzM4NDpcIlNIQTM4NHdpdGhSU0FcIixSUzUxMjpcIlNIQTUxMndpdGhSU0FcIixFUzI1NjpcIlNIQTI1NndpdGhFQ0RTQVwiLEVTMzg0OlwiU0hBMzg0d2l0aEVDRFNBXCIsUFMyNTY6XCJTSEEyNTZ3aXRoUlNBYW5kTUdGMVwiLFBTMzg0OlwiU0hBMzg0d2l0aFJTQWFuZE1HRjFcIixQUzUxMjpcIlNIQTUxMndpdGhSU0FhbmRNR0YxXCIsbm9uZTpcIm5vbmVcIix9O0tKVVIuandzLkpXUy5pc1NhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGMsYixkKXt2YXIgZT1udWxsO3RyeXtlPWpzb25QYXJzZShjKTtpZih0eXBlb2YgZSE9XCJvYmplY3RcIil7cmV0dXJuIDB9aWYoZS5jb25zdHJ1Y3Rvcj09PUFycmF5KXtyZXR1cm4gMH1pZihiKXtiW2RdPWV9cmV0dXJuIDF9Y2F0Y2goYSl7cmV0dXJuIDB9fTtLSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nPWZ1bmN0aW9uKGIpe3ZhciBjPW51bGw7dHJ5e2M9anNvblBhcnNlKGIpO2lmKHR5cGVvZiBjIT1cIm9iamVjdFwiKXtyZXR1cm4gbnVsbH1pZihjLmNvbnN0cnVjdG9yPT09QXJyYXkpe3JldHVybiBudWxsfXJldHVybiBjfWNhdGNoKGEpe3JldHVybiBudWxsfX07S0pVUi5qd3MuSldTLmdldEVuY29kZWRTaWduYXR1cmVWYWx1ZUZyb21KV1M9ZnVuY3Rpb24oYil7dmFyIGE9Yi5tYXRjaCgvXlteLl0rXFwuW14uXStcXC4oW14uXSspJC8pO2lmKGE9PW51bGwpe3Rocm93XCJKV1Mgc2lnbmF0dXJlIGlzIG5vdCBhIGZvcm0gb2YgJ0hlYWQuUGF5bG9hZC5TaWdWYWx1ZScuXCJ9cmV0dXJuIGFbMV19O0tKVVIuandzLkpXUy5nZXRKV0t0aHVtYnByaW50PWZ1bmN0aW9uKGQpe2lmKGQua3R5IT09XCJSU0FcIiYmZC5rdHkhPT1cIkVDXCImJmQua3R5IT09XCJvY3RcIil7dGhyb3dcInVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgSldLIFRodW1wcmludFwifXZhciBhPVwie1wiO2lmKGQua3R5PT09XCJSU0FcIil7aWYodHlwZW9mIGQubiE9XCJzdHJpbmdcInx8dHlwZW9mIGQuZSE9XCJzdHJpbmdcIil7dGhyb3dcIndyb25nIG4gYW5kIGUgdmFsdWUgZm9yIFJTQSBrZXlcIn1hKz0nXCJlXCI6XCInK2QuZSsnXCIsJzthKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wiblwiOlwiJytkLm4rJ1wifSd9ZWxzZXtpZihkLmt0eT09PVwiRUNcIil7aWYodHlwZW9mIGQuY3J2IT1cInN0cmluZ1wifHx0eXBlb2YgZC54IT1cInN0cmluZ1wifHx0eXBlb2YgZC55IT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgY3J2LCB4IGFuZCB5IHZhbHVlIGZvciBFQyBrZXlcIn1hKz0nXCJjcnZcIjpcIicrZC5jcnYrJ1wiLCc7YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcInhcIjpcIicrZC54KydcIiwnO2ErPSdcInlcIjpcIicrZC55KydcIn0nfWVsc2V7aWYoZC5rdHk9PT1cIm9jdFwiKXtpZih0eXBlb2YgZC5rIT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgayB2YWx1ZSBmb3Igb2N0KHN5bW1ldHJpYykga2V5XCJ9YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcImtcIjpcIicrZC5rKydcIn0nfX19dmFyIGI9cnN0cnRvaGV4KGEpO3ZhciBjPUtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChiLFwic2hhMjU2XCIpO3ZhciBlPWhleHRvYjY0dShjKTtyZXR1cm4gZX07S0pVUi5qd3MuSW50RGF0ZT17fTtLSlVSLmp3cy5JbnREYXRlLmdldD1mdW5jdGlvbihjKXt2YXIgYj1LSlVSLmp3cy5JbnREYXRlLGQ9Yi5nZXROb3csYT1iLmdldFp1bHU7aWYoYz09XCJub3dcIil7cmV0dXJuIGQoKX1lbHNle2lmKGM9PVwibm93ICsgMWhvdXJcIil7cmV0dXJuIGQoKSs2MCo2MH1lbHNle2lmKGM9PVwibm93ICsgMWRheVwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0fWVsc2V7aWYoYz09XCJub3cgKyAxbW9udGhcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozMH1lbHNle2lmKGM9PVwibm93ICsgMXllYXJcIil7cmV0dXJuIGQoKSs2MCo2MCoyNCozNjV9ZWxzZXtpZihjLm1hdGNoKC9aJC8pKXtyZXR1cm4gYShjKX1lbHNle2lmKGMubWF0Y2goL15bMC05XSskLykpe3JldHVybiBwYXJzZUludChjKX19fX19fX10aHJvd1widW5zdXBwb3J0ZWQgZm9ybWF0OiBcIitjfTtLSlVSLmp3cy5JbnREYXRlLmdldFp1bHU9ZnVuY3Rpb24oYSl7cmV0dXJuIHp1bHV0b3NlYyhhKX07S0pVUi5qd3MuSW50RGF0ZS5nZXROb3c9ZnVuY3Rpb24oKXt2YXIgYT1+fihuZXcgRGF0ZSgpLzEwMDApO3JldHVybiBhfTtLSlVSLmp3cy5JbnREYXRlLmludERhdGUyVVRDU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBEYXRlKGEqMTAwMCk7cmV0dXJuIGIudG9VVENTdHJpbmcoKX07S0pVUi5qd3MuSW50RGF0ZS5pbnREYXRlMlp1bHU9ZnVuY3Rpb24oZSl7dmFyIGk9bmV3IERhdGUoZSoxMDAwKSxoPShcIjAwMDBcIitpLmdldFVUQ0Z1bGxZZWFyKCkpLnNsaWNlKC00KSxnPShcIjAwXCIrKGkuZ2V0VVRDTW9udGgoKSsxKSkuc2xpY2UoLTIpLGI9KFwiMDBcIitpLmdldFVUQ0RhdGUoKSkuc2xpY2UoLTIpLGE9KFwiMDBcIitpLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSxjPShcIjAwXCIraS5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSxmPShcIjAwXCIraS5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKTtyZXR1cm4gaCtnK2IrYStjK2YrXCJaXCJ9O1xuZXhwb3J0IHsgU2VjdXJlUmFuZG9tIH07XHJcbmV4cG9ydCB7IHJuZ19zZWVkX3RpbWUgfTtcclxuXHJcbmV4cG9ydCB7IEJpZ0ludGVnZXIgfTtcclxuZXhwb3J0IHsgUlNBS2V5IH07XHJcbmV4cG9ydCBjb25zdCB7IEVEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBEU0EgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBTaWduYXR1cmUgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBNZXNzYWdlRGlnZXN0IH0gPSAgS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IE1hYyB9ID0gS0pVUi5jcnlwdG87XHJcbmV4cG9ydCBjb25zdCB7IENpcGhlciB9ID0gIEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgeyBLRVlVVElMIH07XHJcbmV4cG9ydCB7IEFTTjFIRVggfTtcclxuZXhwb3J0IHsgWDUwOSB9O1xyXG5leHBvcnQgeyBDcnlwdG9KUyB9O1xyXG5cclxuLy8gZXh0L2Jhc2U2NC5qc1xyXG5leHBvcnQgeyBiNjR0b2hleCB9O1xyXG5leHBvcnQgeyBiNjR0b0JBIH07XHJcblxyXG4vLyBiYXNlNjR4LmpzXHJcbmV4cG9ydCB7IHN0b0JBIH07XHJcbmV4cG9ydCB7IEJBdG9zIH07XHJcbmV4cG9ydCB7IEJBdG9oZXggfTtcclxuZXhwb3J0IHsgc3RvaGV4IH07XHJcbmV4cG9ydCB7IHN0b2I2NCB9O1xyXG5leHBvcnQgeyBzdG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b3MgfTtcclxuZXhwb3J0IHsgYjY0dG9iNjR1IH07XHJcbmV4cG9ydCB7IGI2NHV0b2I2NCB9O1xyXG5leHBvcnQgeyBoZXgyYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG9oZXggfTtcclxuZXhwb3J0IHsgdXRmOHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG91dGY4IH07XHJcbmV4cG9ydCB7IHV0Zjh0b2I2NCB9O1xyXG5leHBvcnQgeyBiNjR0b3V0ZjggfTtcclxuZXhwb3J0IHsgdXRmOHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXRmOCB9O1xyXG5leHBvcnQgeyBoZXh0b3JzdHIgfTtcclxuZXhwb3J0IHsgcnN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0IH07XHJcbmV4cG9ydCB7IGhleHRvYjY0bmwgfTtcclxuZXhwb3J0IHsgYjY0bmx0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b3BlbSB9O1xyXG5leHBvcnQgeyBwZW10b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b0FycmF5QnVmZmVyIH07XHJcbmV4cG9ydCB7IEFycmF5QnVmZmVydG9oZXggfTtcclxuZXhwb3J0IHsgenVsdXRvbXNlYyB9O1xyXG5leHBvcnQgeyB6dWx1dG9zZWMgfTtcclxuZXhwb3J0IHsgenVsdXRvZGF0ZSB9O1xyXG5leHBvcnQgeyBkYXRldG96dWx1IH07XHJcbmV4cG9ydCB7IHVyaWNtcHRvaGV4IH07XHJcbmV4cG9ydCB7IGhleHRvdXJpY21wIH07XHJcbmV4cG9ydCB7IGlwdjZ0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b2lwdjYgfTtcclxuZXhwb3J0IHsgaGV4dG9pcCB9O1xyXG5leHBvcnQgeyBpcHRvaGV4IH07XHJcbmV4cG9ydCB7IGVuY29kZVVSSUNvbXBvbmVudEFsbCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvVW5peCB9O1xyXG5leHBvcnQgeyBuZXdsaW5lX3RvRG9zIH07XHJcbmV4cG9ydCB7IGhleHRvcG9zaGV4IH07XHJcbmV4cG9ydCB7IGludGFyeXN0cnRvaGV4IH07XHJcbmV4cG9ydCB7IHN0cmRpZmZpZHggfTtcclxuXHJcbi8vIG5hbWUgc3BhY2VzXHJcbmV4cG9ydCB7IEtKVVIgfTtcclxuY29uc3QgX2NyeXB0byA9ICBLSlVSLmNyeXB0bztcclxuZXhwb3J0IHsgX2NyeXB0byBhcyBjcnlwdG8gfTtcclxuZXhwb3J0IGNvbnN0IHsgYXNuMSB9ID0gS0pVUjtcclxuZXhwb3J0IGNvbnN0IHsgandzIH0gPSBLSlVSO1xyXG5leHBvcnQgY29uc3QgeyBsYW5nIH0gPSBLSlVSO1xyXG5cclxuXHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsInZhciBNYXAgPSByZXF1aXJlKCcuL2VzNi5tYXAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAocmVxdWlyZSgnLi9lczYud2Vhay1tYXAnKSkoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0YXJnZXRNZXRhZGF0YS5zZXQodGFyZ2V0S2V5LCBrZXlNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH0gcmV0dXJuIGtleU1ldGFkYXRhO1xufTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgdHJ1ZSkuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcbn07XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcbnZhciB0b01ldGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcbnZhciBleHAgPSBmdW5jdGlvbiAoTykge1xuICAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCBPKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIG1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIGtleTogdG9NZXRhS2V5LFxuICBleHA6IGV4cFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNik7XG52YXIgS0VZID0gJ2ZpbmRJbmRleCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciAkbmF0aXZlID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE0IC8gMTUuNC40LjE1IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8pIGlmIChPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuIiwiLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuL19kYXRlLXRvLWlzby1zdHJpbmcnKTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KSwgJ0RhdGUnLCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiIsIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpO1xufVxuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHsgYXNpbmg6IGFzaW5oIH0pO1xuIiwiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIiwiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG4vLyBzb21lIFdlYktpdCB2ZXJzaW9ucyBmYWlscyB3aXRoIGJpZyBudW1iZXJzLCBzb21lIGhhcyB3cm9uZyBhcml0eVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBsb2cxcDogcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpIH0pO1xuIiwiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIiwiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIiwiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciAkdG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuICR0b1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICEkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICB2YXIgdGhhdCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCAnTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAkdG9QcmVjaXNpb24uY2FsbCh0aGF0KSA6ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQsIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbiAoJGlzRXh0ZW5zaWJsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCRwcmV2ZW50RXh0ZW5zaW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuIiwiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiIsIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTMgUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViBbLCByZWNlaXZlcl0pXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yID0gZ09QRC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IuZ2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci5zZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLnZhbHVlID0gVjtcbiAgICAgIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBleGlzdGluZ0Rlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgY3JlYXRlRGVzYygwLCBWKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIEJhc2UgPSAkUmVnRXhwO1xudmFyIHByb3RvID0gJFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgcmUxID0gL2EvZztcbnZhciByZTIgPSAvYS9nO1xuLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICghQ09SUkVDVF9ORVcgfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsICdSZWdFeHAnLCAkUmVnRXhwKTtcbn1cblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjIgU3RyaW5nLnByb3RvdHlwZS5hbmNob3IobmFtZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2FuY2hvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmNob3IobmFtZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ25hbWUnLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNSBTdHJpbmcucHJvdG90eXBlLmJvbGQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYm9sZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBib2xkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKShmYWxzZSk7XG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjMgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdChwb3MpXG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTAgU3RyaW5nLnByb3RvdHlwZS5saW5rKHVybClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2xpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5zbWFsbCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzbWFsbCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzbWFsbCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMiBTdHJpbmcucHJvdG90eXBlLnN0cmlrZSgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdHJpa2UnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3RyaWtlKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMyBTdHJpbmcucHJvdG90eXBlLnN1YigpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdWInLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3ViKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdWInLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xNCBTdHJpbmcucHJvdG90eXBlLnN1cCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdXAnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3VwKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIEFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuQXJyYXlCdWZmZXI7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbik7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRBcnJheUJ1ZmZlcikpKHRvTGVuZ3RoKGZpbiAtIGZpcnN0KSk7XG4gICAgdmFyIHZpZXdTID0gbmV3ICREYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1QgPSBuZXcgJERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKEFSUkFZX0JVRkZFUik7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0NjQnLCA4LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgV0VBS19NQVAgPSAnV2Vha01hcCc7XG52YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSB3ZWFrLnVmc3RvcmU7XG52YXIgSW50ZXJuYWxNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbnZhciBtZXRob2RzID0ge1xuICAvLyAyMy4zLjMuMyBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgV0VBS19NQVApKS5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sXG4gIC8vIDIzLjMuMy41IFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8vIDIzLjMgV2Vha01hcCBPYmplY3RzXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbmlmIChOQVRJVkVfV0VBS19NQVAgJiYgSVNfSUUxMSkge1xuICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgIHZhciBtZXRob2QgPSBwcm90b1trZXldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBXRUFLX1NFVCA9ICdXZWFrU2V0JztcblxuLy8gMjMuNCBXZWFrU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX1NFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjQuMy4xIFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gIH1cbn0sIHdlYWssIGZhbHNlLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0TWFwXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4sIEE7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXRNYXAnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0dGVuXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXR0ZW46IGZ1bmN0aW9uIGZsYXR0ZW4oLyogZGVwdGhBcmcgPSAxICovKSB7XG4gICAgdmFyIGRlcHRoQXJnID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgZGVwdGhBcmcgPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGhBcmcpKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0dGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJykgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHA6Ly9qZmJhc3RpZW4uZ2l0aHViLmlvL3BhcGVycy9NYXRoLnNpZ25iaXQuaHRtbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgIT0geCA/IHggOiB4ID09IDAgPyAxIC8geCA9PSBJbmZpbml0eSA6IHggPiAwO1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZVNldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IHNldDogYUZ1bmN0aW9uKHNldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoaXQpIHtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuL19vd24ta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXREZXNjID0gZ09QRC5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXksIGRlc2M7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaSkge1xuICAgICAgZGVzYyA9IGdldERlc2MoTywga2V5ID0ga2V5c1tpKytdKTtcbiAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjQgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBHZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBHZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5nZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjUgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIiwidmFyIFNldCA9IHJlcXVpcmUoJy4vZXM2LnNldCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG52YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5TWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSAnLi9UaW1lci5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDsgLy8gc2Vjb25kc1xyXG5cclxuZXhwb3J0IGNsYXNzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXHJcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyaW5nXCIpLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyZWRcIilcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXI7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkID0gYWNjZXNzVG9rZW5FeHBpcmVkVGltZXI7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZChjb250YWluZXIpIHtcclxuICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV2ZW50cyBpZiB0aGVyZSdzIGFuIGFjY2VzcyB0b2tlbiBhbmQgaXQgaGFzIGFuIGV4cGlyYXRpb25cclxuICAgICAgICBpZiAoY29udGFpbmVyLmFjY2Vzc190b2tlbiAmJiBjb250YWluZXIuZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IGNvbnRhaW5lci5leHBpcmVzX2luO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiBhY2Nlc3MgdG9rZW4gcHJlc2VudCwgcmVtYWluaW5nIGR1cmF0aW9uOlwiLCBkdXJhdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBvbmx5IHJlZ2lzdGVyIGV4cGlyaW5nIGlmIHdlIHN0aWxsIGhhdmUgdGltZVxyXG4gICAgICAgICAgICAgICAgbGV0IGV4cGlyaW5nID0gZHVyYXRpb24gLSB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuICAgICAgICAgICAgICAgIGlmIChleHBpcmluZyA8PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBleHBpcmluZyA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IHJlZ2lzdGVyaW5nIGV4cGlyaW5nIHRpbWVyIGluOlwiLCBleHBpcmluZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmluaXQoZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogY2FuY2VsaW5nIGV4aXN0aW5nIGV4cGlyaW5nIHRpbWVyIGJlY2FzZSB3ZSdyZSBwYXN0IGV4cGlyYXRpb24uXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgaXQncyBuZWdhdGl2ZSwgaXQgd2lsbCBzdGlsbCBmaXJlXHJcbiAgICAgICAgICAgIGxldCBleHBpcmVkID0gZHVyYXRpb24gKyAxO1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmVkIHRpbWVyIGluOlwiLCBleHBpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmluaXQoZXhwaXJlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuY2FuY2VsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy51bmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBhY2Nlc3MgdG9rZW4gdGltZXJzXCIpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyhjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRJbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hlY2tTZXNzaW9uSUZyYW1lIHtcclxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yID0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3VybCA9IHVybDtcclxuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IGludGVydmFsIHx8IERlZmF1bHRJbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wT25FcnJvciA9IHN0b3BPbkVycm9yO1xyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdXJsLmluZGV4T2YoXCIvXCIsIHVybC5pbmRleE9mKFwiLy9cIikgKyAyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZV9vcmlnaW4gPSB1cmwuc3Vic3RyKDAsIGlkeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHVybDtcclxuICAgIH1cclxuICAgIGxvYWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IHRoaXMuX21lc3NhZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfbWVzc2FnZShlKSB7XHJcbiAgICAgICAgaWYgKGUub3JpZ2luID09PSB0aGlzLl9mcmFtZV9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGUuZGF0YSA9PT0gXCJlcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGVycm9yIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdG9wT25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuZGF0YSA9PT0gXCJjaGFuZ2VkXCIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZTogY2hhbmdlZCBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IFwiICsgZS5kYXRhICsgXCIgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhcnQoc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uX3N0YXRlICE9PSBzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdGFydFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgICAgICBsZXQgc2VuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UodGhpcy5fY2xpZW50X2lkICsgXCIgXCIgKyB0aGlzLl9zZXNzaW9uX3N0YXRlLCB0aGlzLl9mcmFtZV9vcmlnaW4pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdHJpZ2dlciBub3dcclxuICAgICAgICAgICAgc2VuZCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gYW5kIHNldHVwIHRpbWVyXHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldEludGVydmFsKHNlbmQsIHRoaXMuX2ludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zZXNzaW9uX3N0YXRlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdG9wXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBDbG9ja1NlcnZpY2Uge1xyXG4gICAgZ2V0RXBvY2hUaW1lKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGF0ZS5ub3coKSAvIDEwMDAgfCAwKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyA9ICdoaWRkZW49eWVzJztcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx6b29tPW5vJztcclxuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHBhcmFtcy5wb3B1cFdpbmRvd1RhcmdldCB8fCBEZWZhdWx0UG9wdXBUYXJnZXQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdF91cmkgPSBwYXJhbXMuc3RhcnRVcmw7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93LmN0b3I6IHJlZGlyZWN0X3VyaTogXCIgKyB0aGlzLnJlZGlyZWN0X3VyaSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkge1xyXG4gICAgICAgIHJldHVybiBbXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXJcIiwgXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXIuaW5hcHBicm93c2VyXCIsIFwib3JnLmFwYWNoZS5jb3Jkb3ZhLmluYXBwYnJvd3NlclwiXS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3Jkb3ZhTWV0YWRhdGEuaGFzT3duUHJvcGVydHkobmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5jb3Jkb3ZhKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJjb3Jkb3ZhIGlzIHVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY29yZG92YU1ldGFkYXRhID0gd2luZG93LmNvcmRvdmEucmVxdWlyZShcImNvcmRvdmEvcGx1Z2luX2xpc3RcIikubWV0YWRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZChjb3Jkb3ZhTWV0YWRhdGEpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiSW5BcHBCcm93c2VyIHBsdWdpbiBub3QgZm91bmRcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IGNvcmRvdmEuSW5BcHBCcm93c2VyLm9wZW4ocGFyYW1zLnVybCwgdGhpcy50YXJnZXQsIHRoaXMuZmVhdHVyZXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50ID0gdGhpcy5fZXhpdENhbGxiYWNrLmJpbmQodGhpcyk7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCA9IHRoaXMuX2xvYWRTdGFydENhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJleGl0XCIsIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5hZGRFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFN0YXJ0Q2FsbGJhY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQudXJsLmluZGV4T2YodGhpcy5yZWRpcmVjdF91cmkpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IGV2ZW50LnVybCB9KTtcclxuICAgICAgICB9ICAgIFxyXG4gICAgfVxyXG4gICAgX2V4aXRDYWxsYmFjayhtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IobWVzc2FnZSk7ICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBjb3Jkb3ZhIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKXtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93OiBjbGVhbmluZyB1cCBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXJyb3JSZXNwb25zZSBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHtlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGVycm9yX3VyaSwgc3RhdGUsIHNlc3Npb25fc3RhdGV9PXt9XHJcbiAgICApIHtcclxuICAgICAgICAgaWYgKCFlcnJvcil7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk5vIGVycm9yIHBhc3NlZCB0byBFcnJvclJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlcnJvclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyKGVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFcnJvclJlc3BvbnNlXCI7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSBlcnJvcl91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhhbmRsZXIoY2IpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSGFuZGxlcihjYikge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYWxsYmFja3MuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY2IpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJhaXNlKC4uLnBhcmFtcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkV2ZW50OiBSYWlzaW5nIGV2ZW50OiBcIiArIHRoaXMuX25hbWUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tpXSguLi5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5jb25zdCB0aW1lciA9IHtcclxuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoY2IsIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKGNiLCBkdXJhdGlvbik7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgIHJldHVybiBjbGVhckludGVydmFsKGhhbmRsZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgdGVzdGluZyA9IGZhbHNlO1xyXG5sZXQgcmVxdWVzdCA9IG51bGw7XHJcblxyXG5leHBvcnQgY2xhc3MgR2xvYmFsIHtcclxuXHJcbiAgICBzdGF0aWMgX3Rlc3RpbmcoKSB7XHJcbiAgICAgICAgdGVzdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxvY2FsU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBzZXNzaW9uU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2V0WE1MSHR0cFJlcXVlc3QobmV3UmVxdWVzdCkge1xyXG4gICAgICAgIHJlcXVlc3QgPSBuZXdSZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgWE1MSHR0cFJlcXVlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0IHx8IFhNTEh0dHBSZXF1ZXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHRpbWVyKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGltZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lV2luZG93IH0gZnJvbSAnLi9JRnJhbWVXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgZnJhbWUgPSBuZXcgSUZyYW1lV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50KHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0VGltZW91dCA9IDEwMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZVdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS53aWR0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuaGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRpbWVvdXQgPSBwYXJhbXMuc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgRGVmYXVsdFRpbWVvdXQ7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5uYXZpZ2F0ZTogVXNpbmcgdGltZW91dCBvZjpcIiwgdGltZW91dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5fdGltZW91dC5iaW5kKHRoaXMpLCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWUuc3JjID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb21pc2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93OiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gZnJhbWUgd2luZG93XCIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuXHJcbiAgICAgICAgTG9nLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBfY2xlYW51cCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZnJhbWUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93OiBjbGVhbnVwXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLl9mcmFtZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfdGltZW91dCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cudGltZW91dFwiKTtcclxuICAgICAgICB0aGlzLl9lcnJvcihcIkZyYW1lIHdpbmRvdyB0aW1lZCBvdXRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgX21lc3NhZ2UoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5tZXNzYWdlXCIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fdGltZXIgJiZcclxuICAgICAgICAgICAgZS5vcmlnaW4gPT09IHRoaXMuX29yaWdpbiAmJlxyXG4gICAgICAgICAgICBlLnNvdXJjZSA9PT0gdGhpcy5fZnJhbWUuY29udGVudFdpbmRvdyAmJlxyXG4gICAgICAgICAgICAodHlwZW9mIGUuZGF0YSA9PT0gJ3N0cmluZycgJiYgKGUuZGF0YS5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgZS5kYXRhLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgdXJsID0gZS5kYXRhO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWNjZXNzKHsgdXJsOiB1cmwgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihcIkludmFsaWQgcmVzcG9uc2UgZnJvbSBmcmFtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgX29yaWdpbigpIHtcclxuICAgICAgICByZXR1cm4gbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3RpZnlQYXJlbnQodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudFwiKTtcclxuICAgICAgICB1cmwgPSB1cmwgfHwgd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50OiBwb3N0aW5nIHVybCBtZXNzYWdlIHRvIHBhcmVudFwiKTtcclxuICAgICAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh1cmwsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJbk1lbW9yeVdlYlN0b3JhZ2V7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5nZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5zZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShrZXkpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5yZW1vdmVJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAga2V5KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpW2luZGV4XTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0gZnJvbSAnLi9jcnlwdG8vanNyc2FzaWduJztcclxuaW1wb3J0IGdldEpvc2VVdGlsIGZyb20gJy4vSm9zZVV0aWxJbXBsJztcclxuXHJcbmV4cG9ydCBjb25zdCBKb3NlVXRpbCA9IGdldEpvc2VVdGlsKHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9KTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcclxuICAgIHJldHVybiBjbGFzcyBKb3NlVXRpbCB7XHJcblxyXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwucGFyc2VKd3RcIik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdG9rZW4uaGVhZGVyT2JqLFxyXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwudmFsaWRhdGVKd3RcIik7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5rdHkgPT09IFwiUlNBXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS54NWMgJiYga2V5Lng1Yy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGhleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5jcnYgJiYga2V5LnggJiYga2V5LnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogRUMga2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFVuc3VwcG9ydGVkIGtleSB0eXBlXCIsIGtleSAmJiBrZXkua3R5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUgJiYgZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNsb2NrU2tldykge1xyXG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFub3cpIHtcclxuICAgICAgICAgICAgICAgIG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKb3NlVXRpbC5wYXJzZUp3dChqd3QpLnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC5pc3MgIT09IGlzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGlzc3VlciBpbiB0b2tlblwiLCBwYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBhdWQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdWQgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHZhbGlkQXVkaWVuY2UgPSBwYXlsb2FkLmF1ZCA9PT0gYXVkaWVuY2UgfHwgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdWQpICYmIHBheWxvYWQuYXVkLmluZGV4T2YoYXVkaWVuY2UpID49IDApO1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkQXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmF1ZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhenAgaW4gdG9rZW5cIiwgcGF5bG9hZC5henApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXpwIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXpwKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXBwZXJOb3cgPSBub3cgLSBjbG9ja1NrZXc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaWF0IHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb3dlck5vdyA8IHBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLmlhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IG5iZiBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQubmJmKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibmJmIGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5uYmYpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCBpcyBpbiB0aGUgcGFzdFwiLCBwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCBpcyBpbiB0aGUgcGFzdDpcIiArIHBheWxvYWQuZXhwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3MuSldTLnZlcmlmeShqd3QsIGtleSwgQWxsb3dlZFNpZ25pbmdBbGdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IHNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhhc2hTdHJpbmcodmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5VdGlsLmhhc2hTdHJpbmcodmFsdWUsIGFsZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhleFRvQmFzZTY0VXJsKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZW50VHlwZXMgPSBudWxsLCBcclxuICAgICAgICBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIFxyXG4gICAgICAgIGp3dEhhbmRsZXIgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvbnRlbnRUeXBlcyAmJiBBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxDb250ZW50VHlwZXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gYWRkaXRpb25hbENvbnRlbnRUeXBlcy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBpZiAoand0SGFuZGxlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMucHVzaCgnYXBwbGljYXRpb24vand0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9qd3RIYW5kbGVyID0gand0SGFuZGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKc29uKHVybCwgdG9rZW4pIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb24sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcbiAgICAgICAgICAgIHZhciBqd3RIYW5kbGVyID0gdGhpcy5fand0SGFuZGxlcjtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb246IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBcImFwcGxpY2F0aW9uL2p3dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqd3RIYW5kbGVyKHJlcSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiB0b2tlbiBwYXNzZWQsIHNldHRpbmcgQXV0aG9yaXphdGlvbiBoZWFkZXJcIik7XHJcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEZvcm0odXJsLCBwYXlsb2FkLCBiYXNpY0F1dGgpIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBObyB1cmwgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5wb3N0Rm9ybSwgdXJsOiBcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIHZhciByZXEgPSBuZXcgdGhpcy5fWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICAgICAgcmVxLm9wZW4oJ1BPU1QnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcblxyXG4gICAgICAgICAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHJlcS5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiSW52YWxpZCByZXNwb25zZSBDb250ZW50LVR5cGU6IFwiICsgY29udGVudFR5cGUgKyBcIiwgZnJvbSBVUkw6IFwiICsgdXJsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSA0MDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXlsb2FkID0gSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBmcm9tIHNlcnZlcjogXCIsIHBheWxvYWQuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHBheWxvYWQuZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IG5ldHdvcmsgZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJOZXR3b3JrIEVycm9yXCIpKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCBib2R5ID0gXCJcIjtcclxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gcGF5bG9hZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHBheWxvYWRba2V5XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9IFwiJlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IFwiPVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmFzaWNBdXRoICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJhc2ljIFwiICsgYnRvYShiYXNpY0F1dGgpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVxLnNlbmQoYm9keSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxubGV0IG5vcExvZ2dlciA9IHtcclxuICAgIGRlYnVnKCl7fSxcclxuICAgIGluZm8oKXt9LFxyXG4gICAgd2Fybigpe30sXHJcbiAgICBlcnJvcigpe31cclxufTtcclxuXHJcbmNvbnN0IE5PTkUgPSAwO1xyXG5jb25zdCBFUlJPUiA9IDE7XHJcbmNvbnN0IFdBUk4gPSAyO1xyXG5jb25zdCBJTkZPID0gMztcclxuY29uc3QgREVCVUcgPSA0O1xyXG5cclxubGV0IGxvZ2dlcjtcclxubGV0IGxldmVsO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvZyB7XHJcbiAgICBzdGF0aWMgZ2V0IE5PTkUoKSB7cmV0dXJuIE5PTkV9O1xyXG4gICAgc3RhdGljIGdldCBFUlJPUigpIHtyZXR1cm4gRVJST1J9O1xyXG4gICAgc3RhdGljIGdldCBXQVJOKCkge3JldHVybiBXQVJOfTtcclxuICAgIHN0YXRpYyBnZXQgSU5GTygpIHtyZXR1cm4gSU5GT307XHJcbiAgICBzdGF0aWMgZ2V0IERFQlVHKCkge3JldHVybiBERUJVR307XHJcbiAgICBcclxuICAgIHN0YXRpYyByZXNldCgpe1xyXG4gICAgICAgIGxldmVsID0gSU5GTztcclxuICAgICAgICBsb2dnZXIgPSBub3BMb2dnZXI7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbGV2ZWwoKXtcclxuICAgICAgICByZXR1cm4gbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgc2V0IGxldmVsKHZhbHVlKXtcclxuICAgICAgICBpZiAoTk9ORSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxldmVsID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXQgbG9nZ2VyKCl7XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbG9nZ2VyKHZhbHVlKXtcclxuICAgICAgICBpZiAoIXZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8pIHtcclxuICAgICAgICAgICAgLy8ganVzdCB0byBzdGF5IGJhY2t3YXJkcyBjb21wYXQuIGNhbiByZW1vdmUgaW4gMi4wXHJcbiAgICAgICAgICAgIHZhbHVlLmRlYnVnID0gdmFsdWUuaW5mbztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5kZWJ1ZyAmJiB2YWx1ZS5pbmZvICYmIHZhbHVlLndhcm4gJiYgdmFsdWUuZXJyb3Ipe1xyXG4gICAgICAgICAgICBsb2dnZXIgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nZ2VyXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGRlYnVnKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBERUJVRyl7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBpbmZvKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBJTkZPKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgd2FybiguLi5hcmdzKXtcclxuICAgICAgICBpZiAobGV2ZWwgPj0gV0FSTil7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGVycm9yKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBFUlJPUil7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvci5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuTG9nLnJlc2V0KCk7XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZTogTm8gc2V0dGluZ3MgcGFzc2VkIHRvIE1ldGFkYXRhU2VydmljZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcihbJ2FwcGxpY2F0aW9uL2p3ay1zZXQranNvbiddKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICByZXNldFNpZ25pbmdLZXlzKCkge1xyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gdGhpcy5fc2V0dGluZ3MgfHwge31cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIGdldE1ldGFkYXRhKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IFJldHVybmluZyBtZXRhZGF0YSBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IE5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBnZXR0aW5nIG1ldGFkYXRhIGZyb21cIiwgdGhpcy5tZXRhZGF0YVVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHRoaXMubWV0YWRhdGFVcmwpXHJcbiAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YToganNvbiByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIHNlZWQgPSB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVNlZWQgfHwge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIHNlZWQsIG1ldGFkYXRhKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXNzdWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiaXNzdWVyXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF1dGhvcml6YXRpb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImF1dGhvcml6YXRpb25fZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlckluZm9FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInVzZXJpbmZvX2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRva2VuRW5kcG9pbnQob3B0aW9uYWw9dHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwidG9rZW5fZW5kcG9pbnRcIiwgb3B0aW9uYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoZWNrU2Vzc2lvbklmcmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImNoZWNrX3Nlc3Npb25faWZyYW1lXCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVuZFNlc3Npb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImVuZF9zZXNzaW9uX2VuZHBvaW50XCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJldm9jYXRpb25FbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInJldm9jYXRpb25fZW5kcG9pbnRcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0S2V5c0VuZHBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiandrc191cmlcIiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldE1ldGFkYXRhUHJvcGVydHkobmFtZSwgb3B0aW9uYWw9ZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eSBmb3I6IFwiICsgbmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBtZXRhZGF0YSByZWNpZXZlZFwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBvcHRpb25hbCBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhW25hbWVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNpZ25pbmdLZXlzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cykge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IFJldHVybmluZyBzaWduaW5nS2V5cyBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiandrc191cmlcIikudGhlbihqd2tzX3VyaSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogandrc191cmkgcmVjZWl2ZWRcIiwgandrc191cmkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24oandrc191cmkpLnRoZW4oa2V5U2V0ID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czoga2V5IHNldCByZWNlaXZlZFwiLCBrZXlTZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgha2V5U2V0LmtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IE1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBrZXlzIG9uIGtleXNldFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyA9IGtleVNldC5rZXlzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4vRXJyb3JSZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlcXVlc3QgfSBmcm9tICcuL1NpZ25pblJlcXVlc3QuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXNwb25zZSB9IGZyb20gJy4vU2lnbmluUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWdub3V0UmVxdWVzdCB9IGZyb20gJy4vU2lnbm91dFJlcXVlc3QuanMnO1xyXG5pbXBvcnQgeyBTaWdub3V0UmVzcG9uc2UgfSBmcm9tICcuL1NpZ25vdXRSZXNwb25zZS5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblN0YXRlIH0gZnJvbSAnLi9TaWduaW5TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncyA9IHt9KSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzIGluc3RhbmNlb2YgT2lkY0NsaWVudFNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IG5ldyBPaWRjQ2xpZW50U2V0dGluZ3Moc2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3N0YXRlU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Muc3RhdGVTdG9yZTtcclxuICAgIH1cclxuICAgIGdldCBfdmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnZhbGlkYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCByZWRpcmVjdF91cmksXHJcbiAgICAgICAgLy8gZGF0YSB3YXMgbWVhbnQgdG8gYmUgdGhlIHBsYWNlIGEgY2FsbGVyIGNvdWxkIGluZGljYXRlIHRoZSBkYXRhIHRvXHJcbiAgICAgICAgLy8gaGF2ZSByb3VuZCB0cmlwcGVkLCBidXQgcGVvcGxlIHdlcmUgZ2V0dGluZyBjb25mdXNlZCwgc28gaSBhZGRlZCBzdGF0ZSAoc2luY2UgdGhhdCBtYXRjaGVzIHRoZSBzcGVjKVxyXG4gICAgICAgIC8vIGFuZCBzbyBub3cgaWYgZGF0YSBpcyBub3QgcGFzc2VkLCBidXQgc3RhdGUgaXMgdGhlbiBzdGF0ZSB3aWxsIGJlIHVzZWRcclxuICAgICAgICBkYXRhLCBzdGF0ZSwgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLFxyXG4gICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCBza2lwVXNlckluZm8gfSA9IHt9LFxyXG4gICAgICAgIHN0YXRlU3RvcmVcclxuICAgICkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbmluUmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgbGV0IGNsaWVudF9pZCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICByZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHNjb3BlID0gc2NvcGUgfHwgdGhpcy5fc2V0dGluZ3Muc2NvcGU7XHJcbiAgICAgICAgcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgLy8gaWRfdG9rZW5faGludCwgbG9naW5faGludCBhcmVuJ3QgYWxsb3dlZCBvbiBfc2V0dGluZ3NcclxuICAgICAgICBwcm9tcHQgPSBwcm9tcHQgfHwgdGhpcy5fc2V0dGluZ3MucHJvbXB0O1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8IHRoaXMuX3NldHRpbmdzLmRpc3BsYXk7XHJcbiAgICAgICAgbWF4X2FnZSA9IG1heF9hZ2UgfHwgdGhpcy5fc2V0dGluZ3MubWF4X2FnZTtcclxuICAgICAgICB1aV9sb2NhbGVzID0gdWlfbG9jYWxlcyB8fCB0aGlzLl9zZXR0aW5ncy51aV9sb2NhbGVzO1xyXG4gICAgICAgIGFjcl92YWx1ZXMgPSBhY3JfdmFsdWVzIHx8IHRoaXMuX3NldHRpbmdzLmFjcl92YWx1ZXM7XHJcbiAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNvdXJjZTtcclxuICAgICAgICByZXNwb25zZV9tb2RlID0gcmVzcG9uc2VfbW9kZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcbiAgICAgICAgZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFUb2tlblBhcmFtcztcclxuXHJcbiAgICAgICAgbGV0IGF1dGhvcml0eSA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgaWYgKFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpICYmIHJlc3BvbnNlX3R5cGUgIT09IFwiY29kZVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJPcGVuSUQgQ29ubmVjdCBoeWJyaWQgZmxvdyBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3Q6IFJlY2VpdmVkIGF1dGhvcml6YXRpb24gZW5kcG9pbnRcIiwgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaWduaW5SZXF1ZXN0ID0gbmV3IFNpZ25pblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X2lkLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICAgICAgICAgIHNjb3BlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICAgICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgICAgIHNraXBVc2VySW5mb1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzaWduaW5TdGF0ZSA9IHNpZ25pblJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVTdG9yZS5zZXQoc2lnbmluU3RhdGUuaWQsIHNpZ25pblN0YXRlLnRvU3RvcmFnZVN0cmluZygpKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaW5SZXF1ZXN0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlXCIpO1xyXG5cclxuICAgICAgICBsZXQgdXNlUXVlcnkgPSB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlID09PSBcInF1ZXJ5XCIgfHwgXHJcbiAgICAgICAgICAgICghdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZSAmJiBTaWduaW5SZXF1ZXN0LmlzQ29kZSh0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlKSk7XHJcbiAgICAgICAgbGV0IGRlbGltaXRlciA9IHVzZVF1ZXJ5ID8gXCI/XCIgOiBcIiNcIjtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25pblJlc3BvbnNlKHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN0YXRlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShyZXNwb25zZS5zdGF0ZSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbmluUmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlU2lnbm91dFJlcXVlc3Qoe2lkX3Rva2VuX2hpbnQsIGRhdGEsIHN0YXRlLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXHJcbiAgICAgICAgc3RhdGVTdG9yZVxyXG4gICAgKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEVuZFNlc3Npb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IE5vIGVuZCBzZXNzaW9uIGVuZHBvaW50IHVybCByZXR1cm5lZFwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBSZWNlaXZlZCBlbmQgc2Vzc2lvbiBlbmRwb2ludFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgU2lnbm91dFJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faGludCxcclxuICAgICAgICAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdF90eXBlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25vdXRTdGF0ZSA9IHJlcXVlc3Quc3RhdGU7XHJcbiAgICAgICAgICAgIGlmIChzaWdub3V0U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFNpZ25vdXQgcmVxdWVzdCBoYXMgc3RhdGUgdG8gcGVyc2lzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVTdG9yZS5zZXQoc2lnbm91dFN0YXRlLmlkLCBzaWdub3V0U3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCByZW1vdmVTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG5ldyBTaWdub3V0UmVzcG9uc2UodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLndhcm4oXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogUmVzcG9uc2Ugd2FzIGVycm9yOiBcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3N0YXRlOiB1bmRlZmluZWQsIHJlc3BvbnNlfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3RhdGVLZXkgPSByZXNwb25zZS5zdGF0ZTtcclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXRlQXBpID0gcmVtb3ZlU3RhdGUgPyBzdGF0ZVN0b3JlLnJlbW92ZS5iaW5kKHN0YXRlU3RvcmUpIDogc3RhdGVTdG9yZS5nZXQuYmluZChzdGF0ZVN0b3JlKTtcclxuICAgICAgICByZXR1cm4gc3RhdGVBcGkoc3RhdGVLZXkpLnRoZW4oc3RvcmVkU3RhdGVTdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXN0b3JlZFN0YXRlU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IFN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JlZFN0YXRlU3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzU2lnbm91dFJlc3BvbnNlKHVybCwgc3RhdGVTdG9yZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2U6IFJlY2VpdmVkIHN0YXRlIGZyb20gc3RvcmFnZTsgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZTogTm8gc3RhdGUgZnJvbSBzdG9yYWdlOyBza2lwcGluZyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJTdGFsZVN0YXRlKHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNsZWFyU3RhbGVTdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFN0YXRlLmNsZWFyU3RhbGVTdGF0ZShzdGF0ZVN0b3JlLCB0aGlzLnNldHRpbmdzLnN0YWxlU3RhdGVBZ2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQ2xvY2tTZXJ2aWNlIH0gZnJvbSAnLi9DbG9ja1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVZhbGlkYXRvciB9IGZyb20gJy4vUmVzcG9uc2VWYWxpZGF0b3IuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcblxyXG5jb25zdCBPaWRjTWV0YWRhdGFVcmxQYXRoID0gJy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJztcclxuXHJcbmNvbnN0IERlZmF1bHRSZXNwb25zZVR5cGUgPSBcImlkX3Rva2VuXCI7XHJcbmNvbnN0IERlZmF1bHRTY29wZSA9IFwib3BlbmlkXCI7XHJcbmNvbnN0IERlZmF1bHRDbGllbnRBdXRoZW50aWNhdGlvbiA9IFwiY2xpZW50X3NlY3JldF9wb3N0XCIgLy8gVGhlIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSBjbGllbnRfc2VjcmV0X2Jhc2ljLCBhcyBleHBsYWluZWQgaW4gaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xpZW50QXV0aGVudGljYXRpb25cclxuY29uc3QgRGVmYXVsdFN0YWxlU3RhdGVBZ2UgPSA2MCAqIDE1OyAvLyBzZWNvbmRzXHJcbmNvbnN0IERlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMgPSA2MCAqIDU7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICAvLyBtZXRhZGF0YSByZWxhdGVkXHJcbiAgICAgICAgYXV0aG9yaXR5LCBtZXRhZGF0YVVybCwgbWV0YWRhdGEsIHNpZ25pbmdLZXlzLCBtZXRhZGF0YVNlZWQsXHJcbiAgICAgICAgLy8gY2xpZW50IHJlbGF0ZWRcclxuICAgICAgICBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHJlc3BvbnNlX3R5cGUgPSBEZWZhdWx0UmVzcG9uc2VUeXBlLCBzY29wZSA9IERlZmF1bHRTY29wZSxcclxuICAgICAgICByZWRpcmVjdF91cmksIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBjbGllbnRfYXV0aGVudGljYXRpb24gPSBEZWZhdWx0Q2xpZW50QXV0aGVudGljYXRpb24sXHJcbiAgICAgICAgLy8gb3B0aW9uYWwgcHJvdG9jb2xcclxuICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXMgPSB0cnVlLCBsb2FkVXNlckluZm8gPSB0cnVlLFxyXG4gICAgICAgIHN0YWxlU3RhdGVBZ2UgPSBEZWZhdWx0U3RhbGVTdGF0ZUFnZSwgXHJcbiAgICAgICAgY2xvY2tTa2V3ID0gRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyxcclxuICAgICAgICBjbG9ja1NlcnZpY2UgPSBuZXcgQ2xvY2tTZXJ2aWNlKCksXHJcbiAgICAgICAgdXNlckluZm9Kd3RJc3N1ZXIgPSAnT1AnLFxyXG4gICAgICAgIG1lcmdlQ2xhaW1zID0gZmFsc2UsXHJcbiAgICAgICAgLy8gb3RoZXIgYmVoYXZpb3JcclxuICAgICAgICBzdGF0ZVN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKCksXHJcbiAgICAgICAgUmVzcG9uc2VWYWxpZGF0b3JDdG9yID0gUmVzcG9uc2VWYWxpZGF0b3IsXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0ge30sXHJcbiAgICAgICAgZXh0cmFUb2tlblBhcmFtcyA9IHt9XHJcbiAgICB9ID0ge30pIHtcclxuXHJcbiAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gYXV0aG9yaXR5O1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gbWV0YWRhdGFVcmw7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlZWQgPSBtZXRhZGF0YVNlZWQ7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSBzaWduaW5nS2V5cztcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlO1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9jbGllbnRfYXV0aGVudGljYXRpb24gPSBjbGllbnRfYXV0aGVudGljYXRpb247XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb21wdCA9IHByb21wdDtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5ID0gZGlzcGxheTtcclxuICAgICAgICB0aGlzLl9tYXhfYWdlID0gbWF4X2FnZTtcclxuICAgICAgICB0aGlzLl91aV9sb2NhbGVzID0gdWlfbG9jYWxlcztcclxuICAgICAgICB0aGlzLl9hY3JfdmFsdWVzID0gYWNyX3ZhbHVlcztcclxuICAgICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyA9ICEhZmlsdGVyUHJvdG9jb2xDbGFpbXM7XHJcbiAgICAgICAgdGhpcy5fbG9hZFVzZXJJbmZvID0gISFsb2FkVXNlckluZm87XHJcbiAgICAgICAgdGhpcy5fc3RhbGVTdGF0ZUFnZSA9IHN0YWxlU3RhdGVBZ2U7XHJcbiAgICAgICAgdGhpcy5fY2xvY2tTa2V3ID0gY2xvY2tTa2V3O1xyXG4gICAgICAgIHRoaXMuX2Nsb2NrU2VydmljZSA9IGNsb2NrU2VydmljZTtcclxuICAgICAgICB0aGlzLl91c2VySW5mb0p3dElzc3VlciA9IHVzZXJJbmZvSnd0SXNzdWVyO1xyXG4gICAgICAgIHRoaXMuX21lcmdlQ2xhaW1zID0gISFtZXJnZUNsYWltcztcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmU7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9yID0gbmV3IFJlc3BvbnNlVmFsaWRhdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHR5cGVvZiBleHRyYVF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0JyA/IGV4dHJhUXVlcnlQYXJhbXMgOiB7fTtcclxuICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0gdHlwZW9mIGV4dHJhVG9rZW5QYXJhbXMgPT09ICdvYmplY3QnID8gZXh0cmFUb2tlblBhcmFtcyA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsaWVudCBjb25maWdcclxuICAgIGdldCBjbGllbnRfaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcclxuICAgIH1cclxuICAgIHNldCBjbGllbnRfaWQodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudF9pZCkge1xyXG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxyXG4gICAgICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfY2xpZW50X2lkOiBjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGNsaWVudF9zZWNyZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9zZWNyZXQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfdHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfdHlwZTtcclxuICAgIH1cclxuICAgIGdldCBzY29wZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGU7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X2F1dGhlbnRpY2F0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfYXV0aGVudGljYXRpb247XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvLyBvcHRpb25hbCBwcm90b2NvbCBwYXJhbXNcclxuICAgIGdldCBwcm9tcHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdDtcclxuICAgIH1cclxuICAgIGdldCBkaXNwbGF5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5O1xyXG4gICAgfVxyXG4gICAgZ2V0IG1heF9hZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heF9hZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgdWlfbG9jYWxlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdWlfbG9jYWxlcztcclxuICAgIH1cclxuICAgIGdldCBhY3JfdmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3JfdmFsdWVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJlc291cmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZTtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV9tb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBtZXRhZGF0YVxyXG4gICAgZ2V0IGF1dGhvcml0eSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yaXR5O1xyXG4gICAgfVxyXG4gICAgc2V0IGF1dGhvcml0eSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9hdXRob3JpdHk6IGF1dGhvcml0eSBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsICYmIHRoaXMuX21ldGFkYXRhVXJsLmluZGV4T2YoT2lkY01ldGFkYXRhVXJsUGF0aCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXR0YWJsZS9jYWNoYWJsZSBtZXRhZGF0YSB2YWx1ZXNcclxuICAgIGdldCBtZXRhZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICBzZXQgbWV0YWRhdGEodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhU2VlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZWVkO1xyXG4gICAgfVxyXG4gICAgc2V0IG1ldGFkYXRhU2VlZCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VlZCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWduaW5nS2V5cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluZ0tleXM7XHJcbiAgICB9XHJcbiAgICBzZXQgc2lnbmluZ0tleXModmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9zaWduaW5nS2V5cyA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICBnZXQgZmlsdGVyUHJvdG9jb2xDbGFpbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IGxvYWRVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0YWxlU3RhdGVBZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWxlU3RhdGVBZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xvY2tTa2V3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1NrZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdXNlckluZm9Kd3RJc3N1ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1lcmdlQ2xhaW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXJnZUNsYWltcztcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IHN0YXRlU3RvcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlU3RvcmU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXh0cmEgcXVlcnkgcGFyYW1zXHJcbiAgICBnZXQgZXh0cmFRdWVyeVBhcmFtcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFRdWVyeVBhcmFtcztcclxuICAgIH1cclxuICAgIHNldCBleHRyYVF1ZXJ5UGFyYW1zKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpe1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYSB0b2tlbiBwYXJhbXNcclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4dHJhVG9rZW5QYXJhbXModmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhVG9rZW5QYXJhbXMgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCB0aGUgdGltZVxyXG4gICAgZ2V0RXBvY2hUaW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1NlcnZpY2UuZ2V0RXBvY2hUaW1lKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBQb3B1cFdpbmRvdyB9IGZyb20gJy4vUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwTmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKHBhcmFtcykge1xyXG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBQb3B1cFdpbmRvdyhwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9wdXApO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XHJcblxyXG5jb25zdCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwgPSA1MDA7XHJcbmNvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDsnO1xyXG4vL2NvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDtyZXNpemFibGU9eWVzJztcclxuXHJcbmNvbnN0IERlZmF1bHRQb3B1cFRhcmdldCA9IFwiX2JsYW5rXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBwYXJhbXMucG9wdXBXaW5kb3dUYXJnZXQgfHwgRGVmYXVsdFBvcHVwVGFyZ2V0O1xyXG4gICAgICAgIGxldCBmZWF0dXJlcyA9IHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IERlZmF1bHRQb3B1cEZlYXR1cmVzO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IHdpbmRvdy5vcGVuKCcnLCB0YXJnZXQsIGZlYXR1cmVzKTtcclxuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY3RvcjogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkLmJpbmQodGhpcyksIENoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogbm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5hdmlnYXRlOiBTZXR0aW5nIFVSTCBpbiBwb3B1cFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2lkID0gcGFyYW1zLmlkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faWQpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvd1tcInBvcHVwQ2FsbGJhY2tfXCIgKyBwYXJhbXMuaWRdID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuZm9jdXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAud2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gcG9wdXAgd2luZG93XCIpO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcclxuICAgIH1cclxuICAgIF9lcnJvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgTG9nLmVycm9yKFwiUG9wdXBXaW5kb3cuZXJyb3I6IFwiLCBtZXNzYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoa2VlcE9wZW4pIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jbGVhbnVwXCIpO1xyXG5cclxuICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIpO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IG51bGw7XHJcblxyXG4gICAgICAgIGRlbGV0ZSB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgdGhpcy5faWRdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcG9wdXAgJiYgIWtlZXBPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tGb3JQb3B1cENsb3NlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwIHx8IHRoaXMuX3BvcHVwLmNsb3NlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIlBvcHVwIHdpbmRvdyBjbG9zZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cChrZWVwT3Blbik7XHJcblxyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2sgc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2s6IEludmFsaWQgcmVzcG9uc2UgZnJvbSBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIGRlbGltaXRlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IFwicG9wdXBDYWxsYmFja19cIiArIGRhdGEuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gd2luZG93Lm9wZW5lcltuYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBwYXNzaW5nIHVybCBtZXNzYWdlIHRvIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gbWF0Y2hpbmcgY2FsbGJhY2sgZm91bmQgb24gb3BlbmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyBzdGF0ZSBmb3VuZCBpbiByZXNwb25zZSB1cmxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyB3aW5kb3cub3BlbmVyLiBDYW4ndCBjb21wbGV0ZSBub3RpZmljYXRpb24uXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVkaXJlY3ROYXZpZ2F0b3Ige1xyXG5cclxuICAgIHByZXBhcmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZWRpcmVjdE5hdmlnYXRvci5uYXZpZ2F0ZTogTm8gdXJsIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYXJhbXMudXNlUmVwbGFjZVRvTmF2aWdhdGUpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UocGFyYW1zLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBwYXJhbXMudXJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1cmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBVc2VySW5mb1NlcnZpY2UgfSBmcm9tICcuL1VzZXJJbmZvU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuY29uc3QgUHJvdG9jb2xDbGFpbXMgPSBbXCJub25jZVwiLCBcImF0X2hhc2hcIiwgXCJpYXRcIiwgXCJuYmZcIiwgXCJleHBcIiwgXCJhdWRcIiwgXCJpc3NcIiwgXCJjX2hhc2hcIl07XHJcblxyXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VWYWxpZGF0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBcclxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICAgIFVzZXJJbmZvU2VydmljZUN0b3IgPSBVc2VySW5mb1NlcnZpY2UsIFxyXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWwsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZCB0byBSZXNwb25zZVZhbGlkYXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl91c2VySW5mb1NlcnZpY2UgPSBuZXcgVXNlckluZm9TZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NTaWduaW5QYXJhbXMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogc3RhdGUgcHJvY2Vzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHRva2VucyB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NsYWltcyhzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IGNsYWltcyBwcm9jZXNzZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlU2lnbm91dFJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiU3RhdGUgZG9lcyBub3QgbWF0Y2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyB0aGUgc3RhdGUgbWF0Y2hlcywgdGFrZSB0aGUgc3RvcmVkIGRhdGFcclxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxyXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBzdGF0ZSB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc1NpZ25pblBhcmFtcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoc3RhdGUuaWQgIT09IHJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBObyBjbGllbnRfaWQgb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjbGllbnRfaWQgb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzIGFsbG93cyB0aGUgYXV0aG9yaXR5IHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBzaWduaW4gc3RhdGVcclxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgPSBzdGF0ZS5hdXRob3JpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBhdXRob3JpdHkgaWYgdGhlIGF1dGhvcml0eSBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ICYmIHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAhPT0gc3RhdGUuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBhdXRob3JpdHkgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdGhlIGNsaWVudF9pZCB0byBiZSBsb2FkZWQgZnJvbSB0aGUgc2lnbmluIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkID0gc3RhdGUuY2xpZW50X2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbnN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgY2xpZW50X2lkIGlmIHRoZSBjbGllbnRfaWQgaXMgbm90IGxvYWRlZCBmcm9tIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCAmJiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgIT09IHN0YXRlLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogY2xpZW50X2lkIG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxyXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXHJcbiAgICAgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGJvdGggc3VjY2VzcyAmIGVycm9yIG91dGNvbWVzXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IHN0YXRlIHZhbGlkYXRlZFwiKTtcclxuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiAhcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IEV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUubm9uY2UgJiYgcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmICFyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBFeHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGNvZGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmIHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY29kZSBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnNjb3BlKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc2NvcGUgb24gdGhlIHJlc3BvbnNlLCB0aGVuIGFzc3VtZSBhbGwgc2NvcGVzIGdyYW50ZWQgKHBlci1zcGVjKSBhbmQgY29weSBvdmVyIHNjb3BlcyBmcm9tIG9yaWdpbmFsIHJlcXVlc3RcclxuICAgICAgICAgICAgcmVzcG9uc2Uuc2NvcGUgPSBzdGF0ZS5zY29wZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzQ2xhaW1zKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5pc09wZW5JZENvbm5lY3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIE9JREMsIHByb2Nlc3NpbmcgY2xhaW1zXCIpO1xyXG5cclxuICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnNraXBVc2VySW5mbyAhPT0gdHJ1ZSAmJiB0aGlzLl9zZXR0aW5ncy5sb2FkVXNlckluZm8gJiYgcmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogbG9hZGluZyB1c2VyIGluZm9cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvU2VydmljZS5nZXRDbGFpbXMocmVzcG9uc2UuYWNjZXNzX3Rva2VuKS50aGVuKGNsYWltcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQgZnJvbSB1c2VyIGluZm8gZW5kcG9pbnRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFpbXMuc3ViICE9PSByZXNwb25zZS5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogc3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQsIHVwZGF0ZWQgcHJvZmlsZTpcIiwgcmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IG5vdCBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIG5vdCBPSURDLCBub3QgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVyZ2VDbGFpbXMoY2xhaW1zMSwgY2xhaW1zMikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMxKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjbGFpbXMyKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBjbGFpbXMyW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXS5pbmRleE9mKHZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFtuYW1lXSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0aGlzLl9zZXR0aW5ncy5tZXJnZUNsYWltcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB0aGlzLl9tZXJnZUNsYWltcyhyZXN1bHRbbmFtZV0sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IFtyZXN1bHRbbmFtZV0sIHZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlclByb3RvY29sQ2xhaW1zKGNsYWltcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltcywgaW5jb21pbmcgY2xhaW1zOlwiLCBjbGFpbXMpO1xyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgY2xhaW1zKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLl9maWx0ZXJQcm90b2NvbENsYWltcykge1xyXG4gICAgICAgICAgICBQcm90b2NvbENsYWltcy5mb3JFYWNoKHR5cGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFt0eXBlXTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHByb3RvY29sIGNsYWltcyBmaWx0ZXJlZFwiLCByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zOiBwcm90b2NvbCBjbGFpbXMgbm90IGZpbHRlcmVkXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZVRva2VucyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgY29kZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NDb2RlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGlkX3Rva2VuIGFuZCBhY2Nlc3NfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4oc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IE5vIGNvZGUgdG8gcHJvY2VzcyBvciBpZF90b2tlbiB0byB2YWxpZGF0ZVwiKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc0NvZGUoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgdmFyIHJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIGNsaWVudF9pZDogc3RhdGUuY2xpZW50X2lkLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiBzdGF0ZS5jbGllbnRfc2VjcmV0LFxyXG4gICAgICAgICAgICBjb2RlIDogcmVzcG9uc2UuY29kZSxcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiBzdGF0ZS5yZWRpcmVjdF91cmksXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHN0YXRlLmNvZGVfdmVyaWZpZXJcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoc3RhdGUuZXh0cmFUb2tlblBhcmFtcyAmJiB0eXBlb2Yoc3RhdGUuZXh0cmFUb2tlblBhcmFtcykgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdCwgc3RhdGUuZXh0cmFUb2tlblBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZUNvZGUocmVxdWVzdCkudGhlbih0b2tlblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHRva2VuUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW2tleV0gPSB0b2tlblJlc3BvbnNlW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDb2RlOiB0b2tlbiByZXNwb25zZSBzdWNjZXNzZnVsLCBwcm9jZXNzaW5nIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ29kZTogdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc2Z1bCwgcmV0dXJuaW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBWYWxpZGFpbmcgSldUIGF0dHJpYnV0ZXM7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5nZXRFcG9jaFRpbWUoKS50aGVuKG5vdyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKHJlc3BvbnNlLmlkX3Rva2VuLCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMsIG5vdykudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiBzdGF0ZS5ub25jZSAhPT0gcGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4oc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFNpZ25pbmdLZXlGb3JKd3Qoand0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG4gICAgICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICBpZiAoIWtpZCkge1xyXG4gICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1swXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgIH0pWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0U2lnbmluZ0tleUZvckp3dFdpdGhTaW5nbGVSZXRyeShqd3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2lnbmluZ0tleUZvckp3dChqd3QpLnRoZW4oa2V5ID0+IHtcclxuICAgICAgICAgICAgLy8gUmVmcmVzaGluZyBzaWduaW5nS2V5cyBpZiBubyBzdWl0YWJsZSB2ZXJpZmljYXRpb24ga2V5IGlzIHByZXNlbnQgZm9yIGdpdmVuIGp3dCBoZWFkZXIuXHJcbiAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdW5kZWZpbmVkLCB0byB0cmlnZ2VyIG5ldHdvcmsgY2FsbCB0byBqd2tzX3VyaS5cclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZS5yZXNldFNpZ25pbmdLZXlzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2lnbmluZ0tleUZvckp3dChqd3QpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIG5vbmNlIG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gbm9uY2Ugb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlciB8fCAhand0LnBheWxvYWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICE9PSBqd3QucGF5bG9hZC5ub25jZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgaXNzdWVyXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2lnbmluZ0tleUZvckp3dFdpdGhTaW5nbGVSZXRyeShqd3QpLnRoZW4oa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogVmFsaWRhaW5nIEpXVDsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXNwb25zZS5pZF90b2tlbiwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWp3dC5wYXlsb2FkLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBqd3QucGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJCeUFsZyhrZXlzLCBhbGcpe1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IExvb2tpbmcgZm9yIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHkpO1xyXG5cclxuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleS5rdHkgPT09IGt0eTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UucHJvZmlsZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gcHJvZmlsZSBsb2FkZWQgZnJvbSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdF9oYXNoIGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcclxuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hBbGcgPSBqd3QuaGVhZGVyLmFsZztcclxuICAgICAgICBpZiAoIWhhc2hBbGcgfHwgaGFzaEFsZy5sZW5ndGggIT09IDUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhhc2hCaXRzID0gaGFzaEFsZy5zdWJzdHIoMiwgMyk7XHJcbiAgICAgICAgaWYgKCFoYXNoQml0cykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnLCBoYXNoQml0cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaGFzaEJpdHMgPSBwYXJzZUludChoYXNoQml0cyk7XHJcbiAgICAgICAgaWYgKGhhc2hCaXRzICE9PSAyNTYgJiYgaGFzaEJpdHMgIT09IDM4NCAmJiBoYXNoQml0cyAhPT0gNTEyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2hhID0gXCJzaGFcIiArIGhhc2hCaXRzO1xyXG4gICAgICAgIHZhciBoYXNoID0gdGhpcy5fam9zZVV0aWwuaGFzaFN0cmluZyhyZXNwb25zZS5hY2Nlc3NfdG9rZW4sIHNoYSk7XHJcbiAgICAgICAgaWYgKCFoYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4gaGFzaCBmYWlsZWQ6XCIsIHNoYSk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbGVmdCA9IGhhc2guc3Vic3RyKDAsIGhhc2gubGVuZ3RoIC8gMik7XHJcbiAgICAgICAgdmFyIGxlZnRfYjY0dSA9IHRoaXMuX2pvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGxlZnQpO1xyXG4gICAgICAgIGlmIChsZWZ0X2I2NHUgIT09IHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIiwgbGVmdF9iNjR1LCByZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IHN1Y2Nlc3NcIik7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9DaGVja1Nlc3Npb25JRnJhbWUuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1vbml0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHVzZXJNYW5hZ2VyLCBDaGVja1Nlc3Npb25JRnJhbWVDdG9yID0gQ2hlY2tTZXNzaW9uSUZyYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lcikge1xyXG4gICAgICAgIGlmICghdXNlck1hbmFnZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IuY3RvcjogTm8gdXNlciBtYW5hZ2VyIHBhc3NlZCB0byBTZXNzaW9uTW9uaXRvclwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXNlck1hbmFnZXJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlciA9IHVzZXJNYW5hZ2VyO1xyXG4gICAgICAgIHRoaXMuX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IgPSBDaGVja1Nlc3Npb25JRnJhbWVDdG9yO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyTG9hZGVkKHRoaXMuX3N0YXJ0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyVW5sb2FkZWQodGhpcy5fc3RvcC5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1hbnVhbGx5IGhlcmUgc2luY2UgY2FsbGluZyBnZXRVc2VyIFxyXG4gICAgICAgICAgICAvLyBkb2Vzbid0IHRyaWdnZXIgbG9hZCBldmVudC5cclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHVzZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBVc2VyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgJiYgc2Vzc2lvbi5zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzZXNzaW9uLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2Vzc2lvbi5zaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodG1wVXNlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gcXVlcnlTZXNzaW9uU3RhdHVzOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IgY3RvcjogZXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLnNldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuICAgIGdldCBfY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdGFydCh1c2VyKSB7XHJcbiAgICAgICAgbGV0IHNlc3Npb25fc3RhdGUgPSB1c2VyLnNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWQgPSB1c2VyLnByb2ZpbGUuc2lkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgc3ViOlwiLCB0aGlzLl9zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgYW5vbnltb3VzIHVzZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBJbml0aWFsaXppbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWVcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcE9uRXJyb3IgPSB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSA9IG5ldyB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBObyBjaGVjayBzZXNzaW9uIGlmcmFtZSBmb3VuZCBpbiB0aGUgbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gbm9uLXByb21pc2UgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IEVycm9yIGZyb20gZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zdWIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdG9wXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIC8vIHVzaW5nIGEgdGltZXIgdG8gZGVsYXkgcmUtaW5pdGlhbGl6YXRpb24gdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBzaWdub3V0XHJcbiAgICAgICAgICAgIGxldCB0aW1lckhhbmRsZSA9IHRoaXMuX3RpbWVyLnNldEludGVydmFsKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRpbWVySGFuZGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBVc2VyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgJiYgc2Vzc2lvbi5zaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzZXNzaW9uLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2Vzc2lvbi5zaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodG1wVXNlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvcjogZXJyb3IgZnJvbSBxdWVyeVNlc3Npb25TdGF0dXM6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmFpc2VFdmVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViID09PSB0aGlzLl9zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICByYWlzZUV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnNpZCA9PT0gdGhpcy5fc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2FtZSBzdWIgc3RpbGwgbG9nZ2VkIGluIGF0IE9QLCByZXN0YXJ0aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lOyBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IERpZmZlcmVudCBzdWJqZWN0IHNpZ25lZCBpbnRvIE9QOlwiLCBzZXNzaW9uLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFN1YmplY3Qgbm8gbG9uZ2VyIHNpZ25lZCBpbnRvIE9QXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBpbiBldmVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZEluKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IEVycm9yIGNhbGxpbmcgcXVlcnlDdXJyZW50U2lnbmluU2Vzc2lvbjsgcmFpc2luZyBzaWduZWQgb3V0IGV2ZW50XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1hbmRhdG9yeVxyXG4gICAgICAgIHVybCwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCBhdXRob3JpdHksXHJcbiAgICAgICAgLy8gb3B0aW9uYWxcclxuICAgICAgICBkYXRhLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUsIGNsaWVudF9zZWNyZXQsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mb1xyXG4gICAgfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNsaWVudF9pZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWRpcmVjdF91cmlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlc3BvbnNlX3R5cGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNwb25zZV90eXBlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNjb3BlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gc2NvcGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY29wZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBhdXRob3JpdHkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2lkYyA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKHJlc3BvbnNlX3R5cGUpO1xyXG4gICAgICAgIGxldCBjb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSk7XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfbW9kZSkge1xyXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgPyBcInF1ZXJ5XCIgOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBTaWduaW5TdGF0ZSh7IG5vbmNlOiBvaWRjLCBcclxuICAgICAgICAgICAgZGF0YSwgY2xpZW50X2lkLCBhdXRob3JpdHksIHJlZGlyZWN0X3VyaSwgXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IGNvZGUsIFxyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQsIHNjb3BlLCBleHRyYVRva2VuUGFyYW1zLCBza2lwVXNlckluZm8gfSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY2xpZW50X2lkXCIsIGNsaWVudF9pZCk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJyZWRpcmVjdF91cmlcIiwgcmVkaXJlY3RfdXJpKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlc3BvbnNlX3R5cGVcIiwgcmVzcG9uc2VfdHlwZSk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzY29wZVwiLCBzY29wZSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgaWYgKG9pZGMpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJub25jZVwiLCB0aGlzLnN0YXRlLm5vbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZVwiLCB0aGlzLnN0YXRlLmNvZGVfY2hhbGxlbmdlKTtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG9wdGlvbmFsID0geyBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSB9O1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9wdGlvbmFsKXtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbmFsW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgb3B0aW9uYWxba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc09pZGMocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT0F1dGgocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcInRva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBpc0NvZGUocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImNvZGVcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcclxuXHJcbmNvbnN0IE9pZGNTY29wZSA9IFwib3BlbmlkXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluUmVzcG9uc2Uge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCBkZWxpbWl0ZXIgPSBcIiNcIikge1xyXG5cclxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5jb2RlID0gdmFsdWVzLmNvZGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLmlkX3Rva2VuID0gdmFsdWVzLmlkX3Rva2VuO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHZhbHVlcy5zZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gdmFsdWVzLmFjY2Vzc190b2tlbjtcclxuICAgICAgICB0aGlzLnRva2VuX3R5cGUgPSB2YWx1ZXMudG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gdmFsdWVzLnNjb3BlO1xyXG4gICAgICAgIHRoaXMucHJvZmlsZSA9IHVuZGVmaW5lZDsgLy8gd2lsbCBiZSBzZXQgZnJvbSBSZXNwb25zZVZhbGlkYXRvclxyXG5cclxuICAgICAgICB0aGlzLmV4cGlyZXNfaW4gPSB2YWx1ZXMuZXhwaXJlc19pbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBub3cgKyBleHBpcmVzX2luO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlZCgpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcclxuICAgICAgICBpZiAoZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjb3BlcygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc09wZW5JZENvbm5lY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGVzLmluZGV4T2YoT2lkY1Njb3BlKSA+PSAwIHx8ICEhdGhpcy5pZF90b2tlbjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblN0YXRlIGV4dGVuZHMgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3Ioe25vbmNlLCBhdXRob3JpdHksIGNsaWVudF9pZCwgcmVkaXJlY3RfdXJpLCBjb2RlX3ZlcmlmaWVyLCByZXNwb25zZV9tb2RlLCBjbGllbnRfc2VjcmV0LCBzY29wZSwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgaWYgKG5vbmNlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gcmFuZG9tKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gbm9uY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29kZV92ZXJpZmllciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyByYW5kb20oKSBwcm9kdWNlcyAzMiBsZW5ndGhcclxuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IHJhbmRvbSgpICsgcmFuZG9tKCkgKyByYW5kb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gY29kZV92ZXJpZmllcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBsZXQgaGFzaCA9IEpvc2VVdGlsLmhhc2hTdHJpbmcodGhpcy5jb2RlX3ZlcmlmaWVyLCBcIlNIQTI1NlwiKTtcclxuICAgICAgICAgICAgdGhpcy5fY29kZV9jaGFsbGVuZ2UgPSBKb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChoYXNoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXM7XHJcbiAgICAgICAgdGhpcy5fc2tpcFVzZXJJbmZvID0gc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub25jZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9uY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgYXV0aG9yaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpdHk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgY29kZV92ZXJpZmllcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV92ZXJpZmllcjtcclxuICAgIH1cclxuICAgIGdldCBjb2RlX2NoYWxsZW5nZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV9jaGFsbGVuZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfc2VjcmV0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNraXBVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZSxcclxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHRoaXMuY29kZV92ZXJpZmllcixcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmF1dGhvcml0eSxcclxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZTogdGhpcy5yZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudF9zZWNyZXQsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBleHRyYVRva2VuUGFyYW1zIDogdGhpcy5leHRyYVRva2VuUGFyYW1zLFxyXG4gICAgICAgICAgICBza2lwVXNlckluZm86IHRoaXMuc2tpcFVzZXJJbmZvXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduaW5TdGF0ZShkYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHt1cmwsIGlkX3Rva2VuX2hpbnQsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZGF0YSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25vdXRSZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZF90b2tlbl9oaW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiaWRfdG9rZW5faGludFwiLCBpZF90b2tlbl9oaW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFN0YXRlKHsgZGF0YSwgcmVxdWVzdF90eXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIFwiP1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lsZW50UmVuZXdTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayA9IHRoaXMuX3Rva2VuRXhwaXJpbmcuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcodGhpcy5fY2FsbGJhY2spO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgbG9hZGluZyBvZiB0aGUgdXNlciBzbyB0aGUgZXhwaXJpbmcgZXZlbnRzIGNhbiBiZSBpbml0aWFsaXplZFxyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyPT57XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxpYmVyYXRlIG5vcFxyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnI9PntcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5zdGFydDogRXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMucmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFjaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rva2VuRXhwaXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBTaWxlbnQgdG9rZW4gcmVuZXdhbCBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogRXJyb3IgZnJvbSBzaWduaW5TaWxlbnQ6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgY3JlYXRlZCwgcmVxdWVzdF90eXBlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5faWQgPSBpZCB8fCByYW5kb20oKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGVkID09PSAnbnVtYmVyJyAmJiBjcmVhdGVkID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkID0gY3JlYXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RfdHlwZSA9ICByZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNyZWF0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVxdWVzdF90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZTogdGhpcy5yZXF1ZXN0X3R5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RhdGUoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNsZWFyU3RhbGVTdGF0ZShzdG9yYWdlLCBhZ2UpIHtcclxuXHJcbiAgICAgICAgdmFyIGN1dG9mZiA9IERhdGUubm93KCkgLyAxMDAwIC0gYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcmFnZS5nZXRBbGxLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3Qga2V5c1wiLCBrZXlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdG9yYWdlLmdldChrZXkpLnRoZW4oaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBpdGVtIGZyb20ga2V5OiBcIiwga2V5LCBzdGF0ZS5jcmVhdGVkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY3JlYXRlZCA8PSBjdXRvZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IEVycm9yIHBhcnNpbmcgc3RhdGUgZm9yIGtleVwiLCBrZXksIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IG5vIGl0ZW0gaW4gc3RvcmFnZSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiByZW1vdmVkIGl0ZW0gZm9yIGtleTogXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnJlbW92ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogd2FpdGluZyBvbiBwcm9taXNlIGNvdW50OlwiLCBwcm9taXNlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuY29uc3QgVGltZXJEdXJhdGlvbiA9IDU7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lciBleHRlbmRzIEV2ZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lciwgbm93RnVuYyA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIGlmIChub3dGdW5jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vd0Z1bmMgPSBub3dGdW5jO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9ICgpID0+IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm93KCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9ub3dGdW5jKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoZHVyYXRpb24pIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uID0gcGFyc2VJbnQoZHVyYXRpb24pO1xyXG5cclxuICAgICAgICB2YXIgZXhwaXJhdGlvbiA9IHRoaXMubm93ICsgZHVyYXRpb247XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvbiA9PT0gZXhwaXJhdGlvbiAmJiB0aGlzLl90aW1lckhhbmRsZSkge1xyXG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0byBzYW1lIGV4cGlyYXRpb24sIHNvIGJhaWwgb3V0XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gc2luY2UgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgZXhwaXJhdGlvbjpcIiwgdGhpcy5leHBpcmF0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBmb3IgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uID0gZXhwaXJhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gd2UncmUgdXNpbmcgYSBmYWlybHkgc2hvcnQgdGltZXIgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb24gaW4gdGhlXHJcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gaGFuZGxlIHNjZW5hcmlvcyB3aGVyZSB0aGUgYnJvd3NlciBkZXZpY2Ugc2xlZXBzLCBhbmQgdGhlblxyXG4gICAgICAgIC8vIHRoZSB0aW1lcnMgZW5kIHVwIGdldHRpbmcgZGVsYXllZC5cclxuICAgICAgICB2YXIgdGltZXJEdXJhdGlvbiA9IFRpbWVyRHVyYXRpb247XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uIDwgdGltZXJEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aW1lckR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpbWVySGFuZGxlID0gdGhpcy5fdGltZXIuc2V0SW50ZXJ2YWwodGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKSwgdGltZXJEdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZXhwaXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwaXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmNhbmNlbDogXCIsIHRoaXMuX25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRoaXMuX3RpbWVySGFuZGxlKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9leHBpcmF0aW9uIC0gdGhpcy5ub3c7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FsbGJhY2s7IFwiICsgdGhpcy5fbmFtZSArIFwiIHRpbWVyIGV4cGlyZXMgaW46XCIsIGRpZmYpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwaXJhdGlvbiA8PSB0aGlzLm5vdykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICBzdXBlci5yYWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcigpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZUNvZGUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJhdXRob3JpemF0aW9uX2NvZGVcIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLmNsaWVudF9zZWNyZXQgPSBhcmdzLmNsaWVudF9zZWNyZXQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgdmFyIGJhc2ljQXV0aCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB2YXIgY2xpZW50X2F1dGhlbnRpY2F0aW9uID0gYXJncy5fY2xpZW50X2F1dGhlbnRpY2F0aW9uIHx8IHRoaXMuX3NldHRpbmdzLl9jbGllbnRfYXV0aGVudGljYXRpb247XHJcbiAgICAgICAgZGVsZXRlIGFyZ3MuX2NsaWVudF9hdXRoZW50aWNhdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZSBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWRpcmVjdF91cmkgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGVfdmVyaWZpZXIgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlX3ZlcmlmaWVyIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5jbGllbnRfc2VjcmV0ICYmIGNsaWVudF9hdXRoZW50aWNhdGlvbiA9PSBcImNsaWVudF9zZWNyZXRfYmFzaWNcIikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9zZWNyZXQgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjbGllbnRfc2VjcmV0IGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlbmRpbmcgdGhlIGNsaWVudCBjcmVkZW50aWFscyB1c2luZyB0aGUgQmFzaWMgQXV0aCBtZXRob2RcclxuICAgICAgICBpZihjbGllbnRfYXV0aGVudGljYXRpb24gPT0gXCJjbGllbnRfc2VjcmV0X2Jhc2ljXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBiYXNpY0F1dGggPSBhcmdzLmNsaWVudF9pZCArICc6JyArIGFyZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICAgICAgZGVsZXRlIGFyZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICBkZWxldGUgYXJncy5jbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogUmVjZWl2ZWQgdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MsIGJhc2ljQXV0aCkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IHJlc3BvbnNlIHJlY2VpdmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MuZ3JhbnRfdHlwZSA9IGFyZ3MuZ3JhbnRfdHlwZSB8fCBcInJlZnJlc2hfdG9rZW5cIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLmNsaWVudF9zZWNyZXQgPSBhcmdzLmNsaWVudF9zZWNyZXQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcclxuXHJcbiAgICAgICAgdmFyIGJhc2ljQXV0aCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB2YXIgY2xpZW50X2F1dGhlbnRpY2F0aW9uID0gYXJncy5fY2xpZW50X2F1dGhlbnRpY2F0aW9uIHx8IHRoaXMuX3NldHRpbmdzLl9jbGllbnRfYXV0aGVudGljYXRpb247XHJcbiAgICAgICAgZGVsZXRlIGFyZ3MuX2NsaWVudF9hdXRoZW50aWNhdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IE5vIHJlZnJlc2hfdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWZyZXNoX3Rva2VuIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY2xpZW50X2lkIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlbmRpbmcgdGhlIGNsaWVudCBjcmVkZW50aWFscyB1c2luZyB0aGUgQmFzaWMgQXV0aCBtZXRob2RcclxuICAgICAgICBpZihjbGllbnRfYXV0aGVudGljYXRpb24gPT0gXCJjbGllbnRfc2VjcmV0X2Jhc2ljXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBiYXNpY0F1dGggPSBhcmdzLmNsaWVudF9pZCArICc6JyArIGFyZ3MuY2xpZW50X3NlY3JldDtcclxuICAgICAgICAgICAgZGVsZXRlIGFyZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICBkZWxldGUgYXJncy5jbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MsIGJhc2ljQXV0aCkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5jb25zdCBBY2Nlc3NUb2tlblR5cGVIaW50ID0gXCJhY2Nlc3NfdG9rZW5cIjtcclxuY29uc3QgUmVmcmVzaFRva2VuVHlwZUhpbnQgPSBcInJlZnJlc2hfdG9rZW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlblJldm9jYXRpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIFhNTEh0dHBSZXF1ZXN0Q3RvciA9IEdsb2JhbC5YTUxIdHRwUmVxdWVzdCwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXR0aW5ncyBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvciA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2b2tlKHRva2VuLCByZXF1aXJlZCwgdHlwZSA9IFwiYWNjZXNzX3Rva2VuXCIpIHtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5vIHRva2VuIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0b2tlbiBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZSAhPT0gQWNjZXNzVG9rZW5UeXBlSGludCAmJiB0eXBlICE9IFJlZnJlc2hUb2tlblR5cGVIaW50KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IEludmFsaWQgdG9rZW4gdHlwZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0b2tlbiB0eXBlLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJldm9jYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBub3QgcmVxdWlyZWQsIHNvIGRvbid0IGVycm9yIGFuZCBqdXN0IHJldHVyblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZva2luZyBcIiArIHR5cGUpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X3NlY3JldCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlKHVybCwgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCB0b2tlbiwgdHlwZSkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdEN0b3IoKTtcclxuICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHhoci5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoeGhyLnN0YXR1c1RleHQgKyBcIiAoXCIgKyB4aHIuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTmV0d29yayBFcnJvci5cIilcclxuICAgICAgICAgICAgICAgIHJlamVjdChcIk5ldHdvcmsgRXJyb3JcIik7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB2YXIgYm9keSA9IFwiY2xpZW50X2lkPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNsaWVudF9pZCk7XHJcbiAgICAgICAgICAgIGlmIChjbGllbnRfc2VjcmV0KSB7XHJcbiAgICAgICAgICAgICAgICBib2R5ICs9IFwiJmNsaWVudF9zZWNyZXQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X3NlY3JldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbl90eXBlX2hpbnQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodHlwZSk7XHJcbiAgICAgICAgICAgIGJvZHkgKz0gXCImdG9rZW49XCIgKyBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIHhoci5zZW5kKGJvZHkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVybFV0aWxpdHkge1xyXG4gICAgc3RhdGljIGFkZFF1ZXJ5UGFyYW0odXJsLCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXJsW3VybC5sZW5ndGggLSAxXSAhPT0gXCI/XCIpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiJlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgICAgICB1cmwgKz0gXCI9XCI7XHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlVXJsRnJhZ21lbnQodmFsdWUsIGRlbGltaXRlciA9IFwiI1wiLCBnbG9iYWwgPSBHbG9iYWwpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdmFsdWUubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoaWR4ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSBcIj9cIikge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSdyZSBkb2luZyBxdWVyeSwgdGhlbiBzdHJpcCBvZmYgaGFzaCBmcmFnbWVudCBiZWZvcmUgd2UgcGFyc2VcclxuICAgICAgICAgICAgaWR4ID0gdmFsdWUuaW5kZXhPZignIycpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKDAsIGlkeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7fSxcclxuICAgICAgICAgICAgcmVnZXggPSAvKFteJj1dKyk9KFteJl0qKS9nLFxyXG4gICAgICAgICAgICBtO1xyXG5cclxuICAgICAgICB2YXIgY291bnRlciA9IDA7XHJcbiAgICAgICAgd2hpbGUgKG0gPSByZWdleC5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChtWzJdLnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIrKyA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQ6IHJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCIsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiUmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7aWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGFjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgdG9rZW5fdHlwZSwgc2NvcGUsIHByb2ZpbGUsIGV4cGlyZXNfYXQsIHN0YXRlfSkge1xyXG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSBpZF90b2tlbjtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBleHBpcmVzX2F0O1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwaXJlc19pbiA9PT0gJ251bWJlcicgJiYgZXhwaXJlc19pbiA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZWQoKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XHJcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwaXJlc19pbiA8PSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY29wZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjb3BlIHx8IFwiXCIpLnNwbGl0KFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci50b1N0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgaWRfdG9rZW46IHRoaXMuaWRfdG9rZW4sXHJcbiAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHRoaXMuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdGhpcy5yZWZyZXNoX3Rva2VuLFxyXG4gICAgICAgICAgICB0b2tlbl90eXBlOiB0aGlzLnRva2VuX3R5cGUsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXHJcbiAgICAgICAgICAgIGV4cGlyZXNfYXQ6IHRoaXMuZXhwaXJlc19hdFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVzZXIoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckluZm9TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHNldHRpbmdzLCBcclxuICAgICAgICBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSwgXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9nZXRDbGFpbXNGcm9tSnd0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9qb3NlVXRpbCA9IGpvc2VVdGlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENsYWltcyh0b2tlbikge1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogTm8gdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSB0b2tlbiBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFVzZXJJbmZvRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IHJlY2VpdmVkIHVzZXJpbmZvIHVybFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24odXJsLCB0b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogY2xhaW1zIHJlY2VpdmVkXCIsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0Q2xhaW1zRnJvbUp3dChyZXEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBGYWlsZWQgdG8gcGFyc2UgSldUXCIsIGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlzc3VlclByb21pc2U7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ09QJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQU5ZJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGp3dC5wYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaXNzdWVyUHJvbWlzZS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIGlzc3VlcjpcIiArIGlzc3Vlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraWQgaXMgbWFuZGF0b3J5IG9ubHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUga2V5cyBpbiB0aGUgcmVmZXJlbmNlZCBKV0sgU2V0IGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXEucmVzcG9uc2VUZXh0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcywgdW5kZWZpbmVkLCB0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gand0LnBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBFcnJvciBwYXJzaW5nIEpXVCByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZykge1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XHJcblxyXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnQgfSBmcm9tICcuL09pZGNDbGllbnQuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlclNldHRpbmdzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlclNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vVXNlci5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyRXZlbnRzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlckV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IFNpbGVudFJlbmV3U2VydmljZSB9IGZyb20gJy4vU2lsZW50UmVuZXdTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL1Nlc3Npb25Nb25pdG9yLmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gXCIuL1NpZ25pblJlcXVlc3RcIjtcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9Ub2tlblJldm9jYXRpb25DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlciBleHRlbmRzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSxcclxuICAgICAgICBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yID0gU2lsZW50UmVuZXdTZXJ2aWNlLFxyXG4gICAgICAgIFNlc3Npb25Nb25pdG9yQ3RvciA9IFNlc3Npb25Nb25pdG9yLFxyXG4gICAgICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IgPSBUb2tlblJldm9jYXRpb25DbGllbnQsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQsXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIGlmICghKHNldHRpbmdzIGluc3RhbmNlb2YgVXNlck1hbmFnZXJTZXR0aW5ncykpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3MgPSBuZXcgVXNlck1hbmFnZXJTZXR0aW5ncyhzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFVzZXJNYW5hZ2VyRXZlbnRzKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2UgPSBuZXcgU2lsZW50UmVuZXdTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gb3JkZXIgaXMgaW1wb3J0YW50IGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM7IHRoZXNlIHNlcnZpY2VzIGRlcGVuZCB1cG9uIHRoZSBldmVudHMuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXV0b21hdGljU2lsZW50UmVuZXcpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogYXV0b21hdGljU2lsZW50UmVuZXcgaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzaWxlbnQgcmVuZXdcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRSZW5ldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubW9uaXRvclNlc3Npb24pIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogbW9uaXRvclNlc3Npb24gaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzZXNzaW9uIG1vbml0b3JcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25Nb25pdG9yID0gbmV3IFNlc3Npb25Nb25pdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudCA9IG5ldyBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9yZWRpcmVjdE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfcG9wdXBOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX2lmcmFtZU5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX3VzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy51c2VyU3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV2ZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuZ2V0VXNlcjogdXNlciBsb2FkZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIG5vdCBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcihudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5yZW1vdmVVc2VyOiB1c2VyIHJlbW92ZWQgZnJvbSBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMudW5sb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluUmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6clwiO1xyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IE5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBzaWduaW5Qb3B1cCBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9wb3B1cE5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrIGVycm9yOiBcIiArIGVyciAmJiBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgLy8gZmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByZWZyZXNoIHRva2VuLCBvciBuZWVkIHRvIHVzZSBpZnJhbWVcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLnJlZnJlc2hfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MucmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VSZWZyZXNoVG9rZW4oYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiO1xyXG4gICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gYXJncy5pZF90b2tlbl9oaW50IHx8ICh0aGlzLnNldHRpbmdzLmluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyAmJiB1c2VyICYmIHVzZXIuaWRfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIgJiYgdGhpcy5fc2V0dGluZ3MudmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50LCBzdWJqZWN0IHByaW9yIHRvIHNpbGVudCByZW5ldzogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuY3VycmVudF9zdWIgPSB1c2VyLnByb2ZpbGUuc3ViO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblNpbGVudElmcmFtZShhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF91c2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuKGFyZ3MpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogTm8gYWNjZXNzIHRva2VuIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkVG9rZW5WYWxpZGF0aW9uID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZFRva2VuVmFsaWRhdGlvbiA9IHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbih1c2VyLnByb2ZpbGUsIHJlc3VsdC5pZF90b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWRUb2tlblZhbGlkYXRpb24udGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IHJlZnJlc2ggdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5pZF90b2tlbiA9IHJlc3VsdC5pZF90b2tlbiB8fCB1c2VyLmlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmFjY2Vzc190b2tlbiA9IHJlc3VsdC5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIucmVmcmVzaF90b2tlbiA9IHJlc3VsdC5yZWZyZXNoX3Rva2VuIHx8IHVzZXIucmVmcmVzaF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5leHBpcmVzX2luID0gcmVzdWx0LmV4cGlyZXNfaW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbihwcm9maWxlLCBpZF90b2tlbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5nZXRFcG9jaFRpbWUoKS50aGVuKG5vdyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGlkX3Rva2VuLCBpc3N1ZXIsIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCwgdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3LCBub3cpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnN1YiAhPT0gcHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogc3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXV0aF90aW1lICYmIHBheWxvYWQuYXV0aF90aW1lICE9PSBwcm9maWxlLmF1dGhfdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhdXRoX3RpbWUgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXV0aF90aW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aF90aW1lIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF1dGhfdGltZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gcHJvZmlsZS5henApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXpwIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF6cFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuYXpwICYmIHByb2ZpbGUuYXpwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXpwIG5vdCBpbiBpZF90b2tlbiwgYnV0IHByZXNlbnQgaW4gb3JpZ2luYWwgaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgX3NpZ25pblNpbGVudElmcmFtZShhcmdzID0ge30pIHtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MucHJvbXB0ID0gYXJncy5wcm9tcHQgfHwgXCJub25lXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5faWZyYW1lTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcclxuICAgICAgICB9KS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblNpbGVudENhbGxiYWNrKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5DYWxsYmFjayh1cmwsIHRoaXMuX2lmcmFtZU5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2s6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluQ2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnJcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6cFwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5Qb3B1cENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpzXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblNpbGVudENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImludmFsaWQgcmVzcG9uc2VfdHlwZSBpbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286clwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286cFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbm91dFBvcHVwQ2FsbGJhY2sodXJsLCBrZWVwT3Blbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnlTZXNzaW9uU3RhdHVzKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjsgLy8gdGhpcyBhY3RzIGxpa2UgYSBzaWduaW4gc2lsZW50XHJcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IE5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLnByb21wdCA9IFwibm9uZVwiO1xyXG4gICAgICAgIGFyZ3MucmVzcG9uc2VfdHlwZSA9IGFyZ3MucmVzcG9uc2VfdHlwZSB8fCB0aGlzLnNldHRpbmdzLnF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIGFyZ3Muc2NvcGUgPSBhcmdzLnNjb3BlIHx8IFwib3BlbmlkXCI7XHJcbiAgICAgICAgYXJncy5za2lwVXNlckluZm8gPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgdGhpcy5faWZyYW1lTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcclxuICAgICAgICB9KS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKG5hdlJlc3BvbnNlLnVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IGdvdCBzaWduaW4gcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pblJlc3BvbnNlLnNlc3Npb25fc3RhdGUgJiYgc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogcXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3MgZm9yIHN1YjogXCIsICBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1YixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkOiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnNpZFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcInF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzZnVsLCB1c2VyIG5vdCBhdXRoZW50aWNhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuc2Vzc2lvbl9zdGF0ZSAmJiB0aGlzLnNldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlID09IFwibG9naW5fcmVxdWlyZWRcIiB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJjb25zZW50X3JlcXVpcmVkXCIgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IFwiaW50ZXJhY3Rpb25fcmVxdWlyZWRcIiB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJhY2NvdW50X3NlbGVjdGlvbl9yZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2VzcyBmb3IgYW5vbnltb3VzIHVzZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBlcnIuc2Vzc2lvbl9zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9zaWduaW4oYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcykudGhlbihuYXZSZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5FbmQobmF2UmVzcG9uc2UudXJsLCBhcmdzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5TdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IucHJlcGFyZShuYXZpZ2F0b3JQYXJhbXMpLnRoZW4oaGFuZGxlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBnb3QgbmF2aWdhdG9yIHdpbmRvdyBoYW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaWduaW5SZXF1ZXN0KGFyZ3MpLnRoZW4oc2lnbmluUmVxdWVzdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBzaWduaW4gcmVxdWVzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMudXJsID0gc2lnbmluUmVxdWVzdC51cmw7XHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWduaW5SZXF1ZXN0LnN0YXRlLmlkO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUubmF2aWdhdGUobmF2aWdhdG9yUGFyYW1zKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluRW5kKHVybCwgYXJncyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKHVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGdvdCBzaWduaW4gcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICBsZXQgdXNlciA9IG5ldyBVc2VyKHNpZ25pblJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5jdXJyZW50X3N1YiAhPT0gdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IGN1cnJlbnQgdXNlciBkb2VzIG5vdCBtYXRjaCB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluLiBzdWIgZnJvbSBzaWduaW46IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibG9naW5fcmVxdWlyZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIG1hdGNoZXMgdXNlciByZXR1cm5lZCBmcm9tIHNpZ25pblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogdXNlciBzdG9yZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pbkNhbGxiYWNrKHVybCwgbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkNhbGxiYWNrXCIpO1xyXG4gICAgICAgIGxldCB1c2VRdWVyeSA9IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgPT09IFwicXVlcnlcIiB8fCAoIXRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgJiYgU2lnbmluUmVxdWVzdC5pc0NvZGUodGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfdHlwZSkpO1xyXG4gICAgICAgIGxldCBkZWxpbWl0ZXIgPSB1c2VRdWVyeSA/IFwiP1wiIDogXCIjXCI7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jYWxsYmFjayh1cmwsIHVuZGVmaW5lZCwgZGVsaW1pdGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0UmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286clwiO1xyXG4gICAgICAgIGxldCBwb3N0TG9nb3V0UmVkaXJlY3RVcmkgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBpZiAocG9zdExvZ291dFJlZGlyZWN0VXJpKXtcclxuICAgICAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0TG9nb3V0UmVkaXJlY3RVcmk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRTdGFydChhcmdzLCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvciwgbmF2UGFyYW1zKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0OiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQodXJsIHx8IHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLnVybCkudGhlbihyZXNwb25zZT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRSZWRpcmVjdENhbGxiYWNrOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbm91dFBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNvOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5kaXNwbGF5ID0gXCJwb3B1cFwiO1xyXG4gICAgICAgIGlmIChhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSl7XHJcbiAgICAgICAgICAgIC8vIHdlJ3JlIHB1dHRpbmcgYSBkdW1teSBlbnRyeSBpbiBoZXJlIGJlY2F1c2Ugd2VcclxuICAgICAgICAgICAgLy8gbmVlZCBhIHVuaXF1ZSBpZCBmcm9tIHRoZSBzdGF0ZSBmb3Igbm90aWZpY2F0aW9uXHJcbiAgICAgICAgICAgIC8vIHRvIHRoZSBwYXJlbnQgd2luZG93LCB3aGljaCBpcyBuZWNlc3NhcnkgaWYgd2VcclxuICAgICAgICAgICAgLy8gcGxhbiB0byByZXR1cm4gYmFjayB0byB0aGUgY2xpZW50IGFmdGVyIHNpZ25vdXRcclxuICAgICAgICAgICAgLy8gYW5kIHNvIHdlIGNhbiBjbG9zZSB0aGUgcG9wdXAgYWZ0ZXIgc2lnbm91dFxyXG4gICAgICAgICAgICBhcmdzLnN0YXRlID0gYXJncy5zdGF0ZSB8fCB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0KGFyZ3MsIHRoaXMuX3BvcHVwTmF2aWdhdG9yLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXM6IGFyZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93RmVhdHVyZXMsXHJcbiAgICAgICAgICAgIHBvcHVwV2luZG93VGFyZ2V0OiBhcmdzLnBvcHVwV2luZG93VGFyZ2V0IHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dUYXJnZXRcclxuICAgICAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UG9wdXA6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihrZWVwT3BlbikgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZih1cmwpID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAga2VlcE9wZW4gPSB1cmw7XHJcbiAgICAgICAgICAgIHVybCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGVsaW1pdGVyID0gJz8nO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvci5jYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cENhbGxiYWNrOiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9zaWdub3V0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dFN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQobmF2UmVzcG9uc2UudXJsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWdub3V0U3RhcnQoYXJncyA9IHt9LCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBnb3QgbmF2aWdhdG9yIHdpbmRvdyBoYW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogbG9hZGVkIGN1cnJlbnQgdXNlciBmcm9tIHN0b3JhZ2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHJldm9rZVByb21pc2UgPSB0aGlzLl9zZXR0aW5ncy5yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA/IHRoaXMuX3Jldm9rZUludGVybmFsKHVzZXIpIDogUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2b2tlUHJvbWlzZS50aGVuKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkX3Rva2VuID0gYXJncy5pZF90b2tlbl9oaW50IHx8IHVzZXIgJiYgdXNlci5pZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogU2V0dGluZyBpZF90b2tlbiBpbnRvIHNpZ25vdXQgcmVxdWVzdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gaWRfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVVc2VyKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IHVzZXIgcmVtb3ZlZCwgY3JlYXRpbmcgc2lnbm91dCByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2lnbm91dFJlcXVlc3QoYXJncykudGhlbihzaWdub3V0UmVxdWVzdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBnb3Qgc2lnbm91dCByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWdub3V0UmVxdWVzdC51cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbm91dFJlcXVlc3Quc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWdub3V0UmVxdWVzdC5zdGF0ZS5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUubmF2aWdhdGUobmF2aWdhdG9yUGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBFcnJvciBhZnRlciBwcmVwYXJpbmcgbmF2aWdhdG9yLCBjbG9zaW5nIG5hdmlnYXRvciB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25vdXRFbmQodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25vdXRSZXNwb25zZSh1cmwpLnRoZW4oc2lnbm91dFJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRFbmQ6IGdvdCBzaWdub3V0IHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNpZ25vdXRSZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXZva2VBY2Nlc3NUb2tlbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlciwgdHJ1ZSkudGhlbihzdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IHJlbW92aW5nIHRva2VuIHByb3BlcnRpZXMgZnJvbSB1c2VyIGFuZCByZS1zdG9yaW5nXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1c2VyLmFjY2Vzc190b2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLmV4cGlyZXNfYXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIudG9rZW5fdHlwZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IHVzZXIgc3RvcmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkudGhlbigoKT0+e1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiBhY2Nlc3MgdG9rZW4gcmV2b2tlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZUludGVybmFsKHVzZXIsIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgdmFyIGFjY2Vzc190b2tlbiA9IHVzZXIuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICB2YXIgcmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbihhdFN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocnRTdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRTdWNjZXNzICYmICFydFN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogbm8gbmVlZCB0byByZXZva2UgZHVlIHRvIG5vIHRva2VuKHMpLCBvciBKV1QgZm9ybWF0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdWNjZXNzIHx8IHJ0U3VjY2VzcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpIHtcclxuICAgICAgICAvLyBjaGVjayBmb3IgSldUIHZzLiByZWZlcmVuY2UgdG9rZW5cclxuICAgICAgICBpZiAoIWFjY2Vzc190b2tlbiB8fCBhY2Nlc3NfdG9rZW4uaW5kZXhPZignLicpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZShhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKS50aGVuKCgpID0+IHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZCkge1xyXG4gICAgICAgIGlmICghcmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkLCBcInJlZnJlc2hfdG9rZW5cIikudGhlbigoKSA9PiB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydFNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2Uuc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfdXNlclN0b3JlS2V5KCkge1xyXG4gICAgICAgIHJldHVybiBgdXNlcjoke3RoaXMuc2V0dGluZ3MuYXV0aG9yaXR5fToke3RoaXMuc2V0dGluZ3MuY2xpZW50X2lkfWA7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUuZ2V0KHRoaXMuX3VzZXJTdG9yZUtleSkudGhlbihzdG9yYWdlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogdXNlciBzdG9yYWdlU3RyaW5nIGxvYWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBVc2VyLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fbG9hZFVzZXI6IG5vIHVzZXIgc3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVVc2VyKHVzZXIpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5zdG9yZVVzZXI6IHN0b3JpbmcgdXNlclwiKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzdG9yYWdlU3RyaW5nID0gdXNlci50b1N0b3JhZ2VTdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5zZXQodGhpcy5fdXNlclN0b3JlS2V5LCBzdG9yYWdlU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcInN0b3JlVXNlci5zdG9yZVVzZXI6IHJlbW92aW5nIHVzZXJcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUucmVtb3ZlKHRoaXMuX3VzZXJTdG9yZUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL0FjY2Vzc1Rva2VuRXZlbnRzLmpzJztcclxuaW1wb3J0IHsgRXZlbnQgfSBmcm9tICcuL0V2ZW50LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlckV2ZW50cyBleHRlbmRzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkID0gbmV3IEV2ZW50KFwiVXNlciBsb2FkZWRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkID0gbmV3IEV2ZW50KFwiVXNlciB1bmxvYWRlZFwiKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yID0gbmV3IEV2ZW50KFwiU2lsZW50IHJlbmV3IGVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbiA9IG5ldyBFdmVudChcIlVzZXIgc2lnbmVkIGluXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQgPSBuZXcgRXZlbnQoXCJVc2VyIHNpZ25lZCBvdXRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkID0gbmV3IEV2ZW50KFwiVXNlciBzZXNzaW9uIGNoYW5nZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZCh1c2VyLCByYWlzZUV2ZW50PXRydWUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5sb2FkXCIpO1xyXG4gICAgICAgIHN1cGVyLmxvYWQodXNlcik7XHJcbiAgICAgICAgaWYgKHJhaXNlRXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yYWlzZSh1c2VyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB1bmxvYWQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMudW5sb2FkXCIpO1xyXG4gICAgICAgIHN1cGVyLnVubG9hZCgpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJMb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyTG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlckxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclVubG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclVubG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNpbGVudFJlbmV3RXJyb3IoY2IpIHtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlU2lsZW50UmVuZXdFcnJvcihjYikge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VTaWxlbnRSZW5ld0Vycm9yKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VTaWxlbnRSZW5ld0Vycm9yXCIsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yYWlzZShlKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyU2lnbmVkSW4oY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4uYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyU2lnbmVkSW4oY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4ucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2lnbmVkSW4oKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNpZ25lZEluXCIpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbi5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTaWduZWRPdXQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNpZ25lZE91dChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICBfcmFpc2VVc2VyU2lnbmVkT3V0KCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yYWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWRcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJhaXNlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IFJlZGlyZWN0TmF2aWdhdG9yIH0gZnJvbSAnLi9SZWRpcmVjdE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IFBvcHVwTmF2aWdhdG9yIH0gZnJvbSAnLi9Qb3B1cE5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IElGcmFtZU5hdmlnYXRvciB9IGZyb20gJy4vSUZyYW1lTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcclxuXHJcbmNvbnN0IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IDYwO1xyXG5jb25zdCBEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSAyMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyU2V0dGluZ3MgZXh0ZW5kcyBPaWRjQ2xpZW50U2V0dGluZ3Mge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIHBvcHVwX3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICBwb3B1cFdpbmRvd1RhcmdldCxcclxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0LFxyXG4gICAgICAgIGF1dG9tYXRpY1NpbGVudFJlbmV3ID0gZmFsc2UsXHJcbiAgICAgICAgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gZmFsc2UsXHJcbiAgICAgICAgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ID0gdHJ1ZSxcclxuICAgICAgICBtb25pdG9yU2Vzc2lvbiA9IHRydWUsXHJcbiAgICAgICAgbW9uaXRvckFub255bW91c1Nlc3Npb24gPSBmYWxzZSxcclxuICAgICAgICBjaGVja1Nlc3Npb25JbnRlcnZhbCA9IERlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCxcclxuICAgICAgICBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvciA9IHRydWUsXHJcbiAgICAgICAgcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUsXHJcbiAgICAgICAgcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSBmYWxzZSxcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSxcclxuICAgICAgICByZWRpcmVjdE5hdmlnYXRvciA9IG5ldyBSZWRpcmVjdE5hdmlnYXRvcigpLFxyXG4gICAgICAgIHBvcHVwTmF2aWdhdG9yID0gbmV3IFBvcHVwTmF2aWdhdG9yKCksXHJcbiAgICAgICAgaWZyYW1lTmF2aWdhdG9yID0gbmV3IElGcmFtZU5hdmlnYXRvcigpLFxyXG4gICAgICAgIHVzZXJTdG9yZSA9IG5ldyBXZWJTdG9yYWdlU3RhdGVTdG9yZSh7IHN0b3JlOiBHbG9iYWwuc2Vzc2lvblN0b3JhZ2UgfSlcclxuICAgIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKGFyZ3VtZW50c1swXSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaSA9IHBvcHVwX3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcyA9IHBvcHVwV2luZG93RmVhdHVyZXM7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQgPSBwb3B1cFdpbmRvd1RhcmdldDtcclxuXHJcbiAgICAgICAgdGhpcy5fc2lsZW50X3JlZGlyZWN0X3VyaSA9IHNpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVxdWVzdFRpbWVvdXQgPSBzaWxlbnRSZXF1ZXN0VGltZW91dDtcclxuICAgICAgICB0aGlzLl9hdXRvbWF0aWNTaWxlbnRSZW5ldyA9IGF1dG9tYXRpY1NpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyA9IHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgPSBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcclxuXHJcbiAgICAgICAgdGhpcy5fbW9uaXRvclNlc3Npb24gPSBtb25pdG9yU2Vzc2lvbjtcclxuICAgICAgICB0aGlzLl9tb25pdG9yQW5vbnltb3VzU2Vzc2lvbiA9IG1vbml0b3JBbm9ueW1vdXNTZXNzaW9uO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsID0gY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XHJcbiAgICAgICAgdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IgPSBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgICAgICBpZiAocXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50c1swXSAmJiBhcmd1bWVudHNbMF0ucmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSA/IFwiaWRfdG9rZW5cIiA6IFwiY29kZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID0gcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yID0gcmVkaXJlY3ROYXZpZ2F0b3I7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBOYXZpZ2F0b3IgPSBwb3B1cE5hdmlnYXRvcjtcclxuICAgICAgICB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IgPSBpZnJhbWVOYXZpZ2F0b3I7XHJcblxyXG4gICAgICAgIHRoaXMuX3VzZXJTdG9yZSA9IHVzZXJTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcG9wdXBfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgcG9wdXBXaW5kb3dGZWF0dXJlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgIH1cclxuICAgIGdldCBwb3B1cFdpbmRvd1RhcmdldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpbGVudF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudF9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICAgZ2V0IHNpbGVudFJlcXVlc3RUaW1lb3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dDtcclxuICAgIH1cclxuICAgIGdldCBhdXRvbWF0aWNTaWxlbnRSZW5ldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XHJcbiAgICB9XHJcbiAgICBnZXQgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb25pdG9yU2Vzc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9uaXRvclNlc3Npb247XHJcbiAgICB9XHJcbiAgICBnZXQgbW9uaXRvckFub255bW91c1Nlc3Npb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcigpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuICAgIH1cclxuICAgIGdldCBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcclxuICAgIH1cclxuICAgIGdldCByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlZGlyZWN0TmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgaWZyYW1lTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHVzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtwcmVmaXggPSBcIm9pZGMuXCIsIHN0b3JlID0gR2xvYmFsLmxvY2FsU3RvcmFnZX0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuX3N0b3JlID0gc3RvcmU7XHJcbiAgICAgICAgdGhpcy5fcHJlZml4ID0gcHJlZml4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuc2V0XCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RvcmUuc2V0SXRlbShrZXksIHZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUoa2V5KSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUucmVtb3ZlXCIsIGtleSk7XHJcblxyXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9zdG9yZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmUucmVtb3ZlSXRlbShrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbEtleXMoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuZ2V0QWxsS2V5c1wiKTtcclxuXHJcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3N0b3JlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5fc3RvcmUua2V5KGluZGV4KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZih0aGlzLl9wcmVmaXgpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5LnN1YnN0cih0aGlzLl9wcmVmaXgubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5cyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgandzLCBLRVlVVElMIGFzIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCB9IGZyb20gJy4uLy4uL2pzcnNhc2lnbi9kaXN0L2pzcnNhc2lnbi5qcyc7XHJcblxyXG5jb25zdCBBbGxvd2VkU2lnbmluZ0FsZ3MgPSBbJ1JTMjU2JywgJ1JTMzg0JywgJ1JTNTEyJywgJ1BTMjU2JywgJ1BTMzg0JywgJ1BTNTEyJywgJ0VTMjU2JywgJ0VTMzg0JywgJ0VTNTEyJ107XHJcblxyXG5leHBvcnQge1xyXG4gICAgandzLFxyXG4gICAgS2V5VXRpbCxcclxuICAgIFg1MDksXHJcbiAgICBjcnlwdG8sXHJcbiAgICBoZXh0b2I2NHUsXHJcbiAgICBiNjR0b2hleCxcclxuICAgIEFsbG93ZWRTaWduaW5nQWxnc1xyXG59O1xyXG4iLCIvKipcclxuICogR2VuZXJhdGVzIFJGQzQxMjIgdmVyc2lvbiA0IGd1aWQgKClcclxuICovXHJcblxyXG52YXIgY3J5cHRvID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSA/ICh3aW5kb3cuY3J5cHRvIHx8IHdpbmRvdy5tc0NyeXB0bykgOiBudWxsO1xyXG5cclxuZnVuY3Rpb24gX2NyeXB0b1V1aWR2NCgpIHtcclxuICByZXR1cm4gKFsxZTddKy0xZTMrLTRlMystOGUzKy0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XHJcbiAgICAoYyBeIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMSkpWzBdICYgMTUgPj4gYyAvIDQpLnRvU3RyaW5nKDE2KVxyXG4gIClcclxufVxyXG5cclxuZnVuY3Rpb24gX3V1aWR2NCgpIHtcclxuICAgIHJldHVybiAoWzFlN10rLTFlMystNGUzKy04ZTMrLTFlMTEpLnJlcGxhY2UoL1swMThdL2csIGMgPT5cclxuICAgIChjIF4gTWF0aC5yYW5kb20oKSAqIDE2ID4+IGMgLyA0KS50b1N0cmluZygxNilcclxuICApXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbSgpIHtcclxuICB2YXIgaGFzQ3J5cHRvID0gY3J5cHRvICE9ICd1bmRlZmluZWQnICYmIGNyeXB0byAhPT0gbnVsbDtcclxuICB2YXIgaGFzUmFuZG9tVmFsdWVzID0gaGFzQ3J5cHRvICYmICh0eXBlb2YoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykgIT0gJ3VuZGVmaW5lZCcpOyAgXHJcbiAgdmFyIHV1aWQgPSBoYXNSYW5kb21WYWx1ZXMgPyBfY3J5cHRvVXVpZHY0IDogX3V1aWR2NDtcclxuICByZXR1cm4gdXVpZCgpLnJlcGxhY2UoLy0vZywgJycpO1xyXG59XHJcbiIsImNvbnN0IFZlcnNpb24gPSBcIjEuMTEuNi1iZXRhLjFcIjsgZXhwb3J0IHtWZXJzaW9ufTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/dist/oidc-client.min.js b/dist/oidc-client.min.js index b79ea73e..2d1ba131 100644 --- a/dist/oidc-client.min.js +++ b/dist/oidc-client.min.js @@ -30,4 +30,4 @@ var _r=function(){var t=new RegExp('(?:false|true|null|[\\{\\}\\[\\]]|(?:-?\\b(? */ var n=r(362),i=r(363),o=r(364);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,e){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function g(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return K(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return q(t).length;default:if(n)return K(t).length;e=(""+e).toLowerCase(),n=!0}}function d(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return I(this,e,r);case"utf8":case"utf-8":return A(this,e,r);case"ascii":return C(this,e,r);case"latin1":case"binary":return R(this,e,r);case"base64":return x(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function v(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function y(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function c(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var f=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var h=!0,l=0;li&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function x(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function A(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+h<=r)switch(h){case 1:c<128&&(f=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(f=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(f=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(f=u)}null===f?(f=65533,h=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=h}return function l(t){var e=t.length;if(e<=T)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n0&&(r=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(r+=" ... ")),""},u.prototype.compare=function t(e,r,n,i,o){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(this===e)return 0;for(var s=(o>>>=0)-(i>>>=0),a=(n>>>=0)-(r>>>=0),c=Math.min(s,a),f=this.slice(i,o),h=e.slice(r,n),l=0;lo)&&(n=o),e.length>0&&(n<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var s=!1;;)switch(i){case"hex":return _(this,e,r,n);case"utf8":case"utf-8":return S(this,e,r,n);case"ascii":return b(this,e,r,n);case"latin1":case"binary":return w(this,e,r,n);case"base64":return F(this,e,r,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,r,n);default:if(s)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),s=!0}},u.prototype.toJSON=function t(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var T=4096;function C(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function L(t,e,r,n,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function D(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function M(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function j(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(t,e,r,n,o){return o||j(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function B(t,e,r,n,o){return o||j(t,0,r,8),i.write(t,e,r,n,52,8),r+8}u.prototype.slice=function t(e,r){var n,i=this.length;if((e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(r=void 0===r?i:~~r)<0?(r+=i)<0&&(r=0):r>i&&(r=i),r0&&(o*=256);)i+=this[e+--r]*o;return i},u.prototype.readUInt8=function t(e,r){return r||N(e,1,this.length),this[e]},u.prototype.readUInt16LE=function t(e,r){return r||N(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function t(e,r){return r||N(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function t(e,r){return r||N(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function t(e,r){return r||N(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function t(e,r,n){e|=0,r|=0,n||N(e,r,this.length);for(var i=this[e],o=1,s=0;++s=(o*=128)&&(i-=Math.pow(2,8*r)),i},u.prototype.readIntBE=function t(e,r,n){e|=0,r|=0,n||N(e,r,this.length);for(var i=r,o=1,s=this[e+--i];i>0&&(o*=256);)s+=this[e+--i]*o;return s>=(o*=128)&&(s-=Math.pow(2,8*r)),s},u.prototype.readInt8=function t(e,r){return r||N(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function t(e,r){r||N(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function t(e,r){r||N(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function t(e,r){return r||N(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function t(e,r){return r||N(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function t(e,r){return r||N(e,4,this.length),i.read(this,e,!0,23,4)},u.prototype.readFloatBE=function t(e,r){return r||N(e,4,this.length),i.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function t(e,r){return r||N(e,8,this.length),i.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function t(e,r){return r||N(e,8,this.length),i.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function t(e,r,n,i){(e=+e,r|=0,n|=0,i)||L(this,e,r,n,Math.pow(2,8*n)-1,0);var o=1,s=0;for(this[r]=255&e;++s=0&&(s*=256);)this[r+o]=e/s&255;return r+n},u.prototype.writeUInt8=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},u.prototype.writeUInt16LE=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):D(this,e,r,!0),r+2},u.prototype.writeUInt16BE=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):D(this,e,r,!1),r+2},u.prototype.writeUInt32LE=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):M(this,e,r,!0),r+4},u.prototype.writeUInt32BE=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):M(this,e,r,!1),r+4},u.prototype.writeIntLE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);L(this,e,r,n,o-1,-o)}var s=0,a=1,u=0;for(this[r]=255&e;++s>0)-u&255;return r+n},u.prototype.writeIntBE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);L(this,e,r,n,o-1,-o)}var s=n-1,a=1,u=0;for(this[r+s]=255&e;--s>=0&&(a*=256);)e<0&&0===u&&0!==this[r+s+1]&&(u=1),this[r+s]=(e/a>>0)-u&255;return r+n},u.prototype.writeInt8=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},u.prototype.writeInt16LE=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):D(this,e,r,!0),r+2},u.prototype.writeInt16BE=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):D(this,e,r,!1),r+2},u.prototype.writeInt32LE=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):M(this,e,r,!0),r+4},u.prototype.writeInt32BE=function t(e,r,n){return e=+e,r|=0,n||L(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):M(this,e,r,!1),r+4},u.prototype.writeFloatLE=function t(e,r,n){return U(this,e,r,!0,n)},u.prototype.writeFloatBE=function t(e,r,n){return U(this,e,r,!1,n)},u.prototype.writeDoubleLE=function t(e,r,n){return B(this,e,r,!0,n)},u.prototype.writeDoubleBE=function t(e,r,n){return B(this,e,r,!1,n)},u.prototype.copy=function t(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r=0;--o)e[o+r]=this[o+n];else if(s<1e3||!u.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(s=r;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function q(t){return n.toByteArray(function e(t){if((t=function e(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(H,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function W(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(71))},function(t,e,r){"use strict";e.byteLength=function n(t){var e=l(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function i(t){var e,r,n=l(t),i=n[0],o=n[1],s=new u(function c(t,e,r){return 3*(e+r)/4-r}(0,i,o)),f=0,h=o>0?i-4:i;for(r=0;r>16&255,s[f++]=e>>8&255,s[f++]=255&e;2===o&&(e=a[t.charCodeAt(r)]<<2|a[t.charCodeAt(r+1)]>>4,s[f++]=255&e);1===o&&(e=a[t.charCodeAt(r)]<<10|a[t.charCodeAt(r+1)]<<4|a[t.charCodeAt(r+2)]>>2,s[f++]=e>>8&255,s[f++]=255&e);return s},e.fromByteArray=function o(t){for(var e,r=t.length,n=r%3,i=[],o=16383,a=0,u=r-n;au?u:a+o));1===n?(e=t[r-1],i.push(s[e>>2]+s[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],i.push(s[e>>10]+s[e>>4&63]+s[e<<2&63]+"="));return i.join("")};for(var s=[],a=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,h=c.length;f0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function p(t,e,r){for(var n,i,o=[],a=e;a>18&63]+s[i>>12&63]+s[i>>6&63]+s[63&i]);return o.join("")}a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},function(t,e){ /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ -e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,u=(1<>1,f=-7,h=r?i-1:0,l=r?-1:1,p=t[e+h];for(h+=l,o=p&(1<<-f)-1,p>>=-f,f+=a;f>0;o=256*o+t[e+h],h+=l,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=n;f>0;s=256*s+t[e+h],h+=l,f-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=c}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,f=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,g=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+h>=1?l/u:l*Math.pow(2,1-h))*u>=2&&(s++,u/=2),s+h>=f?(a=0,s=f):s+h>=1?(a=(e*u-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=g,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=g,s/=256,c-=8);t[r+p-g]|=128*d}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(t){var e=t.jws,r=t.KeyUtil,n=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){i.Log.debug("JoseUtil.parseJwt");try{var n=e.JWS.parse(r);return{header:n.headerObj,payload:n.payloadObj}}catch(t){i.Log.error(t)}},t.validateJwt=function e(o,s,u,c,f,h,l){i.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return i.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var p=a(s.x5c[0]);s=n.getPublicKeyFromCertHex(p)}else{if("EC"!==s.kty)return i.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return i.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,u,c,f,h,l)}catch(t){return i.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,n,o,s,a,u){s||(s=0),a||(a=parseInt(Date.now()/1e3));var c=t.parseJwt(r).payload;if(!c.iss)return i.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(c.iss!==n)return i.Log.error("JoseUtil._validateJwt: Invalid issuer in token",c.iss),Promise.reject(new Error("Invalid issuer in token: "+c.iss));if(!c.aud)return i.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(c.aud===o||Array.isArray(c.aud)&&c.aud.indexOf(o)>=0))return i.Log.error("JoseUtil._validateJwt: Invalid audience in token",c.aud),Promise.reject(new Error("Invalid audience in token: "+c.aud));if(c.azp&&c.azp!==o)return i.Log.error("JoseUtil._validateJwt: Invalid azp in token",c.azp),Promise.reject(new Error("Invalid azp in token: "+c.azp));if(!u){var f=a+s,h=a-s;if(!c.iat)return i.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(f1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var n=i.UrlUtility.parseUrlFragment(e,r);this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.code=n.code,this.state=n.state,this.id_token=n.id_token,this.session_state=n.session_state,this.access_token=n.access_token,this.token_type=n.token_type,this.scope=n.scope,this.profile=void 0,this.expires_in=n.expires_in}return n(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(3),i=r(55),o=r(103);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,u=e.data,c=e.extraQueryParams,f=e.request_type;if(function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var l in s&&(r=i.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=i.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),u&&(this.state=new o.State({data:u,request_type:f}),r=i.UrlUtility.addQueryParam(r,"state",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,l,c[l]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(55);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=n.UrlUtility.parseUrlFragment(e,"?");this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.state=i.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l.TokenRevocationClient,h=arguments.length>4&&void 0!==arguments[4]?arguments[4]:p.TokenClient,y=arguments.length>5&&void 0!==arguments[5]?arguments[5]:g.JoseUtil;d(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var m=v(this,t.call(this,r));return m._events=new u.UserManagerEvents(r),m._silentRenewService=new n(m),m.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),m.startSilentRenew()),m.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),m._sessionMonitor=new o(m)),m._tokenRevocationClient=new a(m._settings),m._tokenClient=new h(m._settings),m._joseUtil=y,m}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(i.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(i.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){i.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){i.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t}))):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){i.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then((function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var n=this;return this._metadataService.getIssuer().then((function(t){return n.settings.getEpochTime().then((function(o){return n._joseUtil.validateJwtAttributes(r,t,n._settings.client_id,n._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t}))):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var n=t.state;t.response;return"si:r"===n.request_type?r.signinRedirectCallback(e):"si:p"===n.request_type?r.signinPopupCallback(e):"si:s"===n.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var n=this;return this.readSignoutResponseState(e).then((function(t){var i=t.state,o=t.response;return i?"so:r"===i.request_type?n.signoutRedirectCallback(e):"so:p"===i.request_type?n.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var n=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(r.redirect_uri=n,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:n,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,i).then((function(t){return n._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return i.Log.debug("UserManager._signinStart: got navigator window handle"),n.createSigninRequest(e).then((function(e){return i.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){i.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(n.current_sub){if(n.current_sub!==e.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return i.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){i.Log.debug("UserManager._signinCallback");var n="query"===this._settings.response_mode||!this._settings.response_mode&&h.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,n)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then((function(){i.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){i.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){i.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,i).then((function(t){return n._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,n=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(o).then((function(t){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(n){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(n):Promise.resolve()).then((function(){var s=e.id_token_hint||n&&n.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return i.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var n=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return n._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){i.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,p=r.popupWindowFeatures,g=r.popupWindowTarget,d=r.silent_redirect_uri,v=r.silentRequestTimeout,y=r.automaticSilentRenew,m=void 0!==y&&y,_=r.validateSubOnSilentRenew,S=void 0!==_&&_,b=r.includeIdTokenInSilentRenew,w=void 0===b||b,F=r.monitorSession,E=void 0===F||F,x=r.monitorAnonymousSession,A=void 0!==x&&x,P=r.checkSessionInterval,k=void 0===P?2e3:P,T=r.stopCheckSessionOnError,C=void 0===T||T,R=r.query_status_response_type,I=r.revokeAccessTokenOnSignout,O=void 0!==I&&I,N=r.accessTokenExpiringNotificationTime,L=void 0===N?60:N,D=r.redirectNavigator,M=void 0===D?new o.RedirectNavigator:D,j=r.popupNavigator,U=void 0===j?new s.PopupNavigator:j,B=r.iframeNavigator,H=void 0===B?new a.IFrameNavigator:B,V=r.userStore,K=void 0===V?new u.WebStorageStateStore({store:c.Global.sessionStorage}):V;h(this,e);var q=l(this,t.call(this,arguments[0]));return q._popup_redirect_uri=n,q._popup_post_logout_redirect_uri=i,q._popupWindowFeatures=p,q._popupWindowTarget=g,q._silent_redirect_uri=d,q._silentRequestTimeout=v,q._automaticSilentRenew=m,q._validateSubOnSilentRenew=S,q._includeIdTokenInSilentRenew=w,q._accessTokenExpiringNotificationTime=L,q._monitorSession=E,q._monitorAnonymousSession=A,q._checkSessionInterval=k,q._stopCheckSessionOnError=C,R?q._query_status_response_type=R:arguments[0]&&arguments[0].response_type?q._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":q._query_status_response_type="id_token",q._revokeAccessTokenOnSignout=O,q._redirectNavigator=M,q._popupNavigator=U,q._iframeNavigator=H,q._userStore=K,q}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),n(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),i&&this._userLoaded.raise(r)},e.prototype.unload=function e(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){n.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=u(this,t.call(this,r));return s._timer=n,s._nowFunc=i||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var n=5;e>1,f=-7,h=r?i-1:0,l=r?-1:1,p=t[e+h];for(h+=l,o=p&(1<<-f)-1,p>>=-f,f+=a;f>0;o=256*o+t[e+h],h+=l,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=n;f>0;s=256*s+t[e+h],h+=l,f-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=c}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,f=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,g=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+h>=1?l/u:l*Math.pow(2,1-h))*u>=2&&(s++,u/=2),s+h>=f?(a=0,s=f):s+h>=1?(a=(e*u-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=g,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=g,s/=256,c-=8);t[r+p-g]|=128*d}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(t){var e=t.jws,r=t.KeyUtil,n=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){i.Log.debug("JoseUtil.parseJwt");try{var n=e.JWS.parse(r);return{header:n.headerObj,payload:n.payloadObj}}catch(t){i.Log.error(t)}},t.validateJwt=function e(o,s,u,c,f,h,l){i.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return i.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var p=a(s.x5c[0]);s=n.getPublicKeyFromCertHex(p)}else{if("EC"!==s.kty)return i.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return i.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,u,c,f,h,l)}catch(t){return i.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,n,o,s,a,u){s||(s=0),a||(a=parseInt(Date.now()/1e3));var c=t.parseJwt(r).payload;if(!c.iss)return i.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(c.iss!==n)return i.Log.error("JoseUtil._validateJwt: Invalid issuer in token",c.iss),Promise.reject(new Error("Invalid issuer in token: "+c.iss));if(!c.aud)return i.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(c.aud===o||Array.isArray(c.aud)&&c.aud.indexOf(o)>=0))return i.Log.error("JoseUtil._validateJwt: Invalid audience in token",c.aud),Promise.reject(new Error("Invalid audience in token: "+c.aud));if(c.azp&&c.azp!==o)return i.Log.error("JoseUtil._validateJwt: Invalid azp in token",c.azp),Promise.reject(new Error("Invalid azp in token: "+c.azp));if(!u){var f=a+s,h=a-s;if(!c.iat)return i.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(f1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var n=i.UrlUtility.parseUrlFragment(e,r);this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.code=n.code,this.state=n.state,this.id_token=n.id_token,this.session_state=n.session_state,this.access_token=n.access_token,this.token_type=n.token_type,this.scope=n.scope,this.profile=void 0,this.expires_in=n.expires_in}return n(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(3),i=r(55),o=r(103);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,u=e.data,c=e.extraQueryParams,f=e.request_type;if(function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var l in s&&(r=i.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=i.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),u&&(this.state=new o.State({data:u,request_type:f}),r=i.UrlUtility.addQueryParam(r,"state",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,l,c[l]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(55);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=n.UrlUtility.parseUrlFragment(e,"?");this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.state=i.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l.TokenRevocationClient,h=arguments.length>4&&void 0!==arguments[4]?arguments[4]:p.TokenClient,y=arguments.length>5&&void 0!==arguments[5]?arguments[5]:g.JoseUtil;d(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var m=v(this,t.call(this,r));return m._events=new u.UserManagerEvents(r),m._silentRenewService=new n(m),m.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),m.startSilentRenew()),m.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),m._sessionMonitor=new o(m)),m._tokenRevocationClient=new a(m._settings),m._tokenClient=new h(m._settings),m._joseUtil=y,m}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(i.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(i.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){i.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){i.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t}))):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){i.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then((function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var n=this;return this._metadataService.getIssuer().then((function(t){return n.settings.getEpochTime().then((function(o){return n._joseUtil.validateJwtAttributes(r,t,n._settings.client_id,n._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t}))):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var n=t.state;t.response;return"si:r"===n.request_type?r.signinRedirectCallback(e):"si:p"===n.request_type?r.signinPopupCallback(e):"si:s"===n.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var n=this;return this.readSignoutResponseState(e).then((function(t){var i=t.state,o=t.response;return i?"so:r"===i.request_type?n.signoutRedirectCallback(e):"so:p"===i.request_type?n.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var n=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(r.redirect_uri=n,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:n,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,i).then((function(t){return n._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return i.Log.debug("UserManager._signinStart: got navigator window handle"),n.createSigninRequest(e).then((function(e){return i.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){i.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(n.current_sub){if(n.current_sub!==e.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return i.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){i.Log.debug("UserManager._signinCallback");var n="query"===this._settings.response_mode||!this._settings.response_mode&&h.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,n)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then((function(){i.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){i.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){i.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,i).then((function(t){return n._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,n=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(o).then((function(t){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(n){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(n):Promise.resolve()).then((function(){var s=e.id_token_hint||n&&n.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return i.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var n=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return n._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){i.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,p=r.popupWindowFeatures,g=r.popupWindowTarget,d=r.silent_redirect_uri,v=r.silentRequestTimeout,y=r.automaticSilentRenew,m=void 0!==y&&y,_=r.validateSubOnSilentRenew,S=void 0!==_&&_,b=r.includeIdTokenInSilentRenew,w=void 0===b||b,F=r.monitorSession,E=void 0===F||F,x=r.monitorAnonymousSession,A=void 0!==x&&x,P=r.checkSessionInterval,k=void 0===P?2e3:P,T=r.stopCheckSessionOnError,C=void 0===T||T,R=r.query_status_response_type,I=r.revokeAccessTokenOnSignout,O=void 0!==I&&I,N=r.accessTokenExpiringNotificationTime,L=void 0===N?60:N,D=r.redirectNavigator,M=void 0===D?new o.RedirectNavigator:D,j=r.popupNavigator,U=void 0===j?new s.PopupNavigator:j,B=r.iframeNavigator,H=void 0===B?new a.IFrameNavigator:B,V=r.userStore,K=void 0===V?new u.WebStorageStateStore({store:c.Global.sessionStorage}):V;h(this,e);var q=l(this,t.call(this,arguments[0]));return q._popup_redirect_uri=n,q._popup_post_logout_redirect_uri=i,q._popupWindowFeatures=p,q._popupWindowTarget=g,q._silent_redirect_uri=d,q._silentRequestTimeout=v,q._automaticSilentRenew=m,q._validateSubOnSilentRenew=S,q._includeIdTokenInSilentRenew=w,q._accessTokenExpiringNotificationTime=L,q._monitorSession=E,q._monitorAnonymousSession=A,q._checkSessionInterval=k,q._stopCheckSessionOnError=C,R?q._query_status_response_type=R:arguments[0]&&arguments[0].response_type?q._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":q._query_status_response_type="id_token",q._revokeAccessTokenOnSignout=O,q._redirectNavigator=M,q._popupNavigator=U,q._iframeNavigator=H,q._userStore=K,q}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),n(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),i&&this._userLoaded.raise(r)},e.prototype.unload=function e(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){n.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=u(this,t.call(this,r));return s._timer=n,s._nowFunc=i||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var n=5;e */ e.read=function(t,e,r,i,n){var o,s,a=8*n-i-1,h=(1<>1,f=-7,c=r?n-1:0,l=r?-1:1,d=t[e+c];for(c+=l,o=d&(1<<-f)-1,d>>=-f,f+=a;f>0;o=256*o+t[e+c],c+=l,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=i;f>0;s=256*s+t[e+c],c+=l,f-=8);if(0===o)o=1-u;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,i),o-=u}return(d?-1:1)*s*Math.pow(2,o-i)},e.write=function(t,e,r,i,n,o){var s,a,h,u=8*o-n-1,f=(1<>1,l=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=i?0:o-1,p=i?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?l/h:l*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=f?(a=0,s=f):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[r+d]=255&a,d+=p,a/=256,n-=8);for(s=s<0;t[r+d]=255&s,d+=p,s/=256,u-=8);t[r+d-p]|=128*m}},function(t,e){},function(t,e,r){"use strict";var i=r(2).Buffer,n=r(295);t.exports=function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t),this.head=null,this.tail=null,this.length=0}return t.prototype.push=function t(e){var r={data:e,next:null};this.length>0?this.tail.next=r:this.head=r,this.tail=r,++this.length},t.prototype.unshift=function t(e){var r={data:e,next:this.head};0===this.length&&(this.tail=r),this.head=r,++this.length},t.prototype.shift=function t(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},t.prototype.clear=function t(){this.head=this.tail=null,this.length=0},t.prototype.join=function t(e){if(0===this.length)return"";for(var r=this.head,i=""+r.data;r=r.next;)i+=e+r.data;return i},t.prototype.concat=function t(e){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var r,n,o,s=i.allocUnsafe(e>>>0),a=this.head,h=0;a;)r=a.data,n=s,o=h,r.copy(n,o),h+=a.data.length,a=a.next;return s},t}(),n&&n.inspect&&n.inspect.custom&&(t.exports.prototype[n.inspect.custom]=function(){var t=n.inspect({length:this.length});return this.constructor.name+" "+t})},function(t,e){},function(t,e,r){(function(t){var i=void 0!==t&&t||"undefined"!=typeof self&&self||window,n=Function.prototype.apply;function o(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new o(n.call(setTimeout,i,arguments),clearTimeout)},e.setInterval=function(){return new o(n.call(setInterval,i,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(i,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function e(){t._onTimeout&&t._onTimeout()}),e))},r(297),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,r(5))},function(t,e,r){(function(t,e){!function(t,r){"use strict";if(!t.setImmediate){var i,n=1,o={},s=!1,a=t.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(t);h=h&&h.setTimeout?h:t,"[object process]"==={}.toString.call(t.process)?function u(){i=function(t){e.nextTick((function(){v(t)}))}}():!function f(){if(t.postMessage&&!t.importScripts){var e=!0,r=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=r,e}}()?t.MessageChannel?function c(){var t=new MessageChannel;t.port1.onmessage=function(t){v(t.data)},i=function(e){t.port2.postMessage(e)}}():a&&"onreadystatechange"in a.createElement("script")?function l(){var t=a.documentElement;i=function(e){var r=a.createElement("script");r.onreadystatechange=function(){v(e),r.onreadystatechange=null,t.removeChild(r),r=null},t.appendChild(r)}}():function d(){i=function(t){setTimeout(v,0,t)}}():function p(){var e="setImmediate$"+Math.random()+"$",r=function(r){r.source===t&&"string"==typeof r.data&&0===r.data.indexOf(e)&&v(+r.data.slice(e.length))};t.addEventListener?t.addEventListener("message",r,!1):t.attachEvent("onmessage",r),i=function(r){t.postMessage(e+r,"*")}}(),h.setImmediate=function m(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),r=0;ra?e=t(e):e.length */ -var i=r(7),n=i.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function s(t,e,r){return n(t,e,r)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?t.exports=i:(o(i,e),e.Buffer=s),s.prototype=Object.create(n.prototype),o(n,s),s.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return n(t,e,r)},s.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=n(t);return void 0!==e?"string"==typeof r?i.fill(e,r):i.fill(e):i.fill(0),i},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i.SlowBuffer(t)}},function(t,e,r){var i=r(97),n=r(171),o=r(2).Buffer,s=r(172),a=r(20),h=r(62),u=r(63);function f(t,e,r){a.call(this),this._cache=new l,this._cipher=new h.AES(e),this._prev=o.from(r),this._mode=t,this._autopadding=!0}r(1)(f,a),f.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get();)r=this._mode.encrypt(this,e),i.push(r);return o.concat(i)};var c=o.alloc(16,16);function l(){this.cache=o.allocUnsafe(0)}function d(t,e,r){var a=i[t.toLowerCase()];if(!a)throw new TypeError("invalid suite type");if("string"==typeof e&&(e=o.from(e)),e.length!==a.key/8)throw new TypeError("invalid key length "+e.length);if("string"==typeof r&&(r=o.from(r)),"GCM"!==a.mode&&r.length!==a.iv)throw new TypeError("invalid iv length "+r.length);return"stream"===a.type?new s(a.module,e,r):"auth"===a.type?new n(a.module,e,r):new f(a.module,e,r)}f.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if(!t.equals(c))throw this._cipher.scrub(),new Error("data not multiple of block length")},f.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},l.prototype.add=function(t){this.cache=o.concat([this.cache,t])},l.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},l.prototype.flush=function(){for(var t=16-this.cache.length,e=o.allocUnsafe(t),r=-1;++r>s%8,t._prev=o(t._prev,r?i:n);return a}function o(t,e){var r=t.length,n=-1,o=i.allocUnsafe(t.length);for(t=i.concat([t,i.from([e])]);++n>7;return o}e.encrypt=function(t,e,r){for(var o=e.length,s=i.allocUnsafe(o),a=-1;++a>>0,0),e.writeUInt32BE(t[1]>>>0,4),e.writeUInt32BE(t[2]>>>0,8),e.writeUInt32BE(t[3]>>>0,12),e}function s(t){this.h=t,this.state=i.alloc(16,0),this.cache=i.allocUnsafe(0)}s.prototype.ghash=function(t){for(var e=-1;++e0;t--)r[t]=r[t]>>>1|(1&r[t-1])<<31;r[0]=r[0]>>>1,e&&(r[0]=r[0]^225<<24)}this.state=o(n)},s.prototype.update=function(t){var e;for(this.cache=i.concat([this.cache,t]);this.cache.length>=16;)e=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(e)},s.prototype.final=function(t,e){return this.cache.length&&this.ghash(i.concat([this.cache,n],16)),this.ghash(o([0,t,0,e])),this.state},t.exports=s},function(t,e,r){var i=r(171),n=r(2).Buffer,o=r(97),s=r(172),a=r(20),h=r(62),u=r(63);function f(t,e,r){a.call(this),this._cache=new c,this._last=void 0,this._cipher=new h.AES(e),this._prev=n.from(r),this._mode=t,this._autopadding=!0}function c(){this.cache=n.allocUnsafe(0)}function l(t,e,r){var a=o[t.toLowerCase()];if(!a)throw new TypeError("invalid suite type");if("string"==typeof r&&(r=n.from(r)),"GCM"!==a.mode&&r.length!==a.iv)throw new TypeError("invalid iv length "+r.length);if("string"==typeof e&&(e=n.from(e)),e.length!==a.key/8)throw new TypeError("invalid key length "+e.length);return"stream"===a.type?new s(a.module,e,r,!0):"auth"===a.type?new i(a.module,e,r,!0):new f(a.module,e,r)}r(1)(f,a),f.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get(this._autopadding);)r=this._mode.decrypt(this,e),i.push(r);return n.concat(i)},f.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return function e(t){var e=t[15];if(e<1||e>16)throw new Error("unable to decrypt data");var r=-1;for(;++r16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},c.prototype.flush=function(){if(this.cache.length)return this.cache},e.createDecipher=function d(t,e){var r=o[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var i=u(e,!1,r.key,r.iv);return l(t,i.key,i.iv)},e.createDecipheriv=l},function(t,e){e["des-ecb"]={key:8,iv:0},e["des-cbc"]=e.des={key:8,iv:8},e["des-ede3-cbc"]=e.des3={key:24,iv:8},e["des-ede3"]={key:24,iv:0},e["des-ede-cbc"]={key:16,iv:8},e["des-ede"]={key:16,iv:0}},function(t,e,r){(function(t){var i=r(173),n=r(327),o=r(328);var s={binary:!0,hex:!0,base64:!0};e.DiffieHellmanGroup=e.createDiffieHellmanGroup=e.getDiffieHellman=function a(e){var r=new t(n[e].prime,"hex"),i=new t(n[e].gen,"hex");return new o(r,i)},e.createDiffieHellman=e.DiffieHellman=function e(r,n,a,h){return t.isBuffer(n)||void 0===s[n]?e(r,"binary",n,a):(n=n||"binary",h=h||"binary",a=a||new t([2]),t.isBuffer(a)||(a=new t(a,h)),"number"==typeof r?new o(i(r,a),a,!0):(t.isBuffer(r)||(r=new t(r,n)),new o(r,a,!0)))}}).call(this,r(26).Buffer)},function(t,e){},function(t,e,r){(function(t){!function(t,e){"use strict";function i(t,e){if(!t)throw new Error(e||"Assertion failed")}function n(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){if(o.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var s;"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;try{s=r(325).Buffer}catch(t){}function a(t,e,r){for(var i=0,n=Math.min(t.length,r),o=e;o=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s=49?a-49+10:a>=17?a-17+10:a}return n}o.isBN=function t(e){return e instanceof o||null!==e&&"object"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function t(e,r){return e.cmp(r)>0?e:r},o.min=function t(e,r){return e.cmp(r)<0?e:r},o.prototype._init=function t(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"==typeof e)return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initNumber=function t(e,r,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initArray=function t(e,r,n){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[s]|=a<>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);else if("le"===n)for(o=0,s=0;o>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);return this.strip()},o.prototype._parseHex=function t(e,r){this.length=Math.ceil((e.length-r)/6),this.words=new Array(this.length);for(var i=0;i=r;i-=6)o=a(e,i,i+6),this.words[n]|=o<>>26-s&4194303,(s+=24)>=26&&(s-=26,n++);i+6!==r&&(o=a(e,r,i+6),this.words[n]|=o<>>26-s&4194303),this.strip()},o.prototype._parseBase=function t(e,r,i){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=r)n++;n--,o=o/r|0;for(var s=e.length-i,a=s%n,u=Math.min(s,s-a)+i,f=0,c=i;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function t(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function t(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],c=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u>>26,c=67108863&h,l=Math.min(u,e.length-1),d=Math.max(0,u-t.length+1);d<=l;d++){var p=u-d|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[d])+c)/67108864|0,c=67108863&s}r.words[u]=0|c,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}o.prototype.toString=function t(e,r){var n;if(r=0|r||1,16===(e=e||10)||"hex"===e){n="";for(var o=0,s=0,a=0;a>>24-o&16777215)||a!==this.length-1?u[6-l.length]+l+n:l+n,(o+=2)>=26&&(o-=26,a--)}for(0!==s&&(n=s.toString(16)+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var d=f[e],p=c[e];n="";var m=this.clone();for(m.negative=0;!m.isZero();){var g=m.modn(p).toString(e);n=(m=m.idivn(p)).isZero()?g+n:u[d-g.length]+g+n}for(this.isZero()&&(n="0"+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function t(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function t(){return this.toString(16)},o.prototype.toBuffer=function t(e,r){return i(void 0!==s),this.toArrayLike(s,e,r)},o.prototype.toArray=function t(e,r){return this.toArrayLike(Array,e,r)},o.prototype.toArrayLike=function t(e,r,n){var o=this.byteLength(),s=n||Math.max(1,o);i(o<=s,"byte array longer than desired length"),i(s>0,"Requested array length <= 0"),this.strip();var a,h,u="le"===r,f=new e(s),c=this.clone();if(u){for(h=0;!c.isZero();h++)a=c.andln(255),c.iushrn(8),f[h]=a;for(;h=4096&&(i+=13,r>>>=13),r>=64&&(i+=7,r>>>=7),r>=8&&(i+=4,r>>>=4),r>=2&&(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function t(e){if(0===e)return 26;var r=e,i=0;return 0==(8191&r)&&(i+=13,r>>>=13),0==(127&r)&&(i+=7,r>>>=7),0==(15&r)&&(i+=4,r>>>=4),0==(3&r)&&(i+=2,r>>>=2),0==(1&r)&&i++,i},o.prototype.bitLength=function t(){var e=this.words[this.length-1],r=this._countBits(e);return 26*(this.length-1)+r},o.prototype.zeroBits=function t(){if(this.isZero())return 0;for(var e=0,r=0;re.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function t(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function t(e){var r;r=this.length>e.length?e:this;for(var i=0;ie.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function t(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function t(e){var r,i;this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function t(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function t(e){i("number"==typeof e&&e>=0);var r=0|Math.ceil(e/26),n=e%26;this._expand(r),n>0&&r--;for(var o=0;o0&&(this.words[o]=~this.words[o]&67108863>>26-n),this.strip()},o.prototype.notn=function t(e){return this.clone().inotn(e)},o.prototype.setn=function t(e,r){i("number"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=r?this.words[n]|1<e.length?(i=this,n=e):(i=e,n=this);for(var o=0,s=0;s>>26;for(;0!==o&&s>>26;if(this.length=i.length,0!==o)this.words[this.length]=o,this.length++;else if(i!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function t(e){if(0!==e.negative){e.negative=0;var r=this.iadd(e);return e.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var i,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(i=this,n=e):(i=e,n=this);for(var s=0,a=0;a>26,this.words[a]=67108863&r;for(;0!==s&&a>26,this.words[a]=67108863&r;if(0===s&&a>>13,p=0|a[1],m=8191&p,g=p>>>13,v=0|a[2],b=8191&v,y=v>>>13,w=0|a[3],_=8191&w,M=w>>>13,S=0|a[4],k=8191&S,E=S>>>13,R=0|a[5],A=8191&R,x=R>>>13,T=0|a[6],P=8191&T,I=T>>>13,L=0|a[7],O=8191&L,B=L>>>13,j=0|a[8],C=8191&j,U=j>>>13,N=0|a[9],q=8191&N,D=N>>>13,z=0|h[0],F=8191&z,W=z>>>13,H=0|h[1],K=8191&H,Z=H>>>13,V=0|h[2],J=8191&V,Y=V>>>13,G=0|h[3],X=8191&G,Q=G>>>13,$=0|h[4],tt=8191&$,et=$>>>13,rt=0|h[5],it=8191&rt,nt=rt>>>13,ot=0|h[6],st=8191&ot,at=ot>>>13,ht=0|h[7],ut=8191&ht,ft=ht>>>13,ct=0|h[8],lt=8191&ct,dt=ct>>>13,pt=0|h[9],mt=8191&pt,gt=pt>>>13;i.negative=e.negative^r.negative,i.length=19;var vt=(f+(n=Math.imul(l,F))|0)+((8191&(o=(o=Math.imul(l,W))+Math.imul(d,F)|0))<<13)|0;f=((s=Math.imul(d,W))+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(m,F),o=(o=Math.imul(m,W))+Math.imul(g,F)|0,s=Math.imul(g,W);var bt=(f+(n=n+Math.imul(l,K)|0)|0)+((8191&(o=(o=o+Math.imul(l,Z)|0)+Math.imul(d,K)|0))<<13)|0;f=((s=s+Math.imul(d,Z)|0)+(o>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(b,F),o=(o=Math.imul(b,W))+Math.imul(y,F)|0,s=Math.imul(y,W),n=n+Math.imul(m,K)|0,o=(o=o+Math.imul(m,Z)|0)+Math.imul(g,K)|0,s=s+Math.imul(g,Z)|0;var yt=(f+(n=n+Math.imul(l,J)|0)|0)+((8191&(o=(o=o+Math.imul(l,Y)|0)+Math.imul(d,J)|0))<<13)|0;f=((s=s+Math.imul(d,Y)|0)+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(_,F),o=(o=Math.imul(_,W))+Math.imul(M,F)|0,s=Math.imul(M,W),n=n+Math.imul(b,K)|0,o=(o=o+Math.imul(b,Z)|0)+Math.imul(y,K)|0,s=s+Math.imul(y,Z)|0,n=n+Math.imul(m,J)|0,o=(o=o+Math.imul(m,Y)|0)+Math.imul(g,J)|0,s=s+Math.imul(g,Y)|0;var wt=(f+(n=n+Math.imul(l,X)|0)|0)+((8191&(o=(o=o+Math.imul(l,Q)|0)+Math.imul(d,X)|0))<<13)|0;f=((s=s+Math.imul(d,Q)|0)+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,F),o=(o=Math.imul(k,W))+Math.imul(E,F)|0,s=Math.imul(E,W),n=n+Math.imul(_,K)|0,o=(o=o+Math.imul(_,Z)|0)+Math.imul(M,K)|0,s=s+Math.imul(M,Z)|0,n=n+Math.imul(b,J)|0,o=(o=o+Math.imul(b,Y)|0)+Math.imul(y,J)|0,s=s+Math.imul(y,Y)|0,n=n+Math.imul(m,X)|0,o=(o=o+Math.imul(m,Q)|0)+Math.imul(g,X)|0,s=s+Math.imul(g,Q)|0;var _t=(f+(n=n+Math.imul(l,tt)|0)|0)+((8191&(o=(o=o+Math.imul(l,et)|0)+Math.imul(d,tt)|0))<<13)|0;f=((s=s+Math.imul(d,et)|0)+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(A,F),o=(o=Math.imul(A,W))+Math.imul(x,F)|0,s=Math.imul(x,W),n=n+Math.imul(k,K)|0,o=(o=o+Math.imul(k,Z)|0)+Math.imul(E,K)|0,s=s+Math.imul(E,Z)|0,n=n+Math.imul(_,J)|0,o=(o=o+Math.imul(_,Y)|0)+Math.imul(M,J)|0,s=s+Math.imul(M,Y)|0,n=n+Math.imul(b,X)|0,o=(o=o+Math.imul(b,Q)|0)+Math.imul(y,X)|0,s=s+Math.imul(y,Q)|0,n=n+Math.imul(m,tt)|0,o=(o=o+Math.imul(m,et)|0)+Math.imul(g,tt)|0,s=s+Math.imul(g,et)|0;var Mt=(f+(n=n+Math.imul(l,it)|0)|0)+((8191&(o=(o=o+Math.imul(l,nt)|0)+Math.imul(d,it)|0))<<13)|0;f=((s=s+Math.imul(d,nt)|0)+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,F),o=(o=Math.imul(P,W))+Math.imul(I,F)|0,s=Math.imul(I,W),n=n+Math.imul(A,K)|0,o=(o=o+Math.imul(A,Z)|0)+Math.imul(x,K)|0,s=s+Math.imul(x,Z)|0,n=n+Math.imul(k,J)|0,o=(o=o+Math.imul(k,Y)|0)+Math.imul(E,J)|0,s=s+Math.imul(E,Y)|0,n=n+Math.imul(_,X)|0,o=(o=o+Math.imul(_,Q)|0)+Math.imul(M,X)|0,s=s+Math.imul(M,Q)|0,n=n+Math.imul(b,tt)|0,o=(o=o+Math.imul(b,et)|0)+Math.imul(y,tt)|0,s=s+Math.imul(y,et)|0,n=n+Math.imul(m,it)|0,o=(o=o+Math.imul(m,nt)|0)+Math.imul(g,it)|0,s=s+Math.imul(g,nt)|0;var St=(f+(n=n+Math.imul(l,st)|0)|0)+((8191&(o=(o=o+Math.imul(l,at)|0)+Math.imul(d,st)|0))<<13)|0;f=((s=s+Math.imul(d,at)|0)+(o>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(O,F),o=(o=Math.imul(O,W))+Math.imul(B,F)|0,s=Math.imul(B,W),n=n+Math.imul(P,K)|0,o=(o=o+Math.imul(P,Z)|0)+Math.imul(I,K)|0,s=s+Math.imul(I,Z)|0,n=n+Math.imul(A,J)|0,o=(o=o+Math.imul(A,Y)|0)+Math.imul(x,J)|0,s=s+Math.imul(x,Y)|0,n=n+Math.imul(k,X)|0,o=(o=o+Math.imul(k,Q)|0)+Math.imul(E,X)|0,s=s+Math.imul(E,Q)|0,n=n+Math.imul(_,tt)|0,o=(o=o+Math.imul(_,et)|0)+Math.imul(M,tt)|0,s=s+Math.imul(M,et)|0,n=n+Math.imul(b,it)|0,o=(o=o+Math.imul(b,nt)|0)+Math.imul(y,it)|0,s=s+Math.imul(y,nt)|0,n=n+Math.imul(m,st)|0,o=(o=o+Math.imul(m,at)|0)+Math.imul(g,st)|0,s=s+Math.imul(g,at)|0;var kt=(f+(n=n+Math.imul(l,ut)|0)|0)+((8191&(o=(o=o+Math.imul(l,ft)|0)+Math.imul(d,ut)|0))<<13)|0;f=((s=s+Math.imul(d,ft)|0)+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(C,F),o=(o=Math.imul(C,W))+Math.imul(U,F)|0,s=Math.imul(U,W),n=n+Math.imul(O,K)|0,o=(o=o+Math.imul(O,Z)|0)+Math.imul(B,K)|0,s=s+Math.imul(B,Z)|0,n=n+Math.imul(P,J)|0,o=(o=o+Math.imul(P,Y)|0)+Math.imul(I,J)|0,s=s+Math.imul(I,Y)|0,n=n+Math.imul(A,X)|0,o=(o=o+Math.imul(A,Q)|0)+Math.imul(x,X)|0,s=s+Math.imul(x,Q)|0,n=n+Math.imul(k,tt)|0,o=(o=o+Math.imul(k,et)|0)+Math.imul(E,tt)|0,s=s+Math.imul(E,et)|0,n=n+Math.imul(_,it)|0,o=(o=o+Math.imul(_,nt)|0)+Math.imul(M,it)|0,s=s+Math.imul(M,nt)|0,n=n+Math.imul(b,st)|0,o=(o=o+Math.imul(b,at)|0)+Math.imul(y,st)|0,s=s+Math.imul(y,at)|0,n=n+Math.imul(m,ut)|0,o=(o=o+Math.imul(m,ft)|0)+Math.imul(g,ut)|0,s=s+Math.imul(g,ft)|0;var Et=(f+(n=n+Math.imul(l,lt)|0)|0)+((8191&(o=(o=o+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;f=((s=s+Math.imul(d,dt)|0)+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(q,F),o=(o=Math.imul(q,W))+Math.imul(D,F)|0,s=Math.imul(D,W),n=n+Math.imul(C,K)|0,o=(o=o+Math.imul(C,Z)|0)+Math.imul(U,K)|0,s=s+Math.imul(U,Z)|0,n=n+Math.imul(O,J)|0,o=(o=o+Math.imul(O,Y)|0)+Math.imul(B,J)|0,s=s+Math.imul(B,Y)|0,n=n+Math.imul(P,X)|0,o=(o=o+Math.imul(P,Q)|0)+Math.imul(I,X)|0,s=s+Math.imul(I,Q)|0,n=n+Math.imul(A,tt)|0,o=(o=o+Math.imul(A,et)|0)+Math.imul(x,tt)|0,s=s+Math.imul(x,et)|0,n=n+Math.imul(k,it)|0,o=(o=o+Math.imul(k,nt)|0)+Math.imul(E,it)|0,s=s+Math.imul(E,nt)|0,n=n+Math.imul(_,st)|0,o=(o=o+Math.imul(_,at)|0)+Math.imul(M,st)|0,s=s+Math.imul(M,at)|0,n=n+Math.imul(b,ut)|0,o=(o=o+Math.imul(b,ft)|0)+Math.imul(y,ut)|0,s=s+Math.imul(y,ft)|0,n=n+Math.imul(m,lt)|0,o=(o=o+Math.imul(m,dt)|0)+Math.imul(g,lt)|0,s=s+Math.imul(g,dt)|0;var Rt=(f+(n=n+Math.imul(l,mt)|0)|0)+((8191&(o=(o=o+Math.imul(l,gt)|0)+Math.imul(d,mt)|0))<<13)|0;f=((s=s+Math.imul(d,gt)|0)+(o>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(q,K),o=(o=Math.imul(q,Z))+Math.imul(D,K)|0,s=Math.imul(D,Z),n=n+Math.imul(C,J)|0,o=(o=o+Math.imul(C,Y)|0)+Math.imul(U,J)|0,s=s+Math.imul(U,Y)|0,n=n+Math.imul(O,X)|0,o=(o=o+Math.imul(O,Q)|0)+Math.imul(B,X)|0,s=s+Math.imul(B,Q)|0,n=n+Math.imul(P,tt)|0,o=(o=o+Math.imul(P,et)|0)+Math.imul(I,tt)|0,s=s+Math.imul(I,et)|0,n=n+Math.imul(A,it)|0,o=(o=o+Math.imul(A,nt)|0)+Math.imul(x,it)|0,s=s+Math.imul(x,nt)|0,n=n+Math.imul(k,st)|0,o=(o=o+Math.imul(k,at)|0)+Math.imul(E,st)|0,s=s+Math.imul(E,at)|0,n=n+Math.imul(_,ut)|0,o=(o=o+Math.imul(_,ft)|0)+Math.imul(M,ut)|0,s=s+Math.imul(M,ft)|0,n=n+Math.imul(b,lt)|0,o=(o=o+Math.imul(b,dt)|0)+Math.imul(y,lt)|0,s=s+Math.imul(y,dt)|0;var At=(f+(n=n+Math.imul(m,mt)|0)|0)+((8191&(o=(o=o+Math.imul(m,gt)|0)+Math.imul(g,mt)|0))<<13)|0;f=((s=s+Math.imul(g,gt)|0)+(o>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(q,J),o=(o=Math.imul(q,Y))+Math.imul(D,J)|0,s=Math.imul(D,Y),n=n+Math.imul(C,X)|0,o=(o=o+Math.imul(C,Q)|0)+Math.imul(U,X)|0,s=s+Math.imul(U,Q)|0,n=n+Math.imul(O,tt)|0,o=(o=o+Math.imul(O,et)|0)+Math.imul(B,tt)|0,s=s+Math.imul(B,et)|0,n=n+Math.imul(P,it)|0,o=(o=o+Math.imul(P,nt)|0)+Math.imul(I,it)|0,s=s+Math.imul(I,nt)|0,n=n+Math.imul(A,st)|0,o=(o=o+Math.imul(A,at)|0)+Math.imul(x,st)|0,s=s+Math.imul(x,at)|0,n=n+Math.imul(k,ut)|0,o=(o=o+Math.imul(k,ft)|0)+Math.imul(E,ut)|0,s=s+Math.imul(E,ft)|0,n=n+Math.imul(_,lt)|0,o=(o=o+Math.imul(_,dt)|0)+Math.imul(M,lt)|0,s=s+Math.imul(M,dt)|0;var xt=(f+(n=n+Math.imul(b,mt)|0)|0)+((8191&(o=(o=o+Math.imul(b,gt)|0)+Math.imul(y,mt)|0))<<13)|0;f=((s=s+Math.imul(y,gt)|0)+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(q,X),o=(o=Math.imul(q,Q))+Math.imul(D,X)|0,s=Math.imul(D,Q),n=n+Math.imul(C,tt)|0,o=(o=o+Math.imul(C,et)|0)+Math.imul(U,tt)|0,s=s+Math.imul(U,et)|0,n=n+Math.imul(O,it)|0,o=(o=o+Math.imul(O,nt)|0)+Math.imul(B,it)|0,s=s+Math.imul(B,nt)|0,n=n+Math.imul(P,st)|0,o=(o=o+Math.imul(P,at)|0)+Math.imul(I,st)|0,s=s+Math.imul(I,at)|0,n=n+Math.imul(A,ut)|0,o=(o=o+Math.imul(A,ft)|0)+Math.imul(x,ut)|0,s=s+Math.imul(x,ft)|0,n=n+Math.imul(k,lt)|0,o=(o=o+Math.imul(k,dt)|0)+Math.imul(E,lt)|0,s=s+Math.imul(E,dt)|0;var Tt=(f+(n=n+Math.imul(_,mt)|0)|0)+((8191&(o=(o=o+Math.imul(_,gt)|0)+Math.imul(M,mt)|0))<<13)|0;f=((s=s+Math.imul(M,gt)|0)+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(q,tt),o=(o=Math.imul(q,et))+Math.imul(D,tt)|0,s=Math.imul(D,et),n=n+Math.imul(C,it)|0,o=(o=o+Math.imul(C,nt)|0)+Math.imul(U,it)|0,s=s+Math.imul(U,nt)|0,n=n+Math.imul(O,st)|0,o=(o=o+Math.imul(O,at)|0)+Math.imul(B,st)|0,s=s+Math.imul(B,at)|0,n=n+Math.imul(P,ut)|0,o=(o=o+Math.imul(P,ft)|0)+Math.imul(I,ut)|0,s=s+Math.imul(I,ft)|0,n=n+Math.imul(A,lt)|0,o=(o=o+Math.imul(A,dt)|0)+Math.imul(x,lt)|0,s=s+Math.imul(x,dt)|0;var Pt=(f+(n=n+Math.imul(k,mt)|0)|0)+((8191&(o=(o=o+Math.imul(k,gt)|0)+Math.imul(E,mt)|0))<<13)|0;f=((s=s+Math.imul(E,gt)|0)+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(q,it),o=(o=Math.imul(q,nt))+Math.imul(D,it)|0,s=Math.imul(D,nt),n=n+Math.imul(C,st)|0,o=(o=o+Math.imul(C,at)|0)+Math.imul(U,st)|0,s=s+Math.imul(U,at)|0,n=n+Math.imul(O,ut)|0,o=(o=o+Math.imul(O,ft)|0)+Math.imul(B,ut)|0,s=s+Math.imul(B,ft)|0,n=n+Math.imul(P,lt)|0,o=(o=o+Math.imul(P,dt)|0)+Math.imul(I,lt)|0,s=s+Math.imul(I,dt)|0;var It=(f+(n=n+Math.imul(A,mt)|0)|0)+((8191&(o=(o=o+Math.imul(A,gt)|0)+Math.imul(x,mt)|0))<<13)|0;f=((s=s+Math.imul(x,gt)|0)+(o>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(q,st),o=(o=Math.imul(q,at))+Math.imul(D,st)|0,s=Math.imul(D,at),n=n+Math.imul(C,ut)|0,o=(o=o+Math.imul(C,ft)|0)+Math.imul(U,ut)|0,s=s+Math.imul(U,ft)|0,n=n+Math.imul(O,lt)|0,o=(o=o+Math.imul(O,dt)|0)+Math.imul(B,lt)|0,s=s+Math.imul(B,dt)|0;var Lt=(f+(n=n+Math.imul(P,mt)|0)|0)+((8191&(o=(o=o+Math.imul(P,gt)|0)+Math.imul(I,mt)|0))<<13)|0;f=((s=s+Math.imul(I,gt)|0)+(o>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(q,ut),o=(o=Math.imul(q,ft))+Math.imul(D,ut)|0,s=Math.imul(D,ft),n=n+Math.imul(C,lt)|0,o=(o=o+Math.imul(C,dt)|0)+Math.imul(U,lt)|0,s=s+Math.imul(U,dt)|0;var Ot=(f+(n=n+Math.imul(O,mt)|0)|0)+((8191&(o=(o=o+Math.imul(O,gt)|0)+Math.imul(B,mt)|0))<<13)|0;f=((s=s+Math.imul(B,gt)|0)+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(q,lt),o=(o=Math.imul(q,dt))+Math.imul(D,lt)|0,s=Math.imul(D,dt);var Bt=(f+(n=n+Math.imul(C,mt)|0)|0)+((8191&(o=(o=o+Math.imul(C,gt)|0)+Math.imul(U,mt)|0))<<13)|0;f=((s=s+Math.imul(U,gt)|0)+(o>>>13)|0)+(Bt>>>26)|0,Bt&=67108863;var jt=(f+(n=Math.imul(q,mt))|0)+((8191&(o=(o=Math.imul(q,gt))+Math.imul(D,mt)|0))<<13)|0;return f=((s=Math.imul(D,gt))+(o>>>13)|0)+(jt>>>26)|0,jt&=67108863,u[0]=vt,u[1]=bt,u[2]=yt,u[3]=wt,u[4]=_t,u[5]=Mt,u[6]=St,u[7]=kt,u[8]=Et,u[9]=Rt,u[10]=At,u[11]=xt,u[12]=Tt,u[13]=Pt,u[14]=It,u[15]=Lt,u[16]=Ot,u[17]=Bt,u[18]=jt,0!==f&&(u[19]=f,i.length++),i};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(d=l),o.prototype.mulTo=function t(e,r){var i=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,r):i<63?l(this,e,r):i<1024?function n(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,e,r):p(this,e,r)},m.prototype.makeRBT=function t(e){for(var r=new Array(e),i=o.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function t(e,r,i,n,o,s){for(var a=0;a>>=1)o++;return 1<>>=13,n[2*a+1]=8191&s,s>>>=13;for(a=2*r;a>=26,r+=o/67108864|0,r+=s>>>26,this.words[n]=67108863&s}return 0!==r&&(this.words[n]=r,this.length++),this},o.prototype.muln=function t(e){return this.clone().imuln(e)},o.prototype.sqr=function t(){return this.mul(this)},o.prototype.isqr=function t(){return this.imul(this.clone())},o.prototype.pow=function t(e){var r=function i(t){for(var e=new Array(t.bitLength()),r=0;r>>n}return e}(e);if(0===r.length)return new o(1);for(var n=this,s=0;s=0);var r,n=e%26,o=(e-n)/26,s=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(r=0;r>>26-n}a&&(this.words[r]=a,this.length++)}if(0!==o){for(r=this.length-1;r>=0;r--)this.words[r+o]=this.words[r];for(r=0;r=0),o=r?(r-r%26)/26:0;var s=e%26,a=Math.min((e-s)/26,this.length),h=67108863^67108863>>>s<a)for(this.length-=a,f=0;f=0&&(0!==c||f>=o);f--){var l=0|this.words[f];this.words[f]=c<<26-s|l>>>s,c=l&h}return u&&0!==c&&(u.words[u.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function t(e,r,n){return i(0===this.negative),this.iushrn(e,r,n)},o.prototype.shln=function t(e){return this.clone().ishln(e)},o.prototype.ushln=function t(e){return this.clone().iushln(e)},o.prototype.shrn=function t(e){return this.clone().ishrn(e)},o.prototype.ushrn=function t(e){return this.clone().iushrn(e)},o.prototype.testn=function t(e){i("number"==typeof e&&e>=0);var r=e%26,n=(e-r)/26,o=1<=0);var r=e%26,n=(e-r)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==r&&n++,this.length=Math.min(n,this.length),0!==r){var o=67108863^67108863>>>r<=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function t(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var r=0;r>26)-(u/67108864|0),this.words[o+n]=67108863&s}for(;o>26,this.words[o+n]=67108863&s;if(0===h)return this.strip();for(i(-1===h),h=0,o=0;o>26,this.words[o]=67108863&s;return this.negative=1,this.strip()},o.prototype._wordDiv=function t(e,r){var i=(this.length,e.length),n=this.clone(),s=e,a=0|s.words[s.length-1];0!==(i=26-this._countBits(a))&&(s=s.ushln(i),n.iushln(i),a=0|s.words[s.length-1]);var h,u=n.length-s.length;if("mod"!==r){(h=new o(null)).length=u+1,h.words=new Array(h.length);for(var f=0;f=0;l--){var d=67108864*(0|n.words[s.length+l])+(0|n.words[s.length+l-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(s,d,l);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(s,1,l),n.isZero()||(n.negative^=1);h&&(h.words[l]=d)}return h&&h.strip(),n.strip(),"div"!==r&&0!==i&&n.iushrn(i),{div:h||null,mod:n}},o.prototype.divmod=function t(e,r,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(h=this.neg().divmod(e,r),"mod"!==r&&(s=h.div.neg()),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:s,mod:a}):0===this.negative&&0!==e.negative?(h=this.divmod(e.neg(),r),"mod"!==r&&(s=h.div.neg()),{div:s,mod:h.mod}):0!=(this.negative&e.negative)?(h=this.neg().divmod(e.neg(),r),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:h.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===r?{div:this.divn(e.words[0]),mod:null}:"mod"===r?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,r);var s,a,h},o.prototype.div=function t(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function t(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function t(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function t(e){var r=this.divmod(e);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(e):r.mod,n=e.ushrn(1),o=e.andln(1),s=i.cmp(n);return s<0||1===o&&0===s?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function t(e){i(e<=67108863);for(var r=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(r*n+(0|this.words[o]))%e;return n},o.prototype.idivn=function t(e){i(e<=67108863);for(var r=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*r;this.words[n]=o/e|0,r=o%e}return this.strip()},o.prototype.divn=function t(e){return this.clone().idivn(e)},o.prototype.egcd=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s=new o(1),a=new o(0),h=new o(0),u=new o(1),f=0;r.isEven()&&n.isEven();)r.iushrn(1),n.iushrn(1),++f;for(var c=n.clone(),l=r.clone();!r.isZero();){for(var d=0,p=1;0==(r.words[0]&p)&&d<26;++d,p<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(c),a.isub(l)),s.iushrn(1),a.iushrn(1);for(var m=0,g=1;0==(n.words[0]&g)&&m<26;++m,g<<=1);if(m>0)for(n.iushrn(m);m-- >0;)(h.isOdd()||u.isOdd())&&(h.iadd(c),u.isub(l)),h.iushrn(1),u.iushrn(1);r.cmp(n)>=0?(r.isub(n),s.isub(h),a.isub(u)):(n.isub(r),h.isub(s),u.isub(a))}return{a:h,b:u,gcd:n.iushln(f)}},o.prototype._invmp=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s,a=new o(1),h=new o(0),u=n.clone();r.cmpn(1)>0&&n.cmpn(1)>0;){for(var f=0,c=1;0==(r.words[0]&c)&&f<26;++f,c<<=1);if(f>0)for(r.iushrn(f);f-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var l=0,d=1;0==(n.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(n.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(u),h.iushrn(1);r.cmp(n)>=0?(r.isub(n),a.isub(h)):(n.isub(r),h.isub(a))}return(s=0===r.cmpn(1)?a:h).cmpn(0)<0&&s.iadd(e),s},o.prototype.gcd=function t(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var r=this.clone(),i=e.clone();r.negative=0,i.negative=0;for(var n=0;r.isEven()&&i.isEven();n++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var o=r.cmp(i);if(o<0){var s=r;r=i,i=s}else if(0===o||0===i.cmpn(1))break;r.isub(i)}return i.iushln(n)},o.prototype.invm=function t(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function t(){return 0==(1&this.words[0])},o.prototype.isOdd=function t(){return 1==(1&this.words[0])},o.prototype.andln=function t(e){return this.words[0]&e},o.prototype.bincn=function t(e){i("number"==typeof e);var r=e%26,n=(e-r)/26,o=1<>>26,h&=67108863,this.words[a]=h}return 0!==s&&(this.words[a]=s,this.length++),this},o.prototype.isZero=function t(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function t(e){var r,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)r=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var o=0|this.words[0];r=o===e?0:oe.length)return 1;if(this.length=0;i--){var n=0|this.words[i],o=0|e.words[i];if(n!==o){no&&(r=1);break}}return r},o.prototype.gtn=function t(e){return 1===this.cmpn(e)},o.prototype.gt=function t(e){return 1===this.cmp(e)},o.prototype.gten=function t(e){return this.cmpn(e)>=0},o.prototype.gte=function t(e){return this.cmp(e)>=0},o.prototype.ltn=function t(e){return-1===this.cmpn(e)},o.prototype.lt=function t(e){return-1===this.cmp(e)},o.prototype.lten=function t(e){return this.cmpn(e)<=0},o.prototype.lte=function t(e){return this.cmp(e)<=0},o.prototype.eqn=function t(e){return 0===this.cmpn(e)},o.prototype.eq=function t(e){return 0===this.cmp(e)},o.red=function t(e){return new M(e)},o.prototype.toRed=function t(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function t(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function t(e){return this.red=e,this},o.prototype.forceRed=function t(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function t(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function t(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function t(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function t(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function t(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function t(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function t(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function t(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function t(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function t(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function t(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function M(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function S(t){M.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function t(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function t(e){var r,i=e;do{this.split(i,this.tmp),r=(i=(i=this.imulK(i)).iadd(this.tmp)).bitLength()}while(r>this.n);var n=r0?i.isub(this.p):void 0!==i.strip?i.strip():i._strip(),i},v.prototype.split=function t(e,r){e.iushrn(this.n,0,r)},v.prototype.imulK=function t(e){return e.imul(this.k)},n(b,v),b.prototype.split=function t(e,r){for(var i=4194303,n=Math.min(e.length,9),o=0;o>>22,s=a}s>>>=22,e.words[o-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function t(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var r=0,i=0;i>>=26,e.words[i]=o,r=n}return 0!==r&&(e.words[e.length++]=r),e},o._prime=function t(e){if(g[e])return g[e];var t;if("k256"===e)t=new b;else if("p224"===e)t=new y;else if("p192"===e)t=new w;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new _}return g[e]=t,t},M.prototype._verify1=function t(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},M.prototype._verify2=function t(e,r){i(0==(e.negative|r.negative),"red works only with positives"),i(e.red&&e.red===r.red,"red works only with red numbers")},M.prototype.imod=function t(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},M.prototype.neg=function t(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},M.prototype.add=function t(e,r){this._verify2(e,r);var i=e.add(r);return i.cmp(this.m)>=0&&i.isub(this.m),i._forceRed(this)},M.prototype.iadd=function t(e,r){this._verify2(e,r);var i=e.iadd(r);return i.cmp(this.m)>=0&&i.isub(this.m),i},M.prototype.sub=function t(e,r){this._verify2(e,r);var i=e.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},M.prototype.isub=function t(e,r){this._verify2(e,r);var i=e.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},M.prototype.shl=function t(e,r){return this._verify1(e),this.imod(e.ushln(r))},M.prototype.imul=function t(e,r){return this._verify2(e,r),this.imod(e.imul(r))},M.prototype.mul=function t(e,r){return this._verify2(e,r),this.imod(e.mul(r))},M.prototype.isqr=function t(e){return this.imul(e,e.clone())},M.prototype.sqr=function t(e){return this.mul(e,e)},M.prototype.sqrt=function t(e){if(e.isZero())return e.clone();var r=this.m.andln(3);if(i(r%2==1),3===r){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var s=this.m.subn(1),a=0;!s.isZero()&&0===s.andln(1);)a++,s.iushrn(1);i(!s.isZero());var h=new o(1).toRed(this),u=h.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);0!==this.pow(c,f).cmp(u);)c.redIAdd(u);for(var l=this.pow(c,s),d=this.pow(e,s.addn(1).iushrn(1)),p=this.pow(e,s),m=a;0!==p.cmp(h);){for(var g=p,v=0;0!==g.cmp(h);v++)g=g.redSqr();i(v=0;n--){for(var f=r.words[n],c=u-1;c>=0;c--){var l=f>>c&1;s!==i[0]&&(s=this.sqr(s)),0!==l||0!==a?(a<<=1,a|=l,(4===++h||0===n&&0===c)&&(s=this.mul(s,i[a]),h=0,a=0)):h=0}u=26}return s},M.prototype.convertTo=function t(e){var r=e.umod(this.m);return r===e?r.clone():r},M.prototype.convertFrom=function t(e){var r=e.clone();return r.red=null,r},o.mont=function t(e){return new S(e)},n(S,M),S.prototype.convertTo=function t(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function t(e){var r=this.imod(e.mul(this.rinv));return r.red=null,r},S.prototype.imul=function t(e,r){if(e.isZero()||r.isZero())return e.words[0]=0,e.length=1,e;var i=e.imul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=i.isub(n).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},S.prototype.mul=function t(e,r){if(e.isZero()||r.isZero())return new o(0)._forceRed(this);var i=e.mul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=i.isub(n).iushrn(this.shift),a=s;return s.cmp(this.m)>=0?a=s.isub(this.m):s.cmpn(0)<0&&(a=s.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function t(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(28)(t))},function(t,e){},function(t,e){},function(t){t.exports=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')},function(t,e,r){(function(e){var i=r(174),n=new(r(175)),o=new i(24),s=new i(11),a=new i(10),h=new i(3),u=new i(7),f=r(173),c=r(31);function l(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._pub=new i(t),this}function d(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._priv=new i(t),this}t.exports=m;var p={};function m(t,e,r){this.setGenerator(e),this.__prime=new i(t),this._prime=i.mont(this.__prime),this._primeLen=t.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=l,this.setPrivateKey=d):this._primeCode=8}function g(t,r){var i=new e(t.toArray());return r?i.toString(r):i}Object.defineProperty(m.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function t(e,r){var i=r.toString("hex"),c=[i,e.toString(16)].join("_");if(c in p)return p[c];var l,d=0;if(e.isEven()||!f.simpleSieve||!f.fermatTest(e)||!n.test(e))return d+=1,d+="02"===i||"05"===i?8:4,p[c]=d,d;switch(n.test(e.shrn(1))||(d+=2),i){case"02":e.mod(o).cmp(s)&&(d+=8);break;case"05":(l=e.mod(a)).cmp(h)&&l.cmp(u)&&(d+=8);break;default:d+=4}return p[c]=d,d}(this.__prime,this.__gen)),this._primeCode}}),m.prototype.generateKeys=function(){return this._priv||(this._priv=new i(c(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},m.prototype.computeSecret=function(t){var r=(t=(t=new i(t)).toRed(this._prime)).redPow(this._priv).fromRed(),n=new e(r.toArray()),o=this.getPrime();if(n.length0?this.tail.next=r:this.head=r,this.tail=r,++this.length}},{key:"unshift",value:function t(e){var r={data:e,next:this.head};0===this.length&&(this.tail=r),this.head=r,++this.length}},{key:"shift",value:function t(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function t(){this.head=this.tail=null,this.length=0}},{key:"join",value:function t(e){if(0===this.length)return"";for(var r=this.head,i=""+r.data;r=r.next;)i+=e+r.data;return i}},{key:"concat",value:function t(e){if(0===this.length)return s.alloc(0);for(var r,i,n,o=s.allocUnsafe(e>>>0),a=this.head,h=0;a;)r=a.data,i=o,n=h,s.prototype.copy.call(r,i,n),h+=a.data.length,a=a.next;return o}},{key:"consume",value:function t(e,r){var i;return eo.length?o.length:e;if(s===o.length?n+=o:n+=o.slice(0,e),0===(e-=s)){s===o.length?(++i,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(s));break}++i}return this.length-=i,n}},{key:"_getBuffer",value:function t(e){var r=s.allocUnsafe(e),i=this.head,n=1;for(i.data.copy(r),e-=i.data.length;i=i.next;){var o=i.data,a=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,a),0===(e-=a)){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,r}},{key:h,value:function t(e,r){return a(this,function o(t){for(var e=1;e0,(function(t){i||(i=t),t&&s.forEach(u),o||(s.forEach(u),n(i))}))}));return e.reduce(f)}},function(t,e,r){var i=r(99).Buffer,n=r(158),o=r(101),s=r(103).ec,a=r(102),h=r(65),u=r(193);function f(t,e,r,o){if((t=i.from(t.toArray())).length0&&r.ishrn(i),r}function l(t,e,r){var o,s;do{for(o=i.alloc(0);8*o.length=0&&(a=r,h=i),o.negative&&(o=o.neg(),s=s.neg()),a.negative&&(a=a.neg(),h=h.neg()),[{a:o,b:s},{a:a,b:h}]},h.prototype._endoSplit=function t(e){var r=this.endo.basis,i=r[0],n=r[1],o=n.b.mul(e).divRound(this.n),s=i.b.neg().mul(e).divRound(this.n),a=o.mul(i.a),h=s.mul(n.a),u=o.mul(i.b),f=s.mul(n.b);return{k1:e.sub(a).sub(h),k2:u.add(f).neg()}},h.prototype.pointFromX=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),o=i.redSqrt();if(0!==o.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");var s=o.fromRed().isOdd();return(r&&!s||!r&&s)&&(o=o.redNeg()),this.point(e,o)},h.prototype.validate=function t(e){if(e.inf)return!0;var r=e.x,i=e.y,n=this.a.redMul(r),o=r.redSqr().redMul(r).redIAdd(n).redIAdd(this.b);return 0===i.redSqr().redISub(o).cmpn(0)},h.prototype._endoWnafMulAdd=function t(e,r,i){for(var n=this._endoWnafT1,o=this._endoWnafT2,s=0;s":""},u.prototype.isInfinity=function t(){return this.inf},u.prototype.add=function t(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var r=this.y.redSub(e.y);0!==r.cmpn(0)&&(r=r.redMul(this.x.redSub(e.x).redInvm()));var i=r.redSqr().redISub(this.x).redISub(e.x),n=r.redMul(this.x.redSub(i)).redISub(this.y);return this.curve.point(i,n)},u.prototype.dbl=function t(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var r=this.curve.a,i=this.x.redSqr(),n=e.redInvm(),o=i.redAdd(i).redIAdd(i).redIAdd(r).redMul(n),s=o.redSqr().redISub(this.x.redAdd(this.x)),a=o.redMul(this.x.redSub(s)).redISub(this.y);return this.curve.point(s,a)},u.prototype.getX=function t(){return this.x.fromRed()},u.prototype.getY=function t(){return this.y.fromRed()},u.prototype.mul=function t(e){return e=new n(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function t(e,r,i){var n=[this,r],o=[e,i];return this.curve.endo?this.curve._endoWnafMulAdd(n,o):this.curve._wnafMulAdd(1,n,o,2)},u.prototype.jmulAdd=function t(e,r,i){var n=[this,r],o=[e,i];return this.curve.endo?this.curve._endoWnafMulAdd(n,o,!0):this.curve._wnafMulAdd(1,n,o,2,!0)},u.prototype.eq=function t(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},u.prototype.neg=function t(e){if(this.inf)return this;var r=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var i=this.precomputed,n=function(t){return t.neg()};r.precomputed={naf:i.naf&&{wnd:i.naf.wnd,points:i.naf.points.map(n)},doubles:i.doubles&&{step:i.doubles.step,points:i.doubles.points.map(n)}}}return r},u.prototype.toJ=function t(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(f,s.BasePoint),h.prototype.jpoint=function t(e,r,i){return new f(this,e,r,i)},f.prototype.toP=function t(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),r=e.redSqr(),i=this.x.redMul(r),n=this.y.redMul(r).redMul(e);return this.curve.point(i,n)},f.prototype.neg=function t(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},f.prototype.add=function t(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var r=e.z.redSqr(),i=this.z.redSqr(),n=this.x.redMul(r),o=e.x.redMul(i),s=this.y.redMul(r.redMul(e.z)),a=e.y.redMul(i.redMul(this.z)),h=n.redSub(o),u=s.redSub(a);if(0===h.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=h.redSqr(),c=f.redMul(h),l=n.redMul(f),d=u.redSqr().redIAdd(c).redISub(l).redISub(l),p=u.redMul(l.redISub(d)).redISub(s.redMul(c)),m=this.z.redMul(e.z).redMul(h);return this.curve.jpoint(d,p,m)},f.prototype.mixedAdd=function t(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var r=this.z.redSqr(),i=this.x,n=e.x.redMul(r),o=this.y,s=e.y.redMul(r).redMul(this.z),a=i.redSub(n),h=o.redSub(s);if(0===a.cmpn(0))return 0!==h.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=a.redSqr(),f=u.redMul(a),c=i.redMul(u),l=h.redSqr().redIAdd(f).redISub(c).redISub(c),d=h.redMul(c.redISub(l)).redISub(o.redMul(f)),p=this.z.redMul(a);return this.curve.jpoint(l,d,p)},f.prototype.dblp=function t(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();var r;if(this.curve.zeroA||this.curve.threeA){var i=this;for(r=0;r=0)return!1;if(i.redIAdd(o),0===this.x.cmp(i))return!0}},f.prototype.inspect=function t(){return this.isInfinity()?"":""},f.prototype.isInfinity=function t(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";var i=r(16),n=r(104),o=r(64),s=r(11);function a(t){o.call(this,"mont",t),this.a=new i(t.a,16).toRed(this.red),this.b=new i(t.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function h(t,e,r){o.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(e,16),this.z=new i(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}n(a,o),t.exports=a,a.prototype.validate=function t(e){var r=e.normalize().x,i=r.redSqr(),n=i.redMul(r).redAdd(i.redMul(this.a)).redAdd(r);return 0===n.redSqrt().redSqr().cmp(n)},n(h,o.BasePoint),a.prototype.decodePoint=function t(e,r){return this.point(s.toArray(e,r),1)},a.prototype.point=function t(e,r){return new h(this,e,r)},a.prototype.pointFromJSON=function t(e){return h.fromJSON(this,e)},h.prototype.precompute=function t(){},h.prototype._encode=function t(){return this.getX().toArray("be",this.curve.p.byteLength())},h.fromJSON=function t(e,r){return new h(e,r[0],r[1]||e.one)},h.prototype.inspect=function t(){return this.isInfinity()?"":""},h.prototype.isInfinity=function t(){return 0===this.z.cmpn(0)},h.prototype.dbl=function t(){var e=this.x.redAdd(this.z).redSqr(),r=this.x.redSub(this.z).redSqr(),i=e.redSub(r),n=e.redMul(r),o=i.redMul(r.redAdd(this.curve.a24.redMul(i)));return this.curve.point(n,o)},h.prototype.add=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.diffAdd=function t(e,r){var i=this.x.redAdd(this.z),n=this.x.redSub(this.z),o=e.x.redAdd(e.z),s=e.x.redSub(e.z).redMul(i),a=o.redMul(n),h=r.z.redMul(s.redAdd(a).redSqr()),u=r.x.redMul(s.redISub(a).redSqr());return this.curve.point(h,u)},h.prototype.mul=function t(e){for(var r=e.clone(),i=this,n=this.curve.point(null,null),o=[];0!==r.cmpn(0);r.iushrn(1))o.push(r.andln(1));for(var s=o.length-1;s>=0;s--)0===o[s]?(i=i.diffAdd(n,this),n=n.dbl()):(n=i.diffAdd(n,this),i=i.dbl());return n},h.prototype.mulAdd=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.jumlAdd=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.eq=function t(e){return 0===this.getX().cmp(e.getX())},h.prototype.normalize=function t(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},h.prototype.getX=function t(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";var i=r(11),n=r(16),o=r(104),s=r(64),a=i.assert;function h(t){this.twisted=1!=(0|t.a),this.mOneA=this.twisted&&-1==(0|t.a),this.extended=this.mOneA,s.call(this,"edwards",t),this.a=new n(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new n(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new n(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),a(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|t.c)}function u(t,e,r,i,o){s.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===i?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new n(e,16),this.y=new n(r,16),this.z=i?new n(i,16):this.curve.one,this.t=o&&new n(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}o(h,s),t.exports=h,h.prototype._mulA=function t(e){return this.mOneA?e.redNeg():this.a.redMul(e)},h.prototype._mulC=function t(e){return this.oneC?e:this.c.redMul(e)},h.prototype.jpoint=function t(e,r,i,n){return this.point(e,r,i,n)},h.prototype.pointFromX=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr(),o=this.c2.redSub(this.a.redMul(i)),s=this.one.redSub(this.c2.redMul(this.d).redMul(i)),a=o.redMul(s.redInvm()),h=a.redSqrt();if(0!==h.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");var u=h.fromRed().isOdd();return(r&&!u||!r&&u)&&(h=h.redNeg()),this.point(e,h)},h.prototype.pointFromY=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr(),o=i.redSub(this.c2),s=i.redMul(this.d).redMul(this.c2).redSub(this.a),a=o.redMul(s.redInvm());if(0===a.cmp(this.zero)){if(r)throw new Error("invalid point");return this.point(this.zero,e)}var h=a.redSqrt();if(0!==h.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");return h.fromRed().isOdd()!==r&&(h=h.redNeg()),this.point(h,e)},h.prototype.validate=function t(e){if(e.isInfinity())return!0;e.normalize();var r=e.x.redSqr(),i=e.y.redSqr(),n=r.redMul(this.a).redAdd(i),o=this.c2.redMul(this.one.redAdd(this.d.redMul(r).redMul(i)));return 0===n.cmp(o)},o(u,s.BasePoint),h.prototype.pointFromJSON=function t(e){return u.fromJSON(this,e)},h.prototype.point=function t(e,r,i,n){return new u(this,e,r,i,n)},u.fromJSON=function t(e,r){return new u(e,r[0],r[1],r[2])},u.prototype.inspect=function t(){return this.isInfinity()?"":""},u.prototype.isInfinity=function t(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},u.prototype._extDbl=function t(){var e=this.x.redSqr(),r=this.y.redSqr(),i=this.z.redSqr();i=i.redIAdd(i);var n=this.curve._mulA(e),o=this.x.redAdd(this.y).redSqr().redISub(e).redISub(r),s=n.redAdd(r),a=s.redSub(i),h=n.redSub(r),u=o.redMul(a),f=s.redMul(h),c=o.redMul(h),l=a.redMul(s);return this.curve.point(u,f,l,c)},u.prototype._projDbl=function t(){var e,r,i,n,o,s,a=this.x.redAdd(this.y).redSqr(),h=this.x.redSqr(),u=this.y.redSqr();if(this.curve.twisted){var f=(n=this.curve._mulA(h)).redAdd(u);this.zOne?(e=a.redSub(h).redSub(u).redMul(f.redSub(this.curve.two)),r=f.redMul(n.redSub(u)),i=f.redSqr().redSub(f).redSub(f)):(o=this.z.redSqr(),s=f.redSub(o).redISub(o),e=a.redSub(h).redISub(u).redMul(s),r=f.redMul(n.redSub(u)),i=f.redMul(s))}else n=h.redAdd(u),o=this.curve._mulC(this.z).redSqr(),s=n.redSub(o).redSub(o),e=this.curve._mulC(a.redISub(n)).redMul(s),r=this.curve._mulC(n).redMul(h.redISub(u)),i=n.redMul(s);return this.curve.point(e,r,i)},u.prototype.dbl=function t(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},u.prototype._extAdd=function t(e){var r=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),i=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),o=this.z.redMul(e.z.redAdd(e.z)),s=i.redSub(r),a=o.redSub(n),h=o.redAdd(n),u=i.redAdd(r),f=s.redMul(a),c=h.redMul(u),l=s.redMul(u),d=a.redMul(h);return this.curve.point(f,c,d,l)},u.prototype._projAdd=function t(e){var r,i,n=this.z.redMul(e.z),o=n.redSqr(),s=this.x.redMul(e.x),a=this.y.redMul(e.y),h=this.curve.d.redMul(s).redMul(a),u=o.redSub(h),f=o.redAdd(h),c=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(s).redISub(a),l=n.redMul(u).redMul(c);return this.curve.twisted?(r=n.redMul(f).redMul(a.redSub(this.curve._mulA(s))),i=u.redMul(f)):(r=n.redMul(f).redMul(a.redSub(s)),i=this.curve._mulC(u).redMul(f)),this.curve.point(l,r,i)},u.prototype.add=function t(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},u.prototype.mul=function t(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function t(e,r,i){return this.curve._wnafMulAdd(1,[this,r],[e,i],2,!1)},u.prototype.jmulAdd=function t(e,r,i){return this.curve._wnafMulAdd(1,[this,r],[e,i],2,!0)},u.prototype.normalize=function t(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},u.prototype.neg=function t(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},u.prototype.getX=function t(){return this.normalize(),this.x.fromRed()},u.prototype.getY=function t(){return this.normalize(),this.y.fromRed()},u.prototype.eq=function t(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},u.prototype.eqXToP=function t(e){var r=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(r))return!0;for(var i=e.clone(),n=this.curve.redN.redMul(this.z);;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}},u.prototype.toP=u.prototype.normalize,u.prototype.mixedAdd=u.prototype.add},function(t,e,r){"use strict";e.sha1=r(346),e.sha224=r(347),e.sha256=r(185),e.sha384=r(348),e.sha512=r(186)},function(t,e,r){"use strict";var i=r(13),n=r(46),o=r(184),s=i.rotl32,a=i.sum32,h=i.sum32_5,u=o.ft_1,f=n.BlockHash,c=[1518500249,1859775393,2400959708,3395469782];function l(){if(!(this instanceof l))return new l;f.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}i.inherits(l,f),t.exports=l,l.blockSize=512,l.outSize=160,l.hmacStrength=80,l.padLength=64,l.prototype._update=function t(e,r){for(var i=this.W,n=0;n<16;n++)i[n]=e[r+n];for(;nthis.blockSize&&(e=(new this.Hash).update(e).digest()),n(e.length<=this.blockSize);for(var r=e.length;r0))return h.iaddn(1),this.keyFromPrivate(h)}},c.prototype._truncateToN=function t(e,r){var i=8*e.byteLength()-this.n.bitLength();return i>0&&(e=e.ushrn(i)),!r&&e.cmp(this.n)>=0?e.sub(this.n):e},c.prototype.sign=function t(e,r,o,s){"object"==typeof o&&(s=o,o=null),s||(s={}),r=this.keyFromPrivate(r,o),e=this._truncateToN(new i(e,16));for(var a=this.n.byteLength(),h=r.getPrivate().toArray("be",a),u=e.toArray("be",a),c=new n({hash:this.hash,entropy:h,nonce:u,pers:s.pers,persEnc:s.persEnc||"utf8"}),l=this.n.sub(new i(1)),d=0;;d++){var p=s.k?s.k(d):new i(c.generate(this.n.byteLength()));if(!((p=this._truncateToN(p,!0)).cmpn(1)<=0||p.cmp(l)>=0)){var m=this.g.mul(p);if(!m.isInfinity()){var g=m.getX(),v=g.umod(this.n);if(0!==v.cmpn(0)){var b=p.invm(this.n).mul(v.mul(r.getPrivate()).iadd(e));if(0!==(b=b.umod(this.n)).cmpn(0)){var y=(m.getY().isOdd()?1:0)|(0!==g.cmp(v)?2:0);return s.canonical&&b.cmp(this.nh)>0&&(b=this.n.sub(b),y^=1),new f({r:v,s:b,recoveryParam:y})}}}}}},c.prototype.verify=function t(e,r,n,o){e=this._truncateToN(new i(e,16)),n=this.keyFromPublic(n,o);var s=(r=new f(r,"hex")).r,a=r.s;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var h,u=a.invm(this.n),c=u.mul(e).umod(this.n),l=u.mul(s).umod(this.n);return this.curve._maxwellTrick?!(h=this.g.jmulAdd(c,n.getPublic(),l)).isInfinity()&&h.eqXToP(s):!(h=this.g.mulAdd(c,n.getPublic(),l)).isInfinity()&&0===h.getX().umod(this.n).cmp(s)},c.prototype.recoverPubKey=function(t,e,r,n){h((3&r)===r,"The recovery param is more than two bits"),e=new f(e,n);var o=this.n,s=new i(t),a=e.r,u=e.s,c=1&r,l=r>>1;if(a.cmp(this.curve.p.umod(this.curve.n))>=0&&l)throw new Error("Unable to find sencond key candinate");a=l?this.curve.pointFromX(a.add(this.curve.n),c):this.curve.pointFromX(a,c);var d=e.r.invm(o),p=o.sub(s).mul(d).umod(o),m=u.mul(d).umod(o);return this.g.mulAdd(p,a,m)},c.prototype.getKeyRecoveryParam=function(t,e,r,i){if(null!==(e=new f(e,i)).recoveryParam)return e.recoveryParam;for(var n=0;n<4;n++){var o;try{o=this.recoverPubKey(t,e,n)}catch(t){continue}if(o.eq(r))return n}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";var i=r(106),n=r(182),o=r(10);function s(t){if(!(this instanceof s))return new s(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=n.toArray(t.entropy,t.entropyEnc||"hex"),r=n.toArray(t.nonce,t.nonceEnc||"hex"),i=n.toArray(t.pers,t.persEnc||"hex");o(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,i)}t.exports=s,s.prototype._init=function t(e,r,i){var n=e.concat(r).concat(i);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var o=0;o=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(i||[])),this._reseed=1},s.prototype.generate=function t(e,r,i,o){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof r&&(o=i,i=r,r=null),i&&(i=n.toArray(i,o||"hex"),this._update(i));for(var s=[];s.length"}},function(t,e,r){"use strict";var i=r(16),n=r(11),o=n.assert;function s(t,e){if(t instanceof s)return t;this._importDER(t,e)||(o(t.r&&t.s,"Signature without r or s"),this.r=new i(t.r,16),this.s=new i(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}function a(){this.place=0}function h(t,e){var r=t[e.place++];if(!(128&r))return r;var i=15&r;if(0===i||i>4)return!1;for(var n=0,o=0,s=e.place;o>>=0;return!(n<=127)&&(e.place=s,n)}function u(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}}t.exports=s,s.prototype._importDER=function t(e,r){e=n.toArray(e,r);var o=new a;if(48!==e[o.place++])return!1;var s=h(e,o);if(!1===s)return!1;if(s+o.place!==e.length)return!1;if(2!==e[o.place++])return!1;var u=h(e,o);if(!1===u)return!1;var f=e.slice(o.place,u+o.place);if(o.place+=u,2!==e[o.place++])return!1;var c=h(e,o);if(!1===c)return!1;if(e.length!==c+o.place)return!1;var l=e.slice(o.place,c+o.place);if(0===f[0]){if(!(128&f[1]))return!1;f=f.slice(1)}if(0===l[0]){if(!(128&l[1]))return!1;l=l.slice(1)}return this.r=new i(f),this.s=new i(l),this.recoveryParam=null,!0},s.prototype.toDER=function t(e){var r=this.r.toArray(),i=this.s.toArray();for(128&r[0]&&(r=[0].concat(r)),128&i[0]&&(i=[0].concat(i)),r=u(r),i=u(i);!(i[0]||128&i[1]);)i=i.slice(1);var o=[2];f(o,r.length),(o=o.concat(r)).push(2),f(o,i.length);var s=o.concat(i),a=[48];return f(a,s.length),a=a.concat(s),n.encode(a,e)}},function(t,e,r){"use strict";var i=r(106),n=r(105),o=r(11),s=o.assert,a=o.parseBytes,h=r(357),u=r(358);function f(t){if(s("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof f))return new f(t);t=n[t].curve,this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=i.sha512}t.exports=f,f.prototype.sign=function t(e,r){e=a(e);var i=this.keyFromSecret(r),n=this.hashInt(i.messagePrefix(),e),o=this.g.mul(n),s=this.encodePoint(o),h=this.hashInt(s,i.pubBytes(),e).mul(i.priv()),u=n.add(h).umod(this.curve.n);return this.makeSignature({R:o,S:u,Rencoded:s})},f.prototype.verify=function t(e,r,i){e=a(e),r=this.makeSignature(r);var n=this.keyFromPublic(i),o=this.hashInt(r.Rencoded(),n.pubBytes(),e),s=this.g.mul(r.S());return r.R().add(n.pub().mul(o)).eq(s)},f.prototype.hashInt=function t(){for(var e=this.hash(),r=0;r=e)throw new Error("invalid sig")}t.exports=function u(t,e,r,f,c){var l=s(r);if("ec"===l.type){if("ecdsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");return function d(t,e,r){var i=a[r.data.algorithm.curve.join(".")];if(!i)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var n=new o(i),s=r.data.subjectPrivateKey.data;return n.verify(e,t,s)}(t,e,l)}if("dsa"===l.type){if("dsa"!==f)throw new Error("wrong public key type");return function p(t,e,r){var i=r.data.p,o=r.data.q,a=r.data.g,u=r.data.pub_key,f=s.signature.decode(t,"der"),c=f.s,l=f.r;h(c,o),h(l,o);var d=n.mont(i),p=c.invm(o);return 0===a.toRed(d).redPow(new n(e).mul(p).mod(o)).fromRed().mul(u.toRed(d).redPow(l.mul(p).mod(o)).fromRed()).mod(i).mod(o).cmp(l)}(t,e,l)}if("rsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");e=i.concat([c,e]);for(var m=l.modulus.byteLength(),g=[1],v=0;e.length+g.length+2=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s=49?a-49+10:a>=17?a-17+10:a}return n}o.isBN=function t(e){return e instanceof o||null!==e&&"object"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function t(e,r){return e.cmp(r)>0?e:r},o.min=function t(e,r){return e.cmp(r)<0?e:r},o.prototype._init=function t(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"==typeof e)return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initNumber=function t(e,r,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initArray=function t(e,r,n){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[s]|=a<>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);else if("le"===n)for(o=0,s=0;o>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);return this.strip()},o.prototype._parseHex=function t(e,r){this.length=Math.ceil((e.length-r)/6),this.words=new Array(this.length);for(var i=0;i=r;i-=6)o=a(e,i,i+6),this.words[n]|=o<>>26-s&4194303,(s+=24)>=26&&(s-=26,n++);i+6!==r&&(o=a(e,r,i+6),this.words[n]|=o<>>26-s&4194303),this.strip()},o.prototype._parseBase=function t(e,r,i){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=r)n++;n--,o=o/r|0;for(var s=e.length-i,a=s%n,u=Math.min(s,s-a)+i,f=0,c=i;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function t(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function t(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],c=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u>>26,c=67108863&h,l=Math.min(u,e.length-1),d=Math.max(0,u-t.length+1);d<=l;d++){var p=u-d|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[d])+c)/67108864|0,c=67108863&s}r.words[u]=0|c,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}o.prototype.toString=function t(e,r){var n;if(r=0|r||1,16===(e=e||10)||"hex"===e){n="";for(var o=0,s=0,a=0;a>>24-o&16777215)||a!==this.length-1?u[6-l.length]+l+n:l+n,(o+=2)>=26&&(o-=26,a--)}for(0!==s&&(n=s.toString(16)+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var d=f[e],p=c[e];n="";var m=this.clone();for(m.negative=0;!m.isZero();){var g=m.modn(p).toString(e);n=(m=m.idivn(p)).isZero()?g+n:u[d-g.length]+g+n}for(this.isZero()&&(n="0"+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function t(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function t(){return this.toString(16)},o.prototype.toBuffer=function t(e,r){return i(void 0!==s),this.toArrayLike(s,e,r)},o.prototype.toArray=function t(e,r){return this.toArrayLike(Array,e,r)},o.prototype.toArrayLike=function t(e,r,n){var o=this.byteLength(),s=n||Math.max(1,o);i(o<=s,"byte array longer than desired length"),i(s>0,"Requested array length <= 0"),this.strip();var a,h,u="le"===r,f=new e(s),c=this.clone();if(u){for(h=0;!c.isZero();h++)a=c.andln(255),c.iushrn(8),f[h]=a;for(;h=4096&&(i+=13,r>>>=13),r>=64&&(i+=7,r>>>=7),r>=8&&(i+=4,r>>>=4),r>=2&&(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function t(e){if(0===e)return 26;var r=e,i=0;return 0==(8191&r)&&(i+=13,r>>>=13),0==(127&r)&&(i+=7,r>>>=7),0==(15&r)&&(i+=4,r>>>=4),0==(3&r)&&(i+=2,r>>>=2),0==(1&r)&&i++,i},o.prototype.bitLength=function t(){var e=this.words[this.length-1],r=this._countBits(e);return 26*(this.length-1)+r},o.prototype.zeroBits=function t(){if(this.isZero())return 0;for(var e=0,r=0;re.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function t(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function t(e){var r;r=this.length>e.length?e:this;for(var i=0;ie.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function t(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function t(e){var r,i;this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function t(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function t(e){i("number"==typeof e&&e>=0);var r=0|Math.ceil(e/26),n=e%26;this._expand(r),n>0&&r--;for(var o=0;o0&&(this.words[o]=~this.words[o]&67108863>>26-n),this.strip()},o.prototype.notn=function t(e){return this.clone().inotn(e)},o.prototype.setn=function t(e,r){i("number"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=r?this.words[n]|1<e.length?(i=this,n=e):(i=e,n=this);for(var o=0,s=0;s>>26;for(;0!==o&&s>>26;if(this.length=i.length,0!==o)this.words[this.length]=o,this.length++;else if(i!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function t(e){if(0!==e.negative){e.negative=0;var r=this.iadd(e);return e.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var i,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(i=this,n=e):(i=e,n=this);for(var s=0,a=0;a>26,this.words[a]=67108863&r;for(;0!==s&&a>26,this.words[a]=67108863&r;if(0===s&&a>>13,p=0|a[1],m=8191&p,g=p>>>13,v=0|a[2],b=8191&v,y=v>>>13,w=0|a[3],_=8191&w,M=w>>>13,S=0|a[4],k=8191&S,E=S>>>13,R=0|a[5],A=8191&R,x=R>>>13,T=0|a[6],P=8191&T,I=T>>>13,L=0|a[7],O=8191&L,B=L>>>13,j=0|a[8],C=8191&j,U=j>>>13,N=0|a[9],q=8191&N,D=N>>>13,z=0|h[0],F=8191&z,W=z>>>13,H=0|h[1],K=8191&H,Z=H>>>13,V=0|h[2],J=8191&V,Y=V>>>13,G=0|h[3],X=8191&G,Q=G>>>13,$=0|h[4],tt=8191&$,et=$>>>13,rt=0|h[5],it=8191&rt,nt=rt>>>13,ot=0|h[6],st=8191&ot,at=ot>>>13,ht=0|h[7],ut=8191&ht,ft=ht>>>13,ct=0|h[8],lt=8191&ct,dt=ct>>>13,pt=0|h[9],mt=8191&pt,gt=pt>>>13;i.negative=e.negative^r.negative,i.length=19;var vt=(f+(n=Math.imul(l,F))|0)+((8191&(o=(o=Math.imul(l,W))+Math.imul(d,F)|0))<<13)|0;f=((s=Math.imul(d,W))+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(m,F),o=(o=Math.imul(m,W))+Math.imul(g,F)|0,s=Math.imul(g,W);var bt=(f+(n=n+Math.imul(l,K)|0)|0)+((8191&(o=(o=o+Math.imul(l,Z)|0)+Math.imul(d,K)|0))<<13)|0;f=((s=s+Math.imul(d,Z)|0)+(o>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(b,F),o=(o=Math.imul(b,W))+Math.imul(y,F)|0,s=Math.imul(y,W),n=n+Math.imul(m,K)|0,o=(o=o+Math.imul(m,Z)|0)+Math.imul(g,K)|0,s=s+Math.imul(g,Z)|0;var yt=(f+(n=n+Math.imul(l,J)|0)|0)+((8191&(o=(o=o+Math.imul(l,Y)|0)+Math.imul(d,J)|0))<<13)|0;f=((s=s+Math.imul(d,Y)|0)+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(_,F),o=(o=Math.imul(_,W))+Math.imul(M,F)|0,s=Math.imul(M,W),n=n+Math.imul(b,K)|0,o=(o=o+Math.imul(b,Z)|0)+Math.imul(y,K)|0,s=s+Math.imul(y,Z)|0,n=n+Math.imul(m,J)|0,o=(o=o+Math.imul(m,Y)|0)+Math.imul(g,J)|0,s=s+Math.imul(g,Y)|0;var wt=(f+(n=n+Math.imul(l,X)|0)|0)+((8191&(o=(o=o+Math.imul(l,Q)|0)+Math.imul(d,X)|0))<<13)|0;f=((s=s+Math.imul(d,Q)|0)+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,F),o=(o=Math.imul(k,W))+Math.imul(E,F)|0,s=Math.imul(E,W),n=n+Math.imul(_,K)|0,o=(o=o+Math.imul(_,Z)|0)+Math.imul(M,K)|0,s=s+Math.imul(M,Z)|0,n=n+Math.imul(b,J)|0,o=(o=o+Math.imul(b,Y)|0)+Math.imul(y,J)|0,s=s+Math.imul(y,Y)|0,n=n+Math.imul(m,X)|0,o=(o=o+Math.imul(m,Q)|0)+Math.imul(g,X)|0,s=s+Math.imul(g,Q)|0;var _t=(f+(n=n+Math.imul(l,tt)|0)|0)+((8191&(o=(o=o+Math.imul(l,et)|0)+Math.imul(d,tt)|0))<<13)|0;f=((s=s+Math.imul(d,et)|0)+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(A,F),o=(o=Math.imul(A,W))+Math.imul(x,F)|0,s=Math.imul(x,W),n=n+Math.imul(k,K)|0,o=(o=o+Math.imul(k,Z)|0)+Math.imul(E,K)|0,s=s+Math.imul(E,Z)|0,n=n+Math.imul(_,J)|0,o=(o=o+Math.imul(_,Y)|0)+Math.imul(M,J)|0,s=s+Math.imul(M,Y)|0,n=n+Math.imul(b,X)|0,o=(o=o+Math.imul(b,Q)|0)+Math.imul(y,X)|0,s=s+Math.imul(y,Q)|0,n=n+Math.imul(m,tt)|0,o=(o=o+Math.imul(m,et)|0)+Math.imul(g,tt)|0,s=s+Math.imul(g,et)|0;var Mt=(f+(n=n+Math.imul(l,it)|0)|0)+((8191&(o=(o=o+Math.imul(l,nt)|0)+Math.imul(d,it)|0))<<13)|0;f=((s=s+Math.imul(d,nt)|0)+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,F),o=(o=Math.imul(P,W))+Math.imul(I,F)|0,s=Math.imul(I,W),n=n+Math.imul(A,K)|0,o=(o=o+Math.imul(A,Z)|0)+Math.imul(x,K)|0,s=s+Math.imul(x,Z)|0,n=n+Math.imul(k,J)|0,o=(o=o+Math.imul(k,Y)|0)+Math.imul(E,J)|0,s=s+Math.imul(E,Y)|0,n=n+Math.imul(_,X)|0,o=(o=o+Math.imul(_,Q)|0)+Math.imul(M,X)|0,s=s+Math.imul(M,Q)|0,n=n+Math.imul(b,tt)|0,o=(o=o+Math.imul(b,et)|0)+Math.imul(y,tt)|0,s=s+Math.imul(y,et)|0,n=n+Math.imul(m,it)|0,o=(o=o+Math.imul(m,nt)|0)+Math.imul(g,it)|0,s=s+Math.imul(g,nt)|0;var St=(f+(n=n+Math.imul(l,st)|0)|0)+((8191&(o=(o=o+Math.imul(l,at)|0)+Math.imul(d,st)|0))<<13)|0;f=((s=s+Math.imul(d,at)|0)+(o>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(O,F),o=(o=Math.imul(O,W))+Math.imul(B,F)|0,s=Math.imul(B,W),n=n+Math.imul(P,K)|0,o=(o=o+Math.imul(P,Z)|0)+Math.imul(I,K)|0,s=s+Math.imul(I,Z)|0,n=n+Math.imul(A,J)|0,o=(o=o+Math.imul(A,Y)|0)+Math.imul(x,J)|0,s=s+Math.imul(x,Y)|0,n=n+Math.imul(k,X)|0,o=(o=o+Math.imul(k,Q)|0)+Math.imul(E,X)|0,s=s+Math.imul(E,Q)|0,n=n+Math.imul(_,tt)|0,o=(o=o+Math.imul(_,et)|0)+Math.imul(M,tt)|0,s=s+Math.imul(M,et)|0,n=n+Math.imul(b,it)|0,o=(o=o+Math.imul(b,nt)|0)+Math.imul(y,it)|0,s=s+Math.imul(y,nt)|0,n=n+Math.imul(m,st)|0,o=(o=o+Math.imul(m,at)|0)+Math.imul(g,st)|0,s=s+Math.imul(g,at)|0;var kt=(f+(n=n+Math.imul(l,ut)|0)|0)+((8191&(o=(o=o+Math.imul(l,ft)|0)+Math.imul(d,ut)|0))<<13)|0;f=((s=s+Math.imul(d,ft)|0)+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(C,F),o=(o=Math.imul(C,W))+Math.imul(U,F)|0,s=Math.imul(U,W),n=n+Math.imul(O,K)|0,o=(o=o+Math.imul(O,Z)|0)+Math.imul(B,K)|0,s=s+Math.imul(B,Z)|0,n=n+Math.imul(P,J)|0,o=(o=o+Math.imul(P,Y)|0)+Math.imul(I,J)|0,s=s+Math.imul(I,Y)|0,n=n+Math.imul(A,X)|0,o=(o=o+Math.imul(A,Q)|0)+Math.imul(x,X)|0,s=s+Math.imul(x,Q)|0,n=n+Math.imul(k,tt)|0,o=(o=o+Math.imul(k,et)|0)+Math.imul(E,tt)|0,s=s+Math.imul(E,et)|0,n=n+Math.imul(_,it)|0,o=(o=o+Math.imul(_,nt)|0)+Math.imul(M,it)|0,s=s+Math.imul(M,nt)|0,n=n+Math.imul(b,st)|0,o=(o=o+Math.imul(b,at)|0)+Math.imul(y,st)|0,s=s+Math.imul(y,at)|0,n=n+Math.imul(m,ut)|0,o=(o=o+Math.imul(m,ft)|0)+Math.imul(g,ut)|0,s=s+Math.imul(g,ft)|0;var Et=(f+(n=n+Math.imul(l,lt)|0)|0)+((8191&(o=(o=o+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;f=((s=s+Math.imul(d,dt)|0)+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(q,F),o=(o=Math.imul(q,W))+Math.imul(D,F)|0,s=Math.imul(D,W),n=n+Math.imul(C,K)|0,o=(o=o+Math.imul(C,Z)|0)+Math.imul(U,K)|0,s=s+Math.imul(U,Z)|0,n=n+Math.imul(O,J)|0,o=(o=o+Math.imul(O,Y)|0)+Math.imul(B,J)|0,s=s+Math.imul(B,Y)|0,n=n+Math.imul(P,X)|0,o=(o=o+Math.imul(P,Q)|0)+Math.imul(I,X)|0,s=s+Math.imul(I,Q)|0,n=n+Math.imul(A,tt)|0,o=(o=o+Math.imul(A,et)|0)+Math.imul(x,tt)|0,s=s+Math.imul(x,et)|0,n=n+Math.imul(k,it)|0,o=(o=o+Math.imul(k,nt)|0)+Math.imul(E,it)|0,s=s+Math.imul(E,nt)|0,n=n+Math.imul(_,st)|0,o=(o=o+Math.imul(_,at)|0)+Math.imul(M,st)|0,s=s+Math.imul(M,at)|0,n=n+Math.imul(b,ut)|0,o=(o=o+Math.imul(b,ft)|0)+Math.imul(y,ut)|0,s=s+Math.imul(y,ft)|0,n=n+Math.imul(m,lt)|0,o=(o=o+Math.imul(m,dt)|0)+Math.imul(g,lt)|0,s=s+Math.imul(g,dt)|0;var Rt=(f+(n=n+Math.imul(l,mt)|0)|0)+((8191&(o=(o=o+Math.imul(l,gt)|0)+Math.imul(d,mt)|0))<<13)|0;f=((s=s+Math.imul(d,gt)|0)+(o>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(q,K),o=(o=Math.imul(q,Z))+Math.imul(D,K)|0,s=Math.imul(D,Z),n=n+Math.imul(C,J)|0,o=(o=o+Math.imul(C,Y)|0)+Math.imul(U,J)|0,s=s+Math.imul(U,Y)|0,n=n+Math.imul(O,X)|0,o=(o=o+Math.imul(O,Q)|0)+Math.imul(B,X)|0,s=s+Math.imul(B,Q)|0,n=n+Math.imul(P,tt)|0,o=(o=o+Math.imul(P,et)|0)+Math.imul(I,tt)|0,s=s+Math.imul(I,et)|0,n=n+Math.imul(A,it)|0,o=(o=o+Math.imul(A,nt)|0)+Math.imul(x,it)|0,s=s+Math.imul(x,nt)|0,n=n+Math.imul(k,st)|0,o=(o=o+Math.imul(k,at)|0)+Math.imul(E,st)|0,s=s+Math.imul(E,at)|0,n=n+Math.imul(_,ut)|0,o=(o=o+Math.imul(_,ft)|0)+Math.imul(M,ut)|0,s=s+Math.imul(M,ft)|0,n=n+Math.imul(b,lt)|0,o=(o=o+Math.imul(b,dt)|0)+Math.imul(y,lt)|0,s=s+Math.imul(y,dt)|0;var At=(f+(n=n+Math.imul(m,mt)|0)|0)+((8191&(o=(o=o+Math.imul(m,gt)|0)+Math.imul(g,mt)|0))<<13)|0;f=((s=s+Math.imul(g,gt)|0)+(o>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(q,J),o=(o=Math.imul(q,Y))+Math.imul(D,J)|0,s=Math.imul(D,Y),n=n+Math.imul(C,X)|0,o=(o=o+Math.imul(C,Q)|0)+Math.imul(U,X)|0,s=s+Math.imul(U,Q)|0,n=n+Math.imul(O,tt)|0,o=(o=o+Math.imul(O,et)|0)+Math.imul(B,tt)|0,s=s+Math.imul(B,et)|0,n=n+Math.imul(P,it)|0,o=(o=o+Math.imul(P,nt)|0)+Math.imul(I,it)|0,s=s+Math.imul(I,nt)|0,n=n+Math.imul(A,st)|0,o=(o=o+Math.imul(A,at)|0)+Math.imul(x,st)|0,s=s+Math.imul(x,at)|0,n=n+Math.imul(k,ut)|0,o=(o=o+Math.imul(k,ft)|0)+Math.imul(E,ut)|0,s=s+Math.imul(E,ft)|0,n=n+Math.imul(_,lt)|0,o=(o=o+Math.imul(_,dt)|0)+Math.imul(M,lt)|0,s=s+Math.imul(M,dt)|0;var xt=(f+(n=n+Math.imul(b,mt)|0)|0)+((8191&(o=(o=o+Math.imul(b,gt)|0)+Math.imul(y,mt)|0))<<13)|0;f=((s=s+Math.imul(y,gt)|0)+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(q,X),o=(o=Math.imul(q,Q))+Math.imul(D,X)|0,s=Math.imul(D,Q),n=n+Math.imul(C,tt)|0,o=(o=o+Math.imul(C,et)|0)+Math.imul(U,tt)|0,s=s+Math.imul(U,et)|0,n=n+Math.imul(O,it)|0,o=(o=o+Math.imul(O,nt)|0)+Math.imul(B,it)|0,s=s+Math.imul(B,nt)|0,n=n+Math.imul(P,st)|0,o=(o=o+Math.imul(P,at)|0)+Math.imul(I,st)|0,s=s+Math.imul(I,at)|0,n=n+Math.imul(A,ut)|0,o=(o=o+Math.imul(A,ft)|0)+Math.imul(x,ut)|0,s=s+Math.imul(x,ft)|0,n=n+Math.imul(k,lt)|0,o=(o=o+Math.imul(k,dt)|0)+Math.imul(E,lt)|0,s=s+Math.imul(E,dt)|0;var Tt=(f+(n=n+Math.imul(_,mt)|0)|0)+((8191&(o=(o=o+Math.imul(_,gt)|0)+Math.imul(M,mt)|0))<<13)|0;f=((s=s+Math.imul(M,gt)|0)+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(q,tt),o=(o=Math.imul(q,et))+Math.imul(D,tt)|0,s=Math.imul(D,et),n=n+Math.imul(C,it)|0,o=(o=o+Math.imul(C,nt)|0)+Math.imul(U,it)|0,s=s+Math.imul(U,nt)|0,n=n+Math.imul(O,st)|0,o=(o=o+Math.imul(O,at)|0)+Math.imul(B,st)|0,s=s+Math.imul(B,at)|0,n=n+Math.imul(P,ut)|0,o=(o=o+Math.imul(P,ft)|0)+Math.imul(I,ut)|0,s=s+Math.imul(I,ft)|0,n=n+Math.imul(A,lt)|0,o=(o=o+Math.imul(A,dt)|0)+Math.imul(x,lt)|0,s=s+Math.imul(x,dt)|0;var Pt=(f+(n=n+Math.imul(k,mt)|0)|0)+((8191&(o=(o=o+Math.imul(k,gt)|0)+Math.imul(E,mt)|0))<<13)|0;f=((s=s+Math.imul(E,gt)|0)+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(q,it),o=(o=Math.imul(q,nt))+Math.imul(D,it)|0,s=Math.imul(D,nt),n=n+Math.imul(C,st)|0,o=(o=o+Math.imul(C,at)|0)+Math.imul(U,st)|0,s=s+Math.imul(U,at)|0,n=n+Math.imul(O,ut)|0,o=(o=o+Math.imul(O,ft)|0)+Math.imul(B,ut)|0,s=s+Math.imul(B,ft)|0,n=n+Math.imul(P,lt)|0,o=(o=o+Math.imul(P,dt)|0)+Math.imul(I,lt)|0,s=s+Math.imul(I,dt)|0;var It=(f+(n=n+Math.imul(A,mt)|0)|0)+((8191&(o=(o=o+Math.imul(A,gt)|0)+Math.imul(x,mt)|0))<<13)|0;f=((s=s+Math.imul(x,gt)|0)+(o>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(q,st),o=(o=Math.imul(q,at))+Math.imul(D,st)|0,s=Math.imul(D,at),n=n+Math.imul(C,ut)|0,o=(o=o+Math.imul(C,ft)|0)+Math.imul(U,ut)|0,s=s+Math.imul(U,ft)|0,n=n+Math.imul(O,lt)|0,o=(o=o+Math.imul(O,dt)|0)+Math.imul(B,lt)|0,s=s+Math.imul(B,dt)|0;var Lt=(f+(n=n+Math.imul(P,mt)|0)|0)+((8191&(o=(o=o+Math.imul(P,gt)|0)+Math.imul(I,mt)|0))<<13)|0;f=((s=s+Math.imul(I,gt)|0)+(o>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(q,ut),o=(o=Math.imul(q,ft))+Math.imul(D,ut)|0,s=Math.imul(D,ft),n=n+Math.imul(C,lt)|0,o=(o=o+Math.imul(C,dt)|0)+Math.imul(U,lt)|0,s=s+Math.imul(U,dt)|0;var Ot=(f+(n=n+Math.imul(O,mt)|0)|0)+((8191&(o=(o=o+Math.imul(O,gt)|0)+Math.imul(B,mt)|0))<<13)|0;f=((s=s+Math.imul(B,gt)|0)+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(q,lt),o=(o=Math.imul(q,dt))+Math.imul(D,lt)|0,s=Math.imul(D,dt);var Bt=(f+(n=n+Math.imul(C,mt)|0)|0)+((8191&(o=(o=o+Math.imul(C,gt)|0)+Math.imul(U,mt)|0))<<13)|0;f=((s=s+Math.imul(U,gt)|0)+(o>>>13)|0)+(Bt>>>26)|0,Bt&=67108863;var jt=(f+(n=Math.imul(q,mt))|0)+((8191&(o=(o=Math.imul(q,gt))+Math.imul(D,mt)|0))<<13)|0;return f=((s=Math.imul(D,gt))+(o>>>13)|0)+(jt>>>26)|0,jt&=67108863,u[0]=vt,u[1]=bt,u[2]=yt,u[3]=wt,u[4]=_t,u[5]=Mt,u[6]=St,u[7]=kt,u[8]=Et,u[9]=Rt,u[10]=At,u[11]=xt,u[12]=Tt,u[13]=Pt,u[14]=It,u[15]=Lt,u[16]=Ot,u[17]=Bt,u[18]=jt,0!==f&&(u[19]=f,i.length++),i};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(d=l),o.prototype.mulTo=function t(e,r){var i=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,r):i<63?l(this,e,r):i<1024?function n(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,e,r):p(this,e,r)},m.prototype.makeRBT=function t(e){for(var r=new Array(e),i=o.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function t(e,r,i,n,o,s){for(var a=0;a>>=1)o++;return 1<>>=13,n[2*a+1]=8191&s,s>>>=13;for(a=2*r;a>=26,r+=o/67108864|0,r+=s>>>26,this.words[n]=67108863&s}return 0!==r&&(this.words[n]=r,this.length++),this},o.prototype.muln=function t(e){return this.clone().imuln(e)},o.prototype.sqr=function t(){return this.mul(this)},o.prototype.isqr=function t(){return this.imul(this.clone())},o.prototype.pow=function t(e){var r=function i(t){for(var e=new Array(t.bitLength()),r=0;r>>n}return e}(e);if(0===r.length)return new o(1);for(var n=this,s=0;s=0);var r,n=e%26,o=(e-n)/26,s=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(r=0;r>>26-n}a&&(this.words[r]=a,this.length++)}if(0!==o){for(r=this.length-1;r>=0;r--)this.words[r+o]=this.words[r];for(r=0;r=0),o=r?(r-r%26)/26:0;var s=e%26,a=Math.min((e-s)/26,this.length),h=67108863^67108863>>>s<a)for(this.length-=a,f=0;f=0&&(0!==c||f>=o);f--){var l=0|this.words[f];this.words[f]=c<<26-s|l>>>s,c=l&h}return u&&0!==c&&(u.words[u.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function t(e,r,n){return i(0===this.negative),this.iushrn(e,r,n)},o.prototype.shln=function t(e){return this.clone().ishln(e)},o.prototype.ushln=function t(e){return this.clone().iushln(e)},o.prototype.shrn=function t(e){return this.clone().ishrn(e)},o.prototype.ushrn=function t(e){return this.clone().iushrn(e)},o.prototype.testn=function t(e){i("number"==typeof e&&e>=0);var r=e%26,n=(e-r)/26,o=1<=0);var r=e%26,n=(e-r)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==r&&n++,this.length=Math.min(n,this.length),0!==r){var o=67108863^67108863>>>r<=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function t(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var r=0;r>26)-(u/67108864|0),this.words[o+n]=67108863&s}for(;o>26,this.words[o+n]=67108863&s;if(0===h)return this.strip();for(i(-1===h),h=0,o=0;o>26,this.words[o]=67108863&s;return this.negative=1,this.strip()},o.prototype._wordDiv=function t(e,r){var i=(this.length,e.length),n=this.clone(),s=e,a=0|s.words[s.length-1];0!==(i=26-this._countBits(a))&&(s=s.ushln(i),n.iushln(i),a=0|s.words[s.length-1]);var h,u=n.length-s.length;if("mod"!==r){(h=new o(null)).length=u+1,h.words=new Array(h.length);for(var f=0;f=0;l--){var d=67108864*(0|n.words[s.length+l])+(0|n.words[s.length+l-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(s,d,l);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(s,1,l),n.isZero()||(n.negative^=1);h&&(h.words[l]=d)}return h&&h.strip(),n.strip(),"div"!==r&&0!==i&&n.iushrn(i),{div:h||null,mod:n}},o.prototype.divmod=function t(e,r,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(h=this.neg().divmod(e,r),"mod"!==r&&(s=h.div.neg()),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:s,mod:a}):0===this.negative&&0!==e.negative?(h=this.divmod(e.neg(),r),"mod"!==r&&(s=h.div.neg()),{div:s,mod:h.mod}):0!=(this.negative&e.negative)?(h=this.neg().divmod(e.neg(),r),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:h.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===r?{div:this.divn(e.words[0]),mod:null}:"mod"===r?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,r);var s,a,h},o.prototype.div=function t(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function t(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function t(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function t(e){var r=this.divmod(e);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(e):r.mod,n=e.ushrn(1),o=e.andln(1),s=i.cmp(n);return s<0||1===o&&0===s?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function t(e){i(e<=67108863);for(var r=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(r*n+(0|this.words[o]))%e;return n},o.prototype.idivn=function t(e){i(e<=67108863);for(var r=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*r;this.words[n]=o/e|0,r=o%e}return this.strip()},o.prototype.divn=function t(e){return this.clone().idivn(e)},o.prototype.egcd=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s=new o(1),a=new o(0),h=new o(0),u=new o(1),f=0;r.isEven()&&n.isEven();)r.iushrn(1),n.iushrn(1),++f;for(var c=n.clone(),l=r.clone();!r.isZero();){for(var d=0,p=1;0==(r.words[0]&p)&&d<26;++d,p<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(c),a.isub(l)),s.iushrn(1),a.iushrn(1);for(var m=0,g=1;0==(n.words[0]&g)&&m<26;++m,g<<=1);if(m>0)for(n.iushrn(m);m-- >0;)(h.isOdd()||u.isOdd())&&(h.iadd(c),u.isub(l)),h.iushrn(1),u.iushrn(1);r.cmp(n)>=0?(r.isub(n),s.isub(h),a.isub(u)):(n.isub(r),h.isub(s),u.isub(a))}return{a:h,b:u,gcd:n.iushln(f)}},o.prototype._invmp=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s,a=new o(1),h=new o(0),u=n.clone();r.cmpn(1)>0&&n.cmpn(1)>0;){for(var f=0,c=1;0==(r.words[0]&c)&&f<26;++f,c<<=1);if(f>0)for(r.iushrn(f);f-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var l=0,d=1;0==(n.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(n.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(u),h.iushrn(1);r.cmp(n)>=0?(r.isub(n),a.isub(h)):(n.isub(r),h.isub(a))}return(s=0===r.cmpn(1)?a:h).cmpn(0)<0&&s.iadd(e),s},o.prototype.gcd=function t(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var r=this.clone(),i=e.clone();r.negative=0,i.negative=0;for(var n=0;r.isEven()&&i.isEven();n++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var o=r.cmp(i);if(o<0){var s=r;r=i,i=s}else if(0===o||0===i.cmpn(1))break;r.isub(i)}return i.iushln(n)},o.prototype.invm=function t(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function t(){return 0==(1&this.words[0])},o.prototype.isOdd=function t(){return 1==(1&this.words[0])},o.prototype.andln=function t(e){return this.words[0]&e},o.prototype.bincn=function t(e){i("number"==typeof e);var r=e%26,n=(e-r)/26,o=1<>>26,h&=67108863,this.words[a]=h}return 0!==s&&(this.words[a]=s,this.length++),this},o.prototype.isZero=function t(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function t(e){var r,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)r=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var o=0|this.words[0];r=o===e?0:oe.length)return 1;if(this.length=0;i--){var n=0|this.words[i],o=0|e.words[i];if(n!==o){no&&(r=1);break}}return r},o.prototype.gtn=function t(e){return 1===this.cmpn(e)},o.prototype.gt=function t(e){return 1===this.cmp(e)},o.prototype.gten=function t(e){return this.cmpn(e)>=0},o.prototype.gte=function t(e){return this.cmp(e)>=0},o.prototype.ltn=function t(e){return-1===this.cmpn(e)},o.prototype.lt=function t(e){return-1===this.cmp(e)},o.prototype.lten=function t(e){return this.cmpn(e)<=0},o.prototype.lte=function t(e){return this.cmp(e)<=0},o.prototype.eqn=function t(e){return 0===this.cmpn(e)},o.prototype.eq=function t(e){return 0===this.cmp(e)},o.red=function t(e){return new M(e)},o.prototype.toRed=function t(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function t(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function t(e){return this.red=e,this},o.prototype.forceRed=function t(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function t(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function t(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function t(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function t(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function t(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function t(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function t(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function t(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function t(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function t(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function t(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function M(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function S(t){M.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function t(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function t(e){var r,i=e;do{this.split(i,this.tmp),r=(i=(i=this.imulK(i)).iadd(this.tmp)).bitLength()}while(r>this.n);var n=r0?i.isub(this.p):void 0!==i.strip?i.strip():i._strip(),i},v.prototype.split=function t(e,r){e.iushrn(this.n,0,r)},v.prototype.imulK=function t(e){return e.imul(this.k)},n(b,v),b.prototype.split=function t(e,r){for(var i=4194303,n=Math.min(e.length,9),o=0;o>>22,s=a}s>>>=22,e.words[o-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function t(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var r=0,i=0;i>>=26,e.words[i]=o,r=n}return 0!==r&&(e.words[e.length++]=r),e},o._prime=function t(e){if(g[e])return g[e];var t;if("k256"===e)t=new b;else if("p224"===e)t=new y;else if("p192"===e)t=new w;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new _}return g[e]=t,t},M.prototype._verify1=function t(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},M.prototype._verify2=function t(e,r){i(0==(e.negative|r.negative),"red works only with positives"),i(e.red&&e.red===r.red,"red works only with red numbers")},M.prototype.imod=function t(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},M.prototype.neg=function t(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},M.prototype.add=function t(e,r){this._verify2(e,r);var i=e.add(r);return i.cmp(this.m)>=0&&i.isub(this.m),i._forceRed(this)},M.prototype.iadd=function t(e,r){this._verify2(e,r);var i=e.iadd(r);return i.cmp(this.m)>=0&&i.isub(this.m),i},M.prototype.sub=function t(e,r){this._verify2(e,r);var i=e.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},M.prototype.isub=function t(e,r){this._verify2(e,r);var i=e.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},M.prototype.shl=function t(e,r){return this._verify1(e),this.imod(e.ushln(r))},M.prototype.imul=function t(e,r){return this._verify2(e,r),this.imod(e.imul(r))},M.prototype.mul=function t(e,r){return this._verify2(e,r),this.imod(e.mul(r))},M.prototype.isqr=function t(e){return this.imul(e,e.clone())},M.prototype.sqr=function t(e){return this.mul(e,e)},M.prototype.sqrt=function t(e){if(e.isZero())return e.clone();var r=this.m.andln(3);if(i(r%2==1),3===r){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var s=this.m.subn(1),a=0;!s.isZero()&&0===s.andln(1);)a++,s.iushrn(1);i(!s.isZero());var h=new o(1).toRed(this),u=h.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);0!==this.pow(c,f).cmp(u);)c.redIAdd(u);for(var l=this.pow(c,s),d=this.pow(e,s.addn(1).iushrn(1)),p=this.pow(e,s),m=a;0!==p.cmp(h);){for(var g=p,v=0;0!==g.cmp(h);v++)g=g.redSqr();i(v=0;n--){for(var f=r.words[n],c=u-1;c>=0;c--){var l=f>>c&1;s!==i[0]&&(s=this.sqr(s)),0!==l||0!==a?(a<<=1,a|=l,(4===++h||0===n&&0===c)&&(s=this.mul(s,i[a]),h=0,a=0)):h=0}u=26}return s},M.prototype.convertTo=function t(e){var r=e.umod(this.m);return r===e?r.clone():r},M.prototype.convertFrom=function t(e){var r=e.clone();return r.red=null,r},o.mont=function t(e){return new S(e)},n(S,M),S.prototype.convertTo=function t(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function t(e){var r=this.imod(e.mul(this.rinv));return r.red=null,r},S.prototype.imul=function t(e,r){if(e.isZero()||r.isZero())return e.words[0]=0,e.length=1,e;var i=e.imul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=i.isub(n).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},S.prototype.mul=function t(e,r){if(e.isZero()||r.isZero())return new o(0)._forceRed(this);var i=e.mul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=i.isub(n).iushrn(this.shift),a=s;return s.cmp(this.m)>=0?a=s.isub(this.m):s.cmpn(0)<0&&(a=s.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function t(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(28)(t))},function(t,e){},function(t,e,r){e.publicEncrypt=r(374),e.privateDecrypt=r(376),e.privateEncrypt=function t(r,i){return e.publicEncrypt(r,i,!0)},e.publicDecrypt=function t(r,i){return e.privateDecrypt(r,i,!0)}},function(t,e,r){var i=r(65),n=r(31),o=r(43),s=r(194),a=r(195),h=r(111),u=r(196),f=r(101),c=r(66).Buffer;t.exports=function t(e,r,l){var d;d=e.padding?e.padding:l?1:4;var p,m=i(e);if(4===d)p=function g(t,e){var r=t.modulus.byteLength(),i=e.length,u=o("sha1").update(c.alloc(0)).digest(),f=u.length,l=2*f;if(i>r-l-2)throw new Error("message too long");var d=c.alloc(r-i-l-2),p=r-f-1,m=n(f),g=a(c.concat([u,d,c.alloc(1,1),e],p),s(m,p)),v=a(m,s(g,f));return new h(c.concat([c.alloc(1),v,g],r))}(m,r);else if(1===d)p=function v(t,e,r){var i,o=e.length,s=t.modulus.byteLength();if(o>s-11)throw new Error("message too long");i=r?c.alloc(s-o-3,255):function a(t){var e,r=c.allocUnsafe(t),i=0,o=n(2*t),s=0;for(;i=0)throw new Error("data too long for modulus")}return l?f(p,m):u(p,m)}},function(t,e){},function(t,e,r){var i=r(65),n=r(194),o=r(195),s=r(111),a=r(101),h=r(43),u=r(196),f=r(66).Buffer;t.exports=function t(e,r,c){var l;l=e.padding?e.padding:c?1:4;var d,p=i(e),m=p.modulus.byteLength();if(r.length>m||new s(r).cmp(p.modulus)>=0)throw new Error("decryption error");d=c?u(new s(r),p):a(r,p);var g=f.alloc(m-d.length);if(d=f.concat([g,d],m),4===l)return function v(t,e){var r=t.modulus.byteLength(),i=h("sha1").update(f.alloc(0)).digest(),s=i.length;if(0!==e[0])throw new Error("decryption error");var a=e.slice(1,s+1),u=e.slice(s+1),c=o(a,n(u,s)),l=o(u,n(c,r-s-1));if(function d(t,e){t=f.from(t),e=f.from(e);var r=0,i=t.length;t.length!==e.length&&(r++,i=Math.min(t.length,e.length));var n=-1;for(;++n=e.length){o++;break}var s=e.slice(2,n-1);("0002"!==i.toString("hex")&&!r||"0001"!==i.toString("hex")&&r)&&o++;s.length<8&&o++;if(o)throw new Error("decryption error");return e.slice(n)}(0,d,c);if(3===l)return d;throw new Error("unknown padding")}},function(t,e,r){"use strict";(function(t,i){function n(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}var o=r(2),s=r(31),a=o.Buffer,h=o.kMaxLength,u=t.crypto||t.msCrypto,f=Math.pow(2,32)-1;function c(t,e){if("number"!=typeof t||t!=t)throw new TypeError("offset must be a number");if(t>f||t<0)throw new TypeError("offset must be a uint32");if(t>h||t>e)throw new RangeError("offset out of range")}function l(t,e,r){if("number"!=typeof t||t!=t)throw new TypeError("size must be a number");if(t>f||t<0)throw new TypeError("size must be a uint32");if(t+e>r||t>h)throw new RangeError("buffer too small")}function d(t,e,r,n){if(i.browser){var o=t.buffer,a=new Uint8Array(o,e,r);return u.getRandomValues(a),n?void i.nextTick((function(){n(null,t)})):t}if(!n)return s(r).copy(t,e),t;s(r,(function(r,i){if(r)return n(r);i.copy(t,e),n(null,t)}))}u&&u.getRandomValues||!i.browser?(e.randomFill=function p(e,r,i,n){if(!(a.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof r)n=r,r=0,i=e.length;else if("function"==typeof i)n=i,i=e.length-r;else if("function"!=typeof n)throw new TypeError('"cb" argument must be a function');return c(r,e.length),l(i,r,e.length),d(e,r,i,n)},e.randomFillSync=function m(e,r,i){void 0===r&&(r=0);if(!(a.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');c(r,e.length),void 0===i&&(i=e.length-r);return l(i,r,e.length),d(e,r,i)}):(e.randomFill=n,e.randomFillSync=n)}).call(this,r(5),r(4))},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function i(t){var e=t.jws,r=t.KeyUtil,i=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,h=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){n.Log.debug("JoseUtil.parseJwt");try{var i=e.JWS.parse(r);return{header:i.headerObj,payload:i.payloadObj}}catch(t){n.Log.error(t)}},t.validateJwt=function e(o,s,h,u,f,c,l){n.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return n.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var d=a(s.x5c[0]);s=i.getPublicKeyFromCertHex(d)}else{if("EC"!==s.kty)return n.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return n.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,h,u,f,c,l)}catch(t){return n.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,i,o,s,a,h){s||(s=0),a||(a=parseInt(Date.now()/1e3));var u=t.parseJwt(r).payload;if(!u.iss)return n.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(u.iss!==i)return n.Log.error("JoseUtil._validateJwt: Invalid issuer in token",u.iss),Promise.reject(new Error("Invalid issuer in token: "+u.iss));if(!u.aud)return n.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(u.aud===o||Array.isArray(u.aud)&&u.aud.indexOf(o)>=0))return n.Log.error("JoseUtil._validateJwt: Invalid audience in token",u.aud),Promise.reject(new Error("Invalid audience in token: "+u.aud));if(u.azp&&u.azp!==o)return n.Log.error("JoseUtil._validateJwt: Invalid azp in token",u.azp),Promise.reject(new Error("Invalid azp in token: "+u.azp));if(!h){var f=a+s,c=a-s;if(!u.iat)return n.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(f1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var i=n.UrlUtility.parseUrlFragment(e,r);this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.code=i.code,this.state=i.state,this.id_token=i.id_token,this.session_state=i.session_state,this.access_token=i.access_token,this.token_type=i.token_type,this.scope=i.scope,this.profile=void 0,this.expires_in=i.expires_in}return i(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var i=parseInt(Date.now()/1e3);this.expires_at=i+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var i=r(0),n=r(48),o=r(113);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,h=e.data,u=e.extraQueryParams,f=e.request_type;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw i.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var l in s&&(r=n.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=n.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),h&&(this.state=new o.State({data:h,request_type:f}),r=n.UrlUtility.addQueryParam(r,"state",this.state.id))),u)r=n.UrlUtility.addQueryParam(r,l,u[l]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var i=r(48);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var n=i.UrlUtility.parseUrlFragment(e,"?");this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.state=n.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l.TokenRevocationClient,c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:d.TokenClient,v=arguments.length>5&&void 0!==arguments[5]?arguments[5]:p.JoseUtil;m(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var b=g(this,t.call(this,r));return b._events=new h.UserManagerEvents(r),b._silentRenewService=new i(b),b.settings.automaticSilentRenew&&(n.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),b.startSilentRenew()),b.settings.monitorSession&&(n.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),b._sessionMonitor=new o(b)),b._tokenRevocationClient=new a(b._settings),b._tokenClient=new c(b._settings),b._joseUtil=v,b}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(n.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(n.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){n.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){n.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?n.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinPopup: no sub")),t}))):(n.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){n.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(n.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var i=Promise.resolve();return t.id_token&&(i=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),i.then((function(){return n.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(n.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(n.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var i=this;return this._metadataService.getIssuer().then((function(t){return i.settings.getEpochTime().then((function(o){return i._joseUtil.validateJwtAttributes(r,t,i._settings.client_id,i._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinSilent: no sub")),t}))):(n.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var i=t.state;t.response;return"si:r"===i.request_type?r.signinRedirectCallback(e):"si:p"===i.request_type?r.signinPopupCallback(e):"si:s"===i.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var i=this;return this.readSignoutResponseState(e).then((function(t){var n=t.state,o=t.response;return n?"so:r"===n.request_type?i.signoutRedirectCallback(e):"so:p"===n.request_type?i.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var i=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return i?(r.redirect_uri=i,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:i,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(n.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return n.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};n.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return n.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(n.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,n).then((function(t){return i._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return n.Log.debug("UserManager._signinStart: got navigator window handle"),i.createSigninRequest(e).then((function(e){return n.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(n.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){n.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(i.current_sub){if(i.current_sub!==e.profile.sub)return n.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));n.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return n.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){n.Log.debug("UserManager._signinCallback");var i="query"===this._settings.response_mode||!this._settings.response_mode&&c.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,i)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var i={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,i).then((function(){n.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return n.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){n.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){n.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,n).then((function(t){return i._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,i=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return i.prepare(o).then((function(t){return n.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(i){return n.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(i):Promise.resolve()).then((function(){var s=e.id_token_hint||i&&i.id_token;return s&&(n.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return n.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return n.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(n.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return n.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return n.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){n.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){n.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var i=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return i._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||n.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(n.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(n.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){n.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return n.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},i(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=r.popup_redirect_uri,n=r.popup_post_logout_redirect_uri,d=r.popupWindowFeatures,p=r.popupWindowTarget,m=r.silent_redirect_uri,g=r.silentRequestTimeout,v=r.automaticSilentRenew,b=void 0!==v&&v,y=r.validateSubOnSilentRenew,w=void 0!==y&&y,_=r.includeIdTokenInSilentRenew,M=void 0===_||_,S=r.monitorSession,k=void 0===S||S,E=r.monitorAnonymousSession,R=void 0!==E&&E,A=r.checkSessionInterval,x=void 0===A?2e3:A,T=r.stopCheckSessionOnError,P=void 0===T||T,I=r.query_status_response_type,L=r.revokeAccessTokenOnSignout,O=void 0!==L&&L,B=r.accessTokenExpiringNotificationTime,j=void 0===B?60:B,C=r.redirectNavigator,U=void 0===C?new o.RedirectNavigator:C,N=r.popupNavigator,q=void 0===N?new s.PopupNavigator:N,D=r.iframeNavigator,z=void 0===D?new a.IFrameNavigator:D,F=r.userStore,W=void 0===F?new h.WebStorageStateStore({store:u.Global.sessionStorage}):F;c(this,e);var H=l(this,t.call(this,arguments[0]));return H._popup_redirect_uri=i,H._popup_post_logout_redirect_uri=n,H._popupWindowFeatures=d,H._popupWindowTarget=p,H._silent_redirect_uri=m,H._silentRequestTimeout=g,H._automaticSilentRenew=b,H._validateSubOnSilentRenew=w,H._includeIdTokenInSilentRenew=M,H._accessTokenExpiringNotificationTime=j,H._monitorSession=k,H._monitorAnonymousSession=R,H._checkSessionInterval=x,H._stopCheckSessionOnError=P,I?H._query_status_response_type=I:arguments[0]&&arguments[0].response_type?H._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":H._query_status_response_type="id_token",H._revokeAccessTokenOnSignout=O,H._redirectNavigator=U,H._popupNavigator=q,H._iframeNavigator=z,H._userStore=W,H}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),i(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(n.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var i=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];i.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),n&&this._userLoaded.raise(r)},e.prototype.unload=function e(){i.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){i.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){i.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){i.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){i.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(n.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var i=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=h(this,t.call(this,r));return s._timer=i,s._nowFunc=n||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)n.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),n.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var i=5;e15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},l.prototype.flush=function(){for(var t=16-this.cache.length,e=o.allocUnsafe(t),r=-1;++r>s%8,t._prev=o(t._prev,r?i:n);return a}function o(t,e){var r=t.length,n=-1,o=i.allocUnsafe(t.length);for(t=i.concat([t,i.from([e])]);++n>7;return o}e.encrypt=function(t,e,r){for(var o=e.length,s=i.allocUnsafe(o),a=-1;++a>>0,0),e.writeUInt32BE(t[1]>>>0,4),e.writeUInt32BE(t[2]>>>0,8),e.writeUInt32BE(t[3]>>>0,12),e}function s(t){this.h=t,this.state=i.alloc(16,0),this.cache=i.allocUnsafe(0)}s.prototype.ghash=function(t){for(var e=-1;++e0;t--)r[t]=r[t]>>>1|(1&r[t-1])<<31;r[0]=r[0]>>>1,e&&(r[0]=r[0]^225<<24)}this.state=o(n)},s.prototype.update=function(t){var e;for(this.cache=i.concat([this.cache,t]);this.cache.length>=16;)e=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(e)},s.prototype.final=function(t,e){return this.cache.length&&this.ghash(i.concat([this.cache,n],16)),this.ghash(o([0,t,0,e])),this.state},t.exports=s},function(t,e,r){var i=r(171),n=r(2).Buffer,o=r(97),s=r(172),a=r(20),h=r(62),u=r(63);function f(t,e,r){a.call(this),this._cache=new c,this._last=void 0,this._cipher=new h.AES(e),this._prev=n.from(r),this._mode=t,this._autopadding=!0}function c(){this.cache=n.allocUnsafe(0)}function l(t,e,r){var a=o[t.toLowerCase()];if(!a)throw new TypeError("invalid suite type");if("string"==typeof r&&(r=n.from(r)),"GCM"!==a.mode&&r.length!==a.iv)throw new TypeError("invalid iv length "+r.length);if("string"==typeof e&&(e=n.from(e)),e.length!==a.key/8)throw new TypeError("invalid key length "+e.length);return"stream"===a.type?new s(a.module,e,r,!0):"auth"===a.type?new i(a.module,e,r,!0):new f(a.module,e,r)}r(1)(f,a),f.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get(this._autopadding);)r=this._mode.decrypt(this,e),i.push(r);return n.concat(i)},f.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return function e(t){var e=t[15];if(e<1||e>16)throw new Error("unable to decrypt data");var r=-1;for(;++r16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},c.prototype.flush=function(){if(this.cache.length)return this.cache},e.createDecipher=function d(t,e){var r=o[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var i=u(e,!1,r.key,r.iv);return l(t,i.key,i.iv)},e.createDecipheriv=l},function(t,e){e["des-ecb"]={key:8,iv:0},e["des-cbc"]=e.des={key:8,iv:8},e["des-ede3-cbc"]=e.des3={key:24,iv:8},e["des-ede3"]={key:24,iv:0},e["des-ede-cbc"]={key:16,iv:8},e["des-ede"]={key:16,iv:0}},function(t,e,r){(function(t){var i=r(173),n=r(327),o=r(328);var s={binary:!0,hex:!0,base64:!0};e.DiffieHellmanGroup=e.createDiffieHellmanGroup=e.getDiffieHellman=function a(e){var r=new t(n[e].prime,"hex"),i=new t(n[e].gen,"hex");return new o(r,i)},e.createDiffieHellman=e.DiffieHellman=function e(r,n,a,h){return t.isBuffer(n)||void 0===s[n]?e(r,"binary",n,a):(n=n||"binary",h=h||"binary",a=a||new t([2]),t.isBuffer(a)||(a=new t(a,h)),"number"==typeof r?new o(i(r,a),a,!0):(t.isBuffer(r)||(r=new t(r,n)),new o(r,a,!0)))}}).call(this,r(26).Buffer)},function(t,e){},function(t,e,r){(function(t){!function(t,e){"use strict";function i(t,e){if(!t)throw new Error(e||"Assertion failed")}function n(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){if(o.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var s;"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;try{s=r(325).Buffer}catch(t){}function a(t,e,r){for(var i=0,n=Math.min(t.length,r),o=e;o=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s=49?a-49+10:a>=17?a-17+10:a}return n}o.isBN=function t(e){return e instanceof o||null!==e&&"object"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function t(e,r){return e.cmp(r)>0?e:r},o.min=function t(e,r){return e.cmp(r)<0?e:r},o.prototype._init=function t(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"==typeof e)return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initNumber=function t(e,r,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initArray=function t(e,r,n){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[s]|=a<>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);else if("le"===n)for(o=0,s=0;o>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);return this.strip()},o.prototype._parseHex=function t(e,r){this.length=Math.ceil((e.length-r)/6),this.words=new Array(this.length);for(var i=0;i=r;i-=6)o=a(e,i,i+6),this.words[n]|=o<>>26-s&4194303,(s+=24)>=26&&(s-=26,n++);i+6!==r&&(o=a(e,r,i+6),this.words[n]|=o<>>26-s&4194303),this.strip()},o.prototype._parseBase=function t(e,r,i){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=r)n++;n--,o=o/r|0;for(var s=e.length-i,a=s%n,u=Math.min(s,s-a)+i,f=0,c=i;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function t(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function t(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],c=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u>>26,c=67108863&h,l=Math.min(u,e.length-1),d=Math.max(0,u-t.length+1);d<=l;d++){var p=u-d|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[d])+c)/67108864|0,c=67108863&s}r.words[u]=0|c,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}o.prototype.toString=function t(e,r){var n;if(r=0|r||1,16===(e=e||10)||"hex"===e){n="";for(var o=0,s=0,a=0;a>>24-o&16777215)||a!==this.length-1?u[6-l.length]+l+n:l+n,(o+=2)>=26&&(o-=26,a--)}for(0!==s&&(n=s.toString(16)+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var d=f[e],p=c[e];n="";var m=this.clone();for(m.negative=0;!m.isZero();){var g=m.modn(p).toString(e);n=(m=m.idivn(p)).isZero()?g+n:u[d-g.length]+g+n}for(this.isZero()&&(n="0"+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function t(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function t(){return this.toString(16)},o.prototype.toBuffer=function t(e,r){return i(void 0!==s),this.toArrayLike(s,e,r)},o.prototype.toArray=function t(e,r){return this.toArrayLike(Array,e,r)},o.prototype.toArrayLike=function t(e,r,n){var o=this.byteLength(),s=n||Math.max(1,o);i(o<=s,"byte array longer than desired length"),i(s>0,"Requested array length <= 0"),this.strip();var a,h,u="le"===r,f=new e(s),c=this.clone();if(u){for(h=0;!c.isZero();h++)a=c.andln(255),c.iushrn(8),f[h]=a;for(;h=4096&&(i+=13,r>>>=13),r>=64&&(i+=7,r>>>=7),r>=8&&(i+=4,r>>>=4),r>=2&&(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function t(e){if(0===e)return 26;var r=e,i=0;return 0==(8191&r)&&(i+=13,r>>>=13),0==(127&r)&&(i+=7,r>>>=7),0==(15&r)&&(i+=4,r>>>=4),0==(3&r)&&(i+=2,r>>>=2),0==(1&r)&&i++,i},o.prototype.bitLength=function t(){var e=this.words[this.length-1],r=this._countBits(e);return 26*(this.length-1)+r},o.prototype.zeroBits=function t(){if(this.isZero())return 0;for(var e=0,r=0;re.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function t(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function t(e){var r;r=this.length>e.length?e:this;for(var i=0;ie.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function t(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function t(e){var r,i;this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function t(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function t(e){i("number"==typeof e&&e>=0);var r=0|Math.ceil(e/26),n=e%26;this._expand(r),n>0&&r--;for(var o=0;o0&&(this.words[o]=~this.words[o]&67108863>>26-n),this.strip()},o.prototype.notn=function t(e){return this.clone().inotn(e)},o.prototype.setn=function t(e,r){i("number"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=r?this.words[n]|1<e.length?(i=this,n=e):(i=e,n=this);for(var o=0,s=0;s>>26;for(;0!==o&&s>>26;if(this.length=i.length,0!==o)this.words[this.length]=o,this.length++;else if(i!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function t(e){if(0!==e.negative){e.negative=0;var r=this.iadd(e);return e.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var i,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(i=this,n=e):(i=e,n=this);for(var s=0,a=0;a>26,this.words[a]=67108863&r;for(;0!==s&&a>26,this.words[a]=67108863&r;if(0===s&&a>>13,p=0|a[1],m=8191&p,g=p>>>13,v=0|a[2],b=8191&v,y=v>>>13,w=0|a[3],_=8191&w,M=w>>>13,S=0|a[4],k=8191&S,E=S>>>13,R=0|a[5],A=8191&R,x=R>>>13,T=0|a[6],P=8191&T,I=T>>>13,L=0|a[7],O=8191&L,B=L>>>13,j=0|a[8],C=8191&j,U=j>>>13,N=0|a[9],q=8191&N,D=N>>>13,z=0|h[0],F=8191&z,W=z>>>13,H=0|h[1],K=8191&H,Z=H>>>13,V=0|h[2],J=8191&V,Y=V>>>13,G=0|h[3],X=8191&G,Q=G>>>13,$=0|h[4],tt=8191&$,et=$>>>13,rt=0|h[5],it=8191&rt,nt=rt>>>13,ot=0|h[6],st=8191&ot,at=ot>>>13,ht=0|h[7],ut=8191&ht,ft=ht>>>13,ct=0|h[8],lt=8191&ct,dt=ct>>>13,pt=0|h[9],mt=8191&pt,gt=pt>>>13;i.negative=e.negative^r.negative,i.length=19;var vt=(f+(n=Math.imul(l,F))|0)+((8191&(o=(o=Math.imul(l,W))+Math.imul(d,F)|0))<<13)|0;f=((s=Math.imul(d,W))+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(m,F),o=(o=Math.imul(m,W))+Math.imul(g,F)|0,s=Math.imul(g,W);var bt=(f+(n=n+Math.imul(l,K)|0)|0)+((8191&(o=(o=o+Math.imul(l,Z)|0)+Math.imul(d,K)|0))<<13)|0;f=((s=s+Math.imul(d,Z)|0)+(o>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(b,F),o=(o=Math.imul(b,W))+Math.imul(y,F)|0,s=Math.imul(y,W),n=n+Math.imul(m,K)|0,o=(o=o+Math.imul(m,Z)|0)+Math.imul(g,K)|0,s=s+Math.imul(g,Z)|0;var yt=(f+(n=n+Math.imul(l,J)|0)|0)+((8191&(o=(o=o+Math.imul(l,Y)|0)+Math.imul(d,J)|0))<<13)|0;f=((s=s+Math.imul(d,Y)|0)+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(_,F),o=(o=Math.imul(_,W))+Math.imul(M,F)|0,s=Math.imul(M,W),n=n+Math.imul(b,K)|0,o=(o=o+Math.imul(b,Z)|0)+Math.imul(y,K)|0,s=s+Math.imul(y,Z)|0,n=n+Math.imul(m,J)|0,o=(o=o+Math.imul(m,Y)|0)+Math.imul(g,J)|0,s=s+Math.imul(g,Y)|0;var wt=(f+(n=n+Math.imul(l,X)|0)|0)+((8191&(o=(o=o+Math.imul(l,Q)|0)+Math.imul(d,X)|0))<<13)|0;f=((s=s+Math.imul(d,Q)|0)+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,F),o=(o=Math.imul(k,W))+Math.imul(E,F)|0,s=Math.imul(E,W),n=n+Math.imul(_,K)|0,o=(o=o+Math.imul(_,Z)|0)+Math.imul(M,K)|0,s=s+Math.imul(M,Z)|0,n=n+Math.imul(b,J)|0,o=(o=o+Math.imul(b,Y)|0)+Math.imul(y,J)|0,s=s+Math.imul(y,Y)|0,n=n+Math.imul(m,X)|0,o=(o=o+Math.imul(m,Q)|0)+Math.imul(g,X)|0,s=s+Math.imul(g,Q)|0;var _t=(f+(n=n+Math.imul(l,tt)|0)|0)+((8191&(o=(o=o+Math.imul(l,et)|0)+Math.imul(d,tt)|0))<<13)|0;f=((s=s+Math.imul(d,et)|0)+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(A,F),o=(o=Math.imul(A,W))+Math.imul(x,F)|0,s=Math.imul(x,W),n=n+Math.imul(k,K)|0,o=(o=o+Math.imul(k,Z)|0)+Math.imul(E,K)|0,s=s+Math.imul(E,Z)|0,n=n+Math.imul(_,J)|0,o=(o=o+Math.imul(_,Y)|0)+Math.imul(M,J)|0,s=s+Math.imul(M,Y)|0,n=n+Math.imul(b,X)|0,o=(o=o+Math.imul(b,Q)|0)+Math.imul(y,X)|0,s=s+Math.imul(y,Q)|0,n=n+Math.imul(m,tt)|0,o=(o=o+Math.imul(m,et)|0)+Math.imul(g,tt)|0,s=s+Math.imul(g,et)|0;var Mt=(f+(n=n+Math.imul(l,it)|0)|0)+((8191&(o=(o=o+Math.imul(l,nt)|0)+Math.imul(d,it)|0))<<13)|0;f=((s=s+Math.imul(d,nt)|0)+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,F),o=(o=Math.imul(P,W))+Math.imul(I,F)|0,s=Math.imul(I,W),n=n+Math.imul(A,K)|0,o=(o=o+Math.imul(A,Z)|0)+Math.imul(x,K)|0,s=s+Math.imul(x,Z)|0,n=n+Math.imul(k,J)|0,o=(o=o+Math.imul(k,Y)|0)+Math.imul(E,J)|0,s=s+Math.imul(E,Y)|0,n=n+Math.imul(_,X)|0,o=(o=o+Math.imul(_,Q)|0)+Math.imul(M,X)|0,s=s+Math.imul(M,Q)|0,n=n+Math.imul(b,tt)|0,o=(o=o+Math.imul(b,et)|0)+Math.imul(y,tt)|0,s=s+Math.imul(y,et)|0,n=n+Math.imul(m,it)|0,o=(o=o+Math.imul(m,nt)|0)+Math.imul(g,it)|0,s=s+Math.imul(g,nt)|0;var St=(f+(n=n+Math.imul(l,st)|0)|0)+((8191&(o=(o=o+Math.imul(l,at)|0)+Math.imul(d,st)|0))<<13)|0;f=((s=s+Math.imul(d,at)|0)+(o>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(O,F),o=(o=Math.imul(O,W))+Math.imul(B,F)|0,s=Math.imul(B,W),n=n+Math.imul(P,K)|0,o=(o=o+Math.imul(P,Z)|0)+Math.imul(I,K)|0,s=s+Math.imul(I,Z)|0,n=n+Math.imul(A,J)|0,o=(o=o+Math.imul(A,Y)|0)+Math.imul(x,J)|0,s=s+Math.imul(x,Y)|0,n=n+Math.imul(k,X)|0,o=(o=o+Math.imul(k,Q)|0)+Math.imul(E,X)|0,s=s+Math.imul(E,Q)|0,n=n+Math.imul(_,tt)|0,o=(o=o+Math.imul(_,et)|0)+Math.imul(M,tt)|0,s=s+Math.imul(M,et)|0,n=n+Math.imul(b,it)|0,o=(o=o+Math.imul(b,nt)|0)+Math.imul(y,it)|0,s=s+Math.imul(y,nt)|0,n=n+Math.imul(m,st)|0,o=(o=o+Math.imul(m,at)|0)+Math.imul(g,st)|0,s=s+Math.imul(g,at)|0;var kt=(f+(n=n+Math.imul(l,ut)|0)|0)+((8191&(o=(o=o+Math.imul(l,ft)|0)+Math.imul(d,ut)|0))<<13)|0;f=((s=s+Math.imul(d,ft)|0)+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(C,F),o=(o=Math.imul(C,W))+Math.imul(U,F)|0,s=Math.imul(U,W),n=n+Math.imul(O,K)|0,o=(o=o+Math.imul(O,Z)|0)+Math.imul(B,K)|0,s=s+Math.imul(B,Z)|0,n=n+Math.imul(P,J)|0,o=(o=o+Math.imul(P,Y)|0)+Math.imul(I,J)|0,s=s+Math.imul(I,Y)|0,n=n+Math.imul(A,X)|0,o=(o=o+Math.imul(A,Q)|0)+Math.imul(x,X)|0,s=s+Math.imul(x,Q)|0,n=n+Math.imul(k,tt)|0,o=(o=o+Math.imul(k,et)|0)+Math.imul(E,tt)|0,s=s+Math.imul(E,et)|0,n=n+Math.imul(_,it)|0,o=(o=o+Math.imul(_,nt)|0)+Math.imul(M,it)|0,s=s+Math.imul(M,nt)|0,n=n+Math.imul(b,st)|0,o=(o=o+Math.imul(b,at)|0)+Math.imul(y,st)|0,s=s+Math.imul(y,at)|0,n=n+Math.imul(m,ut)|0,o=(o=o+Math.imul(m,ft)|0)+Math.imul(g,ut)|0,s=s+Math.imul(g,ft)|0;var Et=(f+(n=n+Math.imul(l,lt)|0)|0)+((8191&(o=(o=o+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;f=((s=s+Math.imul(d,dt)|0)+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(q,F),o=(o=Math.imul(q,W))+Math.imul(D,F)|0,s=Math.imul(D,W),n=n+Math.imul(C,K)|0,o=(o=o+Math.imul(C,Z)|0)+Math.imul(U,K)|0,s=s+Math.imul(U,Z)|0,n=n+Math.imul(O,J)|0,o=(o=o+Math.imul(O,Y)|0)+Math.imul(B,J)|0,s=s+Math.imul(B,Y)|0,n=n+Math.imul(P,X)|0,o=(o=o+Math.imul(P,Q)|0)+Math.imul(I,X)|0,s=s+Math.imul(I,Q)|0,n=n+Math.imul(A,tt)|0,o=(o=o+Math.imul(A,et)|0)+Math.imul(x,tt)|0,s=s+Math.imul(x,et)|0,n=n+Math.imul(k,it)|0,o=(o=o+Math.imul(k,nt)|0)+Math.imul(E,it)|0,s=s+Math.imul(E,nt)|0,n=n+Math.imul(_,st)|0,o=(o=o+Math.imul(_,at)|0)+Math.imul(M,st)|0,s=s+Math.imul(M,at)|0,n=n+Math.imul(b,ut)|0,o=(o=o+Math.imul(b,ft)|0)+Math.imul(y,ut)|0,s=s+Math.imul(y,ft)|0,n=n+Math.imul(m,lt)|0,o=(o=o+Math.imul(m,dt)|0)+Math.imul(g,lt)|0,s=s+Math.imul(g,dt)|0;var Rt=(f+(n=n+Math.imul(l,mt)|0)|0)+((8191&(o=(o=o+Math.imul(l,gt)|0)+Math.imul(d,mt)|0))<<13)|0;f=((s=s+Math.imul(d,gt)|0)+(o>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(q,K),o=(o=Math.imul(q,Z))+Math.imul(D,K)|0,s=Math.imul(D,Z),n=n+Math.imul(C,J)|0,o=(o=o+Math.imul(C,Y)|0)+Math.imul(U,J)|0,s=s+Math.imul(U,Y)|0,n=n+Math.imul(O,X)|0,o=(o=o+Math.imul(O,Q)|0)+Math.imul(B,X)|0,s=s+Math.imul(B,Q)|0,n=n+Math.imul(P,tt)|0,o=(o=o+Math.imul(P,et)|0)+Math.imul(I,tt)|0,s=s+Math.imul(I,et)|0,n=n+Math.imul(A,it)|0,o=(o=o+Math.imul(A,nt)|0)+Math.imul(x,it)|0,s=s+Math.imul(x,nt)|0,n=n+Math.imul(k,st)|0,o=(o=o+Math.imul(k,at)|0)+Math.imul(E,st)|0,s=s+Math.imul(E,at)|0,n=n+Math.imul(_,ut)|0,o=(o=o+Math.imul(_,ft)|0)+Math.imul(M,ut)|0,s=s+Math.imul(M,ft)|0,n=n+Math.imul(b,lt)|0,o=(o=o+Math.imul(b,dt)|0)+Math.imul(y,lt)|0,s=s+Math.imul(y,dt)|0;var At=(f+(n=n+Math.imul(m,mt)|0)|0)+((8191&(o=(o=o+Math.imul(m,gt)|0)+Math.imul(g,mt)|0))<<13)|0;f=((s=s+Math.imul(g,gt)|0)+(o>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(q,J),o=(o=Math.imul(q,Y))+Math.imul(D,J)|0,s=Math.imul(D,Y),n=n+Math.imul(C,X)|0,o=(o=o+Math.imul(C,Q)|0)+Math.imul(U,X)|0,s=s+Math.imul(U,Q)|0,n=n+Math.imul(O,tt)|0,o=(o=o+Math.imul(O,et)|0)+Math.imul(B,tt)|0,s=s+Math.imul(B,et)|0,n=n+Math.imul(P,it)|0,o=(o=o+Math.imul(P,nt)|0)+Math.imul(I,it)|0,s=s+Math.imul(I,nt)|0,n=n+Math.imul(A,st)|0,o=(o=o+Math.imul(A,at)|0)+Math.imul(x,st)|0,s=s+Math.imul(x,at)|0,n=n+Math.imul(k,ut)|0,o=(o=o+Math.imul(k,ft)|0)+Math.imul(E,ut)|0,s=s+Math.imul(E,ft)|0,n=n+Math.imul(_,lt)|0,o=(o=o+Math.imul(_,dt)|0)+Math.imul(M,lt)|0,s=s+Math.imul(M,dt)|0;var xt=(f+(n=n+Math.imul(b,mt)|0)|0)+((8191&(o=(o=o+Math.imul(b,gt)|0)+Math.imul(y,mt)|0))<<13)|0;f=((s=s+Math.imul(y,gt)|0)+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(q,X),o=(o=Math.imul(q,Q))+Math.imul(D,X)|0,s=Math.imul(D,Q),n=n+Math.imul(C,tt)|0,o=(o=o+Math.imul(C,et)|0)+Math.imul(U,tt)|0,s=s+Math.imul(U,et)|0,n=n+Math.imul(O,it)|0,o=(o=o+Math.imul(O,nt)|0)+Math.imul(B,it)|0,s=s+Math.imul(B,nt)|0,n=n+Math.imul(P,st)|0,o=(o=o+Math.imul(P,at)|0)+Math.imul(I,st)|0,s=s+Math.imul(I,at)|0,n=n+Math.imul(A,ut)|0,o=(o=o+Math.imul(A,ft)|0)+Math.imul(x,ut)|0,s=s+Math.imul(x,ft)|0,n=n+Math.imul(k,lt)|0,o=(o=o+Math.imul(k,dt)|0)+Math.imul(E,lt)|0,s=s+Math.imul(E,dt)|0;var Tt=(f+(n=n+Math.imul(_,mt)|0)|0)+((8191&(o=(o=o+Math.imul(_,gt)|0)+Math.imul(M,mt)|0))<<13)|0;f=((s=s+Math.imul(M,gt)|0)+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(q,tt),o=(o=Math.imul(q,et))+Math.imul(D,tt)|0,s=Math.imul(D,et),n=n+Math.imul(C,it)|0,o=(o=o+Math.imul(C,nt)|0)+Math.imul(U,it)|0,s=s+Math.imul(U,nt)|0,n=n+Math.imul(O,st)|0,o=(o=o+Math.imul(O,at)|0)+Math.imul(B,st)|0,s=s+Math.imul(B,at)|0,n=n+Math.imul(P,ut)|0,o=(o=o+Math.imul(P,ft)|0)+Math.imul(I,ut)|0,s=s+Math.imul(I,ft)|0,n=n+Math.imul(A,lt)|0,o=(o=o+Math.imul(A,dt)|0)+Math.imul(x,lt)|0,s=s+Math.imul(x,dt)|0;var Pt=(f+(n=n+Math.imul(k,mt)|0)|0)+((8191&(o=(o=o+Math.imul(k,gt)|0)+Math.imul(E,mt)|0))<<13)|0;f=((s=s+Math.imul(E,gt)|0)+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(q,it),o=(o=Math.imul(q,nt))+Math.imul(D,it)|0,s=Math.imul(D,nt),n=n+Math.imul(C,st)|0,o=(o=o+Math.imul(C,at)|0)+Math.imul(U,st)|0,s=s+Math.imul(U,at)|0,n=n+Math.imul(O,ut)|0,o=(o=o+Math.imul(O,ft)|0)+Math.imul(B,ut)|0,s=s+Math.imul(B,ft)|0,n=n+Math.imul(P,lt)|0,o=(o=o+Math.imul(P,dt)|0)+Math.imul(I,lt)|0,s=s+Math.imul(I,dt)|0;var It=(f+(n=n+Math.imul(A,mt)|0)|0)+((8191&(o=(o=o+Math.imul(A,gt)|0)+Math.imul(x,mt)|0))<<13)|0;f=((s=s+Math.imul(x,gt)|0)+(o>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(q,st),o=(o=Math.imul(q,at))+Math.imul(D,st)|0,s=Math.imul(D,at),n=n+Math.imul(C,ut)|0,o=(o=o+Math.imul(C,ft)|0)+Math.imul(U,ut)|0,s=s+Math.imul(U,ft)|0,n=n+Math.imul(O,lt)|0,o=(o=o+Math.imul(O,dt)|0)+Math.imul(B,lt)|0,s=s+Math.imul(B,dt)|0;var Lt=(f+(n=n+Math.imul(P,mt)|0)|0)+((8191&(o=(o=o+Math.imul(P,gt)|0)+Math.imul(I,mt)|0))<<13)|0;f=((s=s+Math.imul(I,gt)|0)+(o>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(q,ut),o=(o=Math.imul(q,ft))+Math.imul(D,ut)|0,s=Math.imul(D,ft),n=n+Math.imul(C,lt)|0,o=(o=o+Math.imul(C,dt)|0)+Math.imul(U,lt)|0,s=s+Math.imul(U,dt)|0;var Ot=(f+(n=n+Math.imul(O,mt)|0)|0)+((8191&(o=(o=o+Math.imul(O,gt)|0)+Math.imul(B,mt)|0))<<13)|0;f=((s=s+Math.imul(B,gt)|0)+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(q,lt),o=(o=Math.imul(q,dt))+Math.imul(D,lt)|0,s=Math.imul(D,dt);var Bt=(f+(n=n+Math.imul(C,mt)|0)|0)+((8191&(o=(o=o+Math.imul(C,gt)|0)+Math.imul(U,mt)|0))<<13)|0;f=((s=s+Math.imul(U,gt)|0)+(o>>>13)|0)+(Bt>>>26)|0,Bt&=67108863;var jt=(f+(n=Math.imul(q,mt))|0)+((8191&(o=(o=Math.imul(q,gt))+Math.imul(D,mt)|0))<<13)|0;return f=((s=Math.imul(D,gt))+(o>>>13)|0)+(jt>>>26)|0,jt&=67108863,u[0]=vt,u[1]=bt,u[2]=yt,u[3]=wt,u[4]=_t,u[5]=Mt,u[6]=St,u[7]=kt,u[8]=Et,u[9]=Rt,u[10]=At,u[11]=xt,u[12]=Tt,u[13]=Pt,u[14]=It,u[15]=Lt,u[16]=Ot,u[17]=Bt,u[18]=jt,0!==f&&(u[19]=f,i.length++),i};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(d=l),o.prototype.mulTo=function t(e,r){var i=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,r):i<63?l(this,e,r):i<1024?function n(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,e,r):p(this,e,r)},m.prototype.makeRBT=function t(e){for(var r=new Array(e),i=o.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function t(e,r,i,n,o,s){for(var a=0;a>>=1)o++;return 1<>>=13,n[2*a+1]=8191&s,s>>>=13;for(a=2*r;a>=26,r+=o/67108864|0,r+=s>>>26,this.words[n]=67108863&s}return 0!==r&&(this.words[n]=r,this.length++),this},o.prototype.muln=function t(e){return this.clone().imuln(e)},o.prototype.sqr=function t(){return this.mul(this)},o.prototype.isqr=function t(){return this.imul(this.clone())},o.prototype.pow=function t(e){var r=function i(t){for(var e=new Array(t.bitLength()),r=0;r>>n}return e}(e);if(0===r.length)return new o(1);for(var n=this,s=0;s=0);var r,n=e%26,o=(e-n)/26,s=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(r=0;r>>26-n}a&&(this.words[r]=a,this.length++)}if(0!==o){for(r=this.length-1;r>=0;r--)this.words[r+o]=this.words[r];for(r=0;r=0),o=r?(r-r%26)/26:0;var s=e%26,a=Math.min((e-s)/26,this.length),h=67108863^67108863>>>s<a)for(this.length-=a,f=0;f=0&&(0!==c||f>=o);f--){var l=0|this.words[f];this.words[f]=c<<26-s|l>>>s,c=l&h}return u&&0!==c&&(u.words[u.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function t(e,r,n){return i(0===this.negative),this.iushrn(e,r,n)},o.prototype.shln=function t(e){return this.clone().ishln(e)},o.prototype.ushln=function t(e){return this.clone().iushln(e)},o.prototype.shrn=function t(e){return this.clone().ishrn(e)},o.prototype.ushrn=function t(e){return this.clone().iushrn(e)},o.prototype.testn=function t(e){i("number"==typeof e&&e>=0);var r=e%26,n=(e-r)/26,o=1<=0);var r=e%26,n=(e-r)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==r&&n++,this.length=Math.min(n,this.length),0!==r){var o=67108863^67108863>>>r<=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function t(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var r=0;r>26)-(u/67108864|0),this.words[o+n]=67108863&s}for(;o>26,this.words[o+n]=67108863&s;if(0===h)return this.strip();for(i(-1===h),h=0,o=0;o>26,this.words[o]=67108863&s;return this.negative=1,this.strip()},o.prototype._wordDiv=function t(e,r){var i=(this.length,e.length),n=this.clone(),s=e,a=0|s.words[s.length-1];0!==(i=26-this._countBits(a))&&(s=s.ushln(i),n.iushln(i),a=0|s.words[s.length-1]);var h,u=n.length-s.length;if("mod"!==r){(h=new o(null)).length=u+1,h.words=new Array(h.length);for(var f=0;f=0;l--){var d=67108864*(0|n.words[s.length+l])+(0|n.words[s.length+l-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(s,d,l);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(s,1,l),n.isZero()||(n.negative^=1);h&&(h.words[l]=d)}return h&&h.strip(),n.strip(),"div"!==r&&0!==i&&n.iushrn(i),{div:h||null,mod:n}},o.prototype.divmod=function t(e,r,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(h=this.neg().divmod(e,r),"mod"!==r&&(s=h.div.neg()),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:s,mod:a}):0===this.negative&&0!==e.negative?(h=this.divmod(e.neg(),r),"mod"!==r&&(s=h.div.neg()),{div:s,mod:h.mod}):0!=(this.negative&e.negative)?(h=this.neg().divmod(e.neg(),r),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:h.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===r?{div:this.divn(e.words[0]),mod:null}:"mod"===r?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,r);var s,a,h},o.prototype.div=function t(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function t(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function t(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function t(e){var r=this.divmod(e);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(e):r.mod,n=e.ushrn(1),o=e.andln(1),s=i.cmp(n);return s<0||1===o&&0===s?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function t(e){i(e<=67108863);for(var r=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(r*n+(0|this.words[o]))%e;return n},o.prototype.idivn=function t(e){i(e<=67108863);for(var r=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*r;this.words[n]=o/e|0,r=o%e}return this.strip()},o.prototype.divn=function t(e){return this.clone().idivn(e)},o.prototype.egcd=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s=new o(1),a=new o(0),h=new o(0),u=new o(1),f=0;r.isEven()&&n.isEven();)r.iushrn(1),n.iushrn(1),++f;for(var c=n.clone(),l=r.clone();!r.isZero();){for(var d=0,p=1;0==(r.words[0]&p)&&d<26;++d,p<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(c),a.isub(l)),s.iushrn(1),a.iushrn(1);for(var m=0,g=1;0==(n.words[0]&g)&&m<26;++m,g<<=1);if(m>0)for(n.iushrn(m);m-- >0;)(h.isOdd()||u.isOdd())&&(h.iadd(c),u.isub(l)),h.iushrn(1),u.iushrn(1);r.cmp(n)>=0?(r.isub(n),s.isub(h),a.isub(u)):(n.isub(r),h.isub(s),u.isub(a))}return{a:h,b:u,gcd:n.iushln(f)}},o.prototype._invmp=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s,a=new o(1),h=new o(0),u=n.clone();r.cmpn(1)>0&&n.cmpn(1)>0;){for(var f=0,c=1;0==(r.words[0]&c)&&f<26;++f,c<<=1);if(f>0)for(r.iushrn(f);f-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var l=0,d=1;0==(n.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(n.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(u),h.iushrn(1);r.cmp(n)>=0?(r.isub(n),a.isub(h)):(n.isub(r),h.isub(a))}return(s=0===r.cmpn(1)?a:h).cmpn(0)<0&&s.iadd(e),s},o.prototype.gcd=function t(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var r=this.clone(),i=e.clone();r.negative=0,i.negative=0;for(var n=0;r.isEven()&&i.isEven();n++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var o=r.cmp(i);if(o<0){var s=r;r=i,i=s}else if(0===o||0===i.cmpn(1))break;r.isub(i)}return i.iushln(n)},o.prototype.invm=function t(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function t(){return 0==(1&this.words[0])},o.prototype.isOdd=function t(){return 1==(1&this.words[0])},o.prototype.andln=function t(e){return this.words[0]&e},o.prototype.bincn=function t(e){i("number"==typeof e);var r=e%26,n=(e-r)/26,o=1<>>26,h&=67108863,this.words[a]=h}return 0!==s&&(this.words[a]=s,this.length++),this},o.prototype.isZero=function t(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function t(e){var r,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)r=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var o=0|this.words[0];r=o===e?0:oe.length)return 1;if(this.length=0;i--){var n=0|this.words[i],o=0|e.words[i];if(n!==o){no&&(r=1);break}}return r},o.prototype.gtn=function t(e){return 1===this.cmpn(e)},o.prototype.gt=function t(e){return 1===this.cmp(e)},o.prototype.gten=function t(e){return this.cmpn(e)>=0},o.prototype.gte=function t(e){return this.cmp(e)>=0},o.prototype.ltn=function t(e){return-1===this.cmpn(e)},o.prototype.lt=function t(e){return-1===this.cmp(e)},o.prototype.lten=function t(e){return this.cmpn(e)<=0},o.prototype.lte=function t(e){return this.cmp(e)<=0},o.prototype.eqn=function t(e){return 0===this.cmpn(e)},o.prototype.eq=function t(e){return 0===this.cmp(e)},o.red=function t(e){return new M(e)},o.prototype.toRed=function t(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function t(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function t(e){return this.red=e,this},o.prototype.forceRed=function t(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function t(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function t(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function t(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function t(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function t(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function t(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function t(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function t(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function t(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function t(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function t(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function M(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function S(t){M.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function t(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function t(e){var r,i=e;do{this.split(i,this.tmp),r=(i=(i=this.imulK(i)).iadd(this.tmp)).bitLength()}while(r>this.n);var n=r0?i.isub(this.p):void 0!==i.strip?i.strip():i._strip(),i},v.prototype.split=function t(e,r){e.iushrn(this.n,0,r)},v.prototype.imulK=function t(e){return e.imul(this.k)},n(b,v),b.prototype.split=function t(e,r){for(var i=4194303,n=Math.min(e.length,9),o=0;o>>22,s=a}s>>>=22,e.words[o-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function t(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var r=0,i=0;i>>=26,e.words[i]=o,r=n}return 0!==r&&(e.words[e.length++]=r),e},o._prime=function t(e){if(g[e])return g[e];var t;if("k256"===e)t=new b;else if("p224"===e)t=new y;else if("p192"===e)t=new w;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new _}return g[e]=t,t},M.prototype._verify1=function t(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},M.prototype._verify2=function t(e,r){i(0==(e.negative|r.negative),"red works only with positives"),i(e.red&&e.red===r.red,"red works only with red numbers")},M.prototype.imod=function t(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},M.prototype.neg=function t(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},M.prototype.add=function t(e,r){this._verify2(e,r);var i=e.add(r);return i.cmp(this.m)>=0&&i.isub(this.m),i._forceRed(this)},M.prototype.iadd=function t(e,r){this._verify2(e,r);var i=e.iadd(r);return i.cmp(this.m)>=0&&i.isub(this.m),i},M.prototype.sub=function t(e,r){this._verify2(e,r);var i=e.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},M.prototype.isub=function t(e,r){this._verify2(e,r);var i=e.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},M.prototype.shl=function t(e,r){return this._verify1(e),this.imod(e.ushln(r))},M.prototype.imul=function t(e,r){return this._verify2(e,r),this.imod(e.imul(r))},M.prototype.mul=function t(e,r){return this._verify2(e,r),this.imod(e.mul(r))},M.prototype.isqr=function t(e){return this.imul(e,e.clone())},M.prototype.sqr=function t(e){return this.mul(e,e)},M.prototype.sqrt=function t(e){if(e.isZero())return e.clone();var r=this.m.andln(3);if(i(r%2==1),3===r){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var s=this.m.subn(1),a=0;!s.isZero()&&0===s.andln(1);)a++,s.iushrn(1);i(!s.isZero());var h=new o(1).toRed(this),u=h.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);0!==this.pow(c,f).cmp(u);)c.redIAdd(u);for(var l=this.pow(c,s),d=this.pow(e,s.addn(1).iushrn(1)),p=this.pow(e,s),m=a;0!==p.cmp(h);){for(var g=p,v=0;0!==g.cmp(h);v++)g=g.redSqr();i(v=0;n--){for(var f=r.words[n],c=u-1;c>=0;c--){var l=f>>c&1;s!==i[0]&&(s=this.sqr(s)),0!==l||0!==a?(a<<=1,a|=l,(4===++h||0===n&&0===c)&&(s=this.mul(s,i[a]),h=0,a=0)):h=0}u=26}return s},M.prototype.convertTo=function t(e){var r=e.umod(this.m);return r===e?r.clone():r},M.prototype.convertFrom=function t(e){var r=e.clone();return r.red=null,r},o.mont=function t(e){return new S(e)},n(S,M),S.prototype.convertTo=function t(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function t(e){var r=this.imod(e.mul(this.rinv));return r.red=null,r},S.prototype.imul=function t(e,r){if(e.isZero()||r.isZero())return e.words[0]=0,e.length=1,e;var i=e.imul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=i.isub(n).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},S.prototype.mul=function t(e,r){if(e.isZero()||r.isZero())return new o(0)._forceRed(this);var i=e.mul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=i.isub(n).iushrn(this.shift),a=s;return s.cmp(this.m)>=0?a=s.isub(this.m):s.cmpn(0)<0&&(a=s.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function t(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(28)(t))},function(t,e){},function(t,e){},function(t){t.exports=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')},function(t,e,r){(function(e){var i=r(174),n=new(r(175)),o=new i(24),s=new i(11),a=new i(10),h=new i(3),u=new i(7),f=r(173),c=r(31);function l(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._pub=new i(t),this}function d(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._priv=new i(t),this}t.exports=m;var p={};function m(t,e,r){this.setGenerator(e),this.__prime=new i(t),this._prime=i.mont(this.__prime),this._primeLen=t.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=l,this.setPrivateKey=d):this._primeCode=8}function g(t,r){var i=new e(t.toArray());return r?i.toString(r):i}Object.defineProperty(m.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function t(e,r){var i=r.toString("hex"),c=[i,e.toString(16)].join("_");if(c in p)return p[c];var l,d=0;if(e.isEven()||!f.simpleSieve||!f.fermatTest(e)||!n.test(e))return d+=1,d+="02"===i||"05"===i?8:4,p[c]=d,d;switch(n.test(e.shrn(1))||(d+=2),i){case"02":e.mod(o).cmp(s)&&(d+=8);break;case"05":(l=e.mod(a)).cmp(h)&&l.cmp(u)&&(d+=8);break;default:d+=4}return p[c]=d,d}(this.__prime,this.__gen)),this._primeCode}}),m.prototype.generateKeys=function(){return this._priv||(this._priv=new i(c(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},m.prototype.computeSecret=function(t){var r=(t=(t=new i(t)).toRed(this._prime)).redPow(this._priv).fromRed(),n=new e(r.toArray()),o=this.getPrime();if(n.length0?this.tail.next=r:this.head=r,this.tail=r,++this.length}},{key:"unshift",value:function t(e){var r={data:e,next:this.head};0===this.length&&(this.tail=r),this.head=r,++this.length}},{key:"shift",value:function t(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function t(){this.head=this.tail=null,this.length=0}},{key:"join",value:function t(e){if(0===this.length)return"";for(var r=this.head,i=""+r.data;r=r.next;)i+=e+r.data;return i}},{key:"concat",value:function t(e){if(0===this.length)return s.alloc(0);for(var r,i,n,o=s.allocUnsafe(e>>>0),a=this.head,h=0;a;)r=a.data,i=o,n=h,s.prototype.copy.call(r,i,n),h+=a.data.length,a=a.next;return o}},{key:"consume",value:function t(e,r){var i;return eo.length?o.length:e;if(s===o.length?n+=o:n+=o.slice(0,e),0===(e-=s)){s===o.length?(++i,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(s));break}++i}return this.length-=i,n}},{key:"_getBuffer",value:function t(e){var r=s.allocUnsafe(e),i=this.head,n=1;for(i.data.copy(r),e-=i.data.length;i=i.next;){var o=i.data,a=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,a),0===(e-=a)){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,r}},{key:h,value:function t(e,r){return a(this,function o(t){for(var e=1;e0,(function(t){i||(i=t),t&&s.forEach(u),o||(s.forEach(u),n(i))}))}));return e.reduce(f)}},function(t,e,r){var i=r(99).Buffer,n=r(158),o=r(101),s=r(103).ec,a=r(102),h=r(65),u=r(193);function f(t,e,r,o){if((t=i.from(t.toArray())).length0&&r.ishrn(i),r}function l(t,e,r){var o,s;do{for(o=i.alloc(0);8*o.length=0&&(a=r,h=i),o.negative&&(o=o.neg(),s=s.neg()),a.negative&&(a=a.neg(),h=h.neg()),[{a:o,b:s},{a:a,b:h}]},h.prototype._endoSplit=function t(e){var r=this.endo.basis,i=r[0],n=r[1],o=n.b.mul(e).divRound(this.n),s=i.b.neg().mul(e).divRound(this.n),a=o.mul(i.a),h=s.mul(n.a),u=o.mul(i.b),f=s.mul(n.b);return{k1:e.sub(a).sub(h),k2:u.add(f).neg()}},h.prototype.pointFromX=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),o=i.redSqrt();if(0!==o.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");var s=o.fromRed().isOdd();return(r&&!s||!r&&s)&&(o=o.redNeg()),this.point(e,o)},h.prototype.validate=function t(e){if(e.inf)return!0;var r=e.x,i=e.y,n=this.a.redMul(r),o=r.redSqr().redMul(r).redIAdd(n).redIAdd(this.b);return 0===i.redSqr().redISub(o).cmpn(0)},h.prototype._endoWnafMulAdd=function t(e,r,i){for(var n=this._endoWnafT1,o=this._endoWnafT2,s=0;s":""},u.prototype.isInfinity=function t(){return this.inf},u.prototype.add=function t(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var r=this.y.redSub(e.y);0!==r.cmpn(0)&&(r=r.redMul(this.x.redSub(e.x).redInvm()));var i=r.redSqr().redISub(this.x).redISub(e.x),n=r.redMul(this.x.redSub(i)).redISub(this.y);return this.curve.point(i,n)},u.prototype.dbl=function t(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var r=this.curve.a,i=this.x.redSqr(),n=e.redInvm(),o=i.redAdd(i).redIAdd(i).redIAdd(r).redMul(n),s=o.redSqr().redISub(this.x.redAdd(this.x)),a=o.redMul(this.x.redSub(s)).redISub(this.y);return this.curve.point(s,a)},u.prototype.getX=function t(){return this.x.fromRed()},u.prototype.getY=function t(){return this.y.fromRed()},u.prototype.mul=function t(e){return e=new n(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function t(e,r,i){var n=[this,r],o=[e,i];return this.curve.endo?this.curve._endoWnafMulAdd(n,o):this.curve._wnafMulAdd(1,n,o,2)},u.prototype.jmulAdd=function t(e,r,i){var n=[this,r],o=[e,i];return this.curve.endo?this.curve._endoWnafMulAdd(n,o,!0):this.curve._wnafMulAdd(1,n,o,2,!0)},u.prototype.eq=function t(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},u.prototype.neg=function t(e){if(this.inf)return this;var r=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var i=this.precomputed,n=function(t){return t.neg()};r.precomputed={naf:i.naf&&{wnd:i.naf.wnd,points:i.naf.points.map(n)},doubles:i.doubles&&{step:i.doubles.step,points:i.doubles.points.map(n)}}}return r},u.prototype.toJ=function t(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(f,s.BasePoint),h.prototype.jpoint=function t(e,r,i){return new f(this,e,r,i)},f.prototype.toP=function t(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),r=e.redSqr(),i=this.x.redMul(r),n=this.y.redMul(r).redMul(e);return this.curve.point(i,n)},f.prototype.neg=function t(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},f.prototype.add=function t(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var r=e.z.redSqr(),i=this.z.redSqr(),n=this.x.redMul(r),o=e.x.redMul(i),s=this.y.redMul(r.redMul(e.z)),a=e.y.redMul(i.redMul(this.z)),h=n.redSub(o),u=s.redSub(a);if(0===h.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=h.redSqr(),c=f.redMul(h),l=n.redMul(f),d=u.redSqr().redIAdd(c).redISub(l).redISub(l),p=u.redMul(l.redISub(d)).redISub(s.redMul(c)),m=this.z.redMul(e.z).redMul(h);return this.curve.jpoint(d,p,m)},f.prototype.mixedAdd=function t(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var r=this.z.redSqr(),i=this.x,n=e.x.redMul(r),o=this.y,s=e.y.redMul(r).redMul(this.z),a=i.redSub(n),h=o.redSub(s);if(0===a.cmpn(0))return 0!==h.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=a.redSqr(),f=u.redMul(a),c=i.redMul(u),l=h.redSqr().redIAdd(f).redISub(c).redISub(c),d=h.redMul(c.redISub(l)).redISub(o.redMul(f)),p=this.z.redMul(a);return this.curve.jpoint(l,d,p)},f.prototype.dblp=function t(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();var r;if(this.curve.zeroA||this.curve.threeA){var i=this;for(r=0;r=0)return!1;if(i.redIAdd(o),0===this.x.cmp(i))return!0}},f.prototype.inspect=function t(){return this.isInfinity()?"":""},f.prototype.isInfinity=function t(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";var i=r(16),n=r(104),o=r(64),s=r(11);function a(t){o.call(this,"mont",t),this.a=new i(t.a,16).toRed(this.red),this.b=new i(t.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function h(t,e,r){o.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(e,16),this.z=new i(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}n(a,o),t.exports=a,a.prototype.validate=function t(e){var r=e.normalize().x,i=r.redSqr(),n=i.redMul(r).redAdd(i.redMul(this.a)).redAdd(r);return 0===n.redSqrt().redSqr().cmp(n)},n(h,o.BasePoint),a.prototype.decodePoint=function t(e,r){return this.point(s.toArray(e,r),1)},a.prototype.point=function t(e,r){return new h(this,e,r)},a.prototype.pointFromJSON=function t(e){return h.fromJSON(this,e)},h.prototype.precompute=function t(){},h.prototype._encode=function t(){return this.getX().toArray("be",this.curve.p.byteLength())},h.fromJSON=function t(e,r){return new h(e,r[0],r[1]||e.one)},h.prototype.inspect=function t(){return this.isInfinity()?"":""},h.prototype.isInfinity=function t(){return 0===this.z.cmpn(0)},h.prototype.dbl=function t(){var e=this.x.redAdd(this.z).redSqr(),r=this.x.redSub(this.z).redSqr(),i=e.redSub(r),n=e.redMul(r),o=i.redMul(r.redAdd(this.curve.a24.redMul(i)));return this.curve.point(n,o)},h.prototype.add=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.diffAdd=function t(e,r){var i=this.x.redAdd(this.z),n=this.x.redSub(this.z),o=e.x.redAdd(e.z),s=e.x.redSub(e.z).redMul(i),a=o.redMul(n),h=r.z.redMul(s.redAdd(a).redSqr()),u=r.x.redMul(s.redISub(a).redSqr());return this.curve.point(h,u)},h.prototype.mul=function t(e){for(var r=e.clone(),i=this,n=this.curve.point(null,null),o=[];0!==r.cmpn(0);r.iushrn(1))o.push(r.andln(1));for(var s=o.length-1;s>=0;s--)0===o[s]?(i=i.diffAdd(n,this),n=n.dbl()):(n=i.diffAdd(n,this),i=i.dbl());return n},h.prototype.mulAdd=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.jumlAdd=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.eq=function t(e){return 0===this.getX().cmp(e.getX())},h.prototype.normalize=function t(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},h.prototype.getX=function t(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";var i=r(11),n=r(16),o=r(104),s=r(64),a=i.assert;function h(t){this.twisted=1!=(0|t.a),this.mOneA=this.twisted&&-1==(0|t.a),this.extended=this.mOneA,s.call(this,"edwards",t),this.a=new n(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new n(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new n(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),a(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|t.c)}function u(t,e,r,i,o){s.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===i?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new n(e,16),this.y=new n(r,16),this.z=i?new n(i,16):this.curve.one,this.t=o&&new n(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}o(h,s),t.exports=h,h.prototype._mulA=function t(e){return this.mOneA?e.redNeg():this.a.redMul(e)},h.prototype._mulC=function t(e){return this.oneC?e:this.c.redMul(e)},h.prototype.jpoint=function t(e,r,i,n){return this.point(e,r,i,n)},h.prototype.pointFromX=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr(),o=this.c2.redSub(this.a.redMul(i)),s=this.one.redSub(this.c2.redMul(this.d).redMul(i)),a=o.redMul(s.redInvm()),h=a.redSqrt();if(0!==h.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");var u=h.fromRed().isOdd();return(r&&!u||!r&&u)&&(h=h.redNeg()),this.point(e,h)},h.prototype.pointFromY=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr(),o=i.redSub(this.c2),s=i.redMul(this.d).redMul(this.c2).redSub(this.a),a=o.redMul(s.redInvm());if(0===a.cmp(this.zero)){if(r)throw new Error("invalid point");return this.point(this.zero,e)}var h=a.redSqrt();if(0!==h.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");return h.fromRed().isOdd()!==r&&(h=h.redNeg()),this.point(h,e)},h.prototype.validate=function t(e){if(e.isInfinity())return!0;e.normalize();var r=e.x.redSqr(),i=e.y.redSqr(),n=r.redMul(this.a).redAdd(i),o=this.c2.redMul(this.one.redAdd(this.d.redMul(r).redMul(i)));return 0===n.cmp(o)},o(u,s.BasePoint),h.prototype.pointFromJSON=function t(e){return u.fromJSON(this,e)},h.prototype.point=function t(e,r,i,n){return new u(this,e,r,i,n)},u.fromJSON=function t(e,r){return new u(e,r[0],r[1],r[2])},u.prototype.inspect=function t(){return this.isInfinity()?"":""},u.prototype.isInfinity=function t(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},u.prototype._extDbl=function t(){var e=this.x.redSqr(),r=this.y.redSqr(),i=this.z.redSqr();i=i.redIAdd(i);var n=this.curve._mulA(e),o=this.x.redAdd(this.y).redSqr().redISub(e).redISub(r),s=n.redAdd(r),a=s.redSub(i),h=n.redSub(r),u=o.redMul(a),f=s.redMul(h),c=o.redMul(h),l=a.redMul(s);return this.curve.point(u,f,l,c)},u.prototype._projDbl=function t(){var e,r,i,n,o,s,a=this.x.redAdd(this.y).redSqr(),h=this.x.redSqr(),u=this.y.redSqr();if(this.curve.twisted){var f=(n=this.curve._mulA(h)).redAdd(u);this.zOne?(e=a.redSub(h).redSub(u).redMul(f.redSub(this.curve.two)),r=f.redMul(n.redSub(u)),i=f.redSqr().redSub(f).redSub(f)):(o=this.z.redSqr(),s=f.redSub(o).redISub(o),e=a.redSub(h).redISub(u).redMul(s),r=f.redMul(n.redSub(u)),i=f.redMul(s))}else n=h.redAdd(u),o=this.curve._mulC(this.z).redSqr(),s=n.redSub(o).redSub(o),e=this.curve._mulC(a.redISub(n)).redMul(s),r=this.curve._mulC(n).redMul(h.redISub(u)),i=n.redMul(s);return this.curve.point(e,r,i)},u.prototype.dbl=function t(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},u.prototype._extAdd=function t(e){var r=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),i=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),o=this.z.redMul(e.z.redAdd(e.z)),s=i.redSub(r),a=o.redSub(n),h=o.redAdd(n),u=i.redAdd(r),f=s.redMul(a),c=h.redMul(u),l=s.redMul(u),d=a.redMul(h);return this.curve.point(f,c,d,l)},u.prototype._projAdd=function t(e){var r,i,n=this.z.redMul(e.z),o=n.redSqr(),s=this.x.redMul(e.x),a=this.y.redMul(e.y),h=this.curve.d.redMul(s).redMul(a),u=o.redSub(h),f=o.redAdd(h),c=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(s).redISub(a),l=n.redMul(u).redMul(c);return this.curve.twisted?(r=n.redMul(f).redMul(a.redSub(this.curve._mulA(s))),i=u.redMul(f)):(r=n.redMul(f).redMul(a.redSub(s)),i=this.curve._mulC(u).redMul(f)),this.curve.point(l,r,i)},u.prototype.add=function t(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},u.prototype.mul=function t(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function t(e,r,i){return this.curve._wnafMulAdd(1,[this,r],[e,i],2,!1)},u.prototype.jmulAdd=function t(e,r,i){return this.curve._wnafMulAdd(1,[this,r],[e,i],2,!0)},u.prototype.normalize=function t(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},u.prototype.neg=function t(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},u.prototype.getX=function t(){return this.normalize(),this.x.fromRed()},u.prototype.getY=function t(){return this.normalize(),this.y.fromRed()},u.prototype.eq=function t(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},u.prototype.eqXToP=function t(e){var r=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(r))return!0;for(var i=e.clone(),n=this.curve.redN.redMul(this.z);;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}},u.prototype.toP=u.prototype.normalize,u.prototype.mixedAdd=u.prototype.add},function(t,e,r){"use strict";e.sha1=r(346),e.sha224=r(347),e.sha256=r(185),e.sha384=r(348),e.sha512=r(186)},function(t,e,r){"use strict";var i=r(13),n=r(46),o=r(184),s=i.rotl32,a=i.sum32,h=i.sum32_5,u=o.ft_1,f=n.BlockHash,c=[1518500249,1859775393,2400959708,3395469782];function l(){if(!(this instanceof l))return new l;f.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}i.inherits(l,f),t.exports=l,l.blockSize=512,l.outSize=160,l.hmacStrength=80,l.padLength=64,l.prototype._update=function t(e,r){for(var i=this.W,n=0;n<16;n++)i[n]=e[r+n];for(;nthis.blockSize&&(e=(new this.Hash).update(e).digest()),n(e.length<=this.blockSize);for(var r=e.length;r0))return h.iaddn(1),this.keyFromPrivate(h)}},c.prototype._truncateToN=function t(e,r){var i=8*e.byteLength()-this.n.bitLength();return i>0&&(e=e.ushrn(i)),!r&&e.cmp(this.n)>=0?e.sub(this.n):e},c.prototype.sign=function t(e,r,o,s){"object"==typeof o&&(s=o,o=null),s||(s={}),r=this.keyFromPrivate(r,o),e=this._truncateToN(new i(e,16));for(var a=this.n.byteLength(),h=r.getPrivate().toArray("be",a),u=e.toArray("be",a),c=new n({hash:this.hash,entropy:h,nonce:u,pers:s.pers,persEnc:s.persEnc||"utf8"}),l=this.n.sub(new i(1)),d=0;;d++){var p=s.k?s.k(d):new i(c.generate(this.n.byteLength()));if(!((p=this._truncateToN(p,!0)).cmpn(1)<=0||p.cmp(l)>=0)){var m=this.g.mul(p);if(!m.isInfinity()){var g=m.getX(),v=g.umod(this.n);if(0!==v.cmpn(0)){var b=p.invm(this.n).mul(v.mul(r.getPrivate()).iadd(e));if(0!==(b=b.umod(this.n)).cmpn(0)){var y=(m.getY().isOdd()?1:0)|(0!==g.cmp(v)?2:0);return s.canonical&&b.cmp(this.nh)>0&&(b=this.n.sub(b),y^=1),new f({r:v,s:b,recoveryParam:y})}}}}}},c.prototype.verify=function t(e,r,n,o){e=this._truncateToN(new i(e,16)),n=this.keyFromPublic(n,o);var s=(r=new f(r,"hex")).r,a=r.s;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var h,u=a.invm(this.n),c=u.mul(e).umod(this.n),l=u.mul(s).umod(this.n);return this.curve._maxwellTrick?!(h=this.g.jmulAdd(c,n.getPublic(),l)).isInfinity()&&h.eqXToP(s):!(h=this.g.mulAdd(c,n.getPublic(),l)).isInfinity()&&0===h.getX().umod(this.n).cmp(s)},c.prototype.recoverPubKey=function(t,e,r,n){h((3&r)===r,"The recovery param is more than two bits"),e=new f(e,n);var o=this.n,s=new i(t),a=e.r,u=e.s,c=1&r,l=r>>1;if(a.cmp(this.curve.p.umod(this.curve.n))>=0&&l)throw new Error("Unable to find sencond key candinate");a=l?this.curve.pointFromX(a.add(this.curve.n),c):this.curve.pointFromX(a,c);var d=e.r.invm(o),p=o.sub(s).mul(d).umod(o),m=u.mul(d).umod(o);return this.g.mulAdd(p,a,m)},c.prototype.getKeyRecoveryParam=function(t,e,r,i){if(null!==(e=new f(e,i)).recoveryParam)return e.recoveryParam;for(var n=0;n<4;n++){var o;try{o=this.recoverPubKey(t,e,n)}catch(t){continue}if(o.eq(r))return n}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";var i=r(106),n=r(182),o=r(10);function s(t){if(!(this instanceof s))return new s(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=n.toArray(t.entropy,t.entropyEnc||"hex"),r=n.toArray(t.nonce,t.nonceEnc||"hex"),i=n.toArray(t.pers,t.persEnc||"hex");o(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,i)}t.exports=s,s.prototype._init=function t(e,r,i){var n=e.concat(r).concat(i);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var o=0;o=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(i||[])),this._reseed=1},s.prototype.generate=function t(e,r,i,o){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof r&&(o=i,i=r,r=null),i&&(i=n.toArray(i,o||"hex"),this._update(i));for(var s=[];s.length"}},function(t,e,r){"use strict";var i=r(16),n=r(11),o=n.assert;function s(t,e){if(t instanceof s)return t;this._importDER(t,e)||(o(t.r&&t.s,"Signature without r or s"),this.r=new i(t.r,16),this.s=new i(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}function a(){this.place=0}function h(t,e){var r=t[e.place++];if(!(128&r))return r;var i=15&r;if(0===i||i>4)return!1;for(var n=0,o=0,s=e.place;o>>=0;return!(n<=127)&&(e.place=s,n)}function u(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}}t.exports=s,s.prototype._importDER=function t(e,r){e=n.toArray(e,r);var o=new a;if(48!==e[o.place++])return!1;var s=h(e,o);if(!1===s)return!1;if(s+o.place!==e.length)return!1;if(2!==e[o.place++])return!1;var u=h(e,o);if(!1===u)return!1;var f=e.slice(o.place,u+o.place);if(o.place+=u,2!==e[o.place++])return!1;var c=h(e,o);if(!1===c)return!1;if(e.length!==c+o.place)return!1;var l=e.slice(o.place,c+o.place);if(0===f[0]){if(!(128&f[1]))return!1;f=f.slice(1)}if(0===l[0]){if(!(128&l[1]))return!1;l=l.slice(1)}return this.r=new i(f),this.s=new i(l),this.recoveryParam=null,!0},s.prototype.toDER=function t(e){var r=this.r.toArray(),i=this.s.toArray();for(128&r[0]&&(r=[0].concat(r)),128&i[0]&&(i=[0].concat(i)),r=u(r),i=u(i);!(i[0]||128&i[1]);)i=i.slice(1);var o=[2];f(o,r.length),(o=o.concat(r)).push(2),f(o,i.length);var s=o.concat(i),a=[48];return f(a,s.length),a=a.concat(s),n.encode(a,e)}},function(t,e,r){"use strict";var i=r(106),n=r(105),o=r(11),s=o.assert,a=o.parseBytes,h=r(357),u=r(358);function f(t){if(s("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof f))return new f(t);t=n[t].curve,this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=i.sha512}t.exports=f,f.prototype.sign=function t(e,r){e=a(e);var i=this.keyFromSecret(r),n=this.hashInt(i.messagePrefix(),e),o=this.g.mul(n),s=this.encodePoint(o),h=this.hashInt(s,i.pubBytes(),e).mul(i.priv()),u=n.add(h).umod(this.curve.n);return this.makeSignature({R:o,S:u,Rencoded:s})},f.prototype.verify=function t(e,r,i){e=a(e),r=this.makeSignature(r);var n=this.keyFromPublic(i),o=this.hashInt(r.Rencoded(),n.pubBytes(),e),s=this.g.mul(r.S());return r.R().add(n.pub().mul(o)).eq(s)},f.prototype.hashInt=function t(){for(var e=this.hash(),r=0;r=e)throw new Error("invalid sig")}t.exports=function u(t,e,r,f,c){var l=s(r);if("ec"===l.type){if("ecdsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");return function d(t,e,r){var i=a[r.data.algorithm.curve.join(".")];if(!i)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var n=new o(i),s=r.data.subjectPrivateKey.data;return n.verify(e,t,s)}(t,e,l)}if("dsa"===l.type){if("dsa"!==f)throw new Error("wrong public key type");return function p(t,e,r){var i=r.data.p,o=r.data.q,a=r.data.g,u=r.data.pub_key,f=s.signature.decode(t,"der"),c=f.s,l=f.r;h(c,o),h(l,o);var d=n.mont(i),p=c.invm(o);return 0===a.toRed(d).redPow(new n(e).mul(p).mod(o)).fromRed().mul(u.toRed(d).redPow(l.mul(p).mod(o)).fromRed()).mod(i).mod(o).cmp(l)}(t,e,l)}if("rsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");e=i.concat([c,e]);for(var m=l.modulus.byteLength(),g=[1],v=0;e.length+g.length+2=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s=49?a-49+10:a>=17?a-17+10:a}return n}o.isBN=function t(e){return e instanceof o||null!==e&&"object"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function t(e,r){return e.cmp(r)>0?e:r},o.min=function t(e,r){return e.cmp(r)<0?e:r},o.prototype._init=function t(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"==typeof e)return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initNumber=function t(e,r,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initArray=function t(e,r,n){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[s]|=a<>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);else if("le"===n)for(o=0,s=0;o>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);return this.strip()},o.prototype._parseHex=function t(e,r){this.length=Math.ceil((e.length-r)/6),this.words=new Array(this.length);for(var i=0;i=r;i-=6)o=a(e,i,i+6),this.words[n]|=o<>>26-s&4194303,(s+=24)>=26&&(s-=26,n++);i+6!==r&&(o=a(e,r,i+6),this.words[n]|=o<>>26-s&4194303),this.strip()},o.prototype._parseBase=function t(e,r,i){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=r)n++;n--,o=o/r|0;for(var s=e.length-i,a=s%n,u=Math.min(s,s-a)+i,f=0,c=i;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function t(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function t(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],c=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u>>26,c=67108863&h,l=Math.min(u,e.length-1),d=Math.max(0,u-t.length+1);d<=l;d++){var p=u-d|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[d])+c)/67108864|0,c=67108863&s}r.words[u]=0|c,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}o.prototype.toString=function t(e,r){var n;if(r=0|r||1,16===(e=e||10)||"hex"===e){n="";for(var o=0,s=0,a=0;a>>24-o&16777215)||a!==this.length-1?u[6-l.length]+l+n:l+n,(o+=2)>=26&&(o-=26,a--)}for(0!==s&&(n=s.toString(16)+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var d=f[e],p=c[e];n="";var m=this.clone();for(m.negative=0;!m.isZero();){var g=m.modn(p).toString(e);n=(m=m.idivn(p)).isZero()?g+n:u[d-g.length]+g+n}for(this.isZero()&&(n="0"+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function t(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function t(){return this.toString(16)},o.prototype.toBuffer=function t(e,r){return i(void 0!==s),this.toArrayLike(s,e,r)},o.prototype.toArray=function t(e,r){return this.toArrayLike(Array,e,r)},o.prototype.toArrayLike=function t(e,r,n){var o=this.byteLength(),s=n||Math.max(1,o);i(o<=s,"byte array longer than desired length"),i(s>0,"Requested array length <= 0"),this.strip();var a,h,u="le"===r,f=new e(s),c=this.clone();if(u){for(h=0;!c.isZero();h++)a=c.andln(255),c.iushrn(8),f[h]=a;for(;h=4096&&(i+=13,r>>>=13),r>=64&&(i+=7,r>>>=7),r>=8&&(i+=4,r>>>=4),r>=2&&(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function t(e){if(0===e)return 26;var r=e,i=0;return 0==(8191&r)&&(i+=13,r>>>=13),0==(127&r)&&(i+=7,r>>>=7),0==(15&r)&&(i+=4,r>>>=4),0==(3&r)&&(i+=2,r>>>=2),0==(1&r)&&i++,i},o.prototype.bitLength=function t(){var e=this.words[this.length-1],r=this._countBits(e);return 26*(this.length-1)+r},o.prototype.zeroBits=function t(){if(this.isZero())return 0;for(var e=0,r=0;re.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function t(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function t(e){var r;r=this.length>e.length?e:this;for(var i=0;ie.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function t(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function t(e){var r,i;this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function t(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function t(e){i("number"==typeof e&&e>=0);var r=0|Math.ceil(e/26),n=e%26;this._expand(r),n>0&&r--;for(var o=0;o0&&(this.words[o]=~this.words[o]&67108863>>26-n),this.strip()},o.prototype.notn=function t(e){return this.clone().inotn(e)},o.prototype.setn=function t(e,r){i("number"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=r?this.words[n]|1<e.length?(i=this,n=e):(i=e,n=this);for(var o=0,s=0;s>>26;for(;0!==o&&s>>26;if(this.length=i.length,0!==o)this.words[this.length]=o,this.length++;else if(i!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function t(e){if(0!==e.negative){e.negative=0;var r=this.iadd(e);return e.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var i,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(i=this,n=e):(i=e,n=this);for(var s=0,a=0;a>26,this.words[a]=67108863&r;for(;0!==s&&a>26,this.words[a]=67108863&r;if(0===s&&a>>13,p=0|a[1],m=8191&p,g=p>>>13,v=0|a[2],b=8191&v,y=v>>>13,w=0|a[3],_=8191&w,M=w>>>13,S=0|a[4],k=8191&S,E=S>>>13,R=0|a[5],A=8191&R,x=R>>>13,T=0|a[6],P=8191&T,I=T>>>13,L=0|a[7],O=8191&L,B=L>>>13,j=0|a[8],C=8191&j,U=j>>>13,N=0|a[9],q=8191&N,D=N>>>13,z=0|h[0],F=8191&z,W=z>>>13,H=0|h[1],K=8191&H,Z=H>>>13,V=0|h[2],J=8191&V,Y=V>>>13,G=0|h[3],X=8191&G,Q=G>>>13,$=0|h[4],tt=8191&$,et=$>>>13,rt=0|h[5],it=8191&rt,nt=rt>>>13,ot=0|h[6],st=8191&ot,at=ot>>>13,ht=0|h[7],ut=8191&ht,ft=ht>>>13,ct=0|h[8],lt=8191&ct,dt=ct>>>13,pt=0|h[9],mt=8191&pt,gt=pt>>>13;i.negative=e.negative^r.negative,i.length=19;var vt=(f+(n=Math.imul(l,F))|0)+((8191&(o=(o=Math.imul(l,W))+Math.imul(d,F)|0))<<13)|0;f=((s=Math.imul(d,W))+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(m,F),o=(o=Math.imul(m,W))+Math.imul(g,F)|0,s=Math.imul(g,W);var bt=(f+(n=n+Math.imul(l,K)|0)|0)+((8191&(o=(o=o+Math.imul(l,Z)|0)+Math.imul(d,K)|0))<<13)|0;f=((s=s+Math.imul(d,Z)|0)+(o>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(b,F),o=(o=Math.imul(b,W))+Math.imul(y,F)|0,s=Math.imul(y,W),n=n+Math.imul(m,K)|0,o=(o=o+Math.imul(m,Z)|0)+Math.imul(g,K)|0,s=s+Math.imul(g,Z)|0;var yt=(f+(n=n+Math.imul(l,J)|0)|0)+((8191&(o=(o=o+Math.imul(l,Y)|0)+Math.imul(d,J)|0))<<13)|0;f=((s=s+Math.imul(d,Y)|0)+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(_,F),o=(o=Math.imul(_,W))+Math.imul(M,F)|0,s=Math.imul(M,W),n=n+Math.imul(b,K)|0,o=(o=o+Math.imul(b,Z)|0)+Math.imul(y,K)|0,s=s+Math.imul(y,Z)|0,n=n+Math.imul(m,J)|0,o=(o=o+Math.imul(m,Y)|0)+Math.imul(g,J)|0,s=s+Math.imul(g,Y)|0;var wt=(f+(n=n+Math.imul(l,X)|0)|0)+((8191&(o=(o=o+Math.imul(l,Q)|0)+Math.imul(d,X)|0))<<13)|0;f=((s=s+Math.imul(d,Q)|0)+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,F),o=(o=Math.imul(k,W))+Math.imul(E,F)|0,s=Math.imul(E,W),n=n+Math.imul(_,K)|0,o=(o=o+Math.imul(_,Z)|0)+Math.imul(M,K)|0,s=s+Math.imul(M,Z)|0,n=n+Math.imul(b,J)|0,o=(o=o+Math.imul(b,Y)|0)+Math.imul(y,J)|0,s=s+Math.imul(y,Y)|0,n=n+Math.imul(m,X)|0,o=(o=o+Math.imul(m,Q)|0)+Math.imul(g,X)|0,s=s+Math.imul(g,Q)|0;var _t=(f+(n=n+Math.imul(l,tt)|0)|0)+((8191&(o=(o=o+Math.imul(l,et)|0)+Math.imul(d,tt)|0))<<13)|0;f=((s=s+Math.imul(d,et)|0)+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(A,F),o=(o=Math.imul(A,W))+Math.imul(x,F)|0,s=Math.imul(x,W),n=n+Math.imul(k,K)|0,o=(o=o+Math.imul(k,Z)|0)+Math.imul(E,K)|0,s=s+Math.imul(E,Z)|0,n=n+Math.imul(_,J)|0,o=(o=o+Math.imul(_,Y)|0)+Math.imul(M,J)|0,s=s+Math.imul(M,Y)|0,n=n+Math.imul(b,X)|0,o=(o=o+Math.imul(b,Q)|0)+Math.imul(y,X)|0,s=s+Math.imul(y,Q)|0,n=n+Math.imul(m,tt)|0,o=(o=o+Math.imul(m,et)|0)+Math.imul(g,tt)|0,s=s+Math.imul(g,et)|0;var Mt=(f+(n=n+Math.imul(l,it)|0)|0)+((8191&(o=(o=o+Math.imul(l,nt)|0)+Math.imul(d,it)|0))<<13)|0;f=((s=s+Math.imul(d,nt)|0)+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,F),o=(o=Math.imul(P,W))+Math.imul(I,F)|0,s=Math.imul(I,W),n=n+Math.imul(A,K)|0,o=(o=o+Math.imul(A,Z)|0)+Math.imul(x,K)|0,s=s+Math.imul(x,Z)|0,n=n+Math.imul(k,J)|0,o=(o=o+Math.imul(k,Y)|0)+Math.imul(E,J)|0,s=s+Math.imul(E,Y)|0,n=n+Math.imul(_,X)|0,o=(o=o+Math.imul(_,Q)|0)+Math.imul(M,X)|0,s=s+Math.imul(M,Q)|0,n=n+Math.imul(b,tt)|0,o=(o=o+Math.imul(b,et)|0)+Math.imul(y,tt)|0,s=s+Math.imul(y,et)|0,n=n+Math.imul(m,it)|0,o=(o=o+Math.imul(m,nt)|0)+Math.imul(g,it)|0,s=s+Math.imul(g,nt)|0;var St=(f+(n=n+Math.imul(l,st)|0)|0)+((8191&(o=(o=o+Math.imul(l,at)|0)+Math.imul(d,st)|0))<<13)|0;f=((s=s+Math.imul(d,at)|0)+(o>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(O,F),o=(o=Math.imul(O,W))+Math.imul(B,F)|0,s=Math.imul(B,W),n=n+Math.imul(P,K)|0,o=(o=o+Math.imul(P,Z)|0)+Math.imul(I,K)|0,s=s+Math.imul(I,Z)|0,n=n+Math.imul(A,J)|0,o=(o=o+Math.imul(A,Y)|0)+Math.imul(x,J)|0,s=s+Math.imul(x,Y)|0,n=n+Math.imul(k,X)|0,o=(o=o+Math.imul(k,Q)|0)+Math.imul(E,X)|0,s=s+Math.imul(E,Q)|0,n=n+Math.imul(_,tt)|0,o=(o=o+Math.imul(_,et)|0)+Math.imul(M,tt)|0,s=s+Math.imul(M,et)|0,n=n+Math.imul(b,it)|0,o=(o=o+Math.imul(b,nt)|0)+Math.imul(y,it)|0,s=s+Math.imul(y,nt)|0,n=n+Math.imul(m,st)|0,o=(o=o+Math.imul(m,at)|0)+Math.imul(g,st)|0,s=s+Math.imul(g,at)|0;var kt=(f+(n=n+Math.imul(l,ut)|0)|0)+((8191&(o=(o=o+Math.imul(l,ft)|0)+Math.imul(d,ut)|0))<<13)|0;f=((s=s+Math.imul(d,ft)|0)+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(C,F),o=(o=Math.imul(C,W))+Math.imul(U,F)|0,s=Math.imul(U,W),n=n+Math.imul(O,K)|0,o=(o=o+Math.imul(O,Z)|0)+Math.imul(B,K)|0,s=s+Math.imul(B,Z)|0,n=n+Math.imul(P,J)|0,o=(o=o+Math.imul(P,Y)|0)+Math.imul(I,J)|0,s=s+Math.imul(I,Y)|0,n=n+Math.imul(A,X)|0,o=(o=o+Math.imul(A,Q)|0)+Math.imul(x,X)|0,s=s+Math.imul(x,Q)|0,n=n+Math.imul(k,tt)|0,o=(o=o+Math.imul(k,et)|0)+Math.imul(E,tt)|0,s=s+Math.imul(E,et)|0,n=n+Math.imul(_,it)|0,o=(o=o+Math.imul(_,nt)|0)+Math.imul(M,it)|0,s=s+Math.imul(M,nt)|0,n=n+Math.imul(b,st)|0,o=(o=o+Math.imul(b,at)|0)+Math.imul(y,st)|0,s=s+Math.imul(y,at)|0,n=n+Math.imul(m,ut)|0,o=(o=o+Math.imul(m,ft)|0)+Math.imul(g,ut)|0,s=s+Math.imul(g,ft)|0;var Et=(f+(n=n+Math.imul(l,lt)|0)|0)+((8191&(o=(o=o+Math.imul(l,dt)|0)+Math.imul(d,lt)|0))<<13)|0;f=((s=s+Math.imul(d,dt)|0)+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(q,F),o=(o=Math.imul(q,W))+Math.imul(D,F)|0,s=Math.imul(D,W),n=n+Math.imul(C,K)|0,o=(o=o+Math.imul(C,Z)|0)+Math.imul(U,K)|0,s=s+Math.imul(U,Z)|0,n=n+Math.imul(O,J)|0,o=(o=o+Math.imul(O,Y)|0)+Math.imul(B,J)|0,s=s+Math.imul(B,Y)|0,n=n+Math.imul(P,X)|0,o=(o=o+Math.imul(P,Q)|0)+Math.imul(I,X)|0,s=s+Math.imul(I,Q)|0,n=n+Math.imul(A,tt)|0,o=(o=o+Math.imul(A,et)|0)+Math.imul(x,tt)|0,s=s+Math.imul(x,et)|0,n=n+Math.imul(k,it)|0,o=(o=o+Math.imul(k,nt)|0)+Math.imul(E,it)|0,s=s+Math.imul(E,nt)|0,n=n+Math.imul(_,st)|0,o=(o=o+Math.imul(_,at)|0)+Math.imul(M,st)|0,s=s+Math.imul(M,at)|0,n=n+Math.imul(b,ut)|0,o=(o=o+Math.imul(b,ft)|0)+Math.imul(y,ut)|0,s=s+Math.imul(y,ft)|0,n=n+Math.imul(m,lt)|0,o=(o=o+Math.imul(m,dt)|0)+Math.imul(g,lt)|0,s=s+Math.imul(g,dt)|0;var Rt=(f+(n=n+Math.imul(l,mt)|0)|0)+((8191&(o=(o=o+Math.imul(l,gt)|0)+Math.imul(d,mt)|0))<<13)|0;f=((s=s+Math.imul(d,gt)|0)+(o>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(q,K),o=(o=Math.imul(q,Z))+Math.imul(D,K)|0,s=Math.imul(D,Z),n=n+Math.imul(C,J)|0,o=(o=o+Math.imul(C,Y)|0)+Math.imul(U,J)|0,s=s+Math.imul(U,Y)|0,n=n+Math.imul(O,X)|0,o=(o=o+Math.imul(O,Q)|0)+Math.imul(B,X)|0,s=s+Math.imul(B,Q)|0,n=n+Math.imul(P,tt)|0,o=(o=o+Math.imul(P,et)|0)+Math.imul(I,tt)|0,s=s+Math.imul(I,et)|0,n=n+Math.imul(A,it)|0,o=(o=o+Math.imul(A,nt)|0)+Math.imul(x,it)|0,s=s+Math.imul(x,nt)|0,n=n+Math.imul(k,st)|0,o=(o=o+Math.imul(k,at)|0)+Math.imul(E,st)|0,s=s+Math.imul(E,at)|0,n=n+Math.imul(_,ut)|0,o=(o=o+Math.imul(_,ft)|0)+Math.imul(M,ut)|0,s=s+Math.imul(M,ft)|0,n=n+Math.imul(b,lt)|0,o=(o=o+Math.imul(b,dt)|0)+Math.imul(y,lt)|0,s=s+Math.imul(y,dt)|0;var At=(f+(n=n+Math.imul(m,mt)|0)|0)+((8191&(o=(o=o+Math.imul(m,gt)|0)+Math.imul(g,mt)|0))<<13)|0;f=((s=s+Math.imul(g,gt)|0)+(o>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(q,J),o=(o=Math.imul(q,Y))+Math.imul(D,J)|0,s=Math.imul(D,Y),n=n+Math.imul(C,X)|0,o=(o=o+Math.imul(C,Q)|0)+Math.imul(U,X)|0,s=s+Math.imul(U,Q)|0,n=n+Math.imul(O,tt)|0,o=(o=o+Math.imul(O,et)|0)+Math.imul(B,tt)|0,s=s+Math.imul(B,et)|0,n=n+Math.imul(P,it)|0,o=(o=o+Math.imul(P,nt)|0)+Math.imul(I,it)|0,s=s+Math.imul(I,nt)|0,n=n+Math.imul(A,st)|0,o=(o=o+Math.imul(A,at)|0)+Math.imul(x,st)|0,s=s+Math.imul(x,at)|0,n=n+Math.imul(k,ut)|0,o=(o=o+Math.imul(k,ft)|0)+Math.imul(E,ut)|0,s=s+Math.imul(E,ft)|0,n=n+Math.imul(_,lt)|0,o=(o=o+Math.imul(_,dt)|0)+Math.imul(M,lt)|0,s=s+Math.imul(M,dt)|0;var xt=(f+(n=n+Math.imul(b,mt)|0)|0)+((8191&(o=(o=o+Math.imul(b,gt)|0)+Math.imul(y,mt)|0))<<13)|0;f=((s=s+Math.imul(y,gt)|0)+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(q,X),o=(o=Math.imul(q,Q))+Math.imul(D,X)|0,s=Math.imul(D,Q),n=n+Math.imul(C,tt)|0,o=(o=o+Math.imul(C,et)|0)+Math.imul(U,tt)|0,s=s+Math.imul(U,et)|0,n=n+Math.imul(O,it)|0,o=(o=o+Math.imul(O,nt)|0)+Math.imul(B,it)|0,s=s+Math.imul(B,nt)|0,n=n+Math.imul(P,st)|0,o=(o=o+Math.imul(P,at)|0)+Math.imul(I,st)|0,s=s+Math.imul(I,at)|0,n=n+Math.imul(A,ut)|0,o=(o=o+Math.imul(A,ft)|0)+Math.imul(x,ut)|0,s=s+Math.imul(x,ft)|0,n=n+Math.imul(k,lt)|0,o=(o=o+Math.imul(k,dt)|0)+Math.imul(E,lt)|0,s=s+Math.imul(E,dt)|0;var Tt=(f+(n=n+Math.imul(_,mt)|0)|0)+((8191&(o=(o=o+Math.imul(_,gt)|0)+Math.imul(M,mt)|0))<<13)|0;f=((s=s+Math.imul(M,gt)|0)+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(q,tt),o=(o=Math.imul(q,et))+Math.imul(D,tt)|0,s=Math.imul(D,et),n=n+Math.imul(C,it)|0,o=(o=o+Math.imul(C,nt)|0)+Math.imul(U,it)|0,s=s+Math.imul(U,nt)|0,n=n+Math.imul(O,st)|0,o=(o=o+Math.imul(O,at)|0)+Math.imul(B,st)|0,s=s+Math.imul(B,at)|0,n=n+Math.imul(P,ut)|0,o=(o=o+Math.imul(P,ft)|0)+Math.imul(I,ut)|0,s=s+Math.imul(I,ft)|0,n=n+Math.imul(A,lt)|0,o=(o=o+Math.imul(A,dt)|0)+Math.imul(x,lt)|0,s=s+Math.imul(x,dt)|0;var Pt=(f+(n=n+Math.imul(k,mt)|0)|0)+((8191&(o=(o=o+Math.imul(k,gt)|0)+Math.imul(E,mt)|0))<<13)|0;f=((s=s+Math.imul(E,gt)|0)+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(q,it),o=(o=Math.imul(q,nt))+Math.imul(D,it)|0,s=Math.imul(D,nt),n=n+Math.imul(C,st)|0,o=(o=o+Math.imul(C,at)|0)+Math.imul(U,st)|0,s=s+Math.imul(U,at)|0,n=n+Math.imul(O,ut)|0,o=(o=o+Math.imul(O,ft)|0)+Math.imul(B,ut)|0,s=s+Math.imul(B,ft)|0,n=n+Math.imul(P,lt)|0,o=(o=o+Math.imul(P,dt)|0)+Math.imul(I,lt)|0,s=s+Math.imul(I,dt)|0;var It=(f+(n=n+Math.imul(A,mt)|0)|0)+((8191&(o=(o=o+Math.imul(A,gt)|0)+Math.imul(x,mt)|0))<<13)|0;f=((s=s+Math.imul(x,gt)|0)+(o>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(q,st),o=(o=Math.imul(q,at))+Math.imul(D,st)|0,s=Math.imul(D,at),n=n+Math.imul(C,ut)|0,o=(o=o+Math.imul(C,ft)|0)+Math.imul(U,ut)|0,s=s+Math.imul(U,ft)|0,n=n+Math.imul(O,lt)|0,o=(o=o+Math.imul(O,dt)|0)+Math.imul(B,lt)|0,s=s+Math.imul(B,dt)|0;var Lt=(f+(n=n+Math.imul(P,mt)|0)|0)+((8191&(o=(o=o+Math.imul(P,gt)|0)+Math.imul(I,mt)|0))<<13)|0;f=((s=s+Math.imul(I,gt)|0)+(o>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(q,ut),o=(o=Math.imul(q,ft))+Math.imul(D,ut)|0,s=Math.imul(D,ft),n=n+Math.imul(C,lt)|0,o=(o=o+Math.imul(C,dt)|0)+Math.imul(U,lt)|0,s=s+Math.imul(U,dt)|0;var Ot=(f+(n=n+Math.imul(O,mt)|0)|0)+((8191&(o=(o=o+Math.imul(O,gt)|0)+Math.imul(B,mt)|0))<<13)|0;f=((s=s+Math.imul(B,gt)|0)+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(q,lt),o=(o=Math.imul(q,dt))+Math.imul(D,lt)|0,s=Math.imul(D,dt);var Bt=(f+(n=n+Math.imul(C,mt)|0)|0)+((8191&(o=(o=o+Math.imul(C,gt)|0)+Math.imul(U,mt)|0))<<13)|0;f=((s=s+Math.imul(U,gt)|0)+(o>>>13)|0)+(Bt>>>26)|0,Bt&=67108863;var jt=(f+(n=Math.imul(q,mt))|0)+((8191&(o=(o=Math.imul(q,gt))+Math.imul(D,mt)|0))<<13)|0;return f=((s=Math.imul(D,gt))+(o>>>13)|0)+(jt>>>26)|0,jt&=67108863,u[0]=vt,u[1]=bt,u[2]=yt,u[3]=wt,u[4]=_t,u[5]=Mt,u[6]=St,u[7]=kt,u[8]=Et,u[9]=Rt,u[10]=At,u[11]=xt,u[12]=Tt,u[13]=Pt,u[14]=It,u[15]=Lt,u[16]=Ot,u[17]=Bt,u[18]=jt,0!==f&&(u[19]=f,i.length++),i};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(d=l),o.prototype.mulTo=function t(e,r){var i=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,r):i<63?l(this,e,r):i<1024?function n(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,e,r):p(this,e,r)},m.prototype.makeRBT=function t(e){for(var r=new Array(e),i=o.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function t(e,r,i,n,o,s){for(var a=0;a>>=1)o++;return 1<>>=13,n[2*a+1]=8191&s,s>>>=13;for(a=2*r;a>=26,r+=o/67108864|0,r+=s>>>26,this.words[n]=67108863&s}return 0!==r&&(this.words[n]=r,this.length++),this},o.prototype.muln=function t(e){return this.clone().imuln(e)},o.prototype.sqr=function t(){return this.mul(this)},o.prototype.isqr=function t(){return this.imul(this.clone())},o.prototype.pow=function t(e){var r=function i(t){for(var e=new Array(t.bitLength()),r=0;r>>n}return e}(e);if(0===r.length)return new o(1);for(var n=this,s=0;s=0);var r,n=e%26,o=(e-n)/26,s=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(r=0;r>>26-n}a&&(this.words[r]=a,this.length++)}if(0!==o){for(r=this.length-1;r>=0;r--)this.words[r+o]=this.words[r];for(r=0;r=0),o=r?(r-r%26)/26:0;var s=e%26,a=Math.min((e-s)/26,this.length),h=67108863^67108863>>>s<a)for(this.length-=a,f=0;f=0&&(0!==c||f>=o);f--){var l=0|this.words[f];this.words[f]=c<<26-s|l>>>s,c=l&h}return u&&0!==c&&(u.words[u.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function t(e,r,n){return i(0===this.negative),this.iushrn(e,r,n)},o.prototype.shln=function t(e){return this.clone().ishln(e)},o.prototype.ushln=function t(e){return this.clone().iushln(e)},o.prototype.shrn=function t(e){return this.clone().ishrn(e)},o.prototype.ushrn=function t(e){return this.clone().iushrn(e)},o.prototype.testn=function t(e){i("number"==typeof e&&e>=0);var r=e%26,n=(e-r)/26,o=1<=0);var r=e%26,n=(e-r)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==r&&n++,this.length=Math.min(n,this.length),0!==r){var o=67108863^67108863>>>r<=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function t(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var r=0;r>26)-(u/67108864|0),this.words[o+n]=67108863&s}for(;o>26,this.words[o+n]=67108863&s;if(0===h)return this.strip();for(i(-1===h),h=0,o=0;o>26,this.words[o]=67108863&s;return this.negative=1,this.strip()},o.prototype._wordDiv=function t(e,r){var i=(this.length,e.length),n=this.clone(),s=e,a=0|s.words[s.length-1];0!==(i=26-this._countBits(a))&&(s=s.ushln(i),n.iushln(i),a=0|s.words[s.length-1]);var h,u=n.length-s.length;if("mod"!==r){(h=new o(null)).length=u+1,h.words=new Array(h.length);for(var f=0;f=0;l--){var d=67108864*(0|n.words[s.length+l])+(0|n.words[s.length+l-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(s,d,l);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(s,1,l),n.isZero()||(n.negative^=1);h&&(h.words[l]=d)}return h&&h.strip(),n.strip(),"div"!==r&&0!==i&&n.iushrn(i),{div:h||null,mod:n}},o.prototype.divmod=function t(e,r,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(h=this.neg().divmod(e,r),"mod"!==r&&(s=h.div.neg()),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:s,mod:a}):0===this.negative&&0!==e.negative?(h=this.divmod(e.neg(),r),"mod"!==r&&(s=h.div.neg()),{div:s,mod:h.mod}):0!=(this.negative&e.negative)?(h=this.neg().divmod(e.neg(),r),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:h.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===r?{div:this.divn(e.words[0]),mod:null}:"mod"===r?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,r);var s,a,h},o.prototype.div=function t(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function t(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function t(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function t(e){var r=this.divmod(e);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(e):r.mod,n=e.ushrn(1),o=e.andln(1),s=i.cmp(n);return s<0||1===o&&0===s?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function t(e){i(e<=67108863);for(var r=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(r*n+(0|this.words[o]))%e;return n},o.prototype.idivn=function t(e){i(e<=67108863);for(var r=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*r;this.words[n]=o/e|0,r=o%e}return this.strip()},o.prototype.divn=function t(e){return this.clone().idivn(e)},o.prototype.egcd=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s=new o(1),a=new o(0),h=new o(0),u=new o(1),f=0;r.isEven()&&n.isEven();)r.iushrn(1),n.iushrn(1),++f;for(var c=n.clone(),l=r.clone();!r.isZero();){for(var d=0,p=1;0==(r.words[0]&p)&&d<26;++d,p<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(c),a.isub(l)),s.iushrn(1),a.iushrn(1);for(var m=0,g=1;0==(n.words[0]&g)&&m<26;++m,g<<=1);if(m>0)for(n.iushrn(m);m-- >0;)(h.isOdd()||u.isOdd())&&(h.iadd(c),u.isub(l)),h.iushrn(1),u.iushrn(1);r.cmp(n)>=0?(r.isub(n),s.isub(h),a.isub(u)):(n.isub(r),h.isub(s),u.isub(a))}return{a:h,b:u,gcd:n.iushln(f)}},o.prototype._invmp=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s,a=new o(1),h=new o(0),u=n.clone();r.cmpn(1)>0&&n.cmpn(1)>0;){for(var f=0,c=1;0==(r.words[0]&c)&&f<26;++f,c<<=1);if(f>0)for(r.iushrn(f);f-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var l=0,d=1;0==(n.words[0]&d)&&l<26;++l,d<<=1);if(l>0)for(n.iushrn(l);l-- >0;)h.isOdd()&&h.iadd(u),h.iushrn(1);r.cmp(n)>=0?(r.isub(n),a.isub(h)):(n.isub(r),h.isub(a))}return(s=0===r.cmpn(1)?a:h).cmpn(0)<0&&s.iadd(e),s},o.prototype.gcd=function t(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var r=this.clone(),i=e.clone();r.negative=0,i.negative=0;for(var n=0;r.isEven()&&i.isEven();n++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var o=r.cmp(i);if(o<0){var s=r;r=i,i=s}else if(0===o||0===i.cmpn(1))break;r.isub(i)}return i.iushln(n)},o.prototype.invm=function t(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function t(){return 0==(1&this.words[0])},o.prototype.isOdd=function t(){return 1==(1&this.words[0])},o.prototype.andln=function t(e){return this.words[0]&e},o.prototype.bincn=function t(e){i("number"==typeof e);var r=e%26,n=(e-r)/26,o=1<>>26,h&=67108863,this.words[a]=h}return 0!==s&&(this.words[a]=s,this.length++),this},o.prototype.isZero=function t(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function t(e){var r,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)r=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var o=0|this.words[0];r=o===e?0:oe.length)return 1;if(this.length=0;i--){var n=0|this.words[i],o=0|e.words[i];if(n!==o){no&&(r=1);break}}return r},o.prototype.gtn=function t(e){return 1===this.cmpn(e)},o.prototype.gt=function t(e){return 1===this.cmp(e)},o.prototype.gten=function t(e){return this.cmpn(e)>=0},o.prototype.gte=function t(e){return this.cmp(e)>=0},o.prototype.ltn=function t(e){return-1===this.cmpn(e)},o.prototype.lt=function t(e){return-1===this.cmp(e)},o.prototype.lten=function t(e){return this.cmpn(e)<=0},o.prototype.lte=function t(e){return this.cmp(e)<=0},o.prototype.eqn=function t(e){return 0===this.cmpn(e)},o.prototype.eq=function t(e){return 0===this.cmp(e)},o.red=function t(e){return new M(e)},o.prototype.toRed=function t(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function t(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function t(e){return this.red=e,this},o.prototype.forceRed=function t(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function t(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function t(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function t(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function t(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function t(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function t(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function t(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function t(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function t(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function t(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function t(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function M(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function S(t){M.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function t(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function t(e){var r,i=e;do{this.split(i,this.tmp),r=(i=(i=this.imulK(i)).iadd(this.tmp)).bitLength()}while(r>this.n);var n=r0?i.isub(this.p):void 0!==i.strip?i.strip():i._strip(),i},v.prototype.split=function t(e,r){e.iushrn(this.n,0,r)},v.prototype.imulK=function t(e){return e.imul(this.k)},n(b,v),b.prototype.split=function t(e,r){for(var i=4194303,n=Math.min(e.length,9),o=0;o>>22,s=a}s>>>=22,e.words[o-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function t(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var r=0,i=0;i>>=26,e.words[i]=o,r=n}return 0!==r&&(e.words[e.length++]=r),e},o._prime=function t(e){if(g[e])return g[e];var t;if("k256"===e)t=new b;else if("p224"===e)t=new y;else if("p192"===e)t=new w;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new _}return g[e]=t,t},M.prototype._verify1=function t(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},M.prototype._verify2=function t(e,r){i(0==(e.negative|r.negative),"red works only with positives"),i(e.red&&e.red===r.red,"red works only with red numbers")},M.prototype.imod=function t(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},M.prototype.neg=function t(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},M.prototype.add=function t(e,r){this._verify2(e,r);var i=e.add(r);return i.cmp(this.m)>=0&&i.isub(this.m),i._forceRed(this)},M.prototype.iadd=function t(e,r){this._verify2(e,r);var i=e.iadd(r);return i.cmp(this.m)>=0&&i.isub(this.m),i},M.prototype.sub=function t(e,r){this._verify2(e,r);var i=e.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},M.prototype.isub=function t(e,r){this._verify2(e,r);var i=e.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},M.prototype.shl=function t(e,r){return this._verify1(e),this.imod(e.ushln(r))},M.prototype.imul=function t(e,r){return this._verify2(e,r),this.imod(e.imul(r))},M.prototype.mul=function t(e,r){return this._verify2(e,r),this.imod(e.mul(r))},M.prototype.isqr=function t(e){return this.imul(e,e.clone())},M.prototype.sqr=function t(e){return this.mul(e,e)},M.prototype.sqrt=function t(e){if(e.isZero())return e.clone();var r=this.m.andln(3);if(i(r%2==1),3===r){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var s=this.m.subn(1),a=0;!s.isZero()&&0===s.andln(1);)a++,s.iushrn(1);i(!s.isZero());var h=new o(1).toRed(this),u=h.redNeg(),f=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);0!==this.pow(c,f).cmp(u);)c.redIAdd(u);for(var l=this.pow(c,s),d=this.pow(e,s.addn(1).iushrn(1)),p=this.pow(e,s),m=a;0!==p.cmp(h);){for(var g=p,v=0;0!==g.cmp(h);v++)g=g.redSqr();i(v=0;n--){for(var f=r.words[n],c=u-1;c>=0;c--){var l=f>>c&1;s!==i[0]&&(s=this.sqr(s)),0!==l||0!==a?(a<<=1,a|=l,(4===++h||0===n&&0===c)&&(s=this.mul(s,i[a]),h=0,a=0)):h=0}u=26}return s},M.prototype.convertTo=function t(e){var r=e.umod(this.m);return r===e?r.clone():r},M.prototype.convertFrom=function t(e){var r=e.clone();return r.red=null,r},o.mont=function t(e){return new S(e)},n(S,M),S.prototype.convertTo=function t(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function t(e){var r=this.imod(e.mul(this.rinv));return r.red=null,r},S.prototype.imul=function t(e,r){if(e.isZero()||r.isZero())return e.words[0]=0,e.length=1,e;var i=e.imul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=i.isub(n).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},S.prototype.mul=function t(e,r){if(e.isZero()||r.isZero())return new o(0)._forceRed(this);var i=e.mul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=i.isub(n).iushrn(this.shift),a=s;return s.cmp(this.m)>=0?a=s.isub(this.m):s.cmpn(0)<0&&(a=s.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function t(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(28)(t))},function(t,e){},function(t,e,r){e.publicEncrypt=r(374),e.privateDecrypt=r(376),e.privateEncrypt=function t(r,i){return e.publicEncrypt(r,i,!0)},e.publicDecrypt=function t(r,i){return e.privateDecrypt(r,i,!0)}},function(t,e,r){var i=r(65),n=r(31),o=r(43),s=r(194),a=r(195),h=r(111),u=r(196),f=r(101),c=r(66).Buffer;t.exports=function t(e,r,l){var d;d=e.padding?e.padding:l?1:4;var p,m=i(e);if(4===d)p=function g(t,e){var r=t.modulus.byteLength(),i=e.length,u=o("sha1").update(c.alloc(0)).digest(),f=u.length,l=2*f;if(i>r-l-2)throw new Error("message too long");var d=c.alloc(r-i-l-2),p=r-f-1,m=n(f),g=a(c.concat([u,d,c.alloc(1,1),e],p),s(m,p)),v=a(m,s(g,f));return new h(c.concat([c.alloc(1),v,g],r))}(m,r);else if(1===d)p=function v(t,e,r){var i,o=e.length,s=t.modulus.byteLength();if(o>s-11)throw new Error("message too long");i=r?c.alloc(s-o-3,255):function a(t){var e,r=c.allocUnsafe(t),i=0,o=n(2*t),s=0;for(;i=0)throw new Error("data too long for modulus")}return l?f(p,m):u(p,m)}},function(t,e){},function(t,e,r){var i=r(65),n=r(194),o=r(195),s=r(111),a=r(101),h=r(43),u=r(196),f=r(66).Buffer;t.exports=function t(e,r,c){var l;l=e.padding?e.padding:c?1:4;var d,p=i(e),m=p.modulus.byteLength();if(r.length>m||new s(r).cmp(p.modulus)>=0)throw new Error("decryption error");d=c?u(new s(r),p):a(r,p);var g=f.alloc(m-d.length);if(d=f.concat([g,d],m),4===l)return function v(t,e){var r=t.modulus.byteLength(),i=h("sha1").update(f.alloc(0)).digest(),s=i.length;if(0!==e[0])throw new Error("decryption error");var a=e.slice(1,s+1),u=e.slice(s+1),c=o(a,n(u,s)),l=o(u,n(c,r-s-1));if(function d(t,e){t=f.from(t),e=f.from(e);var r=0,i=t.length;t.length!==e.length&&(r++,i=Math.min(t.length,e.length));var n=-1;for(;++n=e.length){o++;break}var s=e.slice(2,n-1);("0002"!==i.toString("hex")&&!r||"0001"!==i.toString("hex")&&r)&&o++;s.length<8&&o++;if(o)throw new Error("decryption error");return e.slice(n)}(0,d,c);if(3===l)return d;throw new Error("unknown padding")}},function(t,e,r){"use strict";(function(t,i){function n(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}var o=r(2),s=r(31),a=o.Buffer,h=o.kMaxLength,u=t.crypto||t.msCrypto,f=Math.pow(2,32)-1;function c(t,e){if("number"!=typeof t||t!=t)throw new TypeError("offset must be a number");if(t>f||t<0)throw new TypeError("offset must be a uint32");if(t>h||t>e)throw new RangeError("offset out of range")}function l(t,e,r){if("number"!=typeof t||t!=t)throw new TypeError("size must be a number");if(t>f||t<0)throw new TypeError("size must be a uint32");if(t+e>r||t>h)throw new RangeError("buffer too small")}function d(t,e,r,n){if(i.browser){var o=t.buffer,a=new Uint8Array(o,e,r);return u.getRandomValues(a),n?void i.nextTick((function(){n(null,t)})):t}if(!n)return s(r).copy(t,e),t;s(r,(function(r,i){if(r)return n(r);i.copy(t,e),n(null,t)}))}u&&u.getRandomValues||!i.browser?(e.randomFill=function p(e,r,i,n){if(!(a.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof r)n=r,r=0,i=e.length;else if("function"==typeof i)n=i,i=e.length-r;else if("function"!=typeof n)throw new TypeError('"cb" argument must be a function');return c(r,e.length),l(i,r,e.length),d(e,r,i,n)},e.randomFillSync=function m(e,r,i){void 0===r&&(r=0);if(!(a.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');c(r,e.length),void 0===i&&(i=e.length-r);return l(i,r,e.length),d(e,r,i)}):(e.randomFill=n,e.randomFillSync=n)}).call(this,r(5),r(4))},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function i(t){var e=t.jws,r=t.KeyUtil,i=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,h=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){n.Log.debug("JoseUtil.parseJwt");try{var i=e.JWS.parse(r);return{header:i.headerObj,payload:i.payloadObj}}catch(t){n.Log.error(t)}},t.validateJwt=function e(o,s,h,u,f,c,l){n.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return n.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var d=a(s.x5c[0]);s=i.getPublicKeyFromCertHex(d)}else{if("EC"!==s.kty)return n.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return n.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,h,u,f,c,l)}catch(t){return n.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,i,o,s,a,h){s||(s=0),a||(a=parseInt(Date.now()/1e3));var u=t.parseJwt(r).payload;if(!u.iss)return n.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(u.iss!==i)return n.Log.error("JoseUtil._validateJwt: Invalid issuer in token",u.iss),Promise.reject(new Error("Invalid issuer in token: "+u.iss));if(!u.aud)return n.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(u.aud===o||Array.isArray(u.aud)&&u.aud.indexOf(o)>=0))return n.Log.error("JoseUtil._validateJwt: Invalid audience in token",u.aud),Promise.reject(new Error("Invalid audience in token: "+u.aud));if(u.azp&&u.azp!==o)return n.Log.error("JoseUtil._validateJwt: Invalid azp in token",u.azp),Promise.reject(new Error("Invalid azp in token: "+u.azp));if(!h){var f=a+s,c=a-s;if(!u.iat)return n.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(f1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var i=n.UrlUtility.parseUrlFragment(e,r);this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.code=i.code,this.state=i.state,this.id_token=i.id_token,this.session_state=i.session_state,this.access_token=i.access_token,this.token_type=i.token_type,this.scope=i.scope,this.profile=void 0,this.expires_in=i.expires_in}return i(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var i=parseInt(Date.now()/1e3);this.expires_at=i+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var i=r(0),n=r(48),o=r(113);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,h=e.data,u=e.extraQueryParams,f=e.request_type;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw i.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var l in s&&(r=n.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=n.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),h&&(this.state=new o.State({data:h,request_type:f}),r=n.UrlUtility.addQueryParam(r,"state",this.state.id))),u)r=n.UrlUtility.addQueryParam(r,l,u[l]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var i=r(48);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var n=i.UrlUtility.parseUrlFragment(e,"?");this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.state=n.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l.TokenRevocationClient,c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:d.TokenClient,v=arguments.length>5&&void 0!==arguments[5]?arguments[5]:p.JoseUtil;m(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var b=g(this,t.call(this,r));return b._events=new h.UserManagerEvents(r),b._silentRenewService=new i(b),b.settings.automaticSilentRenew&&(n.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),b.startSilentRenew()),b.settings.monitorSession&&(n.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),b._sessionMonitor=new o(b)),b._tokenRevocationClient=new a(b._settings),b._tokenClient=new c(b._settings),b._joseUtil=v,b}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(n.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(n.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){n.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){n.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?n.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinPopup: no sub")),t}))):(n.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){n.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(n.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var i=Promise.resolve();return t.id_token&&(i=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),i.then((function(){return n.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(n.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(n.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var i=this;return this._metadataService.getIssuer().then((function(t){return i.settings.getEpochTime().then((function(o){return i._joseUtil.validateJwtAttributes(r,t,i._settings.client_id,i._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinSilent: no sub")),t}))):(n.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var i=t.state;t.response;return"si:r"===i.request_type?r.signinRedirectCallback(e):"si:p"===i.request_type?r.signinPopupCallback(e):"si:s"===i.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var i=this;return this.readSignoutResponseState(e).then((function(t){var n=t.state,o=t.response;return n?"so:r"===n.request_type?i.signoutRedirectCallback(e):"so:p"===n.request_type?i.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var i=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return i?(r.redirect_uri=i,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:i,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(n.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return n.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};n.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return n.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(n.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,n).then((function(t){return i._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return n.Log.debug("UserManager._signinStart: got navigator window handle"),i.createSigninRequest(e).then((function(e){return n.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(n.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){n.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(i.current_sub){if(i.current_sub!==e.profile.sub)return n.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));n.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return n.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){n.Log.debug("UserManager._signinCallback");var i="query"===this._settings.response_mode||!this._settings.response_mode&&c.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,i)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var i={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,i).then((function(){n.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return n.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){n.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){n.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,n).then((function(t){return i._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,i=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return i.prepare(o).then((function(t){return n.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(i){return n.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(i):Promise.resolve()).then((function(){var s=e.id_token_hint||i&&i.id_token;return s&&(n.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return n.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return n.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(n.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return n.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return n.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){n.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){n.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var i=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return i._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||n.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(n.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(n.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){n.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return n.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},i(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=r.popup_redirect_uri,n=r.popup_post_logout_redirect_uri,d=r.popupWindowFeatures,p=r.popupWindowTarget,m=r.silent_redirect_uri,g=r.silentRequestTimeout,v=r.automaticSilentRenew,b=void 0!==v&&v,y=r.validateSubOnSilentRenew,w=void 0!==y&&y,_=r.includeIdTokenInSilentRenew,M=void 0===_||_,S=r.monitorSession,k=void 0===S||S,E=r.monitorAnonymousSession,R=void 0!==E&&E,A=r.checkSessionInterval,x=void 0===A?2e3:A,T=r.stopCheckSessionOnError,P=void 0===T||T,I=r.query_status_response_type,L=r.revokeAccessTokenOnSignout,O=void 0!==L&&L,B=r.accessTokenExpiringNotificationTime,j=void 0===B?60:B,C=r.redirectNavigator,U=void 0===C?new o.RedirectNavigator:C,N=r.popupNavigator,q=void 0===N?new s.PopupNavigator:N,D=r.iframeNavigator,z=void 0===D?new a.IFrameNavigator:D,F=r.userStore,W=void 0===F?new h.WebStorageStateStore({store:u.Global.sessionStorage}):F;c(this,e);var H=l(this,t.call(this,arguments[0]));return H._popup_redirect_uri=i,H._popup_post_logout_redirect_uri=n,H._popupWindowFeatures=d,H._popupWindowTarget=p,H._silent_redirect_uri=m,H._silentRequestTimeout=g,H._automaticSilentRenew=b,H._validateSubOnSilentRenew=w,H._includeIdTokenInSilentRenew=M,H._accessTokenExpiringNotificationTime=j,H._monitorSession=k,H._monitorAnonymousSession=R,H._checkSessionInterval=x,H._stopCheckSessionOnError=P,I?H._query_status_response_type=I:arguments[0]&&arguments[0].response_type?H._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":H._query_status_response_type="id_token",H._revokeAccessTokenOnSignout=O,H._redirectNavigator=U,H._popupNavigator=q,H._iframeNavigator=z,H._userStore=W,H}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),i(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(n.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var i=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];i.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),n&&this._userLoaded.raise(r)},e.prototype.unload=function e(){i.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){i.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){i.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){i.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){i.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(n.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var i=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=h(this,t.call(this,r));return s._timer=i,s._nowFunc=n||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)n.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),n.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var i=5;e=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function g(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return K(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return q(t).length;default:if(n)return K(t).length;e=(""+e).toLowerCase(),n=!0}}function d(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return I(this,e,r);case"utf8":case"utf-8":return A(this,e,r);case"ascii":return T(this,e,r);case"latin1":case"binary":return R(this,e,r);case"base64":return x(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return D(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function v(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function y(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function c(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var h=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var f=!0,l=0;li&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function x(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function A(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+f<=r)switch(f){case 1:c<128&&(h=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(h=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(h=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(h=u)}null===h?(h=65533,f=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=f}return function l(t){var e=t.length;if(e<=C)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n0&&(r=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(r+=" ... ")),""},u.prototype.compare=function t(e,r,n,i,o){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(this===e)return 0;for(var s=(o>>>=0)-(i>>>=0),a=(n>>>=0)-(r>>>=0),c=Math.min(s,a),h=this.slice(i,o),f=e.slice(r,n),l=0;lo)&&(n=o),e.length>0&&(n<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var s=!1;;)switch(i){case"hex":return _(this,e,r,n);case"utf8":case"utf-8":return S(this,e,r,n);case"ascii":return b(this,e,r,n);case"latin1":case"binary":return w(this,e,r,n);case"base64":return F(this,e,r,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,r,n);default:if(s)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),s=!0}},u.prototype.toJSON=function t(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var C=4096;function T(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function O(t,e,r,n,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function N(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function j(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function U(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function B(t,e,r,n,o){return o||U(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function M(t,e,r,n,o){return o||U(t,0,r,8),i.write(t,e,r,n,52,8),r+8}u.prototype.slice=function t(e,r){var n,i=this.length;if((e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(r=void 0===r?i:~~r)<0?(r+=i)<0&&(r=0):r>i&&(r=i),r0&&(o*=256);)i+=this[e+--r]*o;return i},u.prototype.readUInt8=function t(e,r){return r||L(e,1,this.length),this[e]},u.prototype.readUInt16LE=function t(e,r){return r||L(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function t(e,r){return r||L(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function t(e,r){return r||L(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function t(e,r){return r||L(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function t(e,r,n){e|=0,r|=0,n||L(e,r,this.length);for(var i=this[e],o=1,s=0;++s=(o*=128)&&(i-=Math.pow(2,8*r)),i},u.prototype.readIntBE=function t(e,r,n){e|=0,r|=0,n||L(e,r,this.length);for(var i=r,o=1,s=this[e+--i];i>0&&(o*=256);)s+=this[e+--i]*o;return s>=(o*=128)&&(s-=Math.pow(2,8*r)),s},u.prototype.readInt8=function t(e,r){return r||L(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function t(e,r){r||L(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function t(e,r){r||L(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function t(e,r){return r||L(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function t(e,r){return r||L(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function t(e,r){return r||L(e,4,this.length),i.read(this,e,!0,23,4)},u.prototype.readFloatBE=function t(e,r){return r||L(e,4,this.length),i.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function t(e,r){return r||L(e,8,this.length),i.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function t(e,r){return r||L(e,8,this.length),i.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function t(e,r,n,i){(e=+e,r|=0,n|=0,i)||O(this,e,r,n,Math.pow(2,8*n)-1,0);var o=1,s=0;for(this[r]=255&e;++s=0&&(s*=256);)this[r+o]=e/s&255;return r+n},u.prototype.writeUInt8=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},u.prototype.writeUInt16LE=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):N(this,e,r,!0),r+2},u.prototype.writeUInt16BE=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):N(this,e,r,!1),r+2},u.prototype.writeUInt32LE=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):j(this,e,r,!0),r+4},u.prototype.writeUInt32BE=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):j(this,e,r,!1),r+4},u.prototype.writeIntLE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);O(this,e,r,n,o-1,-o)}var s=0,a=1,u=0;for(this[r]=255&e;++s>0)-u&255;return r+n},u.prototype.writeIntBE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);O(this,e,r,n,o-1,-o)}var s=n-1,a=1,u=0;for(this[r+s]=255&e;--s>=0&&(a*=256);)e<0&&0===u&&0!==this[r+s+1]&&(u=1),this[r+s]=(e/a>>0)-u&255;return r+n},u.prototype.writeInt8=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},u.prototype.writeInt16LE=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):N(this,e,r,!0),r+2},u.prototype.writeInt16BE=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):N(this,e,r,!1),r+2},u.prototype.writeInt32LE=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):j(this,e,r,!0),r+4},u.prototype.writeInt32BE=function t(e,r,n){return e=+e,r|=0,n||O(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):j(this,e,r,!1),r+4},u.prototype.writeFloatLE=function t(e,r,n){return B(this,e,r,!0,n)},u.prototype.writeFloatBE=function t(e,r,n){return B(this,e,r,!1,n)},u.prototype.writeDoubleLE=function t(e,r,n){return M(this,e,r,!0,n)},u.prototype.writeDoubleBE=function t(e,r,n){return M(this,e,r,!1,n)},u.prototype.copy=function t(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r=0;--o)e[o+r]=this[o+n];else if(s<1e3||!u.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(s=r;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function q(t){return n.toByteArray(function e(t){if((t=function e(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(H,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function J(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(57))},function(t,e,r){"use strict";e.byteLength=function n(t){var e=l(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function i(t){var e,r,n=l(t),i=n[0],o=n[1],s=new u(function c(t,e,r){return 3*(e+r)/4-r}(0,i,o)),h=0,f=o>0?i-4:i;for(r=0;r>16&255,s[h++]=e>>8&255,s[h++]=255&e;2===o&&(e=a[t.charCodeAt(r)]<<2|a[t.charCodeAt(r+1)]>>4,s[h++]=255&e);1===o&&(e=a[t.charCodeAt(r)]<<10|a[t.charCodeAt(r+1)]<<4|a[t.charCodeAt(r+2)]>>2,s[h++]=e>>8&255,s[h++]=255&e);return s},e.fromByteArray=function o(t){for(var e,r=t.length,n=r%3,i=[],o=16383,a=0,u=r-n;au?u:a+o));1===n?(e=t[r-1],i.push(s[e>>2]+s[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],i.push(s[e>>10]+s[e>>4&63]+s[e<<2&63]+"="));return i.join("")};for(var s=[],a=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,f=c.length;h0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function p(t,e,r){for(var n,i,o=[],a=e;a>18&63]+s[i>>12&63]+s[i>>6&63]+s[63&i]);return o.join("")}a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},function(t,e){ /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ -e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,u=(1<>1,h=-7,f=r?i-1:0,l=r?-1:1,p=t[e+f];for(f+=l,o=p&(1<<-h)-1,p>>=-h,h+=a;h>0;o=256*o+t[e+f],f+=l,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+t[e+f],f+=l,h-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=c}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,h=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,g=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+f>=1?l/u:l*Math.pow(2,1-f))*u>=2&&(s++,u/=2),s+f>=h?(a=0,s=h):s+f>=1?(a=(e*u-1)*Math.pow(2,i),s+=f):(a=e*Math.pow(2,f-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=g,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=g,s/=256,c-=8);t[r+p-g]|=128*d}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(t){var e=t.jws,r=t.KeyUtil,n=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){i.Log.debug("JoseUtil.parseJwt");try{var n=e.JWS.parse(r);return{header:n.headerObj,payload:n.payloadObj}}catch(t){i.Log.error(t)}},t.validateJwt=function e(o,s,u,c,h,f,l){i.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return i.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var p=a(s.x5c[0]);s=n.getPublicKeyFromCertHex(p)}else{if("EC"!==s.kty)return i.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return i.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,u,c,h,f,l)}catch(t){return i.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,n,o,s,a,u){s||(s=0),a||(a=parseInt(Date.now()/1e3));var c=t.parseJwt(r).payload;if(!c.iss)return i.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(c.iss!==n)return i.Log.error("JoseUtil._validateJwt: Invalid issuer in token",c.iss),Promise.reject(new Error("Invalid issuer in token: "+c.iss));if(!c.aud)return i.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(c.aud===o||Array.isArray(c.aud)&&c.aud.indexOf(o)>=0))return i.Log.error("JoseUtil._validateJwt: Invalid audience in token",c.aud),Promise.reject(new Error("Invalid audience in token: "+c.aud));if(c.azp&&c.azp!==o)return i.Log.error("JoseUtil._validateJwt: Invalid azp in token",c.azp),Promise.reject(new Error("Invalid azp in token: "+c.azp));if(!u){var h=a+s,f=a-s;if(!c.iat)return i.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(h1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var n=i.UrlUtility.parseUrlFragment(e,r);this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.code=n.code,this.state=n.state,this.id_token=n.id_token,this.session_state=n.session_state,this.access_token=n.access_token,this.token_type=n.token_type,this.scope=n.scope,this.profile=void 0,this.expires_in=n.expires_in}return n(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(0),i=r(20),o=r(55);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,u=e.data,c=e.extraQueryParams,h=e.request_type;if(function f(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var l in s&&(r=i.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=i.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),u&&(this.state=new o.State({data:u,request_type:h}),r=i.UrlUtility.addQueryParam(r,"state",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,l,c[l]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(20);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=n.UrlUtility.parseUrlFragment(e,"?");this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.state=i.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l.TokenRevocationClient,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:p.TokenClient,y=arguments.length>5&&void 0!==arguments[5]?arguments[5]:g.JoseUtil;d(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var m=v(this,t.call(this,r));return m._events=new u.UserManagerEvents(r),m._silentRenewService=new n(m),m.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),m.startSilentRenew()),m.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),m._sessionMonitor=new o(m)),m._tokenRevocationClient=new a(m._settings),m._tokenClient=new f(m._settings),m._joseUtil=y,m}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(i.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(i.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){i.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){i.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t}))):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){i.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then((function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var n=this;return this._metadataService.getIssuer().then((function(t){return n.settings.getEpochTime().then((function(o){return n._joseUtil.validateJwtAttributes(r,t,n._settings.client_id,n._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t}))):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var n=t.state;t.response;return"si:r"===n.request_type?r.signinRedirectCallback(e):"si:p"===n.request_type?r.signinPopupCallback(e):"si:s"===n.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var n=this;return this.readSignoutResponseState(e).then((function(t){var i=t.state,o=t.response;return i?"so:r"===i.request_type?n.signoutRedirectCallback(e):"so:p"===i.request_type?n.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var n=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(r.redirect_uri=n,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:n,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,i).then((function(t){return n._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return i.Log.debug("UserManager._signinStart: got navigator window handle"),n.createSigninRequest(e).then((function(e){return i.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){i.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(n.current_sub){if(n.current_sub!==e.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return i.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){i.Log.debug("UserManager._signinCallback");var n="query"===this._settings.response_mode||!this._settings.response_mode&&f.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,n)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then((function(){i.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){i.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){i.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,i).then((function(t){return n._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,n=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(o).then((function(t){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(n){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(n):Promise.resolve()).then((function(){var s=e.id_token_hint||n&&n.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return i.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var n=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return n._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){i.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,p=r.popupWindowFeatures,g=r.popupWindowTarget,d=r.silent_redirect_uri,v=r.silentRequestTimeout,y=r.automaticSilentRenew,m=void 0!==y&&y,_=r.validateSubOnSilentRenew,S=void 0!==_&&_,b=r.includeIdTokenInSilentRenew,w=void 0===b||b,F=r.monitorSession,E=void 0===F||F,x=r.monitorAnonymousSession,A=void 0!==x&&x,k=r.checkSessionInterval,P=void 0===k?2e3:k,C=r.stopCheckSessionOnError,T=void 0===C||C,R=r.query_status_response_type,I=r.revokeAccessTokenOnSignout,D=void 0!==I&&I,L=r.accessTokenExpiringNotificationTime,O=void 0===L?60:L,N=r.redirectNavigator,j=void 0===N?new o.RedirectNavigator:N,U=r.popupNavigator,B=void 0===U?new s.PopupNavigator:U,M=r.iframeNavigator,H=void 0===M?new a.IFrameNavigator:M,V=r.userStore,K=void 0===V?new u.WebStorageStateStore({store:c.Global.sessionStorage}):V;f(this,e);var q=l(this,t.call(this,arguments[0]));return q._popup_redirect_uri=n,q._popup_post_logout_redirect_uri=i,q._popupWindowFeatures=p,q._popupWindowTarget=g,q._silent_redirect_uri=d,q._silentRequestTimeout=v,q._automaticSilentRenew=m,q._validateSubOnSilentRenew=S,q._includeIdTokenInSilentRenew=w,q._accessTokenExpiringNotificationTime=O,q._monitorSession=E,q._monitorAnonymousSession=A,q._checkSessionInterval=P,q._stopCheckSessionOnError=T,R?q._query_status_response_type=R:arguments[0]&&arguments[0].response_type?q._query_status_response_type=h.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":q._query_status_response_type="id_token",q._revokeAccessTokenOnSignout=D,q._redirectNavigator=j,q._popupNavigator=B,q._iframeNavigator=H,q._userStore=K,q}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),n(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),i&&this._userLoaded.raise(r)},e.prototype.unload=function e(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){n.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=u(this,t.call(this,r));return s._timer=n,s._nowFunc=i||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var n=5;e>1,h=-7,f=r?i-1:0,l=r?-1:1,p=t[e+f];for(f+=l,o=p&(1<<-h)-1,p>>=-h,h+=a;h>0;o=256*o+t[e+f],f+=l,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+t[e+f],f+=l,h-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=c}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,h=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,g=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+f>=1?l/u:l*Math.pow(2,1-f))*u>=2&&(s++,u/=2),s+f>=h?(a=0,s=h):s+f>=1?(a=(e*u-1)*Math.pow(2,i),s+=f):(a=e*Math.pow(2,f-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=g,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=g,s/=256,c-=8);t[r+p-g]|=128*d}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(t){var e=t.jws,r=t.KeyUtil,n=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){i.Log.debug("JoseUtil.parseJwt");try{var n=e.JWS.parse(r);return{header:n.headerObj,payload:n.payloadObj}}catch(t){i.Log.error(t)}},t.validateJwt=function e(o,s,u,c,h,f,l){i.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return i.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var p=a(s.x5c[0]);s=n.getPublicKeyFromCertHex(p)}else{if("EC"!==s.kty)return i.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return i.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,u,c,h,f,l)}catch(t){return i.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,n,o,s,a,u){s||(s=0),a||(a=parseInt(Date.now()/1e3));var c=t.parseJwt(r).payload;if(!c.iss)return i.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(c.iss!==n)return i.Log.error("JoseUtil._validateJwt: Invalid issuer in token",c.iss),Promise.reject(new Error("Invalid issuer in token: "+c.iss));if(!c.aud)return i.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(c.aud===o||Array.isArray(c.aud)&&c.aud.indexOf(o)>=0))return i.Log.error("JoseUtil._validateJwt: Invalid audience in token",c.aud),Promise.reject(new Error("Invalid audience in token: "+c.aud));if(c.azp&&c.azp!==o)return i.Log.error("JoseUtil._validateJwt: Invalid azp in token",c.azp),Promise.reject(new Error("Invalid azp in token: "+c.azp));if(!u){var h=a+s,f=a-s;if(!c.iat)return i.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(h1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var n=i.UrlUtility.parseUrlFragment(e,r);this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.code=n.code,this.state=n.state,this.id_token=n.id_token,this.session_state=n.session_state,this.access_token=n.access_token,this.token_type=n.token_type,this.scope=n.scope,this.profile=void 0,this.expires_in=n.expires_in}return n(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(0),i=r(20),o=r(55);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,u=e.data,c=e.extraQueryParams,h=e.request_type;if(function f(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var l in s&&(r=i.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=i.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),u&&(this.state=new o.State({data:u,request_type:h}),r=i.UrlUtility.addQueryParam(r,"state",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,l,c[l]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(20);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=n.UrlUtility.parseUrlFragment(e,"?");this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.state=i.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l.TokenRevocationClient,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:p.TokenClient,y=arguments.length>5&&void 0!==arguments[5]?arguments[5]:g.JoseUtil;d(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var m=v(this,t.call(this,r));return m._events=new u.UserManagerEvents(r),m._silentRenewService=new n(m),m.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),m.startSilentRenew()),m.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),m._sessionMonitor=new o(m)),m._tokenRevocationClient=new a(m._settings),m._tokenClient=new f(m._settings),m._joseUtil=y,m}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(i.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(i.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){i.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){i.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t}))):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){i.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then((function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var n=this;return this._metadataService.getIssuer().then((function(t){return n.settings.getEpochTime().then((function(o){return n._joseUtil.validateJwtAttributes(r,t,n._settings.client_id,n._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t}))):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var n=t.state;t.response;return"si:r"===n.request_type?r.signinRedirectCallback(e):"si:p"===n.request_type?r.signinPopupCallback(e):"si:s"===n.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var n=this;return this.readSignoutResponseState(e).then((function(t){var i=t.state,o=t.response;return i?"so:r"===i.request_type?n.signoutRedirectCallback(e):"so:p"===i.request_type?n.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var n=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(r.redirect_uri=n,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:n,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,i).then((function(t){return n._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return i.Log.debug("UserManager._signinStart: got navigator window handle"),n.createSigninRequest(e).then((function(e){return i.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){i.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(n.current_sub){if(n.current_sub!==e.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return i.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){i.Log.debug("UserManager._signinCallback");var n="query"===this._settings.response_mode||!this._settings.response_mode&&f.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,n)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then((function(){i.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){i.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){i.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,i).then((function(t){return n._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,n=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(o).then((function(t){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(n){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(n):Promise.resolve()).then((function(){var s=e.id_token_hint||n&&n.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return i.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var n=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return n._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){i.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,p=r.popupWindowFeatures,g=r.popupWindowTarget,d=r.silent_redirect_uri,v=r.silentRequestTimeout,y=r.automaticSilentRenew,m=void 0!==y&&y,_=r.validateSubOnSilentRenew,S=void 0!==_&&_,b=r.includeIdTokenInSilentRenew,w=void 0===b||b,F=r.monitorSession,E=void 0===F||F,x=r.monitorAnonymousSession,A=void 0!==x&&x,k=r.checkSessionInterval,P=void 0===k?2e3:k,C=r.stopCheckSessionOnError,T=void 0===C||C,R=r.query_status_response_type,I=r.revokeAccessTokenOnSignout,D=void 0!==I&&I,L=r.accessTokenExpiringNotificationTime,O=void 0===L?60:L,N=r.redirectNavigator,j=void 0===N?new o.RedirectNavigator:N,U=r.popupNavigator,B=void 0===U?new s.PopupNavigator:U,M=r.iframeNavigator,H=void 0===M?new a.IFrameNavigator:M,V=r.userStore,K=void 0===V?new u.WebStorageStateStore({store:c.Global.sessionStorage}):V;f(this,e);var q=l(this,t.call(this,arguments[0]));return q._popup_redirect_uri=n,q._popup_post_logout_redirect_uri=i,q._popupWindowFeatures=p,q._popupWindowTarget=g,q._silent_redirect_uri=d,q._silentRequestTimeout=v,q._automaticSilentRenew=m,q._validateSubOnSilentRenew=S,q._includeIdTokenInSilentRenew=w,q._accessTokenExpiringNotificationTime=O,q._monitorSession=E,q._monitorAnonymousSession=A,q._checkSessionInterval=P,q._stopCheckSessionOnError=T,R?q._query_status_response_type=R:arguments[0]&&arguments[0].response_type?q._query_status_response_type=h.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":q._query_status_response_type="id_token",q._revokeAccessTokenOnSignout=D,q._redirectNavigator=j,q._popupNavigator=B,q._iframeNavigator=H,q._userStore=K,q}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),n(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),i&&this._userLoaded.raise(r)},e.prototype.unload=function e(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){n.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=u(this,t.call(this,r));return s._timer=n,s._nowFunc=i||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var n=5;e=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function d(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return K(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return q(t).length;default:if(n)return K(t).length;e=(""+e).toLowerCase(),n=!0}}function p(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return I(this,e,r);case"utf8":case"utf-8":return A(this,e,r);case"ascii":return T(this,e,r);case"latin1":case"binary":return R(this,e,r);case"base64":return x(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return D(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function v(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function y(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function c(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var h=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var l=!0,f=0;fi&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function x(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function A(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+l<=r)switch(l){case 1:c<128&&(h=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(h=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(h=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(h=u)}null===h?(h=65533,l=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=l}return function f(t){var e=t.length;if(e<=C)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n0&&(r=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(r+=" ... ")),""},u.prototype.compare=function t(e,r,n,i,o){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(this===e)return 0;for(var s=(o>>>=0)-(i>>>=0),a=(n>>>=0)-(r>>>=0),c=Math.min(s,a),h=this.slice(i,o),l=e.slice(r,n),f=0;fo)&&(n=o),e.length>0&&(n<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var s=!1;;)switch(i){case"hex":return _(this,e,r,n);case"utf8":case"utf-8":return S(this,e,r,n);case"ascii":return b(this,e,r,n);case"latin1":case"binary":return w(this,e,r,n);case"base64":return F(this,e,r,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,r,n);default:if(s)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),s=!0}},u.prototype.toJSON=function t(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var C=4096;function T(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function N(t,e,r,n,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function U(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function B(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function O(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(t,e,r,n,o){return o||O(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function M(t,e,r,n,o){return o||O(t,0,r,8),i.write(t,e,r,n,52,8),r+8}u.prototype.slice=function t(e,r){var n,i=this.length;if((e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(r=void 0===r?i:~~r)<0?(r+=i)<0&&(r=0):r>i&&(r=i),r0&&(o*=256);)i+=this[e+--r]*o;return i},u.prototype.readUInt8=function t(e,r){return r||L(e,1,this.length),this[e]},u.prototype.readUInt16LE=function t(e,r){return r||L(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function t(e,r){return r||L(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function t(e,r){return r||L(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function t(e,r){return r||L(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function t(e,r,n){e|=0,r|=0,n||L(e,r,this.length);for(var i=this[e],o=1,s=0;++s=(o*=128)&&(i-=Math.pow(2,8*r)),i},u.prototype.readIntBE=function t(e,r,n){e|=0,r|=0,n||L(e,r,this.length);for(var i=r,o=1,s=this[e+--i];i>0&&(o*=256);)s+=this[e+--i]*o;return s>=(o*=128)&&(s-=Math.pow(2,8*r)),s},u.prototype.readInt8=function t(e,r){return r||L(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function t(e,r){r||L(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function t(e,r){r||L(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function t(e,r){return r||L(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function t(e,r){return r||L(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function t(e,r){return r||L(e,4,this.length),i.read(this,e,!0,23,4)},u.prototype.readFloatBE=function t(e,r){return r||L(e,4,this.length),i.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function t(e,r){return r||L(e,8,this.length),i.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function t(e,r){return r||L(e,8,this.length),i.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function t(e,r,n,i){(e=+e,r|=0,n|=0,i)||N(this,e,r,n,Math.pow(2,8*n)-1,0);var o=1,s=0;for(this[r]=255&e;++s=0&&(s*=256);)this[r+o]=e/s&255;return r+n},u.prototype.writeUInt8=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},u.prototype.writeUInt16LE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):U(this,e,r,!0),r+2},u.prototype.writeUInt16BE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):U(this,e,r,!1),r+2},u.prototype.writeUInt32LE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):B(this,e,r,!0),r+4},u.prototype.writeUInt32BE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):B(this,e,r,!1),r+4},u.prototype.writeIntLE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);N(this,e,r,n,o-1,-o)}var s=0,a=1,u=0;for(this[r]=255&e;++s>0)-u&255;return r+n},u.prototype.writeIntBE=function t(e,r,n,i){if(e=+e,r|=0,!i){var o=Math.pow(2,8*n-1);N(this,e,r,n,o-1,-o)}var s=n-1,a=1,u=0;for(this[r+s]=255&e;--s>=0&&(a*=256);)e<0&&0===u&&0!==this[r+s+1]&&(u=1),this[r+s]=(e/a>>0)-u&255;return r+n},u.prototype.writeInt8=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},u.prototype.writeInt16LE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):U(this,e,r,!0),r+2},u.prototype.writeInt16BE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):U(this,e,r,!1),r+2},u.prototype.writeInt32LE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):B(this,e,r,!0),r+4},u.prototype.writeInt32BE=function t(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):B(this,e,r,!1),r+4},u.prototype.writeFloatLE=function t(e,r,n){return j(this,e,r,!0,n)},u.prototype.writeFloatBE=function t(e,r,n){return j(this,e,r,!1,n)},u.prototype.writeDoubleLE=function t(e,r,n){return M(this,e,r,!0,n)},u.prototype.writeDoubleBE=function t(e,r,n){return M(this,e,r,!1,n)},u.prototype.copy=function t(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r=0;--o)e[o+r]=this[o+n];else if(s<1e3||!u.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(s=r;s55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function q(t){return n.toByteArray(function e(t){if((t=function e(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(H,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function J(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(29))},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){"use strict";e.byteLength=function n(t){var e=f(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function i(t){var e,r,n=f(t),i=n[0],o=n[1],s=new u(function c(t,e,r){return 3*(e+r)/4-r}(0,i,o)),h=0,l=o>0?i-4:i;for(r=0;r>16&255,s[h++]=e>>8&255,s[h++]=255&e;2===o&&(e=a[t.charCodeAt(r)]<<2|a[t.charCodeAt(r+1)]>>4,s[h++]=255&e);1===o&&(e=a[t.charCodeAt(r)]<<10|a[t.charCodeAt(r+1)]<<4|a[t.charCodeAt(r+2)]>>2,s[h++]=e>>8&255,s[h++]=255&e);return s},e.fromByteArray=function o(t){for(var e,r=t.length,n=r%3,i=[],o=16383,a=0,u=r-n;au?u:a+o));1===n?(e=t[r-1],i.push(s[e>>2]+s[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],i.push(s[e>>10]+s[e>>4&63]+s[e<<2&63]+"="));return i.join("")};for(var s=[],a=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,l=c.length;h0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function g(t,e,r){for(var n,i,o=[],a=e;a>18&63]+s[i>>12&63]+s[i>>6&63]+s[63&i]);return o.join("")}a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},function(t,e){ /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ -e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,u=(1<>1,h=-7,l=r?i-1:0,f=r?-1:1,g=t[e+l];for(l+=f,o=g&(1<<-h)-1,g>>=-h,h+=a;h>0;o=256*o+t[e+l],l+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+t[e+l],l+=f,h-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(g?-1:1);s+=Math.pow(2,n),o-=c}return(g?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,g=n?0:o-1,d=n?1:-1,p=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+l>=1?f/u:f*Math.pow(2,1-l))*u>=2&&(s++,u/=2),s+l>=h?(a=0,s=h):s+l>=1?(a=(e*u-1)*Math.pow(2,i),s+=l):(a=e*Math.pow(2,l-1)*Math.pow(2,i),s=0));i>=8;t[r+g]=255&a,g+=d,a/=256,i-=8);for(s=s<0;t[r+g]=255&s,g+=d,s/=256,c-=8);t[r+g-d]|=128*p}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(t){var e=t.jws,r=t.KeyUtil,n=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){i.Log.debug("JoseUtil.parseJwt");try{var n=e.JWS.parse(r);return{header:n.headerObj,payload:n.payloadObj}}catch(t){i.Log.error(t)}},t.validateJwt=function e(o,s,u,c,h,l,f){i.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return i.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var g=a(s.x5c[0]);s=n.getPublicKeyFromCertHex(g)}else{if("EC"!==s.kty)return i.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return i.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,u,c,h,l,f)}catch(t){return i.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,n,o,s,a,u){s||(s=0),a||(a=parseInt(Date.now()/1e3));var c=t.parseJwt(r).payload;if(!c.iss)return i.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(c.iss!==n)return i.Log.error("JoseUtil._validateJwt: Invalid issuer in token",c.iss),Promise.reject(new Error("Invalid issuer in token: "+c.iss));if(!c.aud)return i.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(c.aud===o||Array.isArray(c.aud)&&c.aud.indexOf(o)>=0))return i.Log.error("JoseUtil._validateJwt: Invalid audience in token",c.aud),Promise.reject(new Error("Invalid audience in token: "+c.aud));if(c.azp&&c.azp!==o)return i.Log.error("JoseUtil._validateJwt: Invalid azp in token",c.azp),Promise.reject(new Error("Invalid azp in token: "+c.azp));if(!u){var h=a+s,l=a-s;if(!c.iat)return i.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(h1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var n=i.UrlUtility.parseUrlFragment(e,r);this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.code=n.code,this.state=n.state,this.id_token=n.id_token,this.session_state=n.session_state,this.access_token=n.access_token,this.token_type=n.token_type,this.scope=n.scope,this.profile=void 0,this.expires_in=n.expires_in}return n(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(0),i=r(3),o=r(9);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,u=e.data,c=e.extraQueryParams,h=e.request_type;if(function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var f in s&&(r=i.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=i.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),u&&(this.state=new o.State({data:u,request_type:h}),r=i.UrlUtility.addQueryParam(r,"state",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,f,c[f]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(3);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=n.UrlUtility.parseUrlFragment(e,"?");this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.state=i.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:f.TokenRevocationClient,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:g.TokenClient,y=arguments.length>5&&void 0!==arguments[5]?arguments[5]:d.JoseUtil;p(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var m=v(this,t.call(this,r));return m._events=new u.UserManagerEvents(r),m._silentRenewService=new n(m),m.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),m.startSilentRenew()),m.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),m._sessionMonitor=new o(m)),m._tokenRevocationClient=new a(m._settings),m._tokenClient=new l(m._settings),m._joseUtil=y,m}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(i.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(i.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){i.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){i.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t}))):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){i.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then((function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var n=this;return this._metadataService.getIssuer().then((function(t){return n.settings.getEpochTime().then((function(o){return n._joseUtil.validateJwtAttributes(r,t,n._settings.client_id,n._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t}))):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var n=t.state;t.response;return"si:r"===n.request_type?r.signinRedirectCallback(e):"si:p"===n.request_type?r.signinPopupCallback(e):"si:s"===n.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var n=this;return this.readSignoutResponseState(e).then((function(t){var i=t.state,o=t.response;return i?"so:r"===i.request_type?n.signoutRedirectCallback(e):"so:p"===i.request_type?n.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var n=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(r.redirect_uri=n,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:n,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,i).then((function(t){return n._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return i.Log.debug("UserManager._signinStart: got navigator window handle"),n.createSigninRequest(e).then((function(e){return i.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){i.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(n.current_sub){if(n.current_sub!==e.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return i.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){i.Log.debug("UserManager._signinCallback");var n="query"===this._settings.response_mode||!this._settings.response_mode&&l.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,n)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then((function(){i.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){i.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){i.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,i).then((function(t){return n._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,n=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(o).then((function(t){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(n){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(n):Promise.resolve()).then((function(){var s=e.id_token_hint||n&&n.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return i.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var n=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return n._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){i.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,g=r.popupWindowFeatures,d=r.popupWindowTarget,p=r.silent_redirect_uri,v=r.silentRequestTimeout,y=r.automaticSilentRenew,m=void 0!==y&&y,_=r.validateSubOnSilentRenew,S=void 0!==_&&_,b=r.includeIdTokenInSilentRenew,w=void 0===b||b,F=r.monitorSession,E=void 0===F||F,x=r.monitorAnonymousSession,A=void 0!==x&&x,k=r.checkSessionInterval,P=void 0===k?2e3:k,C=r.stopCheckSessionOnError,T=void 0===C||C,R=r.query_status_response_type,I=r.revokeAccessTokenOnSignout,D=void 0!==I&&I,L=r.accessTokenExpiringNotificationTime,N=void 0===L?60:L,U=r.redirectNavigator,B=void 0===U?new o.RedirectNavigator:U,O=r.popupNavigator,j=void 0===O?new s.PopupNavigator:O,M=r.iframeNavigator,H=void 0===M?new a.IFrameNavigator:M,V=r.userStore,K=void 0===V?new u.WebStorageStateStore({store:c.Global.sessionStorage}):V;l(this,e);var q=f(this,t.call(this,arguments[0]));return q._popup_redirect_uri=n,q._popup_post_logout_redirect_uri=i,q._popupWindowFeatures=g,q._popupWindowTarget=d,q._silent_redirect_uri=p,q._silentRequestTimeout=v,q._automaticSilentRenew=m,q._validateSubOnSilentRenew=S,q._includeIdTokenInSilentRenew=w,q._accessTokenExpiringNotificationTime=N,q._monitorSession=E,q._monitorAnonymousSession=A,q._checkSessionInterval=P,q._stopCheckSessionOnError=T,R?q._query_status_response_type=R:arguments[0]&&arguments[0].response_type?q._query_status_response_type=h.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":q._query_status_response_type="id_token",q._revokeAccessTokenOnSignout=D,q._redirectNavigator=B,q._popupNavigator=j,q._iframeNavigator=H,q._userStore=K,q}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),n(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),i&&this._userLoaded.raise(r)},e.prototype.unload=function e(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){n.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=u(this,t.call(this,r));return s._timer=n,s._nowFunc=i||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var n=5;e>1,h=-7,l=r?i-1:0,f=r?-1:1,g=t[e+l];for(l+=f,o=g&(1<<-h)-1,g>>=-h,h+=a;h>0;o=256*o+t[e+l],l+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+t[e+l],l+=f,h-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(g?-1:1);s+=Math.pow(2,n),o-=c}return(g?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,u,c=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,g=n?0:o-1,d=n?1:-1,p=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+l>=1?f/u:f*Math.pow(2,1-l))*u>=2&&(s++,u/=2),s+l>=h?(a=0,s=h):s+l>=1?(a=(e*u-1)*Math.pow(2,i),s+=l):(a=e*Math.pow(2,l-1)*Math.pow(2,i),s=0));i>=8;t[r+g]=255&a,g+=d,a/=256,i-=8);for(s=s<0;t[r+g]=255&s,g+=d,s/=256,c-=8);t[r+g-d]|=128*p}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(t){var e=t.jws,r=t.KeyUtil,n=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,u=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){i.Log.debug("JoseUtil.parseJwt");try{var n=e.JWS.parse(r);return{header:n.headerObj,payload:n.payloadObj}}catch(t){i.Log.error(t)}},t.validateJwt=function e(o,s,u,c,h,l,f){i.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return i.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var g=a(s.x5c[0]);s=n.getPublicKeyFromCertHex(g)}else{if("EC"!==s.kty)return i.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return i.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,u,c,h,l,f)}catch(t){return i.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,n,o,s,a,u){s||(s=0),a||(a=parseInt(Date.now()/1e3));var c=t.parseJwt(r).payload;if(!c.iss)return i.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(c.iss!==n)return i.Log.error("JoseUtil._validateJwt: Invalid issuer in token",c.iss),Promise.reject(new Error("Invalid issuer in token: "+c.iss));if(!c.aud)return i.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(c.aud===o||Array.isArray(c.aud)&&c.aud.indexOf(o)>=0))return i.Log.error("JoseUtil._validateJwt: Invalid audience in token",c.aud),Promise.reject(new Error("Invalid audience in token: "+c.aud));if(c.azp&&c.azp!==o)return i.Log.error("JoseUtil._validateJwt: Invalid azp in token",c.azp),Promise.reject(new Error("Invalid azp in token: "+c.azp));if(!u){var h=a+s,l=a-s;if(!c.iat)return i.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(h1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var n=i.UrlUtility.parseUrlFragment(e,r);this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.code=n.code,this.state=n.state,this.id_token=n.id_token,this.session_state=n.session_state,this.access_token=n.access_token,this.token_type=n.token_type,this.scope=n.scope,this.profile=void 0,this.expires_in=n.expires_in}return n(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var n=r(0),i=r(3),o=r(9);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,u=e.data,c=e.extraQueryParams,h=e.request_type;if(function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var f in s&&(r=i.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=i.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),u&&(this.state=new o.State({data:u,request_type:h}),r=i.UrlUtility.addQueryParam(r,"state",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,f,c[f]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var n=r(3);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=n.UrlUtility.parseUrlFragment(e,"?");this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.state=i.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:f.TokenRevocationClient,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:g.TokenClient,y=arguments.length>5&&void 0!==arguments[5]?arguments[5]:d.JoseUtil;p(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var m=v(this,t.call(this,r));return m._events=new u.UserManagerEvents(r),m._silentRenewService=new n(m),m.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),m.startSilentRenew()),m.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),m._sessionMonitor=new o(m)),m._tokenRevocationClient=new a(m._settings),m._tokenClient=new l(m._settings),m._joseUtil=y,m}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(i.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(i.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){i.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){i.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),t}))):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){i.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then((function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var n=this;return this._metadataService.getIssuer().then((function(t){return n.settings.getEpochTime().then((function(o){return n._joseUtil.validateJwtAttributes(r,t,n._settings.client_id,n._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),t}))):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var n=t.state;t.response;return"si:r"===n.request_type?r.signinRedirectCallback(e):"si:p"===n.request_type?r.signinPopupCallback(e):"si:s"===n.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var n=this;return this.readSignoutResponseState(e).then((function(t){var i=t.state,o=t.response;return i?"so:r"===i.request_type?n.signoutRedirectCallback(e):"so:p"===i.request_type?n.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var n=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return n?(r.redirect_uri=n,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:n,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,i).then((function(t){return n._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return i.Log.debug("UserManager._signinStart: got navigator window handle"),n.createSigninRequest(e).then((function(e){return i.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){i.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(n.current_sub){if(n.current_sub!==e.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return i.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){i.Log.debug("UserManager._signinCallback");var n="query"===this._settings.response_mode||!this._settings.response_mode&&l.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,n)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var n={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,n).then((function(){i.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return i.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){i.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){i.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,i).then((function(t){return n._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,n=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.prepare(o).then((function(t){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(n){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(n):Promise.resolve()).then((function(){var s=e.id_token_hint||n&&n.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return i.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return i.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var n=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return n._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){i.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,g=r.popupWindowFeatures,d=r.popupWindowTarget,p=r.silent_redirect_uri,v=r.silentRequestTimeout,y=r.automaticSilentRenew,m=void 0!==y&&y,_=r.validateSubOnSilentRenew,S=void 0!==_&&_,b=r.includeIdTokenInSilentRenew,w=void 0===b||b,F=r.monitorSession,E=void 0===F||F,x=r.monitorAnonymousSession,A=void 0!==x&&x,k=r.checkSessionInterval,P=void 0===k?2e3:k,C=r.stopCheckSessionOnError,T=void 0===C||C,R=r.query_status_response_type,I=r.revokeAccessTokenOnSignout,D=void 0!==I&&I,L=r.accessTokenExpiringNotificationTime,N=void 0===L?60:L,U=r.redirectNavigator,B=void 0===U?new o.RedirectNavigator:U,O=r.popupNavigator,j=void 0===O?new s.PopupNavigator:O,M=r.iframeNavigator,H=void 0===M?new a.IFrameNavigator:M,V=r.userStore,K=void 0===V?new u.WebStorageStateStore({store:c.Global.sessionStorage}):V;l(this,e);var q=f(this,t.call(this,arguments[0]));return q._popup_redirect_uri=n,q._popup_post_logout_redirect_uri=i,q._popupWindowFeatures=g,q._popupWindowTarget=d,q._silent_redirect_uri=p,q._silentRequestTimeout=v,q._automaticSilentRenew=m,q._validateSubOnSilentRenew=S,q._includeIdTokenInSilentRenew=w,q._accessTokenExpiringNotificationTime=N,q._monitorSession=E,q._monitorAnonymousSession=A,q._checkSessionInterval=P,q._stopCheckSessionOnError=T,R?q._query_status_response_type=R:arguments[0]&&arguments[0].response_type?q._query_status_response_type=h.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":q._query_status_response_type="id_token",q._revokeAccessTokenOnSignout=D,q._redirectNavigator=B,q._popupNavigator=j,q._iframeNavigator=H,q._userStore=K,q}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),n(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(i.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),i&&this._userLoaded.raise(r)},e.prototype.unload=function e(){n.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){n.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(i.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=u(this,t.call(this,r));return s._timer=n,s._nowFunc=i||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var n=5;e */ e.read=function(t,e,r,i,n){var o,s,a=8*n-i-1,h=(1<>1,f=-7,l=r?n-1:0,c=r?-1:1,d=t[e+l];for(l+=c,o=d&(1<<-f)-1,d>>=-f,f+=a;f>0;o=256*o+t[e+l],l+=c,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=i;f>0;s=256*s+t[e+l],l+=c,f-=8);if(0===o)o=1-u;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,i),o-=u}return(d?-1:1)*s*Math.pow(2,o-i)},e.write=function(t,e,r,i,n,o){var s,a,h,u=8*o-n-1,f=(1<>1,c=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=i?0:o-1,p=i?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+l>=1?c/h:c*Math.pow(2,1-l))*h>=2&&(s++,h/=2),s+l>=f?(a=0,s=f):s+l>=1?(a=(e*h-1)*Math.pow(2,n),s+=l):(a=e*Math.pow(2,l-1)*Math.pow(2,n),s=0));n>=8;t[r+d]=255&a,d+=p,a/=256,n-=8);for(s=s<0;t[r+d]=255&s,d+=p,s/=256,u-=8);t[r+d-p]|=128*m}},function(t,e){},function(t,e,r){"use strict";var i=r(2).Buffer,n=r(161);t.exports=function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t),this.head=null,this.tail=null,this.length=0}return t.prototype.push=function t(e){var r={data:e,next:null};this.length>0?this.tail.next=r:this.head=r,this.tail=r,++this.length},t.prototype.unshift=function t(e){var r={data:e,next:this.head};0===this.length&&(this.tail=r),this.head=r,++this.length},t.prototype.shift=function t(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},t.prototype.clear=function t(){this.head=this.tail=null,this.length=0},t.prototype.join=function t(e){if(0===this.length)return"";for(var r=this.head,i=""+r.data;r=r.next;)i+=e+r.data;return i},t.prototype.concat=function t(e){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var r,n,o,s=i.allocUnsafe(e>>>0),a=this.head,h=0;a;)r=a.data,n=s,o=h,r.copy(n,o),h+=a.data.length,a=a.next;return s},t}(),n&&n.inspect&&n.inspect.custom&&(t.exports.prototype[n.inspect.custom]=function(){var t=n.inspect({length:this.length});return this.constructor.name+" "+t})},function(t,e){},function(t,e,r){(function(t){var i=void 0!==t&&t||"undefined"!=typeof self&&self||window,n=Function.prototype.apply;function o(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new o(n.call(setTimeout,i,arguments),clearTimeout)},e.setInterval=function(){return new o(n.call(setInterval,i,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(i,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function e(){t._onTimeout&&t._onTimeout()}),e))},r(163),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,r(4))},function(t,e,r){(function(t,e){!function(t,r){"use strict";if(!t.setImmediate){var i,n=1,o={},s=!1,a=t.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(t);h=h&&h.setTimeout?h:t,"[object process]"==={}.toString.call(t.process)?function u(){i=function(t){e.nextTick((function(){v(t)}))}}():!function f(){if(t.postMessage&&!t.importScripts){var e=!0,r=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=r,e}}()?t.MessageChannel?function l(){var t=new MessageChannel;t.port1.onmessage=function(t){v(t.data)},i=function(e){t.port2.postMessage(e)}}():a&&"onreadystatechange"in a.createElement("script")?function c(){var t=a.documentElement;i=function(e){var r=a.createElement("script");r.onreadystatechange=function(){v(e),r.onreadystatechange=null,t.removeChild(r),r=null},t.appendChild(r)}}():function d(){i=function(t){setTimeout(v,0,t)}}():function p(){var e="setImmediate$"+Math.random()+"$",r=function(r){r.source===t&&"string"==typeof r.data&&0===r.data.indexOf(e)&&v(+r.data.slice(e.length))};t.addEventListener?t.addEventListener("message",r,!1):t.attachEvent("onmessage",r),i=function(r){t.postMessage(e+r,"*")}}(),h.setImmediate=function m(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),r=0;ra?e=t(e):e.length */ -var i=r(5),n=i.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function s(t,e,r){return n(t,e,r)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?t.exports=i:(o(i,e),e.Buffer=s),s.prototype=Object.create(n.prototype),o(n,s),s.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return n(t,e,r)},s.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=n(t);return void 0!==e?"string"==typeof r?i.fill(e,r):i.fill(e):i.fill(0),i},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i.SlowBuffer(t)}},function(t,e,r){var i=r(51),n=r(97),o=r(2).Buffer,s=r(98),a=r(11),h=r(34),u=r(35);function f(t,e,r){a.call(this),this._cache=new c,this._cipher=new h.AES(e),this._prev=o.from(r),this._mode=t,this._autopadding=!0}r(1)(f,a),f.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get();)r=this._mode.encrypt(this,e),i.push(r);return o.concat(i)};var l=o.alloc(16,16);function c(){this.cache=o.allocUnsafe(0)}function d(t,e,r){var a=i[t.toLowerCase()];if(!a)throw new TypeError("invalid suite type");if("string"==typeof e&&(e=o.from(e)),e.length!==a.key/8)throw new TypeError("invalid key length "+e.length);if("string"==typeof r&&(r=o.from(r)),"GCM"!==a.mode&&r.length!==a.iv)throw new TypeError("invalid iv length "+r.length);return"stream"===a.type?new s(a.module,e,r):"auth"===a.type?new n(a.module,e,r):new f(a.module,e,r)}f.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if(!t.equals(l))throw this._cipher.scrub(),new Error("data not multiple of block length")},f.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},c.prototype.add=function(t){this.cache=o.concat([this.cache,t])},c.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},c.prototype.flush=function(){for(var t=16-this.cache.length,e=o.allocUnsafe(t),r=-1;++r>s%8,t._prev=o(t._prev,r?i:n);return a}function o(t,e){var r=t.length,n=-1,o=i.allocUnsafe(t.length);for(t=i.concat([t,i.from([e])]);++n>7;return o}e.encrypt=function(t,e,r){for(var o=e.length,s=i.allocUnsafe(o),a=-1;++a>>0,0),e.writeUInt32BE(t[1]>>>0,4),e.writeUInt32BE(t[2]>>>0,8),e.writeUInt32BE(t[3]>>>0,12),e}function s(t){this.h=t,this.state=i.alloc(16,0),this.cache=i.allocUnsafe(0)}s.prototype.ghash=function(t){for(var e=-1;++e0;t--)r[t]=r[t]>>>1|(1&r[t-1])<<31;r[0]=r[0]>>>1,e&&(r[0]=r[0]^225<<24)}this.state=o(n)},s.prototype.update=function(t){var e;for(this.cache=i.concat([this.cache,t]);this.cache.length>=16;)e=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(e)},s.prototype.final=function(t,e){return this.cache.length&&this.ghash(i.concat([this.cache,n],16)),this.ghash(o([0,t,0,e])),this.state},t.exports=s},function(t,e,r){var i=r(97),n=r(2).Buffer,o=r(51),s=r(98),a=r(11),h=r(34),u=r(35);function f(t,e,r){a.call(this),this._cache=new l,this._last=void 0,this._cipher=new h.AES(e),this._prev=n.from(r),this._mode=t,this._autopadding=!0}function l(){this.cache=n.allocUnsafe(0)}function c(t,e,r){var a=o[t.toLowerCase()];if(!a)throw new TypeError("invalid suite type");if("string"==typeof r&&(r=n.from(r)),"GCM"!==a.mode&&r.length!==a.iv)throw new TypeError("invalid iv length "+r.length);if("string"==typeof e&&(e=n.from(e)),e.length!==a.key/8)throw new TypeError("invalid key length "+e.length);return"stream"===a.type?new s(a.module,e,r,!0):"auth"===a.type?new i(a.module,e,r,!0):new f(a.module,e,r)}r(1)(f,a),f.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get(this._autopadding);)r=this._mode.decrypt(this,e),i.push(r);return n.concat(i)},f.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return function e(t){var e=t[15];if(e<1||e>16)throw new Error("unable to decrypt data");var r=-1;for(;++r16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},l.prototype.flush=function(){if(this.cache.length)return this.cache},e.createDecipher=function d(t,e){var r=o[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var i=u(e,!1,r.key,r.iv);return c(t,i.key,i.iv)},e.createDecipheriv=c},function(t,e){e["des-ecb"]={key:8,iv:0},e["des-cbc"]=e.des={key:8,iv:8},e["des-ede3-cbc"]=e.des3={key:24,iv:8},e["des-ede3"]={key:24,iv:0},e["des-ede-cbc"]={key:16,iv:8},e["des-ede"]={key:16,iv:0}},function(t,e,r){(function(t){var i=r(99),n=r(193),o=r(194);var s={binary:!0,hex:!0,base64:!0};e.DiffieHellmanGroup=e.createDiffieHellmanGroup=e.getDiffieHellman=function a(e){var r=new t(n[e].prime,"hex"),i=new t(n[e].gen,"hex");return new o(r,i)},e.createDiffieHellman=e.DiffieHellman=function e(r,n,a,h){return t.isBuffer(n)||void 0===s[n]?e(r,"binary",n,a):(n=n||"binary",h=h||"binary",a=a||new t([2]),t.isBuffer(a)||(a=new t(a,h)),"number"==typeof r?new o(i(r,a),a,!0):(t.isBuffer(r)||(r=new t(r,n)),new o(r,a,!0)))}}).call(this,r(14).Buffer)},function(t,e){},function(t,e,r){(function(t){!function(t,e){"use strict";function i(t,e){if(!t)throw new Error(e||"Assertion failed")}function n(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){if(o.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var s;"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;try{s=r(191).Buffer}catch(t){}function a(t,e,r){for(var i=0,n=Math.min(t.length,r),o=e;o=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s=49?a-49+10:a>=17?a-17+10:a}return n}o.isBN=function t(e){return e instanceof o||null!==e&&"object"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function t(e,r){return e.cmp(r)>0?e:r},o.min=function t(e,r){return e.cmp(r)<0?e:r},o.prototype._init=function t(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"==typeof e)return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initNumber=function t(e,r,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initArray=function t(e,r,n){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[s]|=a<>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);else if("le"===n)for(o=0,s=0;o>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);return this.strip()},o.prototype._parseHex=function t(e,r){this.length=Math.ceil((e.length-r)/6),this.words=new Array(this.length);for(var i=0;i=r;i-=6)o=a(e,i,i+6),this.words[n]|=o<>>26-s&4194303,(s+=24)>=26&&(s-=26,n++);i+6!==r&&(o=a(e,r,i+6),this.words[n]|=o<>>26-s&4194303),this.strip()},o.prototype._parseBase=function t(e,r,i){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=r)n++;n--,o=o/r|0;for(var s=e.length-i,a=s%n,u=Math.min(s,s-a)+i,f=0,l=i;l1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function t(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function t(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function c(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u>>26,l=67108863&h,c=Math.min(u,e.length-1),d=Math.max(0,u-t.length+1);d<=c;d++){var p=u-d|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[d])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}o.prototype.toString=function t(e,r){var n;if(r=0|r||1,16===(e=e||10)||"hex"===e){n="";for(var o=0,s=0,a=0;a>>24-o&16777215)||a!==this.length-1?u[6-c.length]+c+n:c+n,(o+=2)>=26&&(o-=26,a--)}for(0!==s&&(n=s.toString(16)+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var d=f[e],p=l[e];n="";var m=this.clone();for(m.negative=0;!m.isZero();){var g=m.modn(p).toString(e);n=(m=m.idivn(p)).isZero()?g+n:u[d-g.length]+g+n}for(this.isZero()&&(n="0"+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function t(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function t(){return this.toString(16)},o.prototype.toBuffer=function t(e,r){return i(void 0!==s),this.toArrayLike(s,e,r)},o.prototype.toArray=function t(e,r){return this.toArrayLike(Array,e,r)},o.prototype.toArrayLike=function t(e,r,n){var o=this.byteLength(),s=n||Math.max(1,o);i(o<=s,"byte array longer than desired length"),i(s>0,"Requested array length <= 0"),this.strip();var a,h,u="le"===r,f=new e(s),l=this.clone();if(u){for(h=0;!l.isZero();h++)a=l.andln(255),l.iushrn(8),f[h]=a;for(;h=4096&&(i+=13,r>>>=13),r>=64&&(i+=7,r>>>=7),r>=8&&(i+=4,r>>>=4),r>=2&&(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function t(e){if(0===e)return 26;var r=e,i=0;return 0==(8191&r)&&(i+=13,r>>>=13),0==(127&r)&&(i+=7,r>>>=7),0==(15&r)&&(i+=4,r>>>=4),0==(3&r)&&(i+=2,r>>>=2),0==(1&r)&&i++,i},o.prototype.bitLength=function t(){var e=this.words[this.length-1],r=this._countBits(e);return 26*(this.length-1)+r},o.prototype.zeroBits=function t(){if(this.isZero())return 0;for(var e=0,r=0;re.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function t(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function t(e){var r;r=this.length>e.length?e:this;for(var i=0;ie.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function t(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function t(e){var r,i;this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function t(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function t(e){i("number"==typeof e&&e>=0);var r=0|Math.ceil(e/26),n=e%26;this._expand(r),n>0&&r--;for(var o=0;o0&&(this.words[o]=~this.words[o]&67108863>>26-n),this.strip()},o.prototype.notn=function t(e){return this.clone().inotn(e)},o.prototype.setn=function t(e,r){i("number"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=r?this.words[n]|1<e.length?(i=this,n=e):(i=e,n=this);for(var o=0,s=0;s>>26;for(;0!==o&&s>>26;if(this.length=i.length,0!==o)this.words[this.length]=o,this.length++;else if(i!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function t(e){if(0!==e.negative){e.negative=0;var r=this.iadd(e);return e.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var i,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(i=this,n=e):(i=e,n=this);for(var s=0,a=0;a>26,this.words[a]=67108863&r;for(;0!==s&&a>26,this.words[a]=67108863&r;if(0===s&&a>>13,p=0|a[1],m=8191&p,g=p>>>13,v=0|a[2],b=8191&v,y=v>>>13,w=0|a[3],_=8191&w,M=w>>>13,S=0|a[4],k=8191&S,E=S>>>13,R=0|a[5],A=8191&R,T=R>>>13,x=0|a[6],I=8191&x,L=x>>>13,P=0|a[7],B=8191&P,C=P>>>13,O=0|a[8],j=8191&O,U=O>>>13,N=0|a[9],q=8191&N,D=N>>>13,z=0|h[0],F=8191&z,W=z>>>13,H=0|h[1],Z=8191&H,K=H>>>13,V=0|h[2],J=8191&V,Y=V>>>13,X=0|h[3],G=8191&X,Q=X>>>13,$=0|h[4],tt=8191&$,et=$>>>13,rt=0|h[5],it=8191&rt,nt=rt>>>13,ot=0|h[6],st=8191&ot,at=ot>>>13,ht=0|h[7],ut=8191&ht,ft=ht>>>13,lt=0|h[8],ct=8191<,dt=lt>>>13,pt=0|h[9],mt=8191&pt,gt=pt>>>13;i.negative=e.negative^r.negative,i.length=19;var vt=(f+(n=Math.imul(c,F))|0)+((8191&(o=(o=Math.imul(c,W))+Math.imul(d,F)|0))<<13)|0;f=((s=Math.imul(d,W))+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(m,F),o=(o=Math.imul(m,W))+Math.imul(g,F)|0,s=Math.imul(g,W);var bt=(f+(n=n+Math.imul(c,Z)|0)|0)+((8191&(o=(o=o+Math.imul(c,K)|0)+Math.imul(d,Z)|0))<<13)|0;f=((s=s+Math.imul(d,K)|0)+(o>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(b,F),o=(o=Math.imul(b,W))+Math.imul(y,F)|0,s=Math.imul(y,W),n=n+Math.imul(m,Z)|0,o=(o=o+Math.imul(m,K)|0)+Math.imul(g,Z)|0,s=s+Math.imul(g,K)|0;var yt=(f+(n=n+Math.imul(c,J)|0)|0)+((8191&(o=(o=o+Math.imul(c,Y)|0)+Math.imul(d,J)|0))<<13)|0;f=((s=s+Math.imul(d,Y)|0)+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(_,F),o=(o=Math.imul(_,W))+Math.imul(M,F)|0,s=Math.imul(M,W),n=n+Math.imul(b,Z)|0,o=(o=o+Math.imul(b,K)|0)+Math.imul(y,Z)|0,s=s+Math.imul(y,K)|0,n=n+Math.imul(m,J)|0,o=(o=o+Math.imul(m,Y)|0)+Math.imul(g,J)|0,s=s+Math.imul(g,Y)|0;var wt=(f+(n=n+Math.imul(c,G)|0)|0)+((8191&(o=(o=o+Math.imul(c,Q)|0)+Math.imul(d,G)|0))<<13)|0;f=((s=s+Math.imul(d,Q)|0)+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,F),o=(o=Math.imul(k,W))+Math.imul(E,F)|0,s=Math.imul(E,W),n=n+Math.imul(_,Z)|0,o=(o=o+Math.imul(_,K)|0)+Math.imul(M,Z)|0,s=s+Math.imul(M,K)|0,n=n+Math.imul(b,J)|0,o=(o=o+Math.imul(b,Y)|0)+Math.imul(y,J)|0,s=s+Math.imul(y,Y)|0,n=n+Math.imul(m,G)|0,o=(o=o+Math.imul(m,Q)|0)+Math.imul(g,G)|0,s=s+Math.imul(g,Q)|0;var _t=(f+(n=n+Math.imul(c,tt)|0)|0)+((8191&(o=(o=o+Math.imul(c,et)|0)+Math.imul(d,tt)|0))<<13)|0;f=((s=s+Math.imul(d,et)|0)+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(A,F),o=(o=Math.imul(A,W))+Math.imul(T,F)|0,s=Math.imul(T,W),n=n+Math.imul(k,Z)|0,o=(o=o+Math.imul(k,K)|0)+Math.imul(E,Z)|0,s=s+Math.imul(E,K)|0,n=n+Math.imul(_,J)|0,o=(o=o+Math.imul(_,Y)|0)+Math.imul(M,J)|0,s=s+Math.imul(M,Y)|0,n=n+Math.imul(b,G)|0,o=(o=o+Math.imul(b,Q)|0)+Math.imul(y,G)|0,s=s+Math.imul(y,Q)|0,n=n+Math.imul(m,tt)|0,o=(o=o+Math.imul(m,et)|0)+Math.imul(g,tt)|0,s=s+Math.imul(g,et)|0;var Mt=(f+(n=n+Math.imul(c,it)|0)|0)+((8191&(o=(o=o+Math.imul(c,nt)|0)+Math.imul(d,it)|0))<<13)|0;f=((s=s+Math.imul(d,nt)|0)+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(I,F),o=(o=Math.imul(I,W))+Math.imul(L,F)|0,s=Math.imul(L,W),n=n+Math.imul(A,Z)|0,o=(o=o+Math.imul(A,K)|0)+Math.imul(T,Z)|0,s=s+Math.imul(T,K)|0,n=n+Math.imul(k,J)|0,o=(o=o+Math.imul(k,Y)|0)+Math.imul(E,J)|0,s=s+Math.imul(E,Y)|0,n=n+Math.imul(_,G)|0,o=(o=o+Math.imul(_,Q)|0)+Math.imul(M,G)|0,s=s+Math.imul(M,Q)|0,n=n+Math.imul(b,tt)|0,o=(o=o+Math.imul(b,et)|0)+Math.imul(y,tt)|0,s=s+Math.imul(y,et)|0,n=n+Math.imul(m,it)|0,o=(o=o+Math.imul(m,nt)|0)+Math.imul(g,it)|0,s=s+Math.imul(g,nt)|0;var St=(f+(n=n+Math.imul(c,st)|0)|0)+((8191&(o=(o=o+Math.imul(c,at)|0)+Math.imul(d,st)|0))<<13)|0;f=((s=s+Math.imul(d,at)|0)+(o>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,F),o=(o=Math.imul(B,W))+Math.imul(C,F)|0,s=Math.imul(C,W),n=n+Math.imul(I,Z)|0,o=(o=o+Math.imul(I,K)|0)+Math.imul(L,Z)|0,s=s+Math.imul(L,K)|0,n=n+Math.imul(A,J)|0,o=(o=o+Math.imul(A,Y)|0)+Math.imul(T,J)|0,s=s+Math.imul(T,Y)|0,n=n+Math.imul(k,G)|0,o=(o=o+Math.imul(k,Q)|0)+Math.imul(E,G)|0,s=s+Math.imul(E,Q)|0,n=n+Math.imul(_,tt)|0,o=(o=o+Math.imul(_,et)|0)+Math.imul(M,tt)|0,s=s+Math.imul(M,et)|0,n=n+Math.imul(b,it)|0,o=(o=o+Math.imul(b,nt)|0)+Math.imul(y,it)|0,s=s+Math.imul(y,nt)|0,n=n+Math.imul(m,st)|0,o=(o=o+Math.imul(m,at)|0)+Math.imul(g,st)|0,s=s+Math.imul(g,at)|0;var kt=(f+(n=n+Math.imul(c,ut)|0)|0)+((8191&(o=(o=o+Math.imul(c,ft)|0)+Math.imul(d,ut)|0))<<13)|0;f=((s=s+Math.imul(d,ft)|0)+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(j,F),o=(o=Math.imul(j,W))+Math.imul(U,F)|0,s=Math.imul(U,W),n=n+Math.imul(B,Z)|0,o=(o=o+Math.imul(B,K)|0)+Math.imul(C,Z)|0,s=s+Math.imul(C,K)|0,n=n+Math.imul(I,J)|0,o=(o=o+Math.imul(I,Y)|0)+Math.imul(L,J)|0,s=s+Math.imul(L,Y)|0,n=n+Math.imul(A,G)|0,o=(o=o+Math.imul(A,Q)|0)+Math.imul(T,G)|0,s=s+Math.imul(T,Q)|0,n=n+Math.imul(k,tt)|0,o=(o=o+Math.imul(k,et)|0)+Math.imul(E,tt)|0,s=s+Math.imul(E,et)|0,n=n+Math.imul(_,it)|0,o=(o=o+Math.imul(_,nt)|0)+Math.imul(M,it)|0,s=s+Math.imul(M,nt)|0,n=n+Math.imul(b,st)|0,o=(o=o+Math.imul(b,at)|0)+Math.imul(y,st)|0,s=s+Math.imul(y,at)|0,n=n+Math.imul(m,ut)|0,o=(o=o+Math.imul(m,ft)|0)+Math.imul(g,ut)|0,s=s+Math.imul(g,ft)|0;var Et=(f+(n=n+Math.imul(c,ct)|0)|0)+((8191&(o=(o=o+Math.imul(c,dt)|0)+Math.imul(d,ct)|0))<<13)|0;f=((s=s+Math.imul(d,dt)|0)+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(q,F),o=(o=Math.imul(q,W))+Math.imul(D,F)|0,s=Math.imul(D,W),n=n+Math.imul(j,Z)|0,o=(o=o+Math.imul(j,K)|0)+Math.imul(U,Z)|0,s=s+Math.imul(U,K)|0,n=n+Math.imul(B,J)|0,o=(o=o+Math.imul(B,Y)|0)+Math.imul(C,J)|0,s=s+Math.imul(C,Y)|0,n=n+Math.imul(I,G)|0,o=(o=o+Math.imul(I,Q)|0)+Math.imul(L,G)|0,s=s+Math.imul(L,Q)|0,n=n+Math.imul(A,tt)|0,o=(o=o+Math.imul(A,et)|0)+Math.imul(T,tt)|0,s=s+Math.imul(T,et)|0,n=n+Math.imul(k,it)|0,o=(o=o+Math.imul(k,nt)|0)+Math.imul(E,it)|0,s=s+Math.imul(E,nt)|0,n=n+Math.imul(_,st)|0,o=(o=o+Math.imul(_,at)|0)+Math.imul(M,st)|0,s=s+Math.imul(M,at)|0,n=n+Math.imul(b,ut)|0,o=(o=o+Math.imul(b,ft)|0)+Math.imul(y,ut)|0,s=s+Math.imul(y,ft)|0,n=n+Math.imul(m,ct)|0,o=(o=o+Math.imul(m,dt)|0)+Math.imul(g,ct)|0,s=s+Math.imul(g,dt)|0;var Rt=(f+(n=n+Math.imul(c,mt)|0)|0)+((8191&(o=(o=o+Math.imul(c,gt)|0)+Math.imul(d,mt)|0))<<13)|0;f=((s=s+Math.imul(d,gt)|0)+(o>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(q,Z),o=(o=Math.imul(q,K))+Math.imul(D,Z)|0,s=Math.imul(D,K),n=n+Math.imul(j,J)|0,o=(o=o+Math.imul(j,Y)|0)+Math.imul(U,J)|0,s=s+Math.imul(U,Y)|0,n=n+Math.imul(B,G)|0,o=(o=o+Math.imul(B,Q)|0)+Math.imul(C,G)|0,s=s+Math.imul(C,Q)|0,n=n+Math.imul(I,tt)|0,o=(o=o+Math.imul(I,et)|0)+Math.imul(L,tt)|0,s=s+Math.imul(L,et)|0,n=n+Math.imul(A,it)|0,o=(o=o+Math.imul(A,nt)|0)+Math.imul(T,it)|0,s=s+Math.imul(T,nt)|0,n=n+Math.imul(k,st)|0,o=(o=o+Math.imul(k,at)|0)+Math.imul(E,st)|0,s=s+Math.imul(E,at)|0,n=n+Math.imul(_,ut)|0,o=(o=o+Math.imul(_,ft)|0)+Math.imul(M,ut)|0,s=s+Math.imul(M,ft)|0,n=n+Math.imul(b,ct)|0,o=(o=o+Math.imul(b,dt)|0)+Math.imul(y,ct)|0,s=s+Math.imul(y,dt)|0;var At=(f+(n=n+Math.imul(m,mt)|0)|0)+((8191&(o=(o=o+Math.imul(m,gt)|0)+Math.imul(g,mt)|0))<<13)|0;f=((s=s+Math.imul(g,gt)|0)+(o>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(q,J),o=(o=Math.imul(q,Y))+Math.imul(D,J)|0,s=Math.imul(D,Y),n=n+Math.imul(j,G)|0,o=(o=o+Math.imul(j,Q)|0)+Math.imul(U,G)|0,s=s+Math.imul(U,Q)|0,n=n+Math.imul(B,tt)|0,o=(o=o+Math.imul(B,et)|0)+Math.imul(C,tt)|0,s=s+Math.imul(C,et)|0,n=n+Math.imul(I,it)|0,o=(o=o+Math.imul(I,nt)|0)+Math.imul(L,it)|0,s=s+Math.imul(L,nt)|0,n=n+Math.imul(A,st)|0,o=(o=o+Math.imul(A,at)|0)+Math.imul(T,st)|0,s=s+Math.imul(T,at)|0,n=n+Math.imul(k,ut)|0,o=(o=o+Math.imul(k,ft)|0)+Math.imul(E,ut)|0,s=s+Math.imul(E,ft)|0,n=n+Math.imul(_,ct)|0,o=(o=o+Math.imul(_,dt)|0)+Math.imul(M,ct)|0,s=s+Math.imul(M,dt)|0;var Tt=(f+(n=n+Math.imul(b,mt)|0)|0)+((8191&(o=(o=o+Math.imul(b,gt)|0)+Math.imul(y,mt)|0))<<13)|0;f=((s=s+Math.imul(y,gt)|0)+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(q,G),o=(o=Math.imul(q,Q))+Math.imul(D,G)|0,s=Math.imul(D,Q),n=n+Math.imul(j,tt)|0,o=(o=o+Math.imul(j,et)|0)+Math.imul(U,tt)|0,s=s+Math.imul(U,et)|0,n=n+Math.imul(B,it)|0,o=(o=o+Math.imul(B,nt)|0)+Math.imul(C,it)|0,s=s+Math.imul(C,nt)|0,n=n+Math.imul(I,st)|0,o=(o=o+Math.imul(I,at)|0)+Math.imul(L,st)|0,s=s+Math.imul(L,at)|0,n=n+Math.imul(A,ut)|0,o=(o=o+Math.imul(A,ft)|0)+Math.imul(T,ut)|0,s=s+Math.imul(T,ft)|0,n=n+Math.imul(k,ct)|0,o=(o=o+Math.imul(k,dt)|0)+Math.imul(E,ct)|0,s=s+Math.imul(E,dt)|0;var xt=(f+(n=n+Math.imul(_,mt)|0)|0)+((8191&(o=(o=o+Math.imul(_,gt)|0)+Math.imul(M,mt)|0))<<13)|0;f=((s=s+Math.imul(M,gt)|0)+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(q,tt),o=(o=Math.imul(q,et))+Math.imul(D,tt)|0,s=Math.imul(D,et),n=n+Math.imul(j,it)|0,o=(o=o+Math.imul(j,nt)|0)+Math.imul(U,it)|0,s=s+Math.imul(U,nt)|0,n=n+Math.imul(B,st)|0,o=(o=o+Math.imul(B,at)|0)+Math.imul(C,st)|0,s=s+Math.imul(C,at)|0,n=n+Math.imul(I,ut)|0,o=(o=o+Math.imul(I,ft)|0)+Math.imul(L,ut)|0,s=s+Math.imul(L,ft)|0,n=n+Math.imul(A,ct)|0,o=(o=o+Math.imul(A,dt)|0)+Math.imul(T,ct)|0,s=s+Math.imul(T,dt)|0;var It=(f+(n=n+Math.imul(k,mt)|0)|0)+((8191&(o=(o=o+Math.imul(k,gt)|0)+Math.imul(E,mt)|0))<<13)|0;f=((s=s+Math.imul(E,gt)|0)+(o>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(q,it),o=(o=Math.imul(q,nt))+Math.imul(D,it)|0,s=Math.imul(D,nt),n=n+Math.imul(j,st)|0,o=(o=o+Math.imul(j,at)|0)+Math.imul(U,st)|0,s=s+Math.imul(U,at)|0,n=n+Math.imul(B,ut)|0,o=(o=o+Math.imul(B,ft)|0)+Math.imul(C,ut)|0,s=s+Math.imul(C,ft)|0,n=n+Math.imul(I,ct)|0,o=(o=o+Math.imul(I,dt)|0)+Math.imul(L,ct)|0,s=s+Math.imul(L,dt)|0;var Lt=(f+(n=n+Math.imul(A,mt)|0)|0)+((8191&(o=(o=o+Math.imul(A,gt)|0)+Math.imul(T,mt)|0))<<13)|0;f=((s=s+Math.imul(T,gt)|0)+(o>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(q,st),o=(o=Math.imul(q,at))+Math.imul(D,st)|0,s=Math.imul(D,at),n=n+Math.imul(j,ut)|0,o=(o=o+Math.imul(j,ft)|0)+Math.imul(U,ut)|0,s=s+Math.imul(U,ft)|0,n=n+Math.imul(B,ct)|0,o=(o=o+Math.imul(B,dt)|0)+Math.imul(C,ct)|0,s=s+Math.imul(C,dt)|0;var Pt=(f+(n=n+Math.imul(I,mt)|0)|0)+((8191&(o=(o=o+Math.imul(I,gt)|0)+Math.imul(L,mt)|0))<<13)|0;f=((s=s+Math.imul(L,gt)|0)+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(q,ut),o=(o=Math.imul(q,ft))+Math.imul(D,ut)|0,s=Math.imul(D,ft),n=n+Math.imul(j,ct)|0,o=(o=o+Math.imul(j,dt)|0)+Math.imul(U,ct)|0,s=s+Math.imul(U,dt)|0;var Bt=(f+(n=n+Math.imul(B,mt)|0)|0)+((8191&(o=(o=o+Math.imul(B,gt)|0)+Math.imul(C,mt)|0))<<13)|0;f=((s=s+Math.imul(C,gt)|0)+(o>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(q,ct),o=(o=Math.imul(q,dt))+Math.imul(D,ct)|0,s=Math.imul(D,dt);var Ct=(f+(n=n+Math.imul(j,mt)|0)|0)+((8191&(o=(o=o+Math.imul(j,gt)|0)+Math.imul(U,mt)|0))<<13)|0;f=((s=s+Math.imul(U,gt)|0)+(o>>>13)|0)+(Ct>>>26)|0,Ct&=67108863;var Ot=(f+(n=Math.imul(q,mt))|0)+((8191&(o=(o=Math.imul(q,gt))+Math.imul(D,mt)|0))<<13)|0;return f=((s=Math.imul(D,gt))+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,u[0]=vt,u[1]=bt,u[2]=yt,u[3]=wt,u[4]=_t,u[5]=Mt,u[6]=St,u[7]=kt,u[8]=Et,u[9]=Rt,u[10]=At,u[11]=Tt,u[12]=xt,u[13]=It,u[14]=Lt,u[15]=Pt,u[16]=Bt,u[17]=Ct,u[18]=Ot,0!==f&&(u[19]=f,i.length++),i};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(d=c),o.prototype.mulTo=function t(e,r){var i=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,r):i<63?c(this,e,r):i<1024?function n(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,e,r):p(this,e,r)},m.prototype.makeRBT=function t(e){for(var r=new Array(e),i=o.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function t(e,r,i,n,o,s){for(var a=0;a>>=1)o++;return 1<>>=13,n[2*a+1]=8191&s,s>>>=13;for(a=2*r;a>=26,r+=o/67108864|0,r+=s>>>26,this.words[n]=67108863&s}return 0!==r&&(this.words[n]=r,this.length++),this},o.prototype.muln=function t(e){return this.clone().imuln(e)},o.prototype.sqr=function t(){return this.mul(this)},o.prototype.isqr=function t(){return this.imul(this.clone())},o.prototype.pow=function t(e){var r=function i(t){for(var e=new Array(t.bitLength()),r=0;r>>n}return e}(e);if(0===r.length)return new o(1);for(var n=this,s=0;s=0);var r,n=e%26,o=(e-n)/26,s=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(r=0;r>>26-n}a&&(this.words[r]=a,this.length++)}if(0!==o){for(r=this.length-1;r>=0;r--)this.words[r+o]=this.words[r];for(r=0;r=0),o=r?(r-r%26)/26:0;var s=e%26,a=Math.min((e-s)/26,this.length),h=67108863^67108863>>>s<a)for(this.length-=a,f=0;f=0&&(0!==l||f>=o);f--){var c=0|this.words[f];this.words[f]=l<<26-s|c>>>s,l=c&h}return u&&0!==l&&(u.words[u.length++]=l),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function t(e,r,n){return i(0===this.negative),this.iushrn(e,r,n)},o.prototype.shln=function t(e){return this.clone().ishln(e)},o.prototype.ushln=function t(e){return this.clone().iushln(e)},o.prototype.shrn=function t(e){return this.clone().ishrn(e)},o.prototype.ushrn=function t(e){return this.clone().iushrn(e)},o.prototype.testn=function t(e){i("number"==typeof e&&e>=0);var r=e%26,n=(e-r)/26,o=1<=0);var r=e%26,n=(e-r)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==r&&n++,this.length=Math.min(n,this.length),0!==r){var o=67108863^67108863>>>r<=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function t(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var r=0;r>26)-(u/67108864|0),this.words[o+n]=67108863&s}for(;o>26,this.words[o+n]=67108863&s;if(0===h)return this.strip();for(i(-1===h),h=0,o=0;o>26,this.words[o]=67108863&s;return this.negative=1,this.strip()},o.prototype._wordDiv=function t(e,r){var i=(this.length,e.length),n=this.clone(),s=e,a=0|s.words[s.length-1];0!==(i=26-this._countBits(a))&&(s=s.ushln(i),n.iushln(i),a=0|s.words[s.length-1]);var h,u=n.length-s.length;if("mod"!==r){(h=new o(null)).length=u+1,h.words=new Array(h.length);for(var f=0;f=0;c--){var d=67108864*(0|n.words[s.length+c])+(0|n.words[s.length+c-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(s,d,c);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(s,1,c),n.isZero()||(n.negative^=1);h&&(h.words[c]=d)}return h&&h.strip(),n.strip(),"div"!==r&&0!==i&&n.iushrn(i),{div:h||null,mod:n}},o.prototype.divmod=function t(e,r,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(h=this.neg().divmod(e,r),"mod"!==r&&(s=h.div.neg()),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:s,mod:a}):0===this.negative&&0!==e.negative?(h=this.divmod(e.neg(),r),"mod"!==r&&(s=h.div.neg()),{div:s,mod:h.mod}):0!=(this.negative&e.negative)?(h=this.neg().divmod(e.neg(),r),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:h.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===r?{div:this.divn(e.words[0]),mod:null}:"mod"===r?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,r);var s,a,h},o.prototype.div=function t(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function t(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function t(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function t(e){var r=this.divmod(e);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(e):r.mod,n=e.ushrn(1),o=e.andln(1),s=i.cmp(n);return s<0||1===o&&0===s?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function t(e){i(e<=67108863);for(var r=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(r*n+(0|this.words[o]))%e;return n},o.prototype.idivn=function t(e){i(e<=67108863);for(var r=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*r;this.words[n]=o/e|0,r=o%e}return this.strip()},o.prototype.divn=function t(e){return this.clone().idivn(e)},o.prototype.egcd=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s=new o(1),a=new o(0),h=new o(0),u=new o(1),f=0;r.isEven()&&n.isEven();)r.iushrn(1),n.iushrn(1),++f;for(var l=n.clone(),c=r.clone();!r.isZero();){for(var d=0,p=1;0==(r.words[0]&p)&&d<26;++d,p<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(l),a.isub(c)),s.iushrn(1),a.iushrn(1);for(var m=0,g=1;0==(n.words[0]&g)&&m<26;++m,g<<=1);if(m>0)for(n.iushrn(m);m-- >0;)(h.isOdd()||u.isOdd())&&(h.iadd(l),u.isub(c)),h.iushrn(1),u.iushrn(1);r.cmp(n)>=0?(r.isub(n),s.isub(h),a.isub(u)):(n.isub(r),h.isub(s),u.isub(a))}return{a:h,b:u,gcd:n.iushln(f)}},o.prototype._invmp=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s,a=new o(1),h=new o(0),u=n.clone();r.cmpn(1)>0&&n.cmpn(1)>0;){for(var f=0,l=1;0==(r.words[0]&l)&&f<26;++f,l<<=1);if(f>0)for(r.iushrn(f);f-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var c=0,d=1;0==(n.words[0]&d)&&c<26;++c,d<<=1);if(c>0)for(n.iushrn(c);c-- >0;)h.isOdd()&&h.iadd(u),h.iushrn(1);r.cmp(n)>=0?(r.isub(n),a.isub(h)):(n.isub(r),h.isub(a))}return(s=0===r.cmpn(1)?a:h).cmpn(0)<0&&s.iadd(e),s},o.prototype.gcd=function t(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var r=this.clone(),i=e.clone();r.negative=0,i.negative=0;for(var n=0;r.isEven()&&i.isEven();n++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var o=r.cmp(i);if(o<0){var s=r;r=i,i=s}else if(0===o||0===i.cmpn(1))break;r.isub(i)}return i.iushln(n)},o.prototype.invm=function t(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function t(){return 0==(1&this.words[0])},o.prototype.isOdd=function t(){return 1==(1&this.words[0])},o.prototype.andln=function t(e){return this.words[0]&e},o.prototype.bincn=function t(e){i("number"==typeof e);var r=e%26,n=(e-r)/26,o=1<>>26,h&=67108863,this.words[a]=h}return 0!==s&&(this.words[a]=s,this.length++),this},o.prototype.isZero=function t(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function t(e){var r,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)r=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var o=0|this.words[0];r=o===e?0:oe.length)return 1;if(this.length=0;i--){var n=0|this.words[i],o=0|e.words[i];if(n!==o){no&&(r=1);break}}return r},o.prototype.gtn=function t(e){return 1===this.cmpn(e)},o.prototype.gt=function t(e){return 1===this.cmp(e)},o.prototype.gten=function t(e){return this.cmpn(e)>=0},o.prototype.gte=function t(e){return this.cmp(e)>=0},o.prototype.ltn=function t(e){return-1===this.cmpn(e)},o.prototype.lt=function t(e){return-1===this.cmp(e)},o.prototype.lten=function t(e){return this.cmpn(e)<=0},o.prototype.lte=function t(e){return this.cmp(e)<=0},o.prototype.eqn=function t(e){return 0===this.cmpn(e)},o.prototype.eq=function t(e){return 0===this.cmp(e)},o.red=function t(e){return new M(e)},o.prototype.toRed=function t(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function t(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function t(e){return this.red=e,this},o.prototype.forceRed=function t(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function t(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function t(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function t(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function t(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function t(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function t(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function t(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function t(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function t(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function t(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function t(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function M(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function S(t){M.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function t(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function t(e){var r,i=e;do{this.split(i,this.tmp),r=(i=(i=this.imulK(i)).iadd(this.tmp)).bitLength()}while(r>this.n);var n=r0?i.isub(this.p):void 0!==i.strip?i.strip():i._strip(),i},v.prototype.split=function t(e,r){e.iushrn(this.n,0,r)},v.prototype.imulK=function t(e){return e.imul(this.k)},n(b,v),b.prototype.split=function t(e,r){for(var i=4194303,n=Math.min(e.length,9),o=0;o>>22,s=a}s>>>=22,e.words[o-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function t(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var r=0,i=0;i>>=26,e.words[i]=o,r=n}return 0!==r&&(e.words[e.length++]=r),e},o._prime=function t(e){if(g[e])return g[e];var t;if("k256"===e)t=new b;else if("p224"===e)t=new y;else if("p192"===e)t=new w;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new _}return g[e]=t,t},M.prototype._verify1=function t(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},M.prototype._verify2=function t(e,r){i(0==(e.negative|r.negative),"red works only with positives"),i(e.red&&e.red===r.red,"red works only with red numbers")},M.prototype.imod=function t(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},M.prototype.neg=function t(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},M.prototype.add=function t(e,r){this._verify2(e,r);var i=e.add(r);return i.cmp(this.m)>=0&&i.isub(this.m),i._forceRed(this)},M.prototype.iadd=function t(e,r){this._verify2(e,r);var i=e.iadd(r);return i.cmp(this.m)>=0&&i.isub(this.m),i},M.prototype.sub=function t(e,r){this._verify2(e,r);var i=e.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},M.prototype.isub=function t(e,r){this._verify2(e,r);var i=e.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},M.prototype.shl=function t(e,r){return this._verify1(e),this.imod(e.ushln(r))},M.prototype.imul=function t(e,r){return this._verify2(e,r),this.imod(e.imul(r))},M.prototype.mul=function t(e,r){return this._verify2(e,r),this.imod(e.mul(r))},M.prototype.isqr=function t(e){return this.imul(e,e.clone())},M.prototype.sqr=function t(e){return this.mul(e,e)},M.prototype.sqrt=function t(e){if(e.isZero())return e.clone();var r=this.m.andln(3);if(i(r%2==1),3===r){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var s=this.m.subn(1),a=0;!s.isZero()&&0===s.andln(1);)a++,s.iushrn(1);i(!s.isZero());var h=new o(1).toRed(this),u=h.redNeg(),f=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);0!==this.pow(l,f).cmp(u);)l.redIAdd(u);for(var c=this.pow(l,s),d=this.pow(e,s.addn(1).iushrn(1)),p=this.pow(e,s),m=a;0!==p.cmp(h);){for(var g=p,v=0;0!==g.cmp(h);v++)g=g.redSqr();i(v=0;n--){for(var f=r.words[n],l=u-1;l>=0;l--){var c=f>>l&1;s!==i[0]&&(s=this.sqr(s)),0!==c||0!==a?(a<<=1,a|=c,(4===++h||0===n&&0===l)&&(s=this.mul(s,i[a]),h=0,a=0)):h=0}u=26}return s},M.prototype.convertTo=function t(e){var r=e.umod(this.m);return r===e?r.clone():r},M.prototype.convertFrom=function t(e){var r=e.clone();return r.red=null,r},o.mont=function t(e){return new S(e)},n(S,M),S.prototype.convertTo=function t(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function t(e){var r=this.imod(e.mul(this.rinv));return r.red=null,r},S.prototype.imul=function t(e,r){if(e.isZero()||r.isZero())return e.words[0]=0,e.length=1,e;var i=e.imul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=i.isub(n).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},S.prototype.mul=function t(e,r){if(e.isZero()||r.isZero())return new o(0)._forceRed(this);var i=e.mul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=i.isub(n).iushrn(this.shift),a=s;return s.cmp(this.m)>=0?a=s.isub(this.m):s.cmpn(0)<0&&(a=s.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function t(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(16)(t))},function(t,e){},function(t,e){},function(t){t.exports=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')},function(t,e,r){(function(e){var i=r(100),n=new(r(101)),o=new i(24),s=new i(11),a=new i(10),h=new i(3),u=new i(7),f=r(99),l=r(18);function c(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._pub=new i(t),this}function d(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._priv=new i(t),this}t.exports=m;var p={};function m(t,e,r){this.setGenerator(e),this.__prime=new i(t),this._prime=i.mont(this.__prime),this._primeLen=t.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=c,this.setPrivateKey=d):this._primeCode=8}function g(t,r){var i=new e(t.toArray());return r?i.toString(r):i}Object.defineProperty(m.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function t(e,r){var i=r.toString("hex"),l=[i,e.toString(16)].join("_");if(l in p)return p[l];var c,d=0;if(e.isEven()||!f.simpleSieve||!f.fermatTest(e)||!n.test(e))return d+=1,d+="02"===i||"05"===i?8:4,p[l]=d,d;switch(n.test(e.shrn(1))||(d+=2),i){case"02":e.mod(o).cmp(s)&&(d+=8);break;case"05":(c=e.mod(a)).cmp(h)&&c.cmp(u)&&(d+=8);break;default:d+=4}return p[l]=d,d}(this.__prime,this.__gen)),this._primeCode}}),m.prototype.generateKeys=function(){return this._priv||(this._priv=new i(l(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},m.prototype.computeSecret=function(t){var r=(t=(t=new i(t)).toRed(this._prime)).redPow(this._priv).fromRed(),n=new e(r.toArray()),o=this.getPrime();if(n.length0?this.tail.next=r:this.head=r,this.tail=r,++this.length}},{key:"unshift",value:function t(e){var r={data:e,next:this.head};0===this.length&&(this.tail=r),this.head=r,++this.length}},{key:"shift",value:function t(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function t(){this.head=this.tail=null,this.length=0}},{key:"join",value:function t(e){if(0===this.length)return"";for(var r=this.head,i=""+r.data;r=r.next;)i+=e+r.data;return i}},{key:"concat",value:function t(e){if(0===this.length)return s.alloc(0);for(var r,i,n,o=s.allocUnsafe(e>>>0),a=this.head,h=0;a;)r=a.data,i=o,n=h,s.prototype.copy.call(r,i,n),h+=a.data.length,a=a.next;return o}},{key:"consume",value:function t(e,r){var i;return eo.length?o.length:e;if(s===o.length?n+=o:n+=o.slice(0,e),0===(e-=s)){s===o.length?(++i,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(s));break}++i}return this.length-=i,n}},{key:"_getBuffer",value:function t(e){var r=s.allocUnsafe(e),i=this.head,n=1;for(i.data.copy(r),e-=i.data.length;i=i.next;){var o=i.data,a=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,a),0===(e-=a)){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,r}},{key:h,value:function t(e,r){return a(this,function o(t){for(var e=1;e0,(function(t){i||(i=t),t&&s.forEach(u),o||(s.forEach(u),n(i))}))}));return e.reduce(f)}},function(t,e,r){var i=r(53).Buffer,n=r(84),o=r(55),s=r(57).ec,a=r(56),h=r(37),u=r(119);function f(t,e,r,o){if((t=i.from(t.toArray())).length0&&r.ishrn(i),r}function c(t,e,r){var o,s;do{for(o=i.alloc(0);8*o.length=0&&(a=r,h=i),o.negative&&(o=o.neg(),s=s.neg()),a.negative&&(a=a.neg(),h=h.neg()),[{a:o,b:s},{a:a,b:h}]},h.prototype._endoSplit=function t(e){var r=this.endo.basis,i=r[0],n=r[1],o=n.b.mul(e).divRound(this.n),s=i.b.neg().mul(e).divRound(this.n),a=o.mul(i.a),h=s.mul(n.a),u=o.mul(i.b),f=s.mul(n.b);return{k1:e.sub(a).sub(h),k2:u.add(f).neg()}},h.prototype.pointFromX=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),o=i.redSqrt();if(0!==o.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");var s=o.fromRed().isOdd();return(r&&!s||!r&&s)&&(o=o.redNeg()),this.point(e,o)},h.prototype.validate=function t(e){if(e.inf)return!0;var r=e.x,i=e.y,n=this.a.redMul(r),o=r.redSqr().redMul(r).redIAdd(n).redIAdd(this.b);return 0===i.redSqr().redISub(o).cmpn(0)},h.prototype._endoWnafMulAdd=function t(e,r,i){for(var n=this._endoWnafT1,o=this._endoWnafT2,s=0;s":""},u.prototype.isInfinity=function t(){return this.inf},u.prototype.add=function t(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var r=this.y.redSub(e.y);0!==r.cmpn(0)&&(r=r.redMul(this.x.redSub(e.x).redInvm()));var i=r.redSqr().redISub(this.x).redISub(e.x),n=r.redMul(this.x.redSub(i)).redISub(this.y);return this.curve.point(i,n)},u.prototype.dbl=function t(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var r=this.curve.a,i=this.x.redSqr(),n=e.redInvm(),o=i.redAdd(i).redIAdd(i).redIAdd(r).redMul(n),s=o.redSqr().redISub(this.x.redAdd(this.x)),a=o.redMul(this.x.redSub(s)).redISub(this.y);return this.curve.point(s,a)},u.prototype.getX=function t(){return this.x.fromRed()},u.prototype.getY=function t(){return this.y.fromRed()},u.prototype.mul=function t(e){return e=new n(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function t(e,r,i){var n=[this,r],o=[e,i];return this.curve.endo?this.curve._endoWnafMulAdd(n,o):this.curve._wnafMulAdd(1,n,o,2)},u.prototype.jmulAdd=function t(e,r,i){var n=[this,r],o=[e,i];return this.curve.endo?this.curve._endoWnafMulAdd(n,o,!0):this.curve._wnafMulAdd(1,n,o,2,!0)},u.prototype.eq=function t(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},u.prototype.neg=function t(e){if(this.inf)return this;var r=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var i=this.precomputed,n=function(t){return t.neg()};r.precomputed={naf:i.naf&&{wnd:i.naf.wnd,points:i.naf.points.map(n)},doubles:i.doubles&&{step:i.doubles.step,points:i.doubles.points.map(n)}}}return r},u.prototype.toJ=function t(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(f,s.BasePoint),h.prototype.jpoint=function t(e,r,i){return new f(this,e,r,i)},f.prototype.toP=function t(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),r=e.redSqr(),i=this.x.redMul(r),n=this.y.redMul(r).redMul(e);return this.curve.point(i,n)},f.prototype.neg=function t(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},f.prototype.add=function t(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var r=e.z.redSqr(),i=this.z.redSqr(),n=this.x.redMul(r),o=e.x.redMul(i),s=this.y.redMul(r.redMul(e.z)),a=e.y.redMul(i.redMul(this.z)),h=n.redSub(o),u=s.redSub(a);if(0===h.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=h.redSqr(),l=f.redMul(h),c=n.redMul(f),d=u.redSqr().redIAdd(l).redISub(c).redISub(c),p=u.redMul(c.redISub(d)).redISub(s.redMul(l)),m=this.z.redMul(e.z).redMul(h);return this.curve.jpoint(d,p,m)},f.prototype.mixedAdd=function t(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var r=this.z.redSqr(),i=this.x,n=e.x.redMul(r),o=this.y,s=e.y.redMul(r).redMul(this.z),a=i.redSub(n),h=o.redSub(s);if(0===a.cmpn(0))return 0!==h.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=a.redSqr(),f=u.redMul(a),l=i.redMul(u),c=h.redSqr().redIAdd(f).redISub(l).redISub(l),d=h.redMul(l.redISub(c)).redISub(o.redMul(f)),p=this.z.redMul(a);return this.curve.jpoint(c,d,p)},f.prototype.dblp=function t(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();var r;if(this.curve.zeroA||this.curve.threeA){var i=this;for(r=0;r=0)return!1;if(i.redIAdd(o),0===this.x.cmp(i))return!0}},f.prototype.inspect=function t(){return this.isInfinity()?"":""},f.prototype.isInfinity=function t(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";var i=r(9),n=r(58),o=r(36),s=r(7);function a(t){o.call(this,"mont",t),this.a=new i(t.a,16).toRed(this.red),this.b=new i(t.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function h(t,e,r){o.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(e,16),this.z=new i(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}n(a,o),t.exports=a,a.prototype.validate=function t(e){var r=e.normalize().x,i=r.redSqr(),n=i.redMul(r).redAdd(i.redMul(this.a)).redAdd(r);return 0===n.redSqrt().redSqr().cmp(n)},n(h,o.BasePoint),a.prototype.decodePoint=function t(e,r){return this.point(s.toArray(e,r),1)},a.prototype.point=function t(e,r){return new h(this,e,r)},a.prototype.pointFromJSON=function t(e){return h.fromJSON(this,e)},h.prototype.precompute=function t(){},h.prototype._encode=function t(){return this.getX().toArray("be",this.curve.p.byteLength())},h.fromJSON=function t(e,r){return new h(e,r[0],r[1]||e.one)},h.prototype.inspect=function t(){return this.isInfinity()?"":""},h.prototype.isInfinity=function t(){return 0===this.z.cmpn(0)},h.prototype.dbl=function t(){var e=this.x.redAdd(this.z).redSqr(),r=this.x.redSub(this.z).redSqr(),i=e.redSub(r),n=e.redMul(r),o=i.redMul(r.redAdd(this.curve.a24.redMul(i)));return this.curve.point(n,o)},h.prototype.add=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.diffAdd=function t(e,r){var i=this.x.redAdd(this.z),n=this.x.redSub(this.z),o=e.x.redAdd(e.z),s=e.x.redSub(e.z).redMul(i),a=o.redMul(n),h=r.z.redMul(s.redAdd(a).redSqr()),u=r.x.redMul(s.redISub(a).redSqr());return this.curve.point(h,u)},h.prototype.mul=function t(e){for(var r=e.clone(),i=this,n=this.curve.point(null,null),o=[];0!==r.cmpn(0);r.iushrn(1))o.push(r.andln(1));for(var s=o.length-1;s>=0;s--)0===o[s]?(i=i.diffAdd(n,this),n=n.dbl()):(n=i.diffAdd(n,this),i=i.dbl());return n},h.prototype.mulAdd=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.jumlAdd=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.eq=function t(e){return 0===this.getX().cmp(e.getX())},h.prototype.normalize=function t(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},h.prototype.getX=function t(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";var i=r(7),n=r(9),o=r(58),s=r(36),a=i.assert;function h(t){this.twisted=1!=(0|t.a),this.mOneA=this.twisted&&-1==(0|t.a),this.extended=this.mOneA,s.call(this,"edwards",t),this.a=new n(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new n(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new n(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),a(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|t.c)}function u(t,e,r,i,o){s.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===i?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new n(e,16),this.y=new n(r,16),this.z=i?new n(i,16):this.curve.one,this.t=o&&new n(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}o(h,s),t.exports=h,h.prototype._mulA=function t(e){return this.mOneA?e.redNeg():this.a.redMul(e)},h.prototype._mulC=function t(e){return this.oneC?e:this.c.redMul(e)},h.prototype.jpoint=function t(e,r,i,n){return this.point(e,r,i,n)},h.prototype.pointFromX=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr(),o=this.c2.redSub(this.a.redMul(i)),s=this.one.redSub(this.c2.redMul(this.d).redMul(i)),a=o.redMul(s.redInvm()),h=a.redSqrt();if(0!==h.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");var u=h.fromRed().isOdd();return(r&&!u||!r&&u)&&(h=h.redNeg()),this.point(e,h)},h.prototype.pointFromY=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr(),o=i.redSub(this.c2),s=i.redMul(this.d).redMul(this.c2).redSub(this.a),a=o.redMul(s.redInvm());if(0===a.cmp(this.zero)){if(r)throw new Error("invalid point");return this.point(this.zero,e)}var h=a.redSqrt();if(0!==h.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");return h.fromRed().isOdd()!==r&&(h=h.redNeg()),this.point(h,e)},h.prototype.validate=function t(e){if(e.isInfinity())return!0;e.normalize();var r=e.x.redSqr(),i=e.y.redSqr(),n=r.redMul(this.a).redAdd(i),o=this.c2.redMul(this.one.redAdd(this.d.redMul(r).redMul(i)));return 0===n.cmp(o)},o(u,s.BasePoint),h.prototype.pointFromJSON=function t(e){return u.fromJSON(this,e)},h.prototype.point=function t(e,r,i,n){return new u(this,e,r,i,n)},u.fromJSON=function t(e,r){return new u(e,r[0],r[1],r[2])},u.prototype.inspect=function t(){return this.isInfinity()?"":""},u.prototype.isInfinity=function t(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},u.prototype._extDbl=function t(){var e=this.x.redSqr(),r=this.y.redSqr(),i=this.z.redSqr();i=i.redIAdd(i);var n=this.curve._mulA(e),o=this.x.redAdd(this.y).redSqr().redISub(e).redISub(r),s=n.redAdd(r),a=s.redSub(i),h=n.redSub(r),u=o.redMul(a),f=s.redMul(h),l=o.redMul(h),c=a.redMul(s);return this.curve.point(u,f,c,l)},u.prototype._projDbl=function t(){var e,r,i,n,o,s,a=this.x.redAdd(this.y).redSqr(),h=this.x.redSqr(),u=this.y.redSqr();if(this.curve.twisted){var f=(n=this.curve._mulA(h)).redAdd(u);this.zOne?(e=a.redSub(h).redSub(u).redMul(f.redSub(this.curve.two)),r=f.redMul(n.redSub(u)),i=f.redSqr().redSub(f).redSub(f)):(o=this.z.redSqr(),s=f.redSub(o).redISub(o),e=a.redSub(h).redISub(u).redMul(s),r=f.redMul(n.redSub(u)),i=f.redMul(s))}else n=h.redAdd(u),o=this.curve._mulC(this.z).redSqr(),s=n.redSub(o).redSub(o),e=this.curve._mulC(a.redISub(n)).redMul(s),r=this.curve._mulC(n).redMul(h.redISub(u)),i=n.redMul(s);return this.curve.point(e,r,i)},u.prototype.dbl=function t(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},u.prototype._extAdd=function t(e){var r=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),i=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),o=this.z.redMul(e.z.redAdd(e.z)),s=i.redSub(r),a=o.redSub(n),h=o.redAdd(n),u=i.redAdd(r),f=s.redMul(a),l=h.redMul(u),c=s.redMul(u),d=a.redMul(h);return this.curve.point(f,l,d,c)},u.prototype._projAdd=function t(e){var r,i,n=this.z.redMul(e.z),o=n.redSqr(),s=this.x.redMul(e.x),a=this.y.redMul(e.y),h=this.curve.d.redMul(s).redMul(a),u=o.redSub(h),f=o.redAdd(h),l=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(s).redISub(a),c=n.redMul(u).redMul(l);return this.curve.twisted?(r=n.redMul(f).redMul(a.redSub(this.curve._mulA(s))),i=u.redMul(f)):(r=n.redMul(f).redMul(a.redSub(s)),i=this.curve._mulC(u).redMul(f)),this.curve.point(c,r,i)},u.prototype.add=function t(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},u.prototype.mul=function t(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function t(e,r,i){return this.curve._wnafMulAdd(1,[this,r],[e,i],2,!1)},u.prototype.jmulAdd=function t(e,r,i){return this.curve._wnafMulAdd(1,[this,r],[e,i],2,!0)},u.prototype.normalize=function t(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},u.prototype.neg=function t(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},u.prototype.getX=function t(){return this.normalize(),this.x.fromRed()},u.prototype.getY=function t(){return this.normalize(),this.y.fromRed()},u.prototype.eq=function t(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},u.prototype.eqXToP=function t(e){var r=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(r))return!0;for(var i=e.clone(),n=this.curve.redN.redMul(this.z);;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}},u.prototype.toP=u.prototype.normalize,u.prototype.mixedAdd=u.prototype.add},function(t,e,r){"use strict";e.sha1=r(212),e.sha224=r(213),e.sha256=r(111),e.sha384=r(214),e.sha512=r(112)},function(t,e,r){"use strict";var i=r(8),n=r(29),o=r(110),s=i.rotl32,a=i.sum32,h=i.sum32_5,u=o.ft_1,f=n.BlockHash,l=[1518500249,1859775393,2400959708,3395469782];function c(){if(!(this instanceof c))return new c;f.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}i.inherits(c,f),t.exports=c,c.blockSize=512,c.outSize=160,c.hmacStrength=80,c.padLength=64,c.prototype._update=function t(e,r){for(var i=this.W,n=0;n<16;n++)i[n]=e[r+n];for(;nthis.blockSize&&(e=(new this.Hash).update(e).digest()),n(e.length<=this.blockSize);for(var r=e.length;r0))return h.iaddn(1),this.keyFromPrivate(h)}},l.prototype._truncateToN=function t(e,r){var i=8*e.byteLength()-this.n.bitLength();return i>0&&(e=e.ushrn(i)),!r&&e.cmp(this.n)>=0?e.sub(this.n):e},l.prototype.sign=function t(e,r,o,s){"object"==typeof o&&(s=o,o=null),s||(s={}),r=this.keyFromPrivate(r,o),e=this._truncateToN(new i(e,16));for(var a=this.n.byteLength(),h=r.getPrivate().toArray("be",a),u=e.toArray("be",a),l=new n({hash:this.hash,entropy:h,nonce:u,pers:s.pers,persEnc:s.persEnc||"utf8"}),c=this.n.sub(new i(1)),d=0;;d++){var p=s.k?s.k(d):new i(l.generate(this.n.byteLength()));if(!((p=this._truncateToN(p,!0)).cmpn(1)<=0||p.cmp(c)>=0)){var m=this.g.mul(p);if(!m.isInfinity()){var g=m.getX(),v=g.umod(this.n);if(0!==v.cmpn(0)){var b=p.invm(this.n).mul(v.mul(r.getPrivate()).iadd(e));if(0!==(b=b.umod(this.n)).cmpn(0)){var y=(m.getY().isOdd()?1:0)|(0!==g.cmp(v)?2:0);return s.canonical&&b.cmp(this.nh)>0&&(b=this.n.sub(b),y^=1),new f({r:v,s:b,recoveryParam:y})}}}}}},l.prototype.verify=function t(e,r,n,o){e=this._truncateToN(new i(e,16)),n=this.keyFromPublic(n,o);var s=(r=new f(r,"hex")).r,a=r.s;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var h,u=a.invm(this.n),l=u.mul(e).umod(this.n),c=u.mul(s).umod(this.n);return this.curve._maxwellTrick?!(h=this.g.jmulAdd(l,n.getPublic(),c)).isInfinity()&&h.eqXToP(s):!(h=this.g.mulAdd(l,n.getPublic(),c)).isInfinity()&&0===h.getX().umod(this.n).cmp(s)},l.prototype.recoverPubKey=function(t,e,r,n){h((3&r)===r,"The recovery param is more than two bits"),e=new f(e,n);var o=this.n,s=new i(t),a=e.r,u=e.s,l=1&r,c=r>>1;if(a.cmp(this.curve.p.umod(this.curve.n))>=0&&c)throw new Error("Unable to find sencond key candinate");a=c?this.curve.pointFromX(a.add(this.curve.n),l):this.curve.pointFromX(a,l);var d=e.r.invm(o),p=o.sub(s).mul(d).umod(o),m=u.mul(d).umod(o);return this.g.mulAdd(p,a,m)},l.prototype.getKeyRecoveryParam=function(t,e,r,i){if(null!==(e=new f(e,i)).recoveryParam)return e.recoveryParam;for(var n=0;n<4;n++){var o;try{o=this.recoverPubKey(t,e,n)}catch(t){continue}if(o.eq(r))return n}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";var i=r(60),n=r(108),o=r(6);function s(t){if(!(this instanceof s))return new s(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=n.toArray(t.entropy,t.entropyEnc||"hex"),r=n.toArray(t.nonce,t.nonceEnc||"hex"),i=n.toArray(t.pers,t.persEnc||"hex");o(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,i)}t.exports=s,s.prototype._init=function t(e,r,i){var n=e.concat(r).concat(i);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var o=0;o=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(i||[])),this._reseed=1},s.prototype.generate=function t(e,r,i,o){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof r&&(o=i,i=r,r=null),i&&(i=n.toArray(i,o||"hex"),this._update(i));for(var s=[];s.length"}},function(t,e,r){"use strict";var i=r(9),n=r(7),o=n.assert;function s(t,e){if(t instanceof s)return t;this._importDER(t,e)||(o(t.r&&t.s,"Signature without r or s"),this.r=new i(t.r,16),this.s=new i(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}function a(){this.place=0}function h(t,e){var r=t[e.place++];if(!(128&r))return r;var i=15&r;if(0===i||i>4)return!1;for(var n=0,o=0,s=e.place;o>>=0;return!(n<=127)&&(e.place=s,n)}function u(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}}t.exports=s,s.prototype._importDER=function t(e,r){e=n.toArray(e,r);var o=new a;if(48!==e[o.place++])return!1;var s=h(e,o);if(!1===s)return!1;if(s+o.place!==e.length)return!1;if(2!==e[o.place++])return!1;var u=h(e,o);if(!1===u)return!1;var f=e.slice(o.place,u+o.place);if(o.place+=u,2!==e[o.place++])return!1;var l=h(e,o);if(!1===l)return!1;if(e.length!==l+o.place)return!1;var c=e.slice(o.place,l+o.place);if(0===f[0]){if(!(128&f[1]))return!1;f=f.slice(1)}if(0===c[0]){if(!(128&c[1]))return!1;c=c.slice(1)}return this.r=new i(f),this.s=new i(c),this.recoveryParam=null,!0},s.prototype.toDER=function t(e){var r=this.r.toArray(),i=this.s.toArray();for(128&r[0]&&(r=[0].concat(r)),128&i[0]&&(i=[0].concat(i)),r=u(r),i=u(i);!(i[0]||128&i[1]);)i=i.slice(1);var o=[2];f(o,r.length),(o=o.concat(r)).push(2),f(o,i.length);var s=o.concat(i),a=[48];return f(a,s.length),a=a.concat(s),n.encode(a,e)}},function(t,e,r){"use strict";var i=r(60),n=r(59),o=r(7),s=o.assert,a=o.parseBytes,h=r(223),u=r(224);function f(t){if(s("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof f))return new f(t);t=n[t].curve,this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=i.sha512}t.exports=f,f.prototype.sign=function t(e,r){e=a(e);var i=this.keyFromSecret(r),n=this.hashInt(i.messagePrefix(),e),o=this.g.mul(n),s=this.encodePoint(o),h=this.hashInt(s,i.pubBytes(),e).mul(i.priv()),u=n.add(h).umod(this.curve.n);return this.makeSignature({R:o,S:u,Rencoded:s})},f.prototype.verify=function t(e,r,i){e=a(e),r=this.makeSignature(r);var n=this.keyFromPublic(i),o=this.hashInt(r.Rencoded(),n.pubBytes(),e),s=this.g.mul(r.S());return r.R().add(n.pub().mul(o)).eq(s)},f.prototype.hashInt=function t(){for(var e=this.hash(),r=0;r=e)throw new Error("invalid sig")}t.exports=function u(t,e,r,f,l){var c=s(r);if("ec"===c.type){if("ecdsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");return function d(t,e,r){var i=a[r.data.algorithm.curve.join(".")];if(!i)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var n=new o(i),s=r.data.subjectPrivateKey.data;return n.verify(e,t,s)}(t,e,c)}if("dsa"===c.type){if("dsa"!==f)throw new Error("wrong public key type");return function p(t,e,r){var i=r.data.p,o=r.data.q,a=r.data.g,u=r.data.pub_key,f=s.signature.decode(t,"der"),l=f.s,c=f.r;h(l,o),h(c,o);var d=n.mont(i),p=l.invm(o);return 0===a.toRed(d).redPow(new n(e).mul(p).mod(o)).fromRed().mul(u.toRed(d).redPow(c.mul(p).mod(o)).fromRed()).mod(i).mod(o).cmp(c)}(t,e,c)}if("rsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");e=i.concat([l,e]);for(var m=c.modulus.byteLength(),g=[1],v=0;e.length+g.length+2=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s=49?a-49+10:a>=17?a-17+10:a}return n}o.isBN=function t(e){return e instanceof o||null!==e&&"object"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function t(e,r){return e.cmp(r)>0?e:r},o.min=function t(e,r){return e.cmp(r)<0?e:r},o.prototype._init=function t(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"==typeof e)return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initNumber=function t(e,r,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initArray=function t(e,r,n){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[s]|=a<>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);else if("le"===n)for(o=0,s=0;o>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);return this.strip()},o.prototype._parseHex=function t(e,r){this.length=Math.ceil((e.length-r)/6),this.words=new Array(this.length);for(var i=0;i=r;i-=6)o=a(e,i,i+6),this.words[n]|=o<>>26-s&4194303,(s+=24)>=26&&(s-=26,n++);i+6!==r&&(o=a(e,r,i+6),this.words[n]|=o<>>26-s&4194303),this.strip()},o.prototype._parseBase=function t(e,r,i){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=r)n++;n--,o=o/r|0;for(var s=e.length-i,a=s%n,u=Math.min(s,s-a)+i,f=0,l=i;l1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function t(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function t(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function c(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u>>26,l=67108863&h,c=Math.min(u,e.length-1),d=Math.max(0,u-t.length+1);d<=c;d++){var p=u-d|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[d])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}o.prototype.toString=function t(e,r){var n;if(r=0|r||1,16===(e=e||10)||"hex"===e){n="";for(var o=0,s=0,a=0;a>>24-o&16777215)||a!==this.length-1?u[6-c.length]+c+n:c+n,(o+=2)>=26&&(o-=26,a--)}for(0!==s&&(n=s.toString(16)+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var d=f[e],p=l[e];n="";var m=this.clone();for(m.negative=0;!m.isZero();){var g=m.modn(p).toString(e);n=(m=m.idivn(p)).isZero()?g+n:u[d-g.length]+g+n}for(this.isZero()&&(n="0"+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function t(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function t(){return this.toString(16)},o.prototype.toBuffer=function t(e,r){return i(void 0!==s),this.toArrayLike(s,e,r)},o.prototype.toArray=function t(e,r){return this.toArrayLike(Array,e,r)},o.prototype.toArrayLike=function t(e,r,n){var o=this.byteLength(),s=n||Math.max(1,o);i(o<=s,"byte array longer than desired length"),i(s>0,"Requested array length <= 0"),this.strip();var a,h,u="le"===r,f=new e(s),l=this.clone();if(u){for(h=0;!l.isZero();h++)a=l.andln(255),l.iushrn(8),f[h]=a;for(;h=4096&&(i+=13,r>>>=13),r>=64&&(i+=7,r>>>=7),r>=8&&(i+=4,r>>>=4),r>=2&&(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function t(e){if(0===e)return 26;var r=e,i=0;return 0==(8191&r)&&(i+=13,r>>>=13),0==(127&r)&&(i+=7,r>>>=7),0==(15&r)&&(i+=4,r>>>=4),0==(3&r)&&(i+=2,r>>>=2),0==(1&r)&&i++,i},o.prototype.bitLength=function t(){var e=this.words[this.length-1],r=this._countBits(e);return 26*(this.length-1)+r},o.prototype.zeroBits=function t(){if(this.isZero())return 0;for(var e=0,r=0;re.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function t(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function t(e){var r;r=this.length>e.length?e:this;for(var i=0;ie.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function t(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function t(e){var r,i;this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function t(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function t(e){i("number"==typeof e&&e>=0);var r=0|Math.ceil(e/26),n=e%26;this._expand(r),n>0&&r--;for(var o=0;o0&&(this.words[o]=~this.words[o]&67108863>>26-n),this.strip()},o.prototype.notn=function t(e){return this.clone().inotn(e)},o.prototype.setn=function t(e,r){i("number"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=r?this.words[n]|1<e.length?(i=this,n=e):(i=e,n=this);for(var o=0,s=0;s>>26;for(;0!==o&&s>>26;if(this.length=i.length,0!==o)this.words[this.length]=o,this.length++;else if(i!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function t(e){if(0!==e.negative){e.negative=0;var r=this.iadd(e);return e.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var i,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(i=this,n=e):(i=e,n=this);for(var s=0,a=0;a>26,this.words[a]=67108863&r;for(;0!==s&&a>26,this.words[a]=67108863&r;if(0===s&&a>>13,p=0|a[1],m=8191&p,g=p>>>13,v=0|a[2],b=8191&v,y=v>>>13,w=0|a[3],_=8191&w,M=w>>>13,S=0|a[4],k=8191&S,E=S>>>13,R=0|a[5],A=8191&R,T=R>>>13,x=0|a[6],I=8191&x,L=x>>>13,P=0|a[7],B=8191&P,C=P>>>13,O=0|a[8],j=8191&O,U=O>>>13,N=0|a[9],q=8191&N,D=N>>>13,z=0|h[0],F=8191&z,W=z>>>13,H=0|h[1],Z=8191&H,K=H>>>13,V=0|h[2],J=8191&V,Y=V>>>13,X=0|h[3],G=8191&X,Q=X>>>13,$=0|h[4],tt=8191&$,et=$>>>13,rt=0|h[5],it=8191&rt,nt=rt>>>13,ot=0|h[6],st=8191&ot,at=ot>>>13,ht=0|h[7],ut=8191&ht,ft=ht>>>13,lt=0|h[8],ct=8191<,dt=lt>>>13,pt=0|h[9],mt=8191&pt,gt=pt>>>13;i.negative=e.negative^r.negative,i.length=19;var vt=(f+(n=Math.imul(c,F))|0)+((8191&(o=(o=Math.imul(c,W))+Math.imul(d,F)|0))<<13)|0;f=((s=Math.imul(d,W))+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(m,F),o=(o=Math.imul(m,W))+Math.imul(g,F)|0,s=Math.imul(g,W);var bt=(f+(n=n+Math.imul(c,Z)|0)|0)+((8191&(o=(o=o+Math.imul(c,K)|0)+Math.imul(d,Z)|0))<<13)|0;f=((s=s+Math.imul(d,K)|0)+(o>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(b,F),o=(o=Math.imul(b,W))+Math.imul(y,F)|0,s=Math.imul(y,W),n=n+Math.imul(m,Z)|0,o=(o=o+Math.imul(m,K)|0)+Math.imul(g,Z)|0,s=s+Math.imul(g,K)|0;var yt=(f+(n=n+Math.imul(c,J)|0)|0)+((8191&(o=(o=o+Math.imul(c,Y)|0)+Math.imul(d,J)|0))<<13)|0;f=((s=s+Math.imul(d,Y)|0)+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(_,F),o=(o=Math.imul(_,W))+Math.imul(M,F)|0,s=Math.imul(M,W),n=n+Math.imul(b,Z)|0,o=(o=o+Math.imul(b,K)|0)+Math.imul(y,Z)|0,s=s+Math.imul(y,K)|0,n=n+Math.imul(m,J)|0,o=(o=o+Math.imul(m,Y)|0)+Math.imul(g,J)|0,s=s+Math.imul(g,Y)|0;var wt=(f+(n=n+Math.imul(c,G)|0)|0)+((8191&(o=(o=o+Math.imul(c,Q)|0)+Math.imul(d,G)|0))<<13)|0;f=((s=s+Math.imul(d,Q)|0)+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,F),o=(o=Math.imul(k,W))+Math.imul(E,F)|0,s=Math.imul(E,W),n=n+Math.imul(_,Z)|0,o=(o=o+Math.imul(_,K)|0)+Math.imul(M,Z)|0,s=s+Math.imul(M,K)|0,n=n+Math.imul(b,J)|0,o=(o=o+Math.imul(b,Y)|0)+Math.imul(y,J)|0,s=s+Math.imul(y,Y)|0,n=n+Math.imul(m,G)|0,o=(o=o+Math.imul(m,Q)|0)+Math.imul(g,G)|0,s=s+Math.imul(g,Q)|0;var _t=(f+(n=n+Math.imul(c,tt)|0)|0)+((8191&(o=(o=o+Math.imul(c,et)|0)+Math.imul(d,tt)|0))<<13)|0;f=((s=s+Math.imul(d,et)|0)+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(A,F),o=(o=Math.imul(A,W))+Math.imul(T,F)|0,s=Math.imul(T,W),n=n+Math.imul(k,Z)|0,o=(o=o+Math.imul(k,K)|0)+Math.imul(E,Z)|0,s=s+Math.imul(E,K)|0,n=n+Math.imul(_,J)|0,o=(o=o+Math.imul(_,Y)|0)+Math.imul(M,J)|0,s=s+Math.imul(M,Y)|0,n=n+Math.imul(b,G)|0,o=(o=o+Math.imul(b,Q)|0)+Math.imul(y,G)|0,s=s+Math.imul(y,Q)|0,n=n+Math.imul(m,tt)|0,o=(o=o+Math.imul(m,et)|0)+Math.imul(g,tt)|0,s=s+Math.imul(g,et)|0;var Mt=(f+(n=n+Math.imul(c,it)|0)|0)+((8191&(o=(o=o+Math.imul(c,nt)|0)+Math.imul(d,it)|0))<<13)|0;f=((s=s+Math.imul(d,nt)|0)+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(I,F),o=(o=Math.imul(I,W))+Math.imul(L,F)|0,s=Math.imul(L,W),n=n+Math.imul(A,Z)|0,o=(o=o+Math.imul(A,K)|0)+Math.imul(T,Z)|0,s=s+Math.imul(T,K)|0,n=n+Math.imul(k,J)|0,o=(o=o+Math.imul(k,Y)|0)+Math.imul(E,J)|0,s=s+Math.imul(E,Y)|0,n=n+Math.imul(_,G)|0,o=(o=o+Math.imul(_,Q)|0)+Math.imul(M,G)|0,s=s+Math.imul(M,Q)|0,n=n+Math.imul(b,tt)|0,o=(o=o+Math.imul(b,et)|0)+Math.imul(y,tt)|0,s=s+Math.imul(y,et)|0,n=n+Math.imul(m,it)|0,o=(o=o+Math.imul(m,nt)|0)+Math.imul(g,it)|0,s=s+Math.imul(g,nt)|0;var St=(f+(n=n+Math.imul(c,st)|0)|0)+((8191&(o=(o=o+Math.imul(c,at)|0)+Math.imul(d,st)|0))<<13)|0;f=((s=s+Math.imul(d,at)|0)+(o>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,F),o=(o=Math.imul(B,W))+Math.imul(C,F)|0,s=Math.imul(C,W),n=n+Math.imul(I,Z)|0,o=(o=o+Math.imul(I,K)|0)+Math.imul(L,Z)|0,s=s+Math.imul(L,K)|0,n=n+Math.imul(A,J)|0,o=(o=o+Math.imul(A,Y)|0)+Math.imul(T,J)|0,s=s+Math.imul(T,Y)|0,n=n+Math.imul(k,G)|0,o=(o=o+Math.imul(k,Q)|0)+Math.imul(E,G)|0,s=s+Math.imul(E,Q)|0,n=n+Math.imul(_,tt)|0,o=(o=o+Math.imul(_,et)|0)+Math.imul(M,tt)|0,s=s+Math.imul(M,et)|0,n=n+Math.imul(b,it)|0,o=(o=o+Math.imul(b,nt)|0)+Math.imul(y,it)|0,s=s+Math.imul(y,nt)|0,n=n+Math.imul(m,st)|0,o=(o=o+Math.imul(m,at)|0)+Math.imul(g,st)|0,s=s+Math.imul(g,at)|0;var kt=(f+(n=n+Math.imul(c,ut)|0)|0)+((8191&(o=(o=o+Math.imul(c,ft)|0)+Math.imul(d,ut)|0))<<13)|0;f=((s=s+Math.imul(d,ft)|0)+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(j,F),o=(o=Math.imul(j,W))+Math.imul(U,F)|0,s=Math.imul(U,W),n=n+Math.imul(B,Z)|0,o=(o=o+Math.imul(B,K)|0)+Math.imul(C,Z)|0,s=s+Math.imul(C,K)|0,n=n+Math.imul(I,J)|0,o=(o=o+Math.imul(I,Y)|0)+Math.imul(L,J)|0,s=s+Math.imul(L,Y)|0,n=n+Math.imul(A,G)|0,o=(o=o+Math.imul(A,Q)|0)+Math.imul(T,G)|0,s=s+Math.imul(T,Q)|0,n=n+Math.imul(k,tt)|0,o=(o=o+Math.imul(k,et)|0)+Math.imul(E,tt)|0,s=s+Math.imul(E,et)|0,n=n+Math.imul(_,it)|0,o=(o=o+Math.imul(_,nt)|0)+Math.imul(M,it)|0,s=s+Math.imul(M,nt)|0,n=n+Math.imul(b,st)|0,o=(o=o+Math.imul(b,at)|0)+Math.imul(y,st)|0,s=s+Math.imul(y,at)|0,n=n+Math.imul(m,ut)|0,o=(o=o+Math.imul(m,ft)|0)+Math.imul(g,ut)|0,s=s+Math.imul(g,ft)|0;var Et=(f+(n=n+Math.imul(c,ct)|0)|0)+((8191&(o=(o=o+Math.imul(c,dt)|0)+Math.imul(d,ct)|0))<<13)|0;f=((s=s+Math.imul(d,dt)|0)+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(q,F),o=(o=Math.imul(q,W))+Math.imul(D,F)|0,s=Math.imul(D,W),n=n+Math.imul(j,Z)|0,o=(o=o+Math.imul(j,K)|0)+Math.imul(U,Z)|0,s=s+Math.imul(U,K)|0,n=n+Math.imul(B,J)|0,o=(o=o+Math.imul(B,Y)|0)+Math.imul(C,J)|0,s=s+Math.imul(C,Y)|0,n=n+Math.imul(I,G)|0,o=(o=o+Math.imul(I,Q)|0)+Math.imul(L,G)|0,s=s+Math.imul(L,Q)|0,n=n+Math.imul(A,tt)|0,o=(o=o+Math.imul(A,et)|0)+Math.imul(T,tt)|0,s=s+Math.imul(T,et)|0,n=n+Math.imul(k,it)|0,o=(o=o+Math.imul(k,nt)|0)+Math.imul(E,it)|0,s=s+Math.imul(E,nt)|0,n=n+Math.imul(_,st)|0,o=(o=o+Math.imul(_,at)|0)+Math.imul(M,st)|0,s=s+Math.imul(M,at)|0,n=n+Math.imul(b,ut)|0,o=(o=o+Math.imul(b,ft)|0)+Math.imul(y,ut)|0,s=s+Math.imul(y,ft)|0,n=n+Math.imul(m,ct)|0,o=(o=o+Math.imul(m,dt)|0)+Math.imul(g,ct)|0,s=s+Math.imul(g,dt)|0;var Rt=(f+(n=n+Math.imul(c,mt)|0)|0)+((8191&(o=(o=o+Math.imul(c,gt)|0)+Math.imul(d,mt)|0))<<13)|0;f=((s=s+Math.imul(d,gt)|0)+(o>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(q,Z),o=(o=Math.imul(q,K))+Math.imul(D,Z)|0,s=Math.imul(D,K),n=n+Math.imul(j,J)|0,o=(o=o+Math.imul(j,Y)|0)+Math.imul(U,J)|0,s=s+Math.imul(U,Y)|0,n=n+Math.imul(B,G)|0,o=(o=o+Math.imul(B,Q)|0)+Math.imul(C,G)|0,s=s+Math.imul(C,Q)|0,n=n+Math.imul(I,tt)|0,o=(o=o+Math.imul(I,et)|0)+Math.imul(L,tt)|0,s=s+Math.imul(L,et)|0,n=n+Math.imul(A,it)|0,o=(o=o+Math.imul(A,nt)|0)+Math.imul(T,it)|0,s=s+Math.imul(T,nt)|0,n=n+Math.imul(k,st)|0,o=(o=o+Math.imul(k,at)|0)+Math.imul(E,st)|0,s=s+Math.imul(E,at)|0,n=n+Math.imul(_,ut)|0,o=(o=o+Math.imul(_,ft)|0)+Math.imul(M,ut)|0,s=s+Math.imul(M,ft)|0,n=n+Math.imul(b,ct)|0,o=(o=o+Math.imul(b,dt)|0)+Math.imul(y,ct)|0,s=s+Math.imul(y,dt)|0;var At=(f+(n=n+Math.imul(m,mt)|0)|0)+((8191&(o=(o=o+Math.imul(m,gt)|0)+Math.imul(g,mt)|0))<<13)|0;f=((s=s+Math.imul(g,gt)|0)+(o>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(q,J),o=(o=Math.imul(q,Y))+Math.imul(D,J)|0,s=Math.imul(D,Y),n=n+Math.imul(j,G)|0,o=(o=o+Math.imul(j,Q)|0)+Math.imul(U,G)|0,s=s+Math.imul(U,Q)|0,n=n+Math.imul(B,tt)|0,o=(o=o+Math.imul(B,et)|0)+Math.imul(C,tt)|0,s=s+Math.imul(C,et)|0,n=n+Math.imul(I,it)|0,o=(o=o+Math.imul(I,nt)|0)+Math.imul(L,it)|0,s=s+Math.imul(L,nt)|0,n=n+Math.imul(A,st)|0,o=(o=o+Math.imul(A,at)|0)+Math.imul(T,st)|0,s=s+Math.imul(T,at)|0,n=n+Math.imul(k,ut)|0,o=(o=o+Math.imul(k,ft)|0)+Math.imul(E,ut)|0,s=s+Math.imul(E,ft)|0,n=n+Math.imul(_,ct)|0,o=(o=o+Math.imul(_,dt)|0)+Math.imul(M,ct)|0,s=s+Math.imul(M,dt)|0;var Tt=(f+(n=n+Math.imul(b,mt)|0)|0)+((8191&(o=(o=o+Math.imul(b,gt)|0)+Math.imul(y,mt)|0))<<13)|0;f=((s=s+Math.imul(y,gt)|0)+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(q,G),o=(o=Math.imul(q,Q))+Math.imul(D,G)|0,s=Math.imul(D,Q),n=n+Math.imul(j,tt)|0,o=(o=o+Math.imul(j,et)|0)+Math.imul(U,tt)|0,s=s+Math.imul(U,et)|0,n=n+Math.imul(B,it)|0,o=(o=o+Math.imul(B,nt)|0)+Math.imul(C,it)|0,s=s+Math.imul(C,nt)|0,n=n+Math.imul(I,st)|0,o=(o=o+Math.imul(I,at)|0)+Math.imul(L,st)|0,s=s+Math.imul(L,at)|0,n=n+Math.imul(A,ut)|0,o=(o=o+Math.imul(A,ft)|0)+Math.imul(T,ut)|0,s=s+Math.imul(T,ft)|0,n=n+Math.imul(k,ct)|0,o=(o=o+Math.imul(k,dt)|0)+Math.imul(E,ct)|0,s=s+Math.imul(E,dt)|0;var xt=(f+(n=n+Math.imul(_,mt)|0)|0)+((8191&(o=(o=o+Math.imul(_,gt)|0)+Math.imul(M,mt)|0))<<13)|0;f=((s=s+Math.imul(M,gt)|0)+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(q,tt),o=(o=Math.imul(q,et))+Math.imul(D,tt)|0,s=Math.imul(D,et),n=n+Math.imul(j,it)|0,o=(o=o+Math.imul(j,nt)|0)+Math.imul(U,it)|0,s=s+Math.imul(U,nt)|0,n=n+Math.imul(B,st)|0,o=(o=o+Math.imul(B,at)|0)+Math.imul(C,st)|0,s=s+Math.imul(C,at)|0,n=n+Math.imul(I,ut)|0,o=(o=o+Math.imul(I,ft)|0)+Math.imul(L,ut)|0,s=s+Math.imul(L,ft)|0,n=n+Math.imul(A,ct)|0,o=(o=o+Math.imul(A,dt)|0)+Math.imul(T,ct)|0,s=s+Math.imul(T,dt)|0;var It=(f+(n=n+Math.imul(k,mt)|0)|0)+((8191&(o=(o=o+Math.imul(k,gt)|0)+Math.imul(E,mt)|0))<<13)|0;f=((s=s+Math.imul(E,gt)|0)+(o>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(q,it),o=(o=Math.imul(q,nt))+Math.imul(D,it)|0,s=Math.imul(D,nt),n=n+Math.imul(j,st)|0,o=(o=o+Math.imul(j,at)|0)+Math.imul(U,st)|0,s=s+Math.imul(U,at)|0,n=n+Math.imul(B,ut)|0,o=(o=o+Math.imul(B,ft)|0)+Math.imul(C,ut)|0,s=s+Math.imul(C,ft)|0,n=n+Math.imul(I,ct)|0,o=(o=o+Math.imul(I,dt)|0)+Math.imul(L,ct)|0,s=s+Math.imul(L,dt)|0;var Lt=(f+(n=n+Math.imul(A,mt)|0)|0)+((8191&(o=(o=o+Math.imul(A,gt)|0)+Math.imul(T,mt)|0))<<13)|0;f=((s=s+Math.imul(T,gt)|0)+(o>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(q,st),o=(o=Math.imul(q,at))+Math.imul(D,st)|0,s=Math.imul(D,at),n=n+Math.imul(j,ut)|0,o=(o=o+Math.imul(j,ft)|0)+Math.imul(U,ut)|0,s=s+Math.imul(U,ft)|0,n=n+Math.imul(B,ct)|0,o=(o=o+Math.imul(B,dt)|0)+Math.imul(C,ct)|0,s=s+Math.imul(C,dt)|0;var Pt=(f+(n=n+Math.imul(I,mt)|0)|0)+((8191&(o=(o=o+Math.imul(I,gt)|0)+Math.imul(L,mt)|0))<<13)|0;f=((s=s+Math.imul(L,gt)|0)+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(q,ut),o=(o=Math.imul(q,ft))+Math.imul(D,ut)|0,s=Math.imul(D,ft),n=n+Math.imul(j,ct)|0,o=(o=o+Math.imul(j,dt)|0)+Math.imul(U,ct)|0,s=s+Math.imul(U,dt)|0;var Bt=(f+(n=n+Math.imul(B,mt)|0)|0)+((8191&(o=(o=o+Math.imul(B,gt)|0)+Math.imul(C,mt)|0))<<13)|0;f=((s=s+Math.imul(C,gt)|0)+(o>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(q,ct),o=(o=Math.imul(q,dt))+Math.imul(D,ct)|0,s=Math.imul(D,dt);var Ct=(f+(n=n+Math.imul(j,mt)|0)|0)+((8191&(o=(o=o+Math.imul(j,gt)|0)+Math.imul(U,mt)|0))<<13)|0;f=((s=s+Math.imul(U,gt)|0)+(o>>>13)|0)+(Ct>>>26)|0,Ct&=67108863;var Ot=(f+(n=Math.imul(q,mt))|0)+((8191&(o=(o=Math.imul(q,gt))+Math.imul(D,mt)|0))<<13)|0;return f=((s=Math.imul(D,gt))+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,u[0]=vt,u[1]=bt,u[2]=yt,u[3]=wt,u[4]=_t,u[5]=Mt,u[6]=St,u[7]=kt,u[8]=Et,u[9]=Rt,u[10]=At,u[11]=Tt,u[12]=xt,u[13]=It,u[14]=Lt,u[15]=Pt,u[16]=Bt,u[17]=Ct,u[18]=Ot,0!==f&&(u[19]=f,i.length++),i};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(d=c),o.prototype.mulTo=function t(e,r){var i=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,r):i<63?c(this,e,r):i<1024?function n(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,e,r):p(this,e,r)},m.prototype.makeRBT=function t(e){for(var r=new Array(e),i=o.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function t(e,r,i,n,o,s){for(var a=0;a>>=1)o++;return 1<>>=13,n[2*a+1]=8191&s,s>>>=13;for(a=2*r;a>=26,r+=o/67108864|0,r+=s>>>26,this.words[n]=67108863&s}return 0!==r&&(this.words[n]=r,this.length++),this},o.prototype.muln=function t(e){return this.clone().imuln(e)},o.prototype.sqr=function t(){return this.mul(this)},o.prototype.isqr=function t(){return this.imul(this.clone())},o.prototype.pow=function t(e){var r=function i(t){for(var e=new Array(t.bitLength()),r=0;r>>n}return e}(e);if(0===r.length)return new o(1);for(var n=this,s=0;s=0);var r,n=e%26,o=(e-n)/26,s=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(r=0;r>>26-n}a&&(this.words[r]=a,this.length++)}if(0!==o){for(r=this.length-1;r>=0;r--)this.words[r+o]=this.words[r];for(r=0;r=0),o=r?(r-r%26)/26:0;var s=e%26,a=Math.min((e-s)/26,this.length),h=67108863^67108863>>>s<a)for(this.length-=a,f=0;f=0&&(0!==l||f>=o);f--){var c=0|this.words[f];this.words[f]=l<<26-s|c>>>s,l=c&h}return u&&0!==l&&(u.words[u.length++]=l),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function t(e,r,n){return i(0===this.negative),this.iushrn(e,r,n)},o.prototype.shln=function t(e){return this.clone().ishln(e)},o.prototype.ushln=function t(e){return this.clone().iushln(e)},o.prototype.shrn=function t(e){return this.clone().ishrn(e)},o.prototype.ushrn=function t(e){return this.clone().iushrn(e)},o.prototype.testn=function t(e){i("number"==typeof e&&e>=0);var r=e%26,n=(e-r)/26,o=1<=0);var r=e%26,n=(e-r)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==r&&n++,this.length=Math.min(n,this.length),0!==r){var o=67108863^67108863>>>r<=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function t(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var r=0;r>26)-(u/67108864|0),this.words[o+n]=67108863&s}for(;o>26,this.words[o+n]=67108863&s;if(0===h)return this.strip();for(i(-1===h),h=0,o=0;o>26,this.words[o]=67108863&s;return this.negative=1,this.strip()},o.prototype._wordDiv=function t(e,r){var i=(this.length,e.length),n=this.clone(),s=e,a=0|s.words[s.length-1];0!==(i=26-this._countBits(a))&&(s=s.ushln(i),n.iushln(i),a=0|s.words[s.length-1]);var h,u=n.length-s.length;if("mod"!==r){(h=new o(null)).length=u+1,h.words=new Array(h.length);for(var f=0;f=0;c--){var d=67108864*(0|n.words[s.length+c])+(0|n.words[s.length+c-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(s,d,c);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(s,1,c),n.isZero()||(n.negative^=1);h&&(h.words[c]=d)}return h&&h.strip(),n.strip(),"div"!==r&&0!==i&&n.iushrn(i),{div:h||null,mod:n}},o.prototype.divmod=function t(e,r,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(h=this.neg().divmod(e,r),"mod"!==r&&(s=h.div.neg()),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:s,mod:a}):0===this.negative&&0!==e.negative?(h=this.divmod(e.neg(),r),"mod"!==r&&(s=h.div.neg()),{div:s,mod:h.mod}):0!=(this.negative&e.negative)?(h=this.neg().divmod(e.neg(),r),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:h.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===r?{div:this.divn(e.words[0]),mod:null}:"mod"===r?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,r);var s,a,h},o.prototype.div=function t(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function t(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function t(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function t(e){var r=this.divmod(e);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(e):r.mod,n=e.ushrn(1),o=e.andln(1),s=i.cmp(n);return s<0||1===o&&0===s?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function t(e){i(e<=67108863);for(var r=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(r*n+(0|this.words[o]))%e;return n},o.prototype.idivn=function t(e){i(e<=67108863);for(var r=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*r;this.words[n]=o/e|0,r=o%e}return this.strip()},o.prototype.divn=function t(e){return this.clone().idivn(e)},o.prototype.egcd=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s=new o(1),a=new o(0),h=new o(0),u=new o(1),f=0;r.isEven()&&n.isEven();)r.iushrn(1),n.iushrn(1),++f;for(var l=n.clone(),c=r.clone();!r.isZero();){for(var d=0,p=1;0==(r.words[0]&p)&&d<26;++d,p<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(l),a.isub(c)),s.iushrn(1),a.iushrn(1);for(var m=0,g=1;0==(n.words[0]&g)&&m<26;++m,g<<=1);if(m>0)for(n.iushrn(m);m-- >0;)(h.isOdd()||u.isOdd())&&(h.iadd(l),u.isub(c)),h.iushrn(1),u.iushrn(1);r.cmp(n)>=0?(r.isub(n),s.isub(h),a.isub(u)):(n.isub(r),h.isub(s),u.isub(a))}return{a:h,b:u,gcd:n.iushln(f)}},o.prototype._invmp=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s,a=new o(1),h=new o(0),u=n.clone();r.cmpn(1)>0&&n.cmpn(1)>0;){for(var f=0,l=1;0==(r.words[0]&l)&&f<26;++f,l<<=1);if(f>0)for(r.iushrn(f);f-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var c=0,d=1;0==(n.words[0]&d)&&c<26;++c,d<<=1);if(c>0)for(n.iushrn(c);c-- >0;)h.isOdd()&&h.iadd(u),h.iushrn(1);r.cmp(n)>=0?(r.isub(n),a.isub(h)):(n.isub(r),h.isub(a))}return(s=0===r.cmpn(1)?a:h).cmpn(0)<0&&s.iadd(e),s},o.prototype.gcd=function t(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var r=this.clone(),i=e.clone();r.negative=0,i.negative=0;for(var n=0;r.isEven()&&i.isEven();n++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var o=r.cmp(i);if(o<0){var s=r;r=i,i=s}else if(0===o||0===i.cmpn(1))break;r.isub(i)}return i.iushln(n)},o.prototype.invm=function t(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function t(){return 0==(1&this.words[0])},o.prototype.isOdd=function t(){return 1==(1&this.words[0])},o.prototype.andln=function t(e){return this.words[0]&e},o.prototype.bincn=function t(e){i("number"==typeof e);var r=e%26,n=(e-r)/26,o=1<>>26,h&=67108863,this.words[a]=h}return 0!==s&&(this.words[a]=s,this.length++),this},o.prototype.isZero=function t(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function t(e){var r,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)r=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var o=0|this.words[0];r=o===e?0:oe.length)return 1;if(this.length=0;i--){var n=0|this.words[i],o=0|e.words[i];if(n!==o){no&&(r=1);break}}return r},o.prototype.gtn=function t(e){return 1===this.cmpn(e)},o.prototype.gt=function t(e){return 1===this.cmp(e)},o.prototype.gten=function t(e){return this.cmpn(e)>=0},o.prototype.gte=function t(e){return this.cmp(e)>=0},o.prototype.ltn=function t(e){return-1===this.cmpn(e)},o.prototype.lt=function t(e){return-1===this.cmp(e)},o.prototype.lten=function t(e){return this.cmpn(e)<=0},o.prototype.lte=function t(e){return this.cmp(e)<=0},o.prototype.eqn=function t(e){return 0===this.cmpn(e)},o.prototype.eq=function t(e){return 0===this.cmp(e)},o.red=function t(e){return new M(e)},o.prototype.toRed=function t(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function t(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function t(e){return this.red=e,this},o.prototype.forceRed=function t(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function t(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function t(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function t(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function t(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function t(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function t(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function t(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function t(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function t(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function t(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function t(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function M(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function S(t){M.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function t(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function t(e){var r,i=e;do{this.split(i,this.tmp),r=(i=(i=this.imulK(i)).iadd(this.tmp)).bitLength()}while(r>this.n);var n=r0?i.isub(this.p):void 0!==i.strip?i.strip():i._strip(),i},v.prototype.split=function t(e,r){e.iushrn(this.n,0,r)},v.prototype.imulK=function t(e){return e.imul(this.k)},n(b,v),b.prototype.split=function t(e,r){for(var i=4194303,n=Math.min(e.length,9),o=0;o>>22,s=a}s>>>=22,e.words[o-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function t(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var r=0,i=0;i>>=26,e.words[i]=o,r=n}return 0!==r&&(e.words[e.length++]=r),e},o._prime=function t(e){if(g[e])return g[e];var t;if("k256"===e)t=new b;else if("p224"===e)t=new y;else if("p192"===e)t=new w;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new _}return g[e]=t,t},M.prototype._verify1=function t(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},M.prototype._verify2=function t(e,r){i(0==(e.negative|r.negative),"red works only with positives"),i(e.red&&e.red===r.red,"red works only with red numbers")},M.prototype.imod=function t(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},M.prototype.neg=function t(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},M.prototype.add=function t(e,r){this._verify2(e,r);var i=e.add(r);return i.cmp(this.m)>=0&&i.isub(this.m),i._forceRed(this)},M.prototype.iadd=function t(e,r){this._verify2(e,r);var i=e.iadd(r);return i.cmp(this.m)>=0&&i.isub(this.m),i},M.prototype.sub=function t(e,r){this._verify2(e,r);var i=e.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},M.prototype.isub=function t(e,r){this._verify2(e,r);var i=e.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},M.prototype.shl=function t(e,r){return this._verify1(e),this.imod(e.ushln(r))},M.prototype.imul=function t(e,r){return this._verify2(e,r),this.imod(e.imul(r))},M.prototype.mul=function t(e,r){return this._verify2(e,r),this.imod(e.mul(r))},M.prototype.isqr=function t(e){return this.imul(e,e.clone())},M.prototype.sqr=function t(e){return this.mul(e,e)},M.prototype.sqrt=function t(e){if(e.isZero())return e.clone();var r=this.m.andln(3);if(i(r%2==1),3===r){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var s=this.m.subn(1),a=0;!s.isZero()&&0===s.andln(1);)a++,s.iushrn(1);i(!s.isZero());var h=new o(1).toRed(this),u=h.redNeg(),f=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);0!==this.pow(l,f).cmp(u);)l.redIAdd(u);for(var c=this.pow(l,s),d=this.pow(e,s.addn(1).iushrn(1)),p=this.pow(e,s),m=a;0!==p.cmp(h);){for(var g=p,v=0;0!==g.cmp(h);v++)g=g.redSqr();i(v=0;n--){for(var f=r.words[n],l=u-1;l>=0;l--){var c=f>>l&1;s!==i[0]&&(s=this.sqr(s)),0!==c||0!==a?(a<<=1,a|=c,(4===++h||0===n&&0===l)&&(s=this.mul(s,i[a]),h=0,a=0)):h=0}u=26}return s},M.prototype.convertTo=function t(e){var r=e.umod(this.m);return r===e?r.clone():r},M.prototype.convertFrom=function t(e){var r=e.clone();return r.red=null,r},o.mont=function t(e){return new S(e)},n(S,M),S.prototype.convertTo=function t(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function t(e){var r=this.imod(e.mul(this.rinv));return r.red=null,r},S.prototype.imul=function t(e,r){if(e.isZero()||r.isZero())return e.words[0]=0,e.length=1,e;var i=e.imul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=i.isub(n).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},S.prototype.mul=function t(e,r){if(e.isZero()||r.isZero())return new o(0)._forceRed(this);var i=e.mul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=i.isub(n).iushrn(this.shift),a=s;return s.cmp(this.m)>=0?a=s.isub(this.m):s.cmpn(0)<0&&(a=s.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function t(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(16)(t))},function(t,e){},function(t,e,r){e.publicEncrypt=r(240),e.privateDecrypt=r(242),e.privateEncrypt=function t(r,i){return e.publicEncrypt(r,i,!0)},e.publicDecrypt=function t(r,i){return e.privateDecrypt(r,i,!0)}},function(t,e,r){var i=r(37),n=r(18),o=r(26),s=r(120),a=r(121),h=r(65),u=r(122),f=r(55),l=r(38).Buffer;t.exports=function t(e,r,c){var d;d=e.padding?e.padding:c?1:4;var p,m=i(e);if(4===d)p=function g(t,e){var r=t.modulus.byteLength(),i=e.length,u=o("sha1").update(l.alloc(0)).digest(),f=u.length,c=2*f;if(i>r-c-2)throw new Error("message too long");var d=l.alloc(r-i-c-2),p=r-f-1,m=n(f),g=a(l.concat([u,d,l.alloc(1,1),e],p),s(m,p)),v=a(m,s(g,f));return new h(l.concat([l.alloc(1),v,g],r))}(m,r);else if(1===d)p=function v(t,e,r){var i,o=e.length,s=t.modulus.byteLength();if(o>s-11)throw new Error("message too long");i=r?l.alloc(s-o-3,255):function a(t){var e,r=l.allocUnsafe(t),i=0,o=n(2*t),s=0;for(;i=0)throw new Error("data too long for modulus")}return c?f(p,m):u(p,m)}},function(t,e){},function(t,e,r){var i=r(37),n=r(120),o=r(121),s=r(65),a=r(55),h=r(26),u=r(122),f=r(38).Buffer;t.exports=function t(e,r,l){var c;c=e.padding?e.padding:l?1:4;var d,p=i(e),m=p.modulus.byteLength();if(r.length>m||new s(r).cmp(p.modulus)>=0)throw new Error("decryption error");d=l?u(new s(r),p):a(r,p);var g=f.alloc(m-d.length);if(d=f.concat([g,d],m),4===c)return function v(t,e){var r=t.modulus.byteLength(),i=h("sha1").update(f.alloc(0)).digest(),s=i.length;if(0!==e[0])throw new Error("decryption error");var a=e.slice(1,s+1),u=e.slice(s+1),l=o(a,n(u,s)),c=o(u,n(l,r-s-1));if(function d(t,e){t=f.from(t),e=f.from(e);var r=0,i=t.length;t.length!==e.length&&(r++,i=Math.min(t.length,e.length));var n=-1;for(;++n=e.length){o++;break}var s=e.slice(2,n-1);("0002"!==i.toString("hex")&&!r||"0001"!==i.toString("hex")&&r)&&o++;s.length<8&&o++;if(o)throw new Error("decryption error");return e.slice(n)}(0,d,l);if(3===c)return d;throw new Error("unknown padding")}},function(t,e,r){"use strict";(function(t,i){function n(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}var o=r(2),s=r(18),a=o.Buffer,h=o.kMaxLength,u=t.crypto||t.msCrypto,f=Math.pow(2,32)-1;function l(t,e){if("number"!=typeof t||t!=t)throw new TypeError("offset must be a number");if(t>f||t<0)throw new TypeError("offset must be a uint32");if(t>h||t>e)throw new RangeError("offset out of range")}function c(t,e,r){if("number"!=typeof t||t!=t)throw new TypeError("size must be a number");if(t>f||t<0)throw new TypeError("size must be a uint32");if(t+e>r||t>h)throw new RangeError("buffer too small")}function d(t,e,r,n){if(i.browser){var o=t.buffer,a=new Uint8Array(o,e,r);return u.getRandomValues(a),n?void i.nextTick((function(){n(null,t)})):t}if(!n)return s(r).copy(t,e),t;s(r,(function(r,i){if(r)return n(r);i.copy(t,e),n(null,t)}))}u&&u.getRandomValues||!i.browser?(e.randomFill=function p(e,r,i,n){if(!(a.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof r)n=r,r=0,i=e.length;else if("function"==typeof i)n=i,i=e.length-r;else if("function"!=typeof n)throw new TypeError('"cb" argument must be a function');return l(r,e.length),c(i,r,e.length),d(e,r,i,n)},e.randomFillSync=function m(e,r,i){void 0===r&&(r=0);if(!(a.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');l(r,e.length),void 0===i&&(i=e.length-r);return c(i,r,e.length),d(e,r,i)}):(e.randomFill=n,e.randomFillSync=n)}).call(this,r(4),r(3))},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function i(t){var e=t.jws,r=t.KeyUtil,i=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,h=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){n.Log.debug("JoseUtil.parseJwt");try{var i=e.JWS.parse(r);return{header:i.headerObj,payload:i.payloadObj}}catch(t){n.Log.error(t)}},t.validateJwt=function e(o,s,h,u,f,l,c){n.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return n.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var d=a(s.x5c[0]);s=i.getPublicKeyFromCertHex(d)}else{if("EC"!==s.kty)return n.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return n.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,h,u,f,l,c)}catch(t){return n.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,i,o,s,a,h){s||(s=0),a||(a=parseInt(Date.now()/1e3));var u=t.parseJwt(r).payload;if(!u.iss)return n.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(u.iss!==i)return n.Log.error("JoseUtil._validateJwt: Invalid issuer in token",u.iss),Promise.reject(new Error("Invalid issuer in token: "+u.iss));if(!u.aud)return n.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(u.aud===o||Array.isArray(u.aud)&&u.aud.indexOf(o)>=0))return n.Log.error("JoseUtil._validateJwt: Invalid audience in token",u.aud),Promise.reject(new Error("Invalid audience in token: "+u.aud));if(u.azp&&u.azp!==o)return n.Log.error("JoseUtil._validateJwt: Invalid azp in token",u.azp),Promise.reject(new Error("Invalid azp in token: "+u.azp));if(!h){var f=a+s,l=a-s;if(!u.iat)return n.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(f1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var i=n.UrlUtility.parseUrlFragment(e,r);this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.code=i.code,this.state=i.state,this.id_token=i.id_token,this.session_state=i.session_state,this.access_token=i.access_token,this.token_type=i.token_type,this.scope=i.scope,this.profile=void 0,this.expires_in=i.expires_in}return i(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var i=parseInt(Date.now()/1e3);this.expires_at=i+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var i=r(0),n=r(31),o=r(67);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,h=e.data,u=e.extraQueryParams,f=e.request_type;if(function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw i.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var c in s&&(r=n.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=n.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),h&&(this.state=new o.State({data:h,request_type:f}),r=n.UrlUtility.addQueryParam(r,"state",this.state.id))),u)r=n.UrlUtility.addQueryParam(r,c,u[c]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var i=r(31);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var n=i.UrlUtility.parseUrlFragment(e,"?");this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.state=n.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.TokenRevocationClient,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:d.TokenClient,v=arguments.length>5&&void 0!==arguments[5]?arguments[5]:p.JoseUtil;m(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var b=g(this,t.call(this,r));return b._events=new h.UserManagerEvents(r),b._silentRenewService=new i(b),b.settings.automaticSilentRenew&&(n.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),b.startSilentRenew()),b.settings.monitorSession&&(n.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),b._sessionMonitor=new o(b)),b._tokenRevocationClient=new a(b._settings),b._tokenClient=new l(b._settings),b._joseUtil=v,b}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(n.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(n.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){n.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){n.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?n.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinPopup: no sub")),t}))):(n.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){n.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(n.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var i=Promise.resolve();return t.id_token&&(i=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),i.then((function(){return n.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(n.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(n.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var i=this;return this._metadataService.getIssuer().then((function(t){return i.settings.getEpochTime().then((function(o){return i._joseUtil.validateJwtAttributes(r,t,i._settings.client_id,i._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinSilent: no sub")),t}))):(n.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var i=t.state;t.response;return"si:r"===i.request_type?r.signinRedirectCallback(e):"si:p"===i.request_type?r.signinPopupCallback(e):"si:s"===i.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var i=this;return this.readSignoutResponseState(e).then((function(t){var n=t.state,o=t.response;return n?"so:r"===n.request_type?i.signoutRedirectCallback(e):"so:p"===n.request_type?i.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var i=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return i?(r.redirect_uri=i,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:i,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(n.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return n.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};n.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return n.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(n.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,n).then((function(t){return i._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return n.Log.debug("UserManager._signinStart: got navigator window handle"),i.createSigninRequest(e).then((function(e){return n.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(n.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){n.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(i.current_sub){if(i.current_sub!==e.profile.sub)return n.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));n.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return n.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){n.Log.debug("UserManager._signinCallback");var i="query"===this._settings.response_mode||!this._settings.response_mode&&l.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,i)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var i={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,i).then((function(){n.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return n.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){n.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){n.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,n).then((function(t){return i._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,i=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return i.prepare(o).then((function(t){return n.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(i){return n.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(i):Promise.resolve()).then((function(){var s=e.id_token_hint||i&&i.id_token;return s&&(n.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return n.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return n.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(n.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return n.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return n.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){n.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){n.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var i=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return i._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||n.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(n.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(n.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){n.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return n.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},i(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=r.popup_redirect_uri,n=r.popup_post_logout_redirect_uri,d=r.popupWindowFeatures,p=r.popupWindowTarget,m=r.silent_redirect_uri,g=r.silentRequestTimeout,v=r.automaticSilentRenew,b=void 0!==v&&v,y=r.validateSubOnSilentRenew,w=void 0!==y&&y,_=r.includeIdTokenInSilentRenew,M=void 0===_||_,S=r.monitorSession,k=void 0===S||S,E=r.monitorAnonymousSession,R=void 0!==E&&E,A=r.checkSessionInterval,T=void 0===A?2e3:A,x=r.stopCheckSessionOnError,I=void 0===x||x,L=r.query_status_response_type,P=r.revokeAccessTokenOnSignout,B=void 0!==P&&P,C=r.accessTokenExpiringNotificationTime,O=void 0===C?60:C,j=r.redirectNavigator,U=void 0===j?new o.RedirectNavigator:j,N=r.popupNavigator,q=void 0===N?new s.PopupNavigator:N,D=r.iframeNavigator,z=void 0===D?new a.IFrameNavigator:D,F=r.userStore,W=void 0===F?new h.WebStorageStateStore({store:u.Global.sessionStorage}):F;l(this,e);var H=c(this,t.call(this,arguments[0]));return H._popup_redirect_uri=i,H._popup_post_logout_redirect_uri=n,H._popupWindowFeatures=d,H._popupWindowTarget=p,H._silent_redirect_uri=m,H._silentRequestTimeout=g,H._automaticSilentRenew=b,H._validateSubOnSilentRenew=w,H._includeIdTokenInSilentRenew=M,H._accessTokenExpiringNotificationTime=O,H._monitorSession=k,H._monitorAnonymousSession=R,H._checkSessionInterval=T,H._stopCheckSessionOnError=I,L?H._query_status_response_type=L:arguments[0]&&arguments[0].response_type?H._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":H._query_status_response_type="id_token",H._revokeAccessTokenOnSignout=B,H._redirectNavigator=U,H._popupNavigator=q,H._iframeNavigator=z,H._userStore=W,H}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),i(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(n.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var i=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];i.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),n&&this._userLoaded.raise(r)},e.prototype.unload=function e(){i.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){i.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){i.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){i.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){i.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(n.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var i=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=h(this,t.call(this,r));return s._timer=i,s._nowFunc=n||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)n.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),n.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var i=5;e15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},c.prototype.flush=function(){for(var t=16-this.cache.length,e=o.allocUnsafe(t),r=-1;++r>s%8,t._prev=o(t._prev,r?i:n);return a}function o(t,e){var r=t.length,n=-1,o=i.allocUnsafe(t.length);for(t=i.concat([t,i.from([e])]);++n>7;return o}e.encrypt=function(t,e,r){for(var o=e.length,s=i.allocUnsafe(o),a=-1;++a>>0,0),e.writeUInt32BE(t[1]>>>0,4),e.writeUInt32BE(t[2]>>>0,8),e.writeUInt32BE(t[3]>>>0,12),e}function s(t){this.h=t,this.state=i.alloc(16,0),this.cache=i.allocUnsafe(0)}s.prototype.ghash=function(t){for(var e=-1;++e0;t--)r[t]=r[t]>>>1|(1&r[t-1])<<31;r[0]=r[0]>>>1,e&&(r[0]=r[0]^225<<24)}this.state=o(n)},s.prototype.update=function(t){var e;for(this.cache=i.concat([this.cache,t]);this.cache.length>=16;)e=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(e)},s.prototype.final=function(t,e){return this.cache.length&&this.ghash(i.concat([this.cache,n],16)),this.ghash(o([0,t,0,e])),this.state},t.exports=s},function(t,e,r){var i=r(97),n=r(2).Buffer,o=r(51),s=r(98),a=r(11),h=r(34),u=r(35);function f(t,e,r){a.call(this),this._cache=new l,this._last=void 0,this._cipher=new h.AES(e),this._prev=n.from(r),this._mode=t,this._autopadding=!0}function l(){this.cache=n.allocUnsafe(0)}function c(t,e,r){var a=o[t.toLowerCase()];if(!a)throw new TypeError("invalid suite type");if("string"==typeof r&&(r=n.from(r)),"GCM"!==a.mode&&r.length!==a.iv)throw new TypeError("invalid iv length "+r.length);if("string"==typeof e&&(e=n.from(e)),e.length!==a.key/8)throw new TypeError("invalid key length "+e.length);return"stream"===a.type?new s(a.module,e,r,!0):"auth"===a.type?new i(a.module,e,r,!0):new f(a.module,e,r)}r(1)(f,a),f.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get(this._autopadding);)r=this._mode.decrypt(this,e),i.push(r);return n.concat(i)},f.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return function e(t){var e=t[15];if(e<1||e>16)throw new Error("unable to decrypt data");var r=-1;for(;++r16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},l.prototype.flush=function(){if(this.cache.length)return this.cache},e.createDecipher=function d(t,e){var r=o[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var i=u(e,!1,r.key,r.iv);return c(t,i.key,i.iv)},e.createDecipheriv=c},function(t,e){e["des-ecb"]={key:8,iv:0},e["des-cbc"]=e.des={key:8,iv:8},e["des-ede3-cbc"]=e.des3={key:24,iv:8},e["des-ede3"]={key:24,iv:0},e["des-ede-cbc"]={key:16,iv:8},e["des-ede"]={key:16,iv:0}},function(t,e,r){(function(t){var i=r(99),n=r(193),o=r(194);var s={binary:!0,hex:!0,base64:!0};e.DiffieHellmanGroup=e.createDiffieHellmanGroup=e.getDiffieHellman=function a(e){var r=new t(n[e].prime,"hex"),i=new t(n[e].gen,"hex");return new o(r,i)},e.createDiffieHellman=e.DiffieHellman=function e(r,n,a,h){return t.isBuffer(n)||void 0===s[n]?e(r,"binary",n,a):(n=n||"binary",h=h||"binary",a=a||new t([2]),t.isBuffer(a)||(a=new t(a,h)),"number"==typeof r?new o(i(r,a),a,!0):(t.isBuffer(r)||(r=new t(r,n)),new o(r,a,!0)))}}).call(this,r(14).Buffer)},function(t,e){},function(t,e,r){(function(t){!function(t,e){"use strict";function i(t,e){if(!t)throw new Error(e||"Assertion failed")}function n(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){if(o.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var s;"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;try{s=r(191).Buffer}catch(t){}function a(t,e,r){for(var i=0,n=Math.min(t.length,r),o=e;o=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s=49?a-49+10:a>=17?a-17+10:a}return n}o.isBN=function t(e){return e instanceof o||null!==e&&"object"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function t(e,r){return e.cmp(r)>0?e:r},o.min=function t(e,r){return e.cmp(r)<0?e:r},o.prototype._init=function t(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"==typeof e)return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initNumber=function t(e,r,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initArray=function t(e,r,n){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[s]|=a<>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);else if("le"===n)for(o=0,s=0;o>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);return this.strip()},o.prototype._parseHex=function t(e,r){this.length=Math.ceil((e.length-r)/6),this.words=new Array(this.length);for(var i=0;i=r;i-=6)o=a(e,i,i+6),this.words[n]|=o<>>26-s&4194303,(s+=24)>=26&&(s-=26,n++);i+6!==r&&(o=a(e,r,i+6),this.words[n]|=o<>>26-s&4194303),this.strip()},o.prototype._parseBase=function t(e,r,i){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=r)n++;n--,o=o/r|0;for(var s=e.length-i,a=s%n,u=Math.min(s,s-a)+i,f=0,l=i;l1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function t(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function t(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function c(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u>>26,l=67108863&h,c=Math.min(u,e.length-1),d=Math.max(0,u-t.length+1);d<=c;d++){var p=u-d|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[d])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}o.prototype.toString=function t(e,r){var n;if(r=0|r||1,16===(e=e||10)||"hex"===e){n="";for(var o=0,s=0,a=0;a>>24-o&16777215)||a!==this.length-1?u[6-c.length]+c+n:c+n,(o+=2)>=26&&(o-=26,a--)}for(0!==s&&(n=s.toString(16)+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var d=f[e],p=l[e];n="";var m=this.clone();for(m.negative=0;!m.isZero();){var g=m.modn(p).toString(e);n=(m=m.idivn(p)).isZero()?g+n:u[d-g.length]+g+n}for(this.isZero()&&(n="0"+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function t(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function t(){return this.toString(16)},o.prototype.toBuffer=function t(e,r){return i(void 0!==s),this.toArrayLike(s,e,r)},o.prototype.toArray=function t(e,r){return this.toArrayLike(Array,e,r)},o.prototype.toArrayLike=function t(e,r,n){var o=this.byteLength(),s=n||Math.max(1,o);i(o<=s,"byte array longer than desired length"),i(s>0,"Requested array length <= 0"),this.strip();var a,h,u="le"===r,f=new e(s),l=this.clone();if(u){for(h=0;!l.isZero();h++)a=l.andln(255),l.iushrn(8),f[h]=a;for(;h=4096&&(i+=13,r>>>=13),r>=64&&(i+=7,r>>>=7),r>=8&&(i+=4,r>>>=4),r>=2&&(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function t(e){if(0===e)return 26;var r=e,i=0;return 0==(8191&r)&&(i+=13,r>>>=13),0==(127&r)&&(i+=7,r>>>=7),0==(15&r)&&(i+=4,r>>>=4),0==(3&r)&&(i+=2,r>>>=2),0==(1&r)&&i++,i},o.prototype.bitLength=function t(){var e=this.words[this.length-1],r=this._countBits(e);return 26*(this.length-1)+r},o.prototype.zeroBits=function t(){if(this.isZero())return 0;for(var e=0,r=0;re.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function t(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function t(e){var r;r=this.length>e.length?e:this;for(var i=0;ie.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function t(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function t(e){var r,i;this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function t(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function t(e){i("number"==typeof e&&e>=0);var r=0|Math.ceil(e/26),n=e%26;this._expand(r),n>0&&r--;for(var o=0;o0&&(this.words[o]=~this.words[o]&67108863>>26-n),this.strip()},o.prototype.notn=function t(e){return this.clone().inotn(e)},o.prototype.setn=function t(e,r){i("number"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=r?this.words[n]|1<e.length?(i=this,n=e):(i=e,n=this);for(var o=0,s=0;s>>26;for(;0!==o&&s>>26;if(this.length=i.length,0!==o)this.words[this.length]=o,this.length++;else if(i!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function t(e){if(0!==e.negative){e.negative=0;var r=this.iadd(e);return e.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var i,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(i=this,n=e):(i=e,n=this);for(var s=0,a=0;a>26,this.words[a]=67108863&r;for(;0!==s&&a>26,this.words[a]=67108863&r;if(0===s&&a>>13,p=0|a[1],m=8191&p,g=p>>>13,v=0|a[2],b=8191&v,y=v>>>13,w=0|a[3],_=8191&w,M=w>>>13,S=0|a[4],k=8191&S,E=S>>>13,R=0|a[5],A=8191&R,T=R>>>13,x=0|a[6],I=8191&x,L=x>>>13,P=0|a[7],B=8191&P,C=P>>>13,O=0|a[8],j=8191&O,U=O>>>13,N=0|a[9],q=8191&N,D=N>>>13,z=0|h[0],F=8191&z,W=z>>>13,H=0|h[1],Z=8191&H,K=H>>>13,V=0|h[2],J=8191&V,Y=V>>>13,X=0|h[3],G=8191&X,Q=X>>>13,$=0|h[4],tt=8191&$,et=$>>>13,rt=0|h[5],it=8191&rt,nt=rt>>>13,ot=0|h[6],st=8191&ot,at=ot>>>13,ht=0|h[7],ut=8191&ht,ft=ht>>>13,lt=0|h[8],ct=8191<,dt=lt>>>13,pt=0|h[9],mt=8191&pt,gt=pt>>>13;i.negative=e.negative^r.negative,i.length=19;var vt=(f+(n=Math.imul(c,F))|0)+((8191&(o=(o=Math.imul(c,W))+Math.imul(d,F)|0))<<13)|0;f=((s=Math.imul(d,W))+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(m,F),o=(o=Math.imul(m,W))+Math.imul(g,F)|0,s=Math.imul(g,W);var bt=(f+(n=n+Math.imul(c,Z)|0)|0)+((8191&(o=(o=o+Math.imul(c,K)|0)+Math.imul(d,Z)|0))<<13)|0;f=((s=s+Math.imul(d,K)|0)+(o>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(b,F),o=(o=Math.imul(b,W))+Math.imul(y,F)|0,s=Math.imul(y,W),n=n+Math.imul(m,Z)|0,o=(o=o+Math.imul(m,K)|0)+Math.imul(g,Z)|0,s=s+Math.imul(g,K)|0;var yt=(f+(n=n+Math.imul(c,J)|0)|0)+((8191&(o=(o=o+Math.imul(c,Y)|0)+Math.imul(d,J)|0))<<13)|0;f=((s=s+Math.imul(d,Y)|0)+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(_,F),o=(o=Math.imul(_,W))+Math.imul(M,F)|0,s=Math.imul(M,W),n=n+Math.imul(b,Z)|0,o=(o=o+Math.imul(b,K)|0)+Math.imul(y,Z)|0,s=s+Math.imul(y,K)|0,n=n+Math.imul(m,J)|0,o=(o=o+Math.imul(m,Y)|0)+Math.imul(g,J)|0,s=s+Math.imul(g,Y)|0;var wt=(f+(n=n+Math.imul(c,G)|0)|0)+((8191&(o=(o=o+Math.imul(c,Q)|0)+Math.imul(d,G)|0))<<13)|0;f=((s=s+Math.imul(d,Q)|0)+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,F),o=(o=Math.imul(k,W))+Math.imul(E,F)|0,s=Math.imul(E,W),n=n+Math.imul(_,Z)|0,o=(o=o+Math.imul(_,K)|0)+Math.imul(M,Z)|0,s=s+Math.imul(M,K)|0,n=n+Math.imul(b,J)|0,o=(o=o+Math.imul(b,Y)|0)+Math.imul(y,J)|0,s=s+Math.imul(y,Y)|0,n=n+Math.imul(m,G)|0,o=(o=o+Math.imul(m,Q)|0)+Math.imul(g,G)|0,s=s+Math.imul(g,Q)|0;var _t=(f+(n=n+Math.imul(c,tt)|0)|0)+((8191&(o=(o=o+Math.imul(c,et)|0)+Math.imul(d,tt)|0))<<13)|0;f=((s=s+Math.imul(d,et)|0)+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(A,F),o=(o=Math.imul(A,W))+Math.imul(T,F)|0,s=Math.imul(T,W),n=n+Math.imul(k,Z)|0,o=(o=o+Math.imul(k,K)|0)+Math.imul(E,Z)|0,s=s+Math.imul(E,K)|0,n=n+Math.imul(_,J)|0,o=(o=o+Math.imul(_,Y)|0)+Math.imul(M,J)|0,s=s+Math.imul(M,Y)|0,n=n+Math.imul(b,G)|0,o=(o=o+Math.imul(b,Q)|0)+Math.imul(y,G)|0,s=s+Math.imul(y,Q)|0,n=n+Math.imul(m,tt)|0,o=(o=o+Math.imul(m,et)|0)+Math.imul(g,tt)|0,s=s+Math.imul(g,et)|0;var Mt=(f+(n=n+Math.imul(c,it)|0)|0)+((8191&(o=(o=o+Math.imul(c,nt)|0)+Math.imul(d,it)|0))<<13)|0;f=((s=s+Math.imul(d,nt)|0)+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(I,F),o=(o=Math.imul(I,W))+Math.imul(L,F)|0,s=Math.imul(L,W),n=n+Math.imul(A,Z)|0,o=(o=o+Math.imul(A,K)|0)+Math.imul(T,Z)|0,s=s+Math.imul(T,K)|0,n=n+Math.imul(k,J)|0,o=(o=o+Math.imul(k,Y)|0)+Math.imul(E,J)|0,s=s+Math.imul(E,Y)|0,n=n+Math.imul(_,G)|0,o=(o=o+Math.imul(_,Q)|0)+Math.imul(M,G)|0,s=s+Math.imul(M,Q)|0,n=n+Math.imul(b,tt)|0,o=(o=o+Math.imul(b,et)|0)+Math.imul(y,tt)|0,s=s+Math.imul(y,et)|0,n=n+Math.imul(m,it)|0,o=(o=o+Math.imul(m,nt)|0)+Math.imul(g,it)|0,s=s+Math.imul(g,nt)|0;var St=(f+(n=n+Math.imul(c,st)|0)|0)+((8191&(o=(o=o+Math.imul(c,at)|0)+Math.imul(d,st)|0))<<13)|0;f=((s=s+Math.imul(d,at)|0)+(o>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,F),o=(o=Math.imul(B,W))+Math.imul(C,F)|0,s=Math.imul(C,W),n=n+Math.imul(I,Z)|0,o=(o=o+Math.imul(I,K)|0)+Math.imul(L,Z)|0,s=s+Math.imul(L,K)|0,n=n+Math.imul(A,J)|0,o=(o=o+Math.imul(A,Y)|0)+Math.imul(T,J)|0,s=s+Math.imul(T,Y)|0,n=n+Math.imul(k,G)|0,o=(o=o+Math.imul(k,Q)|0)+Math.imul(E,G)|0,s=s+Math.imul(E,Q)|0,n=n+Math.imul(_,tt)|0,o=(o=o+Math.imul(_,et)|0)+Math.imul(M,tt)|0,s=s+Math.imul(M,et)|0,n=n+Math.imul(b,it)|0,o=(o=o+Math.imul(b,nt)|0)+Math.imul(y,it)|0,s=s+Math.imul(y,nt)|0,n=n+Math.imul(m,st)|0,o=(o=o+Math.imul(m,at)|0)+Math.imul(g,st)|0,s=s+Math.imul(g,at)|0;var kt=(f+(n=n+Math.imul(c,ut)|0)|0)+((8191&(o=(o=o+Math.imul(c,ft)|0)+Math.imul(d,ut)|0))<<13)|0;f=((s=s+Math.imul(d,ft)|0)+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(j,F),o=(o=Math.imul(j,W))+Math.imul(U,F)|0,s=Math.imul(U,W),n=n+Math.imul(B,Z)|0,o=(o=o+Math.imul(B,K)|0)+Math.imul(C,Z)|0,s=s+Math.imul(C,K)|0,n=n+Math.imul(I,J)|0,o=(o=o+Math.imul(I,Y)|0)+Math.imul(L,J)|0,s=s+Math.imul(L,Y)|0,n=n+Math.imul(A,G)|0,o=(o=o+Math.imul(A,Q)|0)+Math.imul(T,G)|0,s=s+Math.imul(T,Q)|0,n=n+Math.imul(k,tt)|0,o=(o=o+Math.imul(k,et)|0)+Math.imul(E,tt)|0,s=s+Math.imul(E,et)|0,n=n+Math.imul(_,it)|0,o=(o=o+Math.imul(_,nt)|0)+Math.imul(M,it)|0,s=s+Math.imul(M,nt)|0,n=n+Math.imul(b,st)|0,o=(o=o+Math.imul(b,at)|0)+Math.imul(y,st)|0,s=s+Math.imul(y,at)|0,n=n+Math.imul(m,ut)|0,o=(o=o+Math.imul(m,ft)|0)+Math.imul(g,ut)|0,s=s+Math.imul(g,ft)|0;var Et=(f+(n=n+Math.imul(c,ct)|0)|0)+((8191&(o=(o=o+Math.imul(c,dt)|0)+Math.imul(d,ct)|0))<<13)|0;f=((s=s+Math.imul(d,dt)|0)+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(q,F),o=(o=Math.imul(q,W))+Math.imul(D,F)|0,s=Math.imul(D,W),n=n+Math.imul(j,Z)|0,o=(o=o+Math.imul(j,K)|0)+Math.imul(U,Z)|0,s=s+Math.imul(U,K)|0,n=n+Math.imul(B,J)|0,o=(o=o+Math.imul(B,Y)|0)+Math.imul(C,J)|0,s=s+Math.imul(C,Y)|0,n=n+Math.imul(I,G)|0,o=(o=o+Math.imul(I,Q)|0)+Math.imul(L,G)|0,s=s+Math.imul(L,Q)|0,n=n+Math.imul(A,tt)|0,o=(o=o+Math.imul(A,et)|0)+Math.imul(T,tt)|0,s=s+Math.imul(T,et)|0,n=n+Math.imul(k,it)|0,o=(o=o+Math.imul(k,nt)|0)+Math.imul(E,it)|0,s=s+Math.imul(E,nt)|0,n=n+Math.imul(_,st)|0,o=(o=o+Math.imul(_,at)|0)+Math.imul(M,st)|0,s=s+Math.imul(M,at)|0,n=n+Math.imul(b,ut)|0,o=(o=o+Math.imul(b,ft)|0)+Math.imul(y,ut)|0,s=s+Math.imul(y,ft)|0,n=n+Math.imul(m,ct)|0,o=(o=o+Math.imul(m,dt)|0)+Math.imul(g,ct)|0,s=s+Math.imul(g,dt)|0;var Rt=(f+(n=n+Math.imul(c,mt)|0)|0)+((8191&(o=(o=o+Math.imul(c,gt)|0)+Math.imul(d,mt)|0))<<13)|0;f=((s=s+Math.imul(d,gt)|0)+(o>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(q,Z),o=(o=Math.imul(q,K))+Math.imul(D,Z)|0,s=Math.imul(D,K),n=n+Math.imul(j,J)|0,o=(o=o+Math.imul(j,Y)|0)+Math.imul(U,J)|0,s=s+Math.imul(U,Y)|0,n=n+Math.imul(B,G)|0,o=(o=o+Math.imul(B,Q)|0)+Math.imul(C,G)|0,s=s+Math.imul(C,Q)|0,n=n+Math.imul(I,tt)|0,o=(o=o+Math.imul(I,et)|0)+Math.imul(L,tt)|0,s=s+Math.imul(L,et)|0,n=n+Math.imul(A,it)|0,o=(o=o+Math.imul(A,nt)|0)+Math.imul(T,it)|0,s=s+Math.imul(T,nt)|0,n=n+Math.imul(k,st)|0,o=(o=o+Math.imul(k,at)|0)+Math.imul(E,st)|0,s=s+Math.imul(E,at)|0,n=n+Math.imul(_,ut)|0,o=(o=o+Math.imul(_,ft)|0)+Math.imul(M,ut)|0,s=s+Math.imul(M,ft)|0,n=n+Math.imul(b,ct)|0,o=(o=o+Math.imul(b,dt)|0)+Math.imul(y,ct)|0,s=s+Math.imul(y,dt)|0;var At=(f+(n=n+Math.imul(m,mt)|0)|0)+((8191&(o=(o=o+Math.imul(m,gt)|0)+Math.imul(g,mt)|0))<<13)|0;f=((s=s+Math.imul(g,gt)|0)+(o>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(q,J),o=(o=Math.imul(q,Y))+Math.imul(D,J)|0,s=Math.imul(D,Y),n=n+Math.imul(j,G)|0,o=(o=o+Math.imul(j,Q)|0)+Math.imul(U,G)|0,s=s+Math.imul(U,Q)|0,n=n+Math.imul(B,tt)|0,o=(o=o+Math.imul(B,et)|0)+Math.imul(C,tt)|0,s=s+Math.imul(C,et)|0,n=n+Math.imul(I,it)|0,o=(o=o+Math.imul(I,nt)|0)+Math.imul(L,it)|0,s=s+Math.imul(L,nt)|0,n=n+Math.imul(A,st)|0,o=(o=o+Math.imul(A,at)|0)+Math.imul(T,st)|0,s=s+Math.imul(T,at)|0,n=n+Math.imul(k,ut)|0,o=(o=o+Math.imul(k,ft)|0)+Math.imul(E,ut)|0,s=s+Math.imul(E,ft)|0,n=n+Math.imul(_,ct)|0,o=(o=o+Math.imul(_,dt)|0)+Math.imul(M,ct)|0,s=s+Math.imul(M,dt)|0;var Tt=(f+(n=n+Math.imul(b,mt)|0)|0)+((8191&(o=(o=o+Math.imul(b,gt)|0)+Math.imul(y,mt)|0))<<13)|0;f=((s=s+Math.imul(y,gt)|0)+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(q,G),o=(o=Math.imul(q,Q))+Math.imul(D,G)|0,s=Math.imul(D,Q),n=n+Math.imul(j,tt)|0,o=(o=o+Math.imul(j,et)|0)+Math.imul(U,tt)|0,s=s+Math.imul(U,et)|0,n=n+Math.imul(B,it)|0,o=(o=o+Math.imul(B,nt)|0)+Math.imul(C,it)|0,s=s+Math.imul(C,nt)|0,n=n+Math.imul(I,st)|0,o=(o=o+Math.imul(I,at)|0)+Math.imul(L,st)|0,s=s+Math.imul(L,at)|0,n=n+Math.imul(A,ut)|0,o=(o=o+Math.imul(A,ft)|0)+Math.imul(T,ut)|0,s=s+Math.imul(T,ft)|0,n=n+Math.imul(k,ct)|0,o=(o=o+Math.imul(k,dt)|0)+Math.imul(E,ct)|0,s=s+Math.imul(E,dt)|0;var xt=(f+(n=n+Math.imul(_,mt)|0)|0)+((8191&(o=(o=o+Math.imul(_,gt)|0)+Math.imul(M,mt)|0))<<13)|0;f=((s=s+Math.imul(M,gt)|0)+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(q,tt),o=(o=Math.imul(q,et))+Math.imul(D,tt)|0,s=Math.imul(D,et),n=n+Math.imul(j,it)|0,o=(o=o+Math.imul(j,nt)|0)+Math.imul(U,it)|0,s=s+Math.imul(U,nt)|0,n=n+Math.imul(B,st)|0,o=(o=o+Math.imul(B,at)|0)+Math.imul(C,st)|0,s=s+Math.imul(C,at)|0,n=n+Math.imul(I,ut)|0,o=(o=o+Math.imul(I,ft)|0)+Math.imul(L,ut)|0,s=s+Math.imul(L,ft)|0,n=n+Math.imul(A,ct)|0,o=(o=o+Math.imul(A,dt)|0)+Math.imul(T,ct)|0,s=s+Math.imul(T,dt)|0;var It=(f+(n=n+Math.imul(k,mt)|0)|0)+((8191&(o=(o=o+Math.imul(k,gt)|0)+Math.imul(E,mt)|0))<<13)|0;f=((s=s+Math.imul(E,gt)|0)+(o>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(q,it),o=(o=Math.imul(q,nt))+Math.imul(D,it)|0,s=Math.imul(D,nt),n=n+Math.imul(j,st)|0,o=(o=o+Math.imul(j,at)|0)+Math.imul(U,st)|0,s=s+Math.imul(U,at)|0,n=n+Math.imul(B,ut)|0,o=(o=o+Math.imul(B,ft)|0)+Math.imul(C,ut)|0,s=s+Math.imul(C,ft)|0,n=n+Math.imul(I,ct)|0,o=(o=o+Math.imul(I,dt)|0)+Math.imul(L,ct)|0,s=s+Math.imul(L,dt)|0;var Lt=(f+(n=n+Math.imul(A,mt)|0)|0)+((8191&(o=(o=o+Math.imul(A,gt)|0)+Math.imul(T,mt)|0))<<13)|0;f=((s=s+Math.imul(T,gt)|0)+(o>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(q,st),o=(o=Math.imul(q,at))+Math.imul(D,st)|0,s=Math.imul(D,at),n=n+Math.imul(j,ut)|0,o=(o=o+Math.imul(j,ft)|0)+Math.imul(U,ut)|0,s=s+Math.imul(U,ft)|0,n=n+Math.imul(B,ct)|0,o=(o=o+Math.imul(B,dt)|0)+Math.imul(C,ct)|0,s=s+Math.imul(C,dt)|0;var Pt=(f+(n=n+Math.imul(I,mt)|0)|0)+((8191&(o=(o=o+Math.imul(I,gt)|0)+Math.imul(L,mt)|0))<<13)|0;f=((s=s+Math.imul(L,gt)|0)+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(q,ut),o=(o=Math.imul(q,ft))+Math.imul(D,ut)|0,s=Math.imul(D,ft),n=n+Math.imul(j,ct)|0,o=(o=o+Math.imul(j,dt)|0)+Math.imul(U,ct)|0,s=s+Math.imul(U,dt)|0;var Bt=(f+(n=n+Math.imul(B,mt)|0)|0)+((8191&(o=(o=o+Math.imul(B,gt)|0)+Math.imul(C,mt)|0))<<13)|0;f=((s=s+Math.imul(C,gt)|0)+(o>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(q,ct),o=(o=Math.imul(q,dt))+Math.imul(D,ct)|0,s=Math.imul(D,dt);var Ct=(f+(n=n+Math.imul(j,mt)|0)|0)+((8191&(o=(o=o+Math.imul(j,gt)|0)+Math.imul(U,mt)|0))<<13)|0;f=((s=s+Math.imul(U,gt)|0)+(o>>>13)|0)+(Ct>>>26)|0,Ct&=67108863;var Ot=(f+(n=Math.imul(q,mt))|0)+((8191&(o=(o=Math.imul(q,gt))+Math.imul(D,mt)|0))<<13)|0;return f=((s=Math.imul(D,gt))+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,u[0]=vt,u[1]=bt,u[2]=yt,u[3]=wt,u[4]=_t,u[5]=Mt,u[6]=St,u[7]=kt,u[8]=Et,u[9]=Rt,u[10]=At,u[11]=Tt,u[12]=xt,u[13]=It,u[14]=Lt,u[15]=Pt,u[16]=Bt,u[17]=Ct,u[18]=Ot,0!==f&&(u[19]=f,i.length++),i};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(d=c),o.prototype.mulTo=function t(e,r){var i=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,r):i<63?c(this,e,r):i<1024?function n(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,e,r):p(this,e,r)},m.prototype.makeRBT=function t(e){for(var r=new Array(e),i=o.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function t(e,r,i,n,o,s){for(var a=0;a>>=1)o++;return 1<>>=13,n[2*a+1]=8191&s,s>>>=13;for(a=2*r;a>=26,r+=o/67108864|0,r+=s>>>26,this.words[n]=67108863&s}return 0!==r&&(this.words[n]=r,this.length++),this},o.prototype.muln=function t(e){return this.clone().imuln(e)},o.prototype.sqr=function t(){return this.mul(this)},o.prototype.isqr=function t(){return this.imul(this.clone())},o.prototype.pow=function t(e){var r=function i(t){for(var e=new Array(t.bitLength()),r=0;r>>n}return e}(e);if(0===r.length)return new o(1);for(var n=this,s=0;s=0);var r,n=e%26,o=(e-n)/26,s=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(r=0;r>>26-n}a&&(this.words[r]=a,this.length++)}if(0!==o){for(r=this.length-1;r>=0;r--)this.words[r+o]=this.words[r];for(r=0;r=0),o=r?(r-r%26)/26:0;var s=e%26,a=Math.min((e-s)/26,this.length),h=67108863^67108863>>>s<a)for(this.length-=a,f=0;f=0&&(0!==l||f>=o);f--){var c=0|this.words[f];this.words[f]=l<<26-s|c>>>s,l=c&h}return u&&0!==l&&(u.words[u.length++]=l),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function t(e,r,n){return i(0===this.negative),this.iushrn(e,r,n)},o.prototype.shln=function t(e){return this.clone().ishln(e)},o.prototype.ushln=function t(e){return this.clone().iushln(e)},o.prototype.shrn=function t(e){return this.clone().ishrn(e)},o.prototype.ushrn=function t(e){return this.clone().iushrn(e)},o.prototype.testn=function t(e){i("number"==typeof e&&e>=0);var r=e%26,n=(e-r)/26,o=1<=0);var r=e%26,n=(e-r)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==r&&n++,this.length=Math.min(n,this.length),0!==r){var o=67108863^67108863>>>r<=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function t(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var r=0;r>26)-(u/67108864|0),this.words[o+n]=67108863&s}for(;o>26,this.words[o+n]=67108863&s;if(0===h)return this.strip();for(i(-1===h),h=0,o=0;o>26,this.words[o]=67108863&s;return this.negative=1,this.strip()},o.prototype._wordDiv=function t(e,r){var i=(this.length,e.length),n=this.clone(),s=e,a=0|s.words[s.length-1];0!==(i=26-this._countBits(a))&&(s=s.ushln(i),n.iushln(i),a=0|s.words[s.length-1]);var h,u=n.length-s.length;if("mod"!==r){(h=new o(null)).length=u+1,h.words=new Array(h.length);for(var f=0;f=0;c--){var d=67108864*(0|n.words[s.length+c])+(0|n.words[s.length+c-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(s,d,c);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(s,1,c),n.isZero()||(n.negative^=1);h&&(h.words[c]=d)}return h&&h.strip(),n.strip(),"div"!==r&&0!==i&&n.iushrn(i),{div:h||null,mod:n}},o.prototype.divmod=function t(e,r,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(h=this.neg().divmod(e,r),"mod"!==r&&(s=h.div.neg()),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:s,mod:a}):0===this.negative&&0!==e.negative?(h=this.divmod(e.neg(),r),"mod"!==r&&(s=h.div.neg()),{div:s,mod:h.mod}):0!=(this.negative&e.negative)?(h=this.neg().divmod(e.neg(),r),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:h.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===r?{div:this.divn(e.words[0]),mod:null}:"mod"===r?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,r);var s,a,h},o.prototype.div=function t(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function t(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function t(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function t(e){var r=this.divmod(e);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(e):r.mod,n=e.ushrn(1),o=e.andln(1),s=i.cmp(n);return s<0||1===o&&0===s?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function t(e){i(e<=67108863);for(var r=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(r*n+(0|this.words[o]))%e;return n},o.prototype.idivn=function t(e){i(e<=67108863);for(var r=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*r;this.words[n]=o/e|0,r=o%e}return this.strip()},o.prototype.divn=function t(e){return this.clone().idivn(e)},o.prototype.egcd=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s=new o(1),a=new o(0),h=new o(0),u=new o(1),f=0;r.isEven()&&n.isEven();)r.iushrn(1),n.iushrn(1),++f;for(var l=n.clone(),c=r.clone();!r.isZero();){for(var d=0,p=1;0==(r.words[0]&p)&&d<26;++d,p<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(l),a.isub(c)),s.iushrn(1),a.iushrn(1);for(var m=0,g=1;0==(n.words[0]&g)&&m<26;++m,g<<=1);if(m>0)for(n.iushrn(m);m-- >0;)(h.isOdd()||u.isOdd())&&(h.iadd(l),u.isub(c)),h.iushrn(1),u.iushrn(1);r.cmp(n)>=0?(r.isub(n),s.isub(h),a.isub(u)):(n.isub(r),h.isub(s),u.isub(a))}return{a:h,b:u,gcd:n.iushln(f)}},o.prototype._invmp=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s,a=new o(1),h=new o(0),u=n.clone();r.cmpn(1)>0&&n.cmpn(1)>0;){for(var f=0,l=1;0==(r.words[0]&l)&&f<26;++f,l<<=1);if(f>0)for(r.iushrn(f);f-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var c=0,d=1;0==(n.words[0]&d)&&c<26;++c,d<<=1);if(c>0)for(n.iushrn(c);c-- >0;)h.isOdd()&&h.iadd(u),h.iushrn(1);r.cmp(n)>=0?(r.isub(n),a.isub(h)):(n.isub(r),h.isub(a))}return(s=0===r.cmpn(1)?a:h).cmpn(0)<0&&s.iadd(e),s},o.prototype.gcd=function t(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var r=this.clone(),i=e.clone();r.negative=0,i.negative=0;for(var n=0;r.isEven()&&i.isEven();n++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var o=r.cmp(i);if(o<0){var s=r;r=i,i=s}else if(0===o||0===i.cmpn(1))break;r.isub(i)}return i.iushln(n)},o.prototype.invm=function t(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function t(){return 0==(1&this.words[0])},o.prototype.isOdd=function t(){return 1==(1&this.words[0])},o.prototype.andln=function t(e){return this.words[0]&e},o.prototype.bincn=function t(e){i("number"==typeof e);var r=e%26,n=(e-r)/26,o=1<>>26,h&=67108863,this.words[a]=h}return 0!==s&&(this.words[a]=s,this.length++),this},o.prototype.isZero=function t(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function t(e){var r,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)r=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var o=0|this.words[0];r=o===e?0:oe.length)return 1;if(this.length=0;i--){var n=0|this.words[i],o=0|e.words[i];if(n!==o){no&&(r=1);break}}return r},o.prototype.gtn=function t(e){return 1===this.cmpn(e)},o.prototype.gt=function t(e){return 1===this.cmp(e)},o.prototype.gten=function t(e){return this.cmpn(e)>=0},o.prototype.gte=function t(e){return this.cmp(e)>=0},o.prototype.ltn=function t(e){return-1===this.cmpn(e)},o.prototype.lt=function t(e){return-1===this.cmp(e)},o.prototype.lten=function t(e){return this.cmpn(e)<=0},o.prototype.lte=function t(e){return this.cmp(e)<=0},o.prototype.eqn=function t(e){return 0===this.cmpn(e)},o.prototype.eq=function t(e){return 0===this.cmp(e)},o.red=function t(e){return new M(e)},o.prototype.toRed=function t(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function t(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function t(e){return this.red=e,this},o.prototype.forceRed=function t(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function t(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function t(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function t(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function t(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function t(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function t(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function t(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function t(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function t(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function t(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function t(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function M(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function S(t){M.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function t(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function t(e){var r,i=e;do{this.split(i,this.tmp),r=(i=(i=this.imulK(i)).iadd(this.tmp)).bitLength()}while(r>this.n);var n=r0?i.isub(this.p):void 0!==i.strip?i.strip():i._strip(),i},v.prototype.split=function t(e,r){e.iushrn(this.n,0,r)},v.prototype.imulK=function t(e){return e.imul(this.k)},n(b,v),b.prototype.split=function t(e,r){for(var i=4194303,n=Math.min(e.length,9),o=0;o>>22,s=a}s>>>=22,e.words[o-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function t(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var r=0,i=0;i>>=26,e.words[i]=o,r=n}return 0!==r&&(e.words[e.length++]=r),e},o._prime=function t(e){if(g[e])return g[e];var t;if("k256"===e)t=new b;else if("p224"===e)t=new y;else if("p192"===e)t=new w;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new _}return g[e]=t,t},M.prototype._verify1=function t(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},M.prototype._verify2=function t(e,r){i(0==(e.negative|r.negative),"red works only with positives"),i(e.red&&e.red===r.red,"red works only with red numbers")},M.prototype.imod=function t(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},M.prototype.neg=function t(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},M.prototype.add=function t(e,r){this._verify2(e,r);var i=e.add(r);return i.cmp(this.m)>=0&&i.isub(this.m),i._forceRed(this)},M.prototype.iadd=function t(e,r){this._verify2(e,r);var i=e.iadd(r);return i.cmp(this.m)>=0&&i.isub(this.m),i},M.prototype.sub=function t(e,r){this._verify2(e,r);var i=e.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},M.prototype.isub=function t(e,r){this._verify2(e,r);var i=e.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},M.prototype.shl=function t(e,r){return this._verify1(e),this.imod(e.ushln(r))},M.prototype.imul=function t(e,r){return this._verify2(e,r),this.imod(e.imul(r))},M.prototype.mul=function t(e,r){return this._verify2(e,r),this.imod(e.mul(r))},M.prototype.isqr=function t(e){return this.imul(e,e.clone())},M.prototype.sqr=function t(e){return this.mul(e,e)},M.prototype.sqrt=function t(e){if(e.isZero())return e.clone();var r=this.m.andln(3);if(i(r%2==1),3===r){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var s=this.m.subn(1),a=0;!s.isZero()&&0===s.andln(1);)a++,s.iushrn(1);i(!s.isZero());var h=new o(1).toRed(this),u=h.redNeg(),f=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);0!==this.pow(l,f).cmp(u);)l.redIAdd(u);for(var c=this.pow(l,s),d=this.pow(e,s.addn(1).iushrn(1)),p=this.pow(e,s),m=a;0!==p.cmp(h);){for(var g=p,v=0;0!==g.cmp(h);v++)g=g.redSqr();i(v=0;n--){for(var f=r.words[n],l=u-1;l>=0;l--){var c=f>>l&1;s!==i[0]&&(s=this.sqr(s)),0!==c||0!==a?(a<<=1,a|=c,(4===++h||0===n&&0===l)&&(s=this.mul(s,i[a]),h=0,a=0)):h=0}u=26}return s},M.prototype.convertTo=function t(e){var r=e.umod(this.m);return r===e?r.clone():r},M.prototype.convertFrom=function t(e){var r=e.clone();return r.red=null,r},o.mont=function t(e){return new S(e)},n(S,M),S.prototype.convertTo=function t(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function t(e){var r=this.imod(e.mul(this.rinv));return r.red=null,r},S.prototype.imul=function t(e,r){if(e.isZero()||r.isZero())return e.words[0]=0,e.length=1,e;var i=e.imul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=i.isub(n).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},S.prototype.mul=function t(e,r){if(e.isZero()||r.isZero())return new o(0)._forceRed(this);var i=e.mul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=i.isub(n).iushrn(this.shift),a=s;return s.cmp(this.m)>=0?a=s.isub(this.m):s.cmpn(0)<0&&(a=s.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function t(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(16)(t))},function(t,e){},function(t,e){},function(t){t.exports=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')},function(t,e,r){(function(e){var i=r(100),n=new(r(101)),o=new i(24),s=new i(11),a=new i(10),h=new i(3),u=new i(7),f=r(99),l=r(18);function c(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._pub=new i(t),this}function d(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._priv=new i(t),this}t.exports=m;var p={};function m(t,e,r){this.setGenerator(e),this.__prime=new i(t),this._prime=i.mont(this.__prime),this._primeLen=t.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=c,this.setPrivateKey=d):this._primeCode=8}function g(t,r){var i=new e(t.toArray());return r?i.toString(r):i}Object.defineProperty(m.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function t(e,r){var i=r.toString("hex"),l=[i,e.toString(16)].join("_");if(l in p)return p[l];var c,d=0;if(e.isEven()||!f.simpleSieve||!f.fermatTest(e)||!n.test(e))return d+=1,d+="02"===i||"05"===i?8:4,p[l]=d,d;switch(n.test(e.shrn(1))||(d+=2),i){case"02":e.mod(o).cmp(s)&&(d+=8);break;case"05":(c=e.mod(a)).cmp(h)&&c.cmp(u)&&(d+=8);break;default:d+=4}return p[l]=d,d}(this.__prime,this.__gen)),this._primeCode}}),m.prototype.generateKeys=function(){return this._priv||(this._priv=new i(l(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},m.prototype.computeSecret=function(t){var r=(t=(t=new i(t)).toRed(this._prime)).redPow(this._priv).fromRed(),n=new e(r.toArray()),o=this.getPrime();if(n.length0?this.tail.next=r:this.head=r,this.tail=r,++this.length}},{key:"unshift",value:function t(e){var r={data:e,next:this.head};0===this.length&&(this.tail=r),this.head=r,++this.length}},{key:"shift",value:function t(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function t(){this.head=this.tail=null,this.length=0}},{key:"join",value:function t(e){if(0===this.length)return"";for(var r=this.head,i=""+r.data;r=r.next;)i+=e+r.data;return i}},{key:"concat",value:function t(e){if(0===this.length)return s.alloc(0);for(var r,i,n,o=s.allocUnsafe(e>>>0),a=this.head,h=0;a;)r=a.data,i=o,n=h,s.prototype.copy.call(r,i,n),h+=a.data.length,a=a.next;return o}},{key:"consume",value:function t(e,r){var i;return eo.length?o.length:e;if(s===o.length?n+=o:n+=o.slice(0,e),0===(e-=s)){s===o.length?(++i,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(s));break}++i}return this.length-=i,n}},{key:"_getBuffer",value:function t(e){var r=s.allocUnsafe(e),i=this.head,n=1;for(i.data.copy(r),e-=i.data.length;i=i.next;){var o=i.data,a=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,a),0===(e-=a)){a===o.length?(++n,i.next?this.head=i.next:this.head=this.tail=null):(this.head=i,i.data=o.slice(a));break}++n}return this.length-=n,r}},{key:h,value:function t(e,r){return a(this,function o(t){for(var e=1;e0,(function(t){i||(i=t),t&&s.forEach(u),o||(s.forEach(u),n(i))}))}));return e.reduce(f)}},function(t,e,r){var i=r(53).Buffer,n=r(84),o=r(55),s=r(57).ec,a=r(56),h=r(37),u=r(119);function f(t,e,r,o){if((t=i.from(t.toArray())).length0&&r.ishrn(i),r}function c(t,e,r){var o,s;do{for(o=i.alloc(0);8*o.length=0&&(a=r,h=i),o.negative&&(o=o.neg(),s=s.neg()),a.negative&&(a=a.neg(),h=h.neg()),[{a:o,b:s},{a:a,b:h}]},h.prototype._endoSplit=function t(e){var r=this.endo.basis,i=r[0],n=r[1],o=n.b.mul(e).divRound(this.n),s=i.b.neg().mul(e).divRound(this.n),a=o.mul(i.a),h=s.mul(n.a),u=o.mul(i.b),f=s.mul(n.b);return{k1:e.sub(a).sub(h),k2:u.add(f).neg()}},h.prototype.pointFromX=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),o=i.redSqrt();if(0!==o.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");var s=o.fromRed().isOdd();return(r&&!s||!r&&s)&&(o=o.redNeg()),this.point(e,o)},h.prototype.validate=function t(e){if(e.inf)return!0;var r=e.x,i=e.y,n=this.a.redMul(r),o=r.redSqr().redMul(r).redIAdd(n).redIAdd(this.b);return 0===i.redSqr().redISub(o).cmpn(0)},h.prototype._endoWnafMulAdd=function t(e,r,i){for(var n=this._endoWnafT1,o=this._endoWnafT2,s=0;s":""},u.prototype.isInfinity=function t(){return this.inf},u.prototype.add=function t(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var r=this.y.redSub(e.y);0!==r.cmpn(0)&&(r=r.redMul(this.x.redSub(e.x).redInvm()));var i=r.redSqr().redISub(this.x).redISub(e.x),n=r.redMul(this.x.redSub(i)).redISub(this.y);return this.curve.point(i,n)},u.prototype.dbl=function t(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var r=this.curve.a,i=this.x.redSqr(),n=e.redInvm(),o=i.redAdd(i).redIAdd(i).redIAdd(r).redMul(n),s=o.redSqr().redISub(this.x.redAdd(this.x)),a=o.redMul(this.x.redSub(s)).redISub(this.y);return this.curve.point(s,a)},u.prototype.getX=function t(){return this.x.fromRed()},u.prototype.getY=function t(){return this.y.fromRed()},u.prototype.mul=function t(e){return e=new n(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function t(e,r,i){var n=[this,r],o=[e,i];return this.curve.endo?this.curve._endoWnafMulAdd(n,o):this.curve._wnafMulAdd(1,n,o,2)},u.prototype.jmulAdd=function t(e,r,i){var n=[this,r],o=[e,i];return this.curve.endo?this.curve._endoWnafMulAdd(n,o,!0):this.curve._wnafMulAdd(1,n,o,2,!0)},u.prototype.eq=function t(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},u.prototype.neg=function t(e){if(this.inf)return this;var r=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var i=this.precomputed,n=function(t){return t.neg()};r.precomputed={naf:i.naf&&{wnd:i.naf.wnd,points:i.naf.points.map(n)},doubles:i.doubles&&{step:i.doubles.step,points:i.doubles.points.map(n)}}}return r},u.prototype.toJ=function t(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(f,s.BasePoint),h.prototype.jpoint=function t(e,r,i){return new f(this,e,r,i)},f.prototype.toP=function t(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),r=e.redSqr(),i=this.x.redMul(r),n=this.y.redMul(r).redMul(e);return this.curve.point(i,n)},f.prototype.neg=function t(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},f.prototype.add=function t(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var r=e.z.redSqr(),i=this.z.redSqr(),n=this.x.redMul(r),o=e.x.redMul(i),s=this.y.redMul(r.redMul(e.z)),a=e.y.redMul(i.redMul(this.z)),h=n.redSub(o),u=s.redSub(a);if(0===h.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=h.redSqr(),l=f.redMul(h),c=n.redMul(f),d=u.redSqr().redIAdd(l).redISub(c).redISub(c),p=u.redMul(c.redISub(d)).redISub(s.redMul(l)),m=this.z.redMul(e.z).redMul(h);return this.curve.jpoint(d,p,m)},f.prototype.mixedAdd=function t(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var r=this.z.redSqr(),i=this.x,n=e.x.redMul(r),o=this.y,s=e.y.redMul(r).redMul(this.z),a=i.redSub(n),h=o.redSub(s);if(0===a.cmpn(0))return 0!==h.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=a.redSqr(),f=u.redMul(a),l=i.redMul(u),c=h.redSqr().redIAdd(f).redISub(l).redISub(l),d=h.redMul(l.redISub(c)).redISub(o.redMul(f)),p=this.z.redMul(a);return this.curve.jpoint(c,d,p)},f.prototype.dblp=function t(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();var r;if(this.curve.zeroA||this.curve.threeA){var i=this;for(r=0;r=0)return!1;if(i.redIAdd(o),0===this.x.cmp(i))return!0}},f.prototype.inspect=function t(){return this.isInfinity()?"":""},f.prototype.isInfinity=function t(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";var i=r(9),n=r(58),o=r(36),s=r(7);function a(t){o.call(this,"mont",t),this.a=new i(t.a,16).toRed(this.red),this.b=new i(t.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function h(t,e,r){o.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(e,16),this.z=new i(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}n(a,o),t.exports=a,a.prototype.validate=function t(e){var r=e.normalize().x,i=r.redSqr(),n=i.redMul(r).redAdd(i.redMul(this.a)).redAdd(r);return 0===n.redSqrt().redSqr().cmp(n)},n(h,o.BasePoint),a.prototype.decodePoint=function t(e,r){return this.point(s.toArray(e,r),1)},a.prototype.point=function t(e,r){return new h(this,e,r)},a.prototype.pointFromJSON=function t(e){return h.fromJSON(this,e)},h.prototype.precompute=function t(){},h.prototype._encode=function t(){return this.getX().toArray("be",this.curve.p.byteLength())},h.fromJSON=function t(e,r){return new h(e,r[0],r[1]||e.one)},h.prototype.inspect=function t(){return this.isInfinity()?"":""},h.prototype.isInfinity=function t(){return 0===this.z.cmpn(0)},h.prototype.dbl=function t(){var e=this.x.redAdd(this.z).redSqr(),r=this.x.redSub(this.z).redSqr(),i=e.redSub(r),n=e.redMul(r),o=i.redMul(r.redAdd(this.curve.a24.redMul(i)));return this.curve.point(n,o)},h.prototype.add=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.diffAdd=function t(e,r){var i=this.x.redAdd(this.z),n=this.x.redSub(this.z),o=e.x.redAdd(e.z),s=e.x.redSub(e.z).redMul(i),a=o.redMul(n),h=r.z.redMul(s.redAdd(a).redSqr()),u=r.x.redMul(s.redISub(a).redSqr());return this.curve.point(h,u)},h.prototype.mul=function t(e){for(var r=e.clone(),i=this,n=this.curve.point(null,null),o=[];0!==r.cmpn(0);r.iushrn(1))o.push(r.andln(1));for(var s=o.length-1;s>=0;s--)0===o[s]?(i=i.diffAdd(n,this),n=n.dbl()):(n=i.diffAdd(n,this),i=i.dbl());return n},h.prototype.mulAdd=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.jumlAdd=function t(){throw new Error("Not supported on Montgomery curve")},h.prototype.eq=function t(e){return 0===this.getX().cmp(e.getX())},h.prototype.normalize=function t(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},h.prototype.getX=function t(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";var i=r(7),n=r(9),o=r(58),s=r(36),a=i.assert;function h(t){this.twisted=1!=(0|t.a),this.mOneA=this.twisted&&-1==(0|t.a),this.extended=this.mOneA,s.call(this,"edwards",t),this.a=new n(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new n(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new n(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),a(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|t.c)}function u(t,e,r,i,o){s.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===i?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new n(e,16),this.y=new n(r,16),this.z=i?new n(i,16):this.curve.one,this.t=o&&new n(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}o(h,s),t.exports=h,h.prototype._mulA=function t(e){return this.mOneA?e.redNeg():this.a.redMul(e)},h.prototype._mulC=function t(e){return this.oneC?e:this.c.redMul(e)},h.prototype.jpoint=function t(e,r,i,n){return this.point(e,r,i,n)},h.prototype.pointFromX=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr(),o=this.c2.redSub(this.a.redMul(i)),s=this.one.redSub(this.c2.redMul(this.d).redMul(i)),a=o.redMul(s.redInvm()),h=a.redSqrt();if(0!==h.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");var u=h.fromRed().isOdd();return(r&&!u||!r&&u)&&(h=h.redNeg()),this.point(e,h)},h.prototype.pointFromY=function t(e,r){(e=new n(e,16)).red||(e=e.toRed(this.red));var i=e.redSqr(),o=i.redSub(this.c2),s=i.redMul(this.d).redMul(this.c2).redSub(this.a),a=o.redMul(s.redInvm());if(0===a.cmp(this.zero)){if(r)throw new Error("invalid point");return this.point(this.zero,e)}var h=a.redSqrt();if(0!==h.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");return h.fromRed().isOdd()!==r&&(h=h.redNeg()),this.point(h,e)},h.prototype.validate=function t(e){if(e.isInfinity())return!0;e.normalize();var r=e.x.redSqr(),i=e.y.redSqr(),n=r.redMul(this.a).redAdd(i),o=this.c2.redMul(this.one.redAdd(this.d.redMul(r).redMul(i)));return 0===n.cmp(o)},o(u,s.BasePoint),h.prototype.pointFromJSON=function t(e){return u.fromJSON(this,e)},h.prototype.point=function t(e,r,i,n){return new u(this,e,r,i,n)},u.fromJSON=function t(e,r){return new u(e,r[0],r[1],r[2])},u.prototype.inspect=function t(){return this.isInfinity()?"":""},u.prototype.isInfinity=function t(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},u.prototype._extDbl=function t(){var e=this.x.redSqr(),r=this.y.redSqr(),i=this.z.redSqr();i=i.redIAdd(i);var n=this.curve._mulA(e),o=this.x.redAdd(this.y).redSqr().redISub(e).redISub(r),s=n.redAdd(r),a=s.redSub(i),h=n.redSub(r),u=o.redMul(a),f=s.redMul(h),l=o.redMul(h),c=a.redMul(s);return this.curve.point(u,f,c,l)},u.prototype._projDbl=function t(){var e,r,i,n,o,s,a=this.x.redAdd(this.y).redSqr(),h=this.x.redSqr(),u=this.y.redSqr();if(this.curve.twisted){var f=(n=this.curve._mulA(h)).redAdd(u);this.zOne?(e=a.redSub(h).redSub(u).redMul(f.redSub(this.curve.two)),r=f.redMul(n.redSub(u)),i=f.redSqr().redSub(f).redSub(f)):(o=this.z.redSqr(),s=f.redSub(o).redISub(o),e=a.redSub(h).redISub(u).redMul(s),r=f.redMul(n.redSub(u)),i=f.redMul(s))}else n=h.redAdd(u),o=this.curve._mulC(this.z).redSqr(),s=n.redSub(o).redSub(o),e=this.curve._mulC(a.redISub(n)).redMul(s),r=this.curve._mulC(n).redMul(h.redISub(u)),i=n.redMul(s);return this.curve.point(e,r,i)},u.prototype.dbl=function t(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},u.prototype._extAdd=function t(e){var r=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),i=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),o=this.z.redMul(e.z.redAdd(e.z)),s=i.redSub(r),a=o.redSub(n),h=o.redAdd(n),u=i.redAdd(r),f=s.redMul(a),l=h.redMul(u),c=s.redMul(u),d=a.redMul(h);return this.curve.point(f,l,d,c)},u.prototype._projAdd=function t(e){var r,i,n=this.z.redMul(e.z),o=n.redSqr(),s=this.x.redMul(e.x),a=this.y.redMul(e.y),h=this.curve.d.redMul(s).redMul(a),u=o.redSub(h),f=o.redAdd(h),l=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(s).redISub(a),c=n.redMul(u).redMul(l);return this.curve.twisted?(r=n.redMul(f).redMul(a.redSub(this.curve._mulA(s))),i=u.redMul(f)):(r=n.redMul(f).redMul(a.redSub(s)),i=this.curve._mulC(u).redMul(f)),this.curve.point(c,r,i)},u.prototype.add=function t(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},u.prototype.mul=function t(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function t(e,r,i){return this.curve._wnafMulAdd(1,[this,r],[e,i],2,!1)},u.prototype.jmulAdd=function t(e,r,i){return this.curve._wnafMulAdd(1,[this,r],[e,i],2,!0)},u.prototype.normalize=function t(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},u.prototype.neg=function t(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},u.prototype.getX=function t(){return this.normalize(),this.x.fromRed()},u.prototype.getY=function t(){return this.normalize(),this.y.fromRed()},u.prototype.eq=function t(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},u.prototype.eqXToP=function t(e){var r=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(r))return!0;for(var i=e.clone(),n=this.curve.redN.redMul(this.z);;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}},u.prototype.toP=u.prototype.normalize,u.prototype.mixedAdd=u.prototype.add},function(t,e,r){"use strict";e.sha1=r(212),e.sha224=r(213),e.sha256=r(111),e.sha384=r(214),e.sha512=r(112)},function(t,e,r){"use strict";var i=r(8),n=r(29),o=r(110),s=i.rotl32,a=i.sum32,h=i.sum32_5,u=o.ft_1,f=n.BlockHash,l=[1518500249,1859775393,2400959708,3395469782];function c(){if(!(this instanceof c))return new c;f.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}i.inherits(c,f),t.exports=c,c.blockSize=512,c.outSize=160,c.hmacStrength=80,c.padLength=64,c.prototype._update=function t(e,r){for(var i=this.W,n=0;n<16;n++)i[n]=e[r+n];for(;nthis.blockSize&&(e=(new this.Hash).update(e).digest()),n(e.length<=this.blockSize);for(var r=e.length;r0))return h.iaddn(1),this.keyFromPrivate(h)}},l.prototype._truncateToN=function t(e,r){var i=8*e.byteLength()-this.n.bitLength();return i>0&&(e=e.ushrn(i)),!r&&e.cmp(this.n)>=0?e.sub(this.n):e},l.prototype.sign=function t(e,r,o,s){"object"==typeof o&&(s=o,o=null),s||(s={}),r=this.keyFromPrivate(r,o),e=this._truncateToN(new i(e,16));for(var a=this.n.byteLength(),h=r.getPrivate().toArray("be",a),u=e.toArray("be",a),l=new n({hash:this.hash,entropy:h,nonce:u,pers:s.pers,persEnc:s.persEnc||"utf8"}),c=this.n.sub(new i(1)),d=0;;d++){var p=s.k?s.k(d):new i(l.generate(this.n.byteLength()));if(!((p=this._truncateToN(p,!0)).cmpn(1)<=0||p.cmp(c)>=0)){var m=this.g.mul(p);if(!m.isInfinity()){var g=m.getX(),v=g.umod(this.n);if(0!==v.cmpn(0)){var b=p.invm(this.n).mul(v.mul(r.getPrivate()).iadd(e));if(0!==(b=b.umod(this.n)).cmpn(0)){var y=(m.getY().isOdd()?1:0)|(0!==g.cmp(v)?2:0);return s.canonical&&b.cmp(this.nh)>0&&(b=this.n.sub(b),y^=1),new f({r:v,s:b,recoveryParam:y})}}}}}},l.prototype.verify=function t(e,r,n,o){e=this._truncateToN(new i(e,16)),n=this.keyFromPublic(n,o);var s=(r=new f(r,"hex")).r,a=r.s;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var h,u=a.invm(this.n),l=u.mul(e).umod(this.n),c=u.mul(s).umod(this.n);return this.curve._maxwellTrick?!(h=this.g.jmulAdd(l,n.getPublic(),c)).isInfinity()&&h.eqXToP(s):!(h=this.g.mulAdd(l,n.getPublic(),c)).isInfinity()&&0===h.getX().umod(this.n).cmp(s)},l.prototype.recoverPubKey=function(t,e,r,n){h((3&r)===r,"The recovery param is more than two bits"),e=new f(e,n);var o=this.n,s=new i(t),a=e.r,u=e.s,l=1&r,c=r>>1;if(a.cmp(this.curve.p.umod(this.curve.n))>=0&&c)throw new Error("Unable to find sencond key candinate");a=c?this.curve.pointFromX(a.add(this.curve.n),l):this.curve.pointFromX(a,l);var d=e.r.invm(o),p=o.sub(s).mul(d).umod(o),m=u.mul(d).umod(o);return this.g.mulAdd(p,a,m)},l.prototype.getKeyRecoveryParam=function(t,e,r,i){if(null!==(e=new f(e,i)).recoveryParam)return e.recoveryParam;for(var n=0;n<4;n++){var o;try{o=this.recoverPubKey(t,e,n)}catch(t){continue}if(o.eq(r))return n}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";var i=r(60),n=r(108),o=r(6);function s(t){if(!(this instanceof s))return new s(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=n.toArray(t.entropy,t.entropyEnc||"hex"),r=n.toArray(t.nonce,t.nonceEnc||"hex"),i=n.toArray(t.pers,t.persEnc||"hex");o(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,i)}t.exports=s,s.prototype._init=function t(e,r,i){var n=e.concat(r).concat(i);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var o=0;o=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(i||[])),this._reseed=1},s.prototype.generate=function t(e,r,i,o){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof r&&(o=i,i=r,r=null),i&&(i=n.toArray(i,o||"hex"),this._update(i));for(var s=[];s.length"}},function(t,e,r){"use strict";var i=r(9),n=r(7),o=n.assert;function s(t,e){if(t instanceof s)return t;this._importDER(t,e)||(o(t.r&&t.s,"Signature without r or s"),this.r=new i(t.r,16),this.s=new i(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}function a(){this.place=0}function h(t,e){var r=t[e.place++];if(!(128&r))return r;var i=15&r;if(0===i||i>4)return!1;for(var n=0,o=0,s=e.place;o>>=0;return!(n<=127)&&(e.place=s,n)}function u(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}}t.exports=s,s.prototype._importDER=function t(e,r){e=n.toArray(e,r);var o=new a;if(48!==e[o.place++])return!1;var s=h(e,o);if(!1===s)return!1;if(s+o.place!==e.length)return!1;if(2!==e[o.place++])return!1;var u=h(e,o);if(!1===u)return!1;var f=e.slice(o.place,u+o.place);if(o.place+=u,2!==e[o.place++])return!1;var l=h(e,o);if(!1===l)return!1;if(e.length!==l+o.place)return!1;var c=e.slice(o.place,l+o.place);if(0===f[0]){if(!(128&f[1]))return!1;f=f.slice(1)}if(0===c[0]){if(!(128&c[1]))return!1;c=c.slice(1)}return this.r=new i(f),this.s=new i(c),this.recoveryParam=null,!0},s.prototype.toDER=function t(e){var r=this.r.toArray(),i=this.s.toArray();for(128&r[0]&&(r=[0].concat(r)),128&i[0]&&(i=[0].concat(i)),r=u(r),i=u(i);!(i[0]||128&i[1]);)i=i.slice(1);var o=[2];f(o,r.length),(o=o.concat(r)).push(2),f(o,i.length);var s=o.concat(i),a=[48];return f(a,s.length),a=a.concat(s),n.encode(a,e)}},function(t,e,r){"use strict";var i=r(60),n=r(59),o=r(7),s=o.assert,a=o.parseBytes,h=r(223),u=r(224);function f(t){if(s("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof f))return new f(t);t=n[t].curve,this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=i.sha512}t.exports=f,f.prototype.sign=function t(e,r){e=a(e);var i=this.keyFromSecret(r),n=this.hashInt(i.messagePrefix(),e),o=this.g.mul(n),s=this.encodePoint(o),h=this.hashInt(s,i.pubBytes(),e).mul(i.priv()),u=n.add(h).umod(this.curve.n);return this.makeSignature({R:o,S:u,Rencoded:s})},f.prototype.verify=function t(e,r,i){e=a(e),r=this.makeSignature(r);var n=this.keyFromPublic(i),o=this.hashInt(r.Rencoded(),n.pubBytes(),e),s=this.g.mul(r.S());return r.R().add(n.pub().mul(o)).eq(s)},f.prototype.hashInt=function t(){for(var e=this.hash(),r=0;r=e)throw new Error("invalid sig")}t.exports=function u(t,e,r,f,l){var c=s(r);if("ec"===c.type){if("ecdsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");return function d(t,e,r){var i=a[r.data.algorithm.curve.join(".")];if(!i)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var n=new o(i),s=r.data.subjectPrivateKey.data;return n.verify(e,t,s)}(t,e,c)}if("dsa"===c.type){if("dsa"!==f)throw new Error("wrong public key type");return function p(t,e,r){var i=r.data.p,o=r.data.q,a=r.data.g,u=r.data.pub_key,f=s.signature.decode(t,"der"),l=f.s,c=f.r;h(l,o),h(c,o);var d=n.mont(i),p=l.invm(o);return 0===a.toRed(d).redPow(new n(e).mul(p).mod(o)).fromRed().mul(u.toRed(d).redPow(c.mul(p).mod(o)).fromRed()).mod(i).mod(o).cmp(c)}(t,e,c)}if("rsa"!==f&&"ecdsa/rsa"!==f)throw new Error("wrong public key type");e=i.concat([l,e]);for(var m=c.modulus.byteLength(),g=[1],v=0;e.length+g.length+2=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function h(t,e,r,i){for(var n=0,o=Math.min(t.length,r),s=e;s=49?a-49+10:a>=17?a-17+10:a}return n}o.isBN=function t(e){return e instanceof o||null!==e&&"object"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function t(e,r){return e.cmp(r)>0?e:r},o.min=function t(e,r){return e.cmp(r)<0?e:r},o.prototype._init=function t(e,r,n){if("number"==typeof e)return this._initNumber(e,r,n);if("object"==typeof e)return this._initArray(e,r,n);"hex"===r&&(r=16),i(r===(0|r)&&r>=2&&r<=36);var o=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&o++,16===r?this._parseHex(e,o):this._parseBase(e,r,o),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initNumber=function t(e,r,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),r,n)},o.prototype._initArray=function t(e,r,n){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[s]|=a<>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);else if("le"===n)for(o=0,s=0;o>>26-h&67108863,(h+=24)>=26&&(h-=26,s++);return this.strip()},o.prototype._parseHex=function t(e,r){this.length=Math.ceil((e.length-r)/6),this.words=new Array(this.length);for(var i=0;i=r;i-=6)o=a(e,i,i+6),this.words[n]|=o<>>26-s&4194303,(s+=24)>=26&&(s-=26,n++);i+6!==r&&(o=a(e,r,i+6),this.words[n]|=o<>>26-s&4194303),this.strip()},o.prototype._parseBase=function t(e,r,i){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=r)n++;n--,o=o/r|0;for(var s=e.length-i,a=s%n,u=Math.min(s,s-a)+i,f=0,l=i;l1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function t(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function t(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function c(t,e,r){r.negative=e.negative^t.negative;var i=t.length+e.length|0;r.length=i,i=i-1|0;var n=0|t.words[0],o=0|e.words[0],s=n*o,a=67108863&s,h=s/67108864|0;r.words[0]=a;for(var u=1;u>>26,l=67108863&h,c=Math.min(u,e.length-1),d=Math.max(0,u-t.length+1);d<=c;d++){var p=u-d|0;f+=(s=(n=0|t.words[p])*(o=0|e.words[d])+l)/67108864|0,l=67108863&s}r.words[u]=0|l,h=0|f}return 0!==h?r.words[u]=0|h:r.length--,r.strip()}o.prototype.toString=function t(e,r){var n;if(r=0|r||1,16===(e=e||10)||"hex"===e){n="";for(var o=0,s=0,a=0;a>>24-o&16777215)||a!==this.length-1?u[6-c.length]+c+n:c+n,(o+=2)>=26&&(o-=26,a--)}for(0!==s&&(n=s.toString(16)+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var d=f[e],p=l[e];n="";var m=this.clone();for(m.negative=0;!m.isZero();){var g=m.modn(p).toString(e);n=(m=m.idivn(p)).isZero()?g+n:u[d-g.length]+g+n}for(this.isZero()&&(n="0"+n);n.length%r!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function t(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function t(){return this.toString(16)},o.prototype.toBuffer=function t(e,r){return i(void 0!==s),this.toArrayLike(s,e,r)},o.prototype.toArray=function t(e,r){return this.toArrayLike(Array,e,r)},o.prototype.toArrayLike=function t(e,r,n){var o=this.byteLength(),s=n||Math.max(1,o);i(o<=s,"byte array longer than desired length"),i(s>0,"Requested array length <= 0"),this.strip();var a,h,u="le"===r,f=new e(s),l=this.clone();if(u){for(h=0;!l.isZero();h++)a=l.andln(255),l.iushrn(8),f[h]=a;for(;h=4096&&(i+=13,r>>>=13),r>=64&&(i+=7,r>>>=7),r>=8&&(i+=4,r>>>=4),r>=2&&(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function t(e){if(0===e)return 26;var r=e,i=0;return 0==(8191&r)&&(i+=13,r>>>=13),0==(127&r)&&(i+=7,r>>>=7),0==(15&r)&&(i+=4,r>>>=4),0==(3&r)&&(i+=2,r>>>=2),0==(1&r)&&i++,i},o.prototype.bitLength=function t(){var e=this.words[this.length-1],r=this._countBits(e);return 26*(this.length-1)+r},o.prototype.zeroBits=function t(){if(this.isZero())return 0;for(var e=0,r=0;re.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function t(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function t(e){var r;r=this.length>e.length?e:this;for(var i=0;ie.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function t(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function t(e){var r,i;this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function t(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function t(e){i("number"==typeof e&&e>=0);var r=0|Math.ceil(e/26),n=e%26;this._expand(r),n>0&&r--;for(var o=0;o0&&(this.words[o]=~this.words[o]&67108863>>26-n),this.strip()},o.prototype.notn=function t(e){return this.clone().inotn(e)},o.prototype.setn=function t(e,r){i("number"==typeof e&&e>=0);var n=e/26|0,o=e%26;return this._expand(n+1),this.words[n]=r?this.words[n]|1<e.length?(i=this,n=e):(i=e,n=this);for(var o=0,s=0;s>>26;for(;0!==o&&s>>26;if(this.length=i.length,0!==o)this.words[this.length]=o,this.length++;else if(i!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function t(e){if(0!==e.negative){e.negative=0;var r=this.iadd(e);return e.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var i,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(i=this,n=e):(i=e,n=this);for(var s=0,a=0;a>26,this.words[a]=67108863&r;for(;0!==s&&a>26,this.words[a]=67108863&r;if(0===s&&a>>13,p=0|a[1],m=8191&p,g=p>>>13,v=0|a[2],b=8191&v,y=v>>>13,w=0|a[3],_=8191&w,M=w>>>13,S=0|a[4],k=8191&S,E=S>>>13,R=0|a[5],A=8191&R,T=R>>>13,x=0|a[6],I=8191&x,L=x>>>13,P=0|a[7],B=8191&P,C=P>>>13,O=0|a[8],j=8191&O,U=O>>>13,N=0|a[9],q=8191&N,D=N>>>13,z=0|h[0],F=8191&z,W=z>>>13,H=0|h[1],Z=8191&H,K=H>>>13,V=0|h[2],J=8191&V,Y=V>>>13,X=0|h[3],G=8191&X,Q=X>>>13,$=0|h[4],tt=8191&$,et=$>>>13,rt=0|h[5],it=8191&rt,nt=rt>>>13,ot=0|h[6],st=8191&ot,at=ot>>>13,ht=0|h[7],ut=8191&ht,ft=ht>>>13,lt=0|h[8],ct=8191<,dt=lt>>>13,pt=0|h[9],mt=8191&pt,gt=pt>>>13;i.negative=e.negative^r.negative,i.length=19;var vt=(f+(n=Math.imul(c,F))|0)+((8191&(o=(o=Math.imul(c,W))+Math.imul(d,F)|0))<<13)|0;f=((s=Math.imul(d,W))+(o>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(m,F),o=(o=Math.imul(m,W))+Math.imul(g,F)|0,s=Math.imul(g,W);var bt=(f+(n=n+Math.imul(c,Z)|0)|0)+((8191&(o=(o=o+Math.imul(c,K)|0)+Math.imul(d,Z)|0))<<13)|0;f=((s=s+Math.imul(d,K)|0)+(o>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(b,F),o=(o=Math.imul(b,W))+Math.imul(y,F)|0,s=Math.imul(y,W),n=n+Math.imul(m,Z)|0,o=(o=o+Math.imul(m,K)|0)+Math.imul(g,Z)|0,s=s+Math.imul(g,K)|0;var yt=(f+(n=n+Math.imul(c,J)|0)|0)+((8191&(o=(o=o+Math.imul(c,Y)|0)+Math.imul(d,J)|0))<<13)|0;f=((s=s+Math.imul(d,Y)|0)+(o>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(_,F),o=(o=Math.imul(_,W))+Math.imul(M,F)|0,s=Math.imul(M,W),n=n+Math.imul(b,Z)|0,o=(o=o+Math.imul(b,K)|0)+Math.imul(y,Z)|0,s=s+Math.imul(y,K)|0,n=n+Math.imul(m,J)|0,o=(o=o+Math.imul(m,Y)|0)+Math.imul(g,J)|0,s=s+Math.imul(g,Y)|0;var wt=(f+(n=n+Math.imul(c,G)|0)|0)+((8191&(o=(o=o+Math.imul(c,Q)|0)+Math.imul(d,G)|0))<<13)|0;f=((s=s+Math.imul(d,Q)|0)+(o>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,F),o=(o=Math.imul(k,W))+Math.imul(E,F)|0,s=Math.imul(E,W),n=n+Math.imul(_,Z)|0,o=(o=o+Math.imul(_,K)|0)+Math.imul(M,Z)|0,s=s+Math.imul(M,K)|0,n=n+Math.imul(b,J)|0,o=(o=o+Math.imul(b,Y)|0)+Math.imul(y,J)|0,s=s+Math.imul(y,Y)|0,n=n+Math.imul(m,G)|0,o=(o=o+Math.imul(m,Q)|0)+Math.imul(g,G)|0,s=s+Math.imul(g,Q)|0;var _t=(f+(n=n+Math.imul(c,tt)|0)|0)+((8191&(o=(o=o+Math.imul(c,et)|0)+Math.imul(d,tt)|0))<<13)|0;f=((s=s+Math.imul(d,et)|0)+(o>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(A,F),o=(o=Math.imul(A,W))+Math.imul(T,F)|0,s=Math.imul(T,W),n=n+Math.imul(k,Z)|0,o=(o=o+Math.imul(k,K)|0)+Math.imul(E,Z)|0,s=s+Math.imul(E,K)|0,n=n+Math.imul(_,J)|0,o=(o=o+Math.imul(_,Y)|0)+Math.imul(M,J)|0,s=s+Math.imul(M,Y)|0,n=n+Math.imul(b,G)|0,o=(o=o+Math.imul(b,Q)|0)+Math.imul(y,G)|0,s=s+Math.imul(y,Q)|0,n=n+Math.imul(m,tt)|0,o=(o=o+Math.imul(m,et)|0)+Math.imul(g,tt)|0,s=s+Math.imul(g,et)|0;var Mt=(f+(n=n+Math.imul(c,it)|0)|0)+((8191&(o=(o=o+Math.imul(c,nt)|0)+Math.imul(d,it)|0))<<13)|0;f=((s=s+Math.imul(d,nt)|0)+(o>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(I,F),o=(o=Math.imul(I,W))+Math.imul(L,F)|0,s=Math.imul(L,W),n=n+Math.imul(A,Z)|0,o=(o=o+Math.imul(A,K)|0)+Math.imul(T,Z)|0,s=s+Math.imul(T,K)|0,n=n+Math.imul(k,J)|0,o=(o=o+Math.imul(k,Y)|0)+Math.imul(E,J)|0,s=s+Math.imul(E,Y)|0,n=n+Math.imul(_,G)|0,o=(o=o+Math.imul(_,Q)|0)+Math.imul(M,G)|0,s=s+Math.imul(M,Q)|0,n=n+Math.imul(b,tt)|0,o=(o=o+Math.imul(b,et)|0)+Math.imul(y,tt)|0,s=s+Math.imul(y,et)|0,n=n+Math.imul(m,it)|0,o=(o=o+Math.imul(m,nt)|0)+Math.imul(g,it)|0,s=s+Math.imul(g,nt)|0;var St=(f+(n=n+Math.imul(c,st)|0)|0)+((8191&(o=(o=o+Math.imul(c,at)|0)+Math.imul(d,st)|0))<<13)|0;f=((s=s+Math.imul(d,at)|0)+(o>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,F),o=(o=Math.imul(B,W))+Math.imul(C,F)|0,s=Math.imul(C,W),n=n+Math.imul(I,Z)|0,o=(o=o+Math.imul(I,K)|0)+Math.imul(L,Z)|0,s=s+Math.imul(L,K)|0,n=n+Math.imul(A,J)|0,o=(o=o+Math.imul(A,Y)|0)+Math.imul(T,J)|0,s=s+Math.imul(T,Y)|0,n=n+Math.imul(k,G)|0,o=(o=o+Math.imul(k,Q)|0)+Math.imul(E,G)|0,s=s+Math.imul(E,Q)|0,n=n+Math.imul(_,tt)|0,o=(o=o+Math.imul(_,et)|0)+Math.imul(M,tt)|0,s=s+Math.imul(M,et)|0,n=n+Math.imul(b,it)|0,o=(o=o+Math.imul(b,nt)|0)+Math.imul(y,it)|0,s=s+Math.imul(y,nt)|0,n=n+Math.imul(m,st)|0,o=(o=o+Math.imul(m,at)|0)+Math.imul(g,st)|0,s=s+Math.imul(g,at)|0;var kt=(f+(n=n+Math.imul(c,ut)|0)|0)+((8191&(o=(o=o+Math.imul(c,ft)|0)+Math.imul(d,ut)|0))<<13)|0;f=((s=s+Math.imul(d,ft)|0)+(o>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(j,F),o=(o=Math.imul(j,W))+Math.imul(U,F)|0,s=Math.imul(U,W),n=n+Math.imul(B,Z)|0,o=(o=o+Math.imul(B,K)|0)+Math.imul(C,Z)|0,s=s+Math.imul(C,K)|0,n=n+Math.imul(I,J)|0,o=(o=o+Math.imul(I,Y)|0)+Math.imul(L,J)|0,s=s+Math.imul(L,Y)|0,n=n+Math.imul(A,G)|0,o=(o=o+Math.imul(A,Q)|0)+Math.imul(T,G)|0,s=s+Math.imul(T,Q)|0,n=n+Math.imul(k,tt)|0,o=(o=o+Math.imul(k,et)|0)+Math.imul(E,tt)|0,s=s+Math.imul(E,et)|0,n=n+Math.imul(_,it)|0,o=(o=o+Math.imul(_,nt)|0)+Math.imul(M,it)|0,s=s+Math.imul(M,nt)|0,n=n+Math.imul(b,st)|0,o=(o=o+Math.imul(b,at)|0)+Math.imul(y,st)|0,s=s+Math.imul(y,at)|0,n=n+Math.imul(m,ut)|0,o=(o=o+Math.imul(m,ft)|0)+Math.imul(g,ut)|0,s=s+Math.imul(g,ft)|0;var Et=(f+(n=n+Math.imul(c,ct)|0)|0)+((8191&(o=(o=o+Math.imul(c,dt)|0)+Math.imul(d,ct)|0))<<13)|0;f=((s=s+Math.imul(d,dt)|0)+(o>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(q,F),o=(o=Math.imul(q,W))+Math.imul(D,F)|0,s=Math.imul(D,W),n=n+Math.imul(j,Z)|0,o=(o=o+Math.imul(j,K)|0)+Math.imul(U,Z)|0,s=s+Math.imul(U,K)|0,n=n+Math.imul(B,J)|0,o=(o=o+Math.imul(B,Y)|0)+Math.imul(C,J)|0,s=s+Math.imul(C,Y)|0,n=n+Math.imul(I,G)|0,o=(o=o+Math.imul(I,Q)|0)+Math.imul(L,G)|0,s=s+Math.imul(L,Q)|0,n=n+Math.imul(A,tt)|0,o=(o=o+Math.imul(A,et)|0)+Math.imul(T,tt)|0,s=s+Math.imul(T,et)|0,n=n+Math.imul(k,it)|0,o=(o=o+Math.imul(k,nt)|0)+Math.imul(E,it)|0,s=s+Math.imul(E,nt)|0,n=n+Math.imul(_,st)|0,o=(o=o+Math.imul(_,at)|0)+Math.imul(M,st)|0,s=s+Math.imul(M,at)|0,n=n+Math.imul(b,ut)|0,o=(o=o+Math.imul(b,ft)|0)+Math.imul(y,ut)|0,s=s+Math.imul(y,ft)|0,n=n+Math.imul(m,ct)|0,o=(o=o+Math.imul(m,dt)|0)+Math.imul(g,ct)|0,s=s+Math.imul(g,dt)|0;var Rt=(f+(n=n+Math.imul(c,mt)|0)|0)+((8191&(o=(o=o+Math.imul(c,gt)|0)+Math.imul(d,mt)|0))<<13)|0;f=((s=s+Math.imul(d,gt)|0)+(o>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(q,Z),o=(o=Math.imul(q,K))+Math.imul(D,Z)|0,s=Math.imul(D,K),n=n+Math.imul(j,J)|0,o=(o=o+Math.imul(j,Y)|0)+Math.imul(U,J)|0,s=s+Math.imul(U,Y)|0,n=n+Math.imul(B,G)|0,o=(o=o+Math.imul(B,Q)|0)+Math.imul(C,G)|0,s=s+Math.imul(C,Q)|0,n=n+Math.imul(I,tt)|0,o=(o=o+Math.imul(I,et)|0)+Math.imul(L,tt)|0,s=s+Math.imul(L,et)|0,n=n+Math.imul(A,it)|0,o=(o=o+Math.imul(A,nt)|0)+Math.imul(T,it)|0,s=s+Math.imul(T,nt)|0,n=n+Math.imul(k,st)|0,o=(o=o+Math.imul(k,at)|0)+Math.imul(E,st)|0,s=s+Math.imul(E,at)|0,n=n+Math.imul(_,ut)|0,o=(o=o+Math.imul(_,ft)|0)+Math.imul(M,ut)|0,s=s+Math.imul(M,ft)|0,n=n+Math.imul(b,ct)|0,o=(o=o+Math.imul(b,dt)|0)+Math.imul(y,ct)|0,s=s+Math.imul(y,dt)|0;var At=(f+(n=n+Math.imul(m,mt)|0)|0)+((8191&(o=(o=o+Math.imul(m,gt)|0)+Math.imul(g,mt)|0))<<13)|0;f=((s=s+Math.imul(g,gt)|0)+(o>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(q,J),o=(o=Math.imul(q,Y))+Math.imul(D,J)|0,s=Math.imul(D,Y),n=n+Math.imul(j,G)|0,o=(o=o+Math.imul(j,Q)|0)+Math.imul(U,G)|0,s=s+Math.imul(U,Q)|0,n=n+Math.imul(B,tt)|0,o=(o=o+Math.imul(B,et)|0)+Math.imul(C,tt)|0,s=s+Math.imul(C,et)|0,n=n+Math.imul(I,it)|0,o=(o=o+Math.imul(I,nt)|0)+Math.imul(L,it)|0,s=s+Math.imul(L,nt)|0,n=n+Math.imul(A,st)|0,o=(o=o+Math.imul(A,at)|0)+Math.imul(T,st)|0,s=s+Math.imul(T,at)|0,n=n+Math.imul(k,ut)|0,o=(o=o+Math.imul(k,ft)|0)+Math.imul(E,ut)|0,s=s+Math.imul(E,ft)|0,n=n+Math.imul(_,ct)|0,o=(o=o+Math.imul(_,dt)|0)+Math.imul(M,ct)|0,s=s+Math.imul(M,dt)|0;var Tt=(f+(n=n+Math.imul(b,mt)|0)|0)+((8191&(o=(o=o+Math.imul(b,gt)|0)+Math.imul(y,mt)|0))<<13)|0;f=((s=s+Math.imul(y,gt)|0)+(o>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(q,G),o=(o=Math.imul(q,Q))+Math.imul(D,G)|0,s=Math.imul(D,Q),n=n+Math.imul(j,tt)|0,o=(o=o+Math.imul(j,et)|0)+Math.imul(U,tt)|0,s=s+Math.imul(U,et)|0,n=n+Math.imul(B,it)|0,o=(o=o+Math.imul(B,nt)|0)+Math.imul(C,it)|0,s=s+Math.imul(C,nt)|0,n=n+Math.imul(I,st)|0,o=(o=o+Math.imul(I,at)|0)+Math.imul(L,st)|0,s=s+Math.imul(L,at)|0,n=n+Math.imul(A,ut)|0,o=(o=o+Math.imul(A,ft)|0)+Math.imul(T,ut)|0,s=s+Math.imul(T,ft)|0,n=n+Math.imul(k,ct)|0,o=(o=o+Math.imul(k,dt)|0)+Math.imul(E,ct)|0,s=s+Math.imul(E,dt)|0;var xt=(f+(n=n+Math.imul(_,mt)|0)|0)+((8191&(o=(o=o+Math.imul(_,gt)|0)+Math.imul(M,mt)|0))<<13)|0;f=((s=s+Math.imul(M,gt)|0)+(o>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(q,tt),o=(o=Math.imul(q,et))+Math.imul(D,tt)|0,s=Math.imul(D,et),n=n+Math.imul(j,it)|0,o=(o=o+Math.imul(j,nt)|0)+Math.imul(U,it)|0,s=s+Math.imul(U,nt)|0,n=n+Math.imul(B,st)|0,o=(o=o+Math.imul(B,at)|0)+Math.imul(C,st)|0,s=s+Math.imul(C,at)|0,n=n+Math.imul(I,ut)|0,o=(o=o+Math.imul(I,ft)|0)+Math.imul(L,ut)|0,s=s+Math.imul(L,ft)|0,n=n+Math.imul(A,ct)|0,o=(o=o+Math.imul(A,dt)|0)+Math.imul(T,ct)|0,s=s+Math.imul(T,dt)|0;var It=(f+(n=n+Math.imul(k,mt)|0)|0)+((8191&(o=(o=o+Math.imul(k,gt)|0)+Math.imul(E,mt)|0))<<13)|0;f=((s=s+Math.imul(E,gt)|0)+(o>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(q,it),o=(o=Math.imul(q,nt))+Math.imul(D,it)|0,s=Math.imul(D,nt),n=n+Math.imul(j,st)|0,o=(o=o+Math.imul(j,at)|0)+Math.imul(U,st)|0,s=s+Math.imul(U,at)|0,n=n+Math.imul(B,ut)|0,o=(o=o+Math.imul(B,ft)|0)+Math.imul(C,ut)|0,s=s+Math.imul(C,ft)|0,n=n+Math.imul(I,ct)|0,o=(o=o+Math.imul(I,dt)|0)+Math.imul(L,ct)|0,s=s+Math.imul(L,dt)|0;var Lt=(f+(n=n+Math.imul(A,mt)|0)|0)+((8191&(o=(o=o+Math.imul(A,gt)|0)+Math.imul(T,mt)|0))<<13)|0;f=((s=s+Math.imul(T,gt)|0)+(o>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(q,st),o=(o=Math.imul(q,at))+Math.imul(D,st)|0,s=Math.imul(D,at),n=n+Math.imul(j,ut)|0,o=(o=o+Math.imul(j,ft)|0)+Math.imul(U,ut)|0,s=s+Math.imul(U,ft)|0,n=n+Math.imul(B,ct)|0,o=(o=o+Math.imul(B,dt)|0)+Math.imul(C,ct)|0,s=s+Math.imul(C,dt)|0;var Pt=(f+(n=n+Math.imul(I,mt)|0)|0)+((8191&(o=(o=o+Math.imul(I,gt)|0)+Math.imul(L,mt)|0))<<13)|0;f=((s=s+Math.imul(L,gt)|0)+(o>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(q,ut),o=(o=Math.imul(q,ft))+Math.imul(D,ut)|0,s=Math.imul(D,ft),n=n+Math.imul(j,ct)|0,o=(o=o+Math.imul(j,dt)|0)+Math.imul(U,ct)|0,s=s+Math.imul(U,dt)|0;var Bt=(f+(n=n+Math.imul(B,mt)|0)|0)+((8191&(o=(o=o+Math.imul(B,gt)|0)+Math.imul(C,mt)|0))<<13)|0;f=((s=s+Math.imul(C,gt)|0)+(o>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(q,ct),o=(o=Math.imul(q,dt))+Math.imul(D,ct)|0,s=Math.imul(D,dt);var Ct=(f+(n=n+Math.imul(j,mt)|0)|0)+((8191&(o=(o=o+Math.imul(j,gt)|0)+Math.imul(U,mt)|0))<<13)|0;f=((s=s+Math.imul(U,gt)|0)+(o>>>13)|0)+(Ct>>>26)|0,Ct&=67108863;var Ot=(f+(n=Math.imul(q,mt))|0)+((8191&(o=(o=Math.imul(q,gt))+Math.imul(D,mt)|0))<<13)|0;return f=((s=Math.imul(D,gt))+(o>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,u[0]=vt,u[1]=bt,u[2]=yt,u[3]=wt,u[4]=_t,u[5]=Mt,u[6]=St,u[7]=kt,u[8]=Et,u[9]=Rt,u[10]=At,u[11]=Tt,u[12]=xt,u[13]=It,u[14]=Lt,u[15]=Pt,u[16]=Bt,u[17]=Ct,u[18]=Ot,0!==f&&(u[19]=f,i.length++),i};function p(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(d=c),o.prototype.mulTo=function t(e,r){var i=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,r):i<63?c(this,e,r):i<1024?function n(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var i=0,n=0,o=0;o>>26)|0)>>>26,s&=67108863}r.words[o]=a,i=s,s=n}return 0!==i?r.words[o]=i:r.length--,r.strip()}(this,e,r):p(this,e,r)},m.prototype.makeRBT=function t(e){for(var r=new Array(e),i=o.prototype._countBits(e)-1,n=0;n>=1;return n},m.prototype.permute=function t(e,r,i,n,o,s){for(var a=0;a>>=1)o++;return 1<>>=13,n[2*a+1]=8191&s,s>>>=13;for(a=2*r;a>=26,r+=o/67108864|0,r+=s>>>26,this.words[n]=67108863&s}return 0!==r&&(this.words[n]=r,this.length++),this},o.prototype.muln=function t(e){return this.clone().imuln(e)},o.prototype.sqr=function t(){return this.mul(this)},o.prototype.isqr=function t(){return this.imul(this.clone())},o.prototype.pow=function t(e){var r=function i(t){for(var e=new Array(t.bitLength()),r=0;r>>n}return e}(e);if(0===r.length)return new o(1);for(var n=this,s=0;s=0);var r,n=e%26,o=(e-n)/26,s=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(r=0;r>>26-n}a&&(this.words[r]=a,this.length++)}if(0!==o){for(r=this.length-1;r>=0;r--)this.words[r+o]=this.words[r];for(r=0;r=0),o=r?(r-r%26)/26:0;var s=e%26,a=Math.min((e-s)/26,this.length),h=67108863^67108863>>>s<a)for(this.length-=a,f=0;f=0&&(0!==l||f>=o);f--){var c=0|this.words[f];this.words[f]=l<<26-s|c>>>s,l=c&h}return u&&0!==l&&(u.words[u.length++]=l),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function t(e,r,n){return i(0===this.negative),this.iushrn(e,r,n)},o.prototype.shln=function t(e){return this.clone().ishln(e)},o.prototype.ushln=function t(e){return this.clone().iushln(e)},o.prototype.shrn=function t(e){return this.clone().ishrn(e)},o.prototype.ushrn=function t(e){return this.clone().iushrn(e)},o.prototype.testn=function t(e){i("number"==typeof e&&e>=0);var r=e%26,n=(e-r)/26,o=1<=0);var r=e%26,n=(e-r)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==r&&n++,this.length=Math.min(n,this.length),0!==r){var o=67108863^67108863>>>r<=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function t(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var r=0;r>26)-(u/67108864|0),this.words[o+n]=67108863&s}for(;o>26,this.words[o+n]=67108863&s;if(0===h)return this.strip();for(i(-1===h),h=0,o=0;o>26,this.words[o]=67108863&s;return this.negative=1,this.strip()},o.prototype._wordDiv=function t(e,r){var i=(this.length,e.length),n=this.clone(),s=e,a=0|s.words[s.length-1];0!==(i=26-this._countBits(a))&&(s=s.ushln(i),n.iushln(i),a=0|s.words[s.length-1]);var h,u=n.length-s.length;if("mod"!==r){(h=new o(null)).length=u+1,h.words=new Array(h.length);for(var f=0;f=0;c--){var d=67108864*(0|n.words[s.length+c])+(0|n.words[s.length+c-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(s,d,c);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(s,1,c),n.isZero()||(n.negative^=1);h&&(h.words[c]=d)}return h&&h.strip(),n.strip(),"div"!==r&&0!==i&&n.iushrn(i),{div:h||null,mod:n}},o.prototype.divmod=function t(e,r,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(h=this.neg().divmod(e,r),"mod"!==r&&(s=h.div.neg()),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:s,mod:a}):0===this.negative&&0!==e.negative?(h=this.divmod(e.neg(),r),"mod"!==r&&(s=h.div.neg()),{div:s,mod:h.mod}):0!=(this.negative&e.negative)?(h=this.neg().divmod(e.neg(),r),"div"!==r&&(a=h.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:h.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===r?{div:this.divn(e.words[0]),mod:null}:"mod"===r?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,r);var s,a,h},o.prototype.div=function t(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function t(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function t(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function t(e){var r=this.divmod(e);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(e):r.mod,n=e.ushrn(1),o=e.andln(1),s=i.cmp(n);return s<0||1===o&&0===s?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function t(e){i(e<=67108863);for(var r=(1<<26)%e,n=0,o=this.length-1;o>=0;o--)n=(r*n+(0|this.words[o]))%e;return n},o.prototype.idivn=function t(e){i(e<=67108863);for(var r=0,n=this.length-1;n>=0;n--){var o=(0|this.words[n])+67108864*r;this.words[n]=o/e|0,r=o%e}return this.strip()},o.prototype.divn=function t(e){return this.clone().idivn(e)},o.prototype.egcd=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s=new o(1),a=new o(0),h=new o(0),u=new o(1),f=0;r.isEven()&&n.isEven();)r.iushrn(1),n.iushrn(1),++f;for(var l=n.clone(),c=r.clone();!r.isZero();){for(var d=0,p=1;0==(r.words[0]&p)&&d<26;++d,p<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||a.isOdd())&&(s.iadd(l),a.isub(c)),s.iushrn(1),a.iushrn(1);for(var m=0,g=1;0==(n.words[0]&g)&&m<26;++m,g<<=1);if(m>0)for(n.iushrn(m);m-- >0;)(h.isOdd()||u.isOdd())&&(h.iadd(l),u.isub(c)),h.iushrn(1),u.iushrn(1);r.cmp(n)>=0?(r.isub(n),s.isub(h),a.isub(u)):(n.isub(r),h.isub(s),u.isub(a))}return{a:h,b:u,gcd:n.iushln(f)}},o.prototype._invmp=function t(e){i(0===e.negative),i(!e.isZero());var r=this,n=e.clone();r=0!==r.negative?r.umod(e):r.clone();for(var s,a=new o(1),h=new o(0),u=n.clone();r.cmpn(1)>0&&n.cmpn(1)>0;){for(var f=0,l=1;0==(r.words[0]&l)&&f<26;++f,l<<=1);if(f>0)for(r.iushrn(f);f-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var c=0,d=1;0==(n.words[0]&d)&&c<26;++c,d<<=1);if(c>0)for(n.iushrn(c);c-- >0;)h.isOdd()&&h.iadd(u),h.iushrn(1);r.cmp(n)>=0?(r.isub(n),a.isub(h)):(n.isub(r),h.isub(a))}return(s=0===r.cmpn(1)?a:h).cmpn(0)<0&&s.iadd(e),s},o.prototype.gcd=function t(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var r=this.clone(),i=e.clone();r.negative=0,i.negative=0;for(var n=0;r.isEven()&&i.isEven();n++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var o=r.cmp(i);if(o<0){var s=r;r=i,i=s}else if(0===o||0===i.cmpn(1))break;r.isub(i)}return i.iushln(n)},o.prototype.invm=function t(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function t(){return 0==(1&this.words[0])},o.prototype.isOdd=function t(){return 1==(1&this.words[0])},o.prototype.andln=function t(e){return this.words[0]&e},o.prototype.bincn=function t(e){i("number"==typeof e);var r=e%26,n=(e-r)/26,o=1<>>26,h&=67108863,this.words[a]=h}return 0!==s&&(this.words[a]=s,this.length++),this},o.prototype.isZero=function t(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function t(e){var r,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)r=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var o=0|this.words[0];r=o===e?0:oe.length)return 1;if(this.length=0;i--){var n=0|this.words[i],o=0|e.words[i];if(n!==o){no&&(r=1);break}}return r},o.prototype.gtn=function t(e){return 1===this.cmpn(e)},o.prototype.gt=function t(e){return 1===this.cmp(e)},o.prototype.gten=function t(e){return this.cmpn(e)>=0},o.prototype.gte=function t(e){return this.cmp(e)>=0},o.prototype.ltn=function t(e){return-1===this.cmpn(e)},o.prototype.lt=function t(e){return-1===this.cmp(e)},o.prototype.lten=function t(e){return this.cmpn(e)<=0},o.prototype.lte=function t(e){return this.cmp(e)<=0},o.prototype.eqn=function t(e){return 0===this.cmpn(e)},o.prototype.eq=function t(e){return 0===this.cmp(e)},o.red=function t(e){return new M(e)},o.prototype.toRed=function t(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function t(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function t(e){return this.red=e,this},o.prototype.forceRed=function t(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function t(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function t(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function t(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function t(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function t(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function t(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function t(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function t(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function t(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function t(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function t(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function t(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function y(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function M(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else i(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function S(t){M.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function t(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function t(e){var r,i=e;do{this.split(i,this.tmp),r=(i=(i=this.imulK(i)).iadd(this.tmp)).bitLength()}while(r>this.n);var n=r0?i.isub(this.p):void 0!==i.strip?i.strip():i._strip(),i},v.prototype.split=function t(e,r){e.iushrn(this.n,0,r)},v.prototype.imulK=function t(e){return e.imul(this.k)},n(b,v),b.prototype.split=function t(e,r){for(var i=4194303,n=Math.min(e.length,9),o=0;o>>22,s=a}s>>>=22,e.words[o-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function t(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var r=0,i=0;i>>=26,e.words[i]=o,r=n}return 0!==r&&(e.words[e.length++]=r),e},o._prime=function t(e){if(g[e])return g[e];var t;if("k256"===e)t=new b;else if("p224"===e)t=new y;else if("p192"===e)t=new w;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new _}return g[e]=t,t},M.prototype._verify1=function t(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},M.prototype._verify2=function t(e,r){i(0==(e.negative|r.negative),"red works only with positives"),i(e.red&&e.red===r.red,"red works only with red numbers")},M.prototype.imod=function t(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},M.prototype.neg=function t(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},M.prototype.add=function t(e,r){this._verify2(e,r);var i=e.add(r);return i.cmp(this.m)>=0&&i.isub(this.m),i._forceRed(this)},M.prototype.iadd=function t(e,r){this._verify2(e,r);var i=e.iadd(r);return i.cmp(this.m)>=0&&i.isub(this.m),i},M.prototype.sub=function t(e,r){this._verify2(e,r);var i=e.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},M.prototype.isub=function t(e,r){this._verify2(e,r);var i=e.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},M.prototype.shl=function t(e,r){return this._verify1(e),this.imod(e.ushln(r))},M.prototype.imul=function t(e,r){return this._verify2(e,r),this.imod(e.imul(r))},M.prototype.mul=function t(e,r){return this._verify2(e,r),this.imod(e.mul(r))},M.prototype.isqr=function t(e){return this.imul(e,e.clone())},M.prototype.sqr=function t(e){return this.mul(e,e)},M.prototype.sqrt=function t(e){if(e.isZero())return e.clone();var r=this.m.andln(3);if(i(r%2==1),3===r){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var s=this.m.subn(1),a=0;!s.isZero()&&0===s.andln(1);)a++,s.iushrn(1);i(!s.isZero());var h=new o(1).toRed(this),u=h.redNeg(),f=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);0!==this.pow(l,f).cmp(u);)l.redIAdd(u);for(var c=this.pow(l,s),d=this.pow(e,s.addn(1).iushrn(1)),p=this.pow(e,s),m=a;0!==p.cmp(h);){for(var g=p,v=0;0!==g.cmp(h);v++)g=g.redSqr();i(v=0;n--){for(var f=r.words[n],l=u-1;l>=0;l--){var c=f>>l&1;s!==i[0]&&(s=this.sqr(s)),0!==c||0!==a?(a<<=1,a|=c,(4===++h||0===n&&0===l)&&(s=this.mul(s,i[a]),h=0,a=0)):h=0}u=26}return s},M.prototype.convertTo=function t(e){var r=e.umod(this.m);return r===e?r.clone():r},M.prototype.convertFrom=function t(e){var r=e.clone();return r.red=null,r},o.mont=function t(e){return new S(e)},n(S,M),S.prototype.convertTo=function t(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function t(e){var r=this.imod(e.mul(this.rinv));return r.red=null,r},S.prototype.imul=function t(e,r){if(e.isZero()||r.isZero())return e.words[0]=0,e.length=1,e;var i=e.imul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=i.isub(n).iushrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},S.prototype.mul=function t(e,r){if(e.isZero()||r.isZero())return new o(0)._forceRed(this);var i=e.mul(r),n=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=i.isub(n).iushrn(this.shift),a=s;return s.cmp(this.m)>=0?a=s.isub(this.m):s.cmpn(0)<0&&(a=s.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function t(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(16)(t))},function(t,e){},function(t,e,r){e.publicEncrypt=r(240),e.privateDecrypt=r(242),e.privateEncrypt=function t(r,i){return e.publicEncrypt(r,i,!0)},e.publicDecrypt=function t(r,i){return e.privateDecrypt(r,i,!0)}},function(t,e,r){var i=r(37),n=r(18),o=r(26),s=r(120),a=r(121),h=r(65),u=r(122),f=r(55),l=r(38).Buffer;t.exports=function t(e,r,c){var d;d=e.padding?e.padding:c?1:4;var p,m=i(e);if(4===d)p=function g(t,e){var r=t.modulus.byteLength(),i=e.length,u=o("sha1").update(l.alloc(0)).digest(),f=u.length,c=2*f;if(i>r-c-2)throw new Error("message too long");var d=l.alloc(r-i-c-2),p=r-f-1,m=n(f),g=a(l.concat([u,d,l.alloc(1,1),e],p),s(m,p)),v=a(m,s(g,f));return new h(l.concat([l.alloc(1),v,g],r))}(m,r);else if(1===d)p=function v(t,e,r){var i,o=e.length,s=t.modulus.byteLength();if(o>s-11)throw new Error("message too long");i=r?l.alloc(s-o-3,255):function a(t){var e,r=l.allocUnsafe(t),i=0,o=n(2*t),s=0;for(;i=0)throw new Error("data too long for modulus")}return c?f(p,m):u(p,m)}},function(t,e){},function(t,e,r){var i=r(37),n=r(120),o=r(121),s=r(65),a=r(55),h=r(26),u=r(122),f=r(38).Buffer;t.exports=function t(e,r,l){var c;c=e.padding?e.padding:l?1:4;var d,p=i(e),m=p.modulus.byteLength();if(r.length>m||new s(r).cmp(p.modulus)>=0)throw new Error("decryption error");d=l?u(new s(r),p):a(r,p);var g=f.alloc(m-d.length);if(d=f.concat([g,d],m),4===c)return function v(t,e){var r=t.modulus.byteLength(),i=h("sha1").update(f.alloc(0)).digest(),s=i.length;if(0!==e[0])throw new Error("decryption error");var a=e.slice(1,s+1),u=e.slice(s+1),l=o(a,n(u,s)),c=o(u,n(l,r-s-1));if(function d(t,e){t=f.from(t),e=f.from(e);var r=0,i=t.length;t.length!==e.length&&(r++,i=Math.min(t.length,e.length));var n=-1;for(;++n=e.length){o++;break}var s=e.slice(2,n-1);("0002"!==i.toString("hex")&&!r||"0001"!==i.toString("hex")&&r)&&o++;s.length<8&&o++;if(o)throw new Error("decryption error");return e.slice(n)}(0,d,l);if(3===c)return d;throw new Error("unknown padding")}},function(t,e,r){"use strict";(function(t,i){function n(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}var o=r(2),s=r(18),a=o.Buffer,h=o.kMaxLength,u=t.crypto||t.msCrypto,f=Math.pow(2,32)-1;function l(t,e){if("number"!=typeof t||t!=t)throw new TypeError("offset must be a number");if(t>f||t<0)throw new TypeError("offset must be a uint32");if(t>h||t>e)throw new RangeError("offset out of range")}function c(t,e,r){if("number"!=typeof t||t!=t)throw new TypeError("size must be a number");if(t>f||t<0)throw new TypeError("size must be a uint32");if(t+e>r||t>h)throw new RangeError("buffer too small")}function d(t,e,r,n){if(i.browser){var o=t.buffer,a=new Uint8Array(o,e,r);return u.getRandomValues(a),n?void i.nextTick((function(){n(null,t)})):t}if(!n)return s(r).copy(t,e),t;s(r,(function(r,i){if(r)return n(r);i.copy(t,e),n(null,t)}))}u&&u.getRandomValues||!i.browser?(e.randomFill=function p(e,r,i,n){if(!(a.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof r)n=r,r=0,i=e.length;else if("function"==typeof i)n=i,i=e.length-r;else if("function"!=typeof n)throw new TypeError('"cb" argument must be a function');return l(r,e.length),c(i,r,e.length),d(e,r,i,n)},e.randomFillSync=function m(e,r,i){void 0===r&&(r=0);if(!(a.isBuffer(e)||e instanceof t.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');l(r,e.length),void 0===i&&(i=e.length-r);return c(i,r,e.length),d(e,r,i)}):(e.randomFill=n,e.randomFillSync=n)}).call(this,r(4),r(3))},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function i(t){var e=t.jws,r=t.KeyUtil,i=t.X509,o=t.crypto,s=t.hextob64u,a=t.b64tohex,h=t.AllowedSigningAlgs;return function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.parseJwt=function t(r){n.Log.debug("JoseUtil.parseJwt");try{var i=e.JWS.parse(r);return{header:i.headerObj,payload:i.payloadObj}}catch(t){n.Log.error(t)}},t.validateJwt=function e(o,s,h,u,f,l,c){n.Log.debug("JoseUtil.validateJwt");try{if("RSA"===s.kty)if(s.e&&s.n)s=r.getKey(s);else{if(!s.x5c||!s.x5c.length)return n.Log.error("JoseUtil.validateJwt: RSA key missing key material",s),Promise.reject(new Error("RSA key missing key material"));var d=a(s.x5c[0]);s=i.getPublicKeyFromCertHex(d)}else{if("EC"!==s.kty)return n.Log.error("JoseUtil.validateJwt: Unsupported key type",s&&s.kty),Promise.reject(new Error(s.kty));if(!(s.crv&&s.x&&s.y))return n.Log.error("JoseUtil.validateJwt: EC key missing key material",s),Promise.reject(new Error("EC key missing key material"));s=r.getKey(s)}return t._validateJwt(o,s,h,u,f,l,c)}catch(t){return n.Log.error(t&&t.message||t),Promise.reject("JWT validation failed")}},t.validateJwtAttributes=function e(r,i,o,s,a,h){s||(s=0),a||(a=parseInt(Date.now()/1e3));var u=t.parseJwt(r).payload;if(!u.iss)return n.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(u.iss!==i)return n.Log.error("JoseUtil._validateJwt: Invalid issuer in token",u.iss),Promise.reject(new Error("Invalid issuer in token: "+u.iss));if(!u.aud)return n.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(u.aud===o||Array.isArray(u.aud)&&u.aud.indexOf(o)>=0))return n.Log.error("JoseUtil._validateJwt: Invalid audience in token",u.aud),Promise.reject(new Error("Invalid audience in token: "+u.aud));if(u.azp&&u.azp!==o)return n.Log.error("JoseUtil._validateJwt: Invalid azp in token",u.azp),Promise.reject(new Error("Invalid azp in token: "+u.azp));if(!h){var f=a+s,l=a-s;if(!u.iat)return n.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(f1&&void 0!==arguments[1]?arguments[1]:"#";o(this,t);var i=n.UrlUtility.parseUrlFragment(e,r);this.error=i.error,this.error_description=i.error_description,this.error_uri=i.error_uri,this.code=i.code,this.state=i.state,this.id_token=i.id_token,this.session_state=i.session_state,this.access_token=i.access_token,this.token_type=i.token_type,this.scope=i.scope,this.profile=void 0,this.expires_in=i.expires_in}return i(t,[{key:"expires_in",get:function t(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function t(e){var r=parseInt(e);if("number"==typeof r&&r>0){var i=parseInt(Date.now()/1e3);this.expires_at=i+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function t(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutRequest=void 0;var i=r(0),n=r(31),o=r(67);e.SignoutRequest=function t(e){var r=e.url,s=e.id_token_hint,a=e.post_logout_redirect_uri,h=e.data,u=e.extraQueryParams,f=e.request_type;if(function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw i.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var c in s&&(r=n.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=n.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),h&&(this.state=new o.State({data:h,request_type:f}),r=n.UrlUtility.addQueryParam(r,"state",this.state.id))),u)r=n.UrlUtility.addQueryParam(r,c,u[c]);this.url=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SignoutResponse=void 0;var i=r(31);e.SignoutResponse=function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var n=i.UrlUtility.parseUrlFragment(e,"?");this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.state=n.state}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryWebStorage=void 0;var i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.TokenRevocationClient,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:d.TokenClient,v=arguments.length>5&&void 0!==arguments[5]?arguments[5]:p.JoseUtil;m(this,e),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var b=g(this,t.call(this,r));return b._events=new h.UserManagerEvents(r),b._silentRenewService=new i(b),b.settings.automaticSilentRenew&&(n.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),b.startSilentRenew()),b.settings.monitorSession&&(n.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),b._sessionMonitor=new o(b)),b._tokenRevocationClient=new a(b._settings),b._tokenClient=new l(b._settings),b._joseUtil=v,b}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.getUser=function t(){var e=this;return this._loadUser().then((function(t){return t?(n.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(n.Log.info("UserManager.getUser: user not found in storage"),null)}))},e.prototype.removeUser=function t(){var e=this;return this.storeUser(null).then((function(){n.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},e.prototype.signinRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,r).then((function(){n.Log.info("UserManager.signinRedirect: successful")}))},e.prototype.signinRedirectCallback=function t(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(t){return t.profile&&t.profile.sub?n.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinRedirectCallback: no sub"),t}))},e.prototype.signinPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var r=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinPopup: no sub")),t}))):(n.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},e.prototype.signinPopupCallback=function t(e){return this._signinCallback(e,this._popupNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinPopupCallback: no sub")),t})).catch((function(t){n.Log.error(t.message)}))},e.prototype.signinSilent=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=Object.assign({},r),this._loadUser().then((function(t){return t&&t.refresh_token?(r.refresh_token=t.refresh_token,e._useRefreshToken(r)):(r.request_type="si:s",r.id_token_hint=r.id_token_hint||e.settings.includeIdTokenInSilentRenew&&t&&t.id_token,t&&e._settings.validateSubOnSilentRenew&&(n.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",t.profile.sub),r.current_sub=t.profile.sub),e._signinSilentIframe(r))}))},e.prototype._useRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(r).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var i=Promise.resolve();return t.id_token&&(i=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),i.then((function(){return n.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token||r.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(n.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(n.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},e.prototype._validateIdTokenFromTokenRefreshToken=function t(e,r){var i=this;return this._metadataService.getIssuer().then((function(t){return i.settings.getEpochTime().then((function(o){return i._joseUtil.validateJwtAttributes(r,t,i._settings.client_id,i._settings.clockSkew,o).then((function(t){return t?t.sub!==e.sub?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(n.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))}))},e.prototype._signinSilentIframe=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(e.redirect_uri=r,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:r,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinSilent: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinSilent: no sub")),t}))):(n.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype.signinSilentCallback=function t(e){return this._signinCallback(e,this._iframeNavigator).then((function(t){return t&&(t.profile&&t.profile.sub?n.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",t.profile.sub):n.Log.info("UserManager.signinSilentCallback: no sub")),t}))},e.prototype.signinCallback=function t(e){var r=this;return this.readSigninResponseState(e).then((function(t){var i=t.state;t.response;return"si:r"===i.request_type?r.signinRedirectCallback(e):"si:p"===i.request_type?r.signinPopupCallback(e):"si:s"===i.request_type?r.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},e.prototype.signoutCallback=function t(e,r){var i=this;return this.readSignoutResponseState(e).then((function(t){var n=t.state,o=t.response;return n?"so:r"===n.request_type?i.signoutRedirectCallback(e):"so:p"===n.request_type?i.signoutPopupCallback(e,r):Promise.reject(new Error("invalid response_type in state")):o}))},e.prototype.querySessionStatus=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(r=Object.assign({},r)).request_type="si:s";var i=r.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return i?(r.redirect_uri=i,r.prompt="none",r.response_type=r.response_type||this.settings.query_status_response_type,r.scope=r.scope||"openid",r.skipUserInfo=!0,this._signinStart(r,this._iframeNavigator,{startUrl:i,silentRequestTimeout:r.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(t){if(n.Log.debug("UserManager.querySessionStatus: got signin response"),t.session_state&&t.profile.sub)return n.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",t.profile.sub),{session_state:t.session_state,sub:t.profile.sub,sid:t.profile.sid};n.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return n.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(n.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},e.prototype._signin=function t(e,r){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,r,n).then((function(t){return i._signinEnd(t.url,e)}))},e.prototype._signinStart=function t(e,r){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(o).then((function(t){return n.Log.debug("UserManager._signinStart: got navigator window handle"),i.createSigninRequest(e).then((function(e){return n.Log.debug("UserManager._signinStart: got signin request"),o.url=e.url,o.id=e.state.id,t.navigate(o)})).catch((function(e){throw t.close&&(n.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signinEnd=function t(e){var r=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(t){n.Log.debug("UserManager._signinEnd: got signin response");var e=new a.User(t);if(i.current_sub){if(i.current_sub!==e.profile.sub)return n.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",e.profile.sub),Promise.reject(new Error("login_required"));n.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return r.storeUser(e).then((function(){return n.Log.debug("UserManager._signinEnd: user stored"),r._events.load(e),e}))}))},e.prototype._signinCallback=function t(e,r){n.Log.debug("UserManager._signinCallback");var i="query"===this._settings.response_mode||!this._settings.response_mode&&l.SigninRequest.isCode(this._settings.response_type)?"?":"#";return r.callback(e,void 0,i)},e.prototype.signoutRedirect=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var r=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;r&&(e.post_logout_redirect_uri=r);var i={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,i).then((function(){n.Log.info("UserManager.signoutRedirect: successful")}))},e.prototype.signoutRedirectCallback=function t(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(t){return n.Log.info("UserManager.signoutRedirectCallback: successful"),t}))},e.prototype.signoutPopup=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var r=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=r,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:r,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){n.Log.info("UserManager.signoutPopup: successful")}))},e.prototype.signoutPopupCallback=function t(e,r){void 0===r&&"boolean"==typeof e&&(r=e,e=null);return this._popupNavigator.callback(e,r,"?").then((function(){n.Log.info("UserManager.signoutPopupCallback: successful")}))},e.prototype._signout=function t(e,r){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,r,n).then((function(t){return i._signoutEnd(t.url)}))},e.prototype._signoutStart=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this,i=arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return i.prepare(o).then((function(t){return n.Log.debug("UserManager._signoutStart: got navigator window handle"),r._loadUser().then((function(i){return n.Log.debug("UserManager._signoutStart: loaded current user from storage"),(r._settings.revokeAccessTokenOnSignout?r._revokeInternal(i):Promise.resolve()).then((function(){var s=e.id_token_hint||i&&i.id_token;return s&&(n.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),r.removeUser().then((function(){return n.Log.debug("UserManager._signoutStart: user removed, creating signout request"),r.createSignoutRequest(e).then((function(e){return n.Log.debug("UserManager._signoutStart: got signout request"),o.url=e.url,e.state&&(o.id=e.state.id),t.navigate(o)}))}))}))})).catch((function(e){throw t.close&&(n.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},e.prototype._signoutEnd=function t(e){return this.processSignoutResponse(e).then((function(t){return n.Log.debug("UserManager._signoutEnd: got signout response"),t}))},e.prototype.revokeAccessToken=function t(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return n.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){n.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){n.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},e.prototype._revokeInternal=function t(e,r){var i=this;if(e){var o=e.access_token,s=e.refresh_token;return this._revokeAccessTokenInternal(o,r).then((function(t){return i._revokeRefreshTokenInternal(s,r).then((function(e){return t||e||n.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),t||e}))}))}return Promise.resolve(!1)},e.prototype._revokeAccessTokenInternal=function t(e,r){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,r).then((function(){return!0}))},e.prototype._revokeRefreshTokenInternal=function t(e,r){return e?this._tokenRevocationClient.revoke(e,r,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},e.prototype.startSilentRenew=function t(){this._silentRenewService.start()},e.prototype.stopSilentRenew=function t(){this._silentRenewService.stop()},e.prototype._loadUser=function t(){return this._userStore.get(this._userStoreKey).then((function(t){return t?(n.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(t)):(n.Log.debug("UserManager._loadUser: no user storageString"),null)}))},e.prototype.storeUser=function t(e){if(e){n.Log.debug("UserManager.storeUser: storing user");var r=e.toStorageString();return this._userStore.set(this._userStoreKey,r)}return n.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},i(e,[{key:"_redirectNavigator",get:function t(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function t(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function t(){return this.settings.iframeNavigator}},{key:"_userStore",get:function t(){return this.settings.userStore}},{key:"events",get:function t(){return this._events}},{key:"_userStoreKey",get:function t(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),e}(o.OidcClient)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserManagerSettings=void 0;var i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=r.popup_redirect_uri,n=r.popup_post_logout_redirect_uri,d=r.popupWindowFeatures,p=r.popupWindowTarget,m=r.silent_redirect_uri,g=r.silentRequestTimeout,v=r.automaticSilentRenew,b=void 0!==v&&v,y=r.validateSubOnSilentRenew,w=void 0!==y&&y,_=r.includeIdTokenInSilentRenew,M=void 0===_||_,S=r.monitorSession,k=void 0===S||S,E=r.monitorAnonymousSession,R=void 0!==E&&E,A=r.checkSessionInterval,T=void 0===A?2e3:A,x=r.stopCheckSessionOnError,I=void 0===x||x,L=r.query_status_response_type,P=r.revokeAccessTokenOnSignout,B=void 0!==P&&P,C=r.accessTokenExpiringNotificationTime,O=void 0===C?60:C,j=r.redirectNavigator,U=void 0===j?new o.RedirectNavigator:j,N=r.popupNavigator,q=void 0===N?new s.PopupNavigator:N,D=r.iframeNavigator,z=void 0===D?new a.IFrameNavigator:D,F=r.userStore,W=void 0===F?new h.WebStorageStateStore({store:u.Global.sessionStorage}):F;l(this,e);var H=c(this,t.call(this,arguments[0]));return H._popup_redirect_uri=i,H._popup_post_logout_redirect_uri=n,H._popupWindowFeatures=d,H._popupWindowTarget=p,H._silent_redirect_uri=m,H._silentRequestTimeout=g,H._automaticSilentRenew=b,H._validateSubOnSilentRenew=w,H._includeIdTokenInSilentRenew=M,H._accessTokenExpiringNotificationTime=O,H._monitorSession=k,H._monitorAnonymousSession=R,H._checkSessionInterval=T,H._stopCheckSessionOnError=I,L?H._query_status_response_type=L:arguments[0]&&arguments[0].response_type?H._query_status_response_type=f.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":H._query_status_response_type="id_token",H._revokeAccessTokenOnSignout=B,H._redirectNavigator=U,H._popupNavigator=q,H._iframeNavigator=z,H._userStore=W,H}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),i(e,[{key:"popup_redirect_uri",get:function t(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function t(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function t(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function t(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function t(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function t(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function t(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function t(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function t(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function t(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function t(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function t(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function t(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function t(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function t(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function t(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function t(){return this._redirectNavigator}},{key:"popupNavigator",get:function t(){return this._popupNavigator}},{key:"iframeNavigator",get:function t(){return this._iframeNavigator}},{key:"userStore",get:function t(){return this._userStore}}]),e}(n.OidcClientSettings)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RedirectNavigator=void 0;var i=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];i.Log.debug("UserManagerEvents.load"),t.prototype.load.call(this,r),n&&this._userLoaded.raise(r)},e.prototype.unload=function e(){i.Log.debug("UserManagerEvents.unload"),t.prototype.unload.call(this),this._userUnloaded.raise()},e.prototype.addUserLoaded=function t(e){this._userLoaded.addHandler(e)},e.prototype.removeUserLoaded=function t(e){this._userLoaded.removeHandler(e)},e.prototype.addUserUnloaded=function t(e){this._userUnloaded.addHandler(e)},e.prototype.removeUserUnloaded=function t(e){this._userUnloaded.removeHandler(e)},e.prototype.addSilentRenewError=function t(e){this._silentRenewError.addHandler(e)},e.prototype.removeSilentRenewError=function t(e){this._silentRenewError.removeHandler(e)},e.prototype._raiseSilentRenewError=function t(e){i.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},e.prototype.addUserSignedIn=function t(e){this._userSignedIn.addHandler(e)},e.prototype.removeUserSignedIn=function t(e){this._userSignedIn.removeHandler(e)},e.prototype._raiseUserSignedIn=function t(){i.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},e.prototype.addUserSignedOut=function t(e){this._userSignedOut.addHandler(e)},e.prototype.removeUserSignedOut=function t(e){this._userSignedOut.removeHandler(e)},e.prototype._raiseUserSignedOut=function t(){i.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},e.prototype.addUserSessionChanged=function t(e){this._userSessionChanged.addHandler(e)},e.prototype.removeUserSessionChanged=function t(e){this._userSessionChanged.removeHandler(e)},e.prototype._raiseUserSessionChanged=function t(){i.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},e}(n.AccessTokenEvents)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Timer=void 0;var i=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;a(this,e);var s=h(this,t.call(this,r));return s._timer=i,s._nowFunc=n||function(){return Date.now()/1e3},s}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.init=function t(e){e<=0&&(e=1),e=parseInt(e);var r=this.now+e;if(this.expiration===r&&this._timerHandle)n.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),n.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=r;var i=5;e