vue-office/lib/pdf/vue-office-pdf.umd.js
2022-11-14 16:57:04 +08:00

325 lines
1.7 MiB

(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["vue-office-pdf"] = factory();
else
root["vue-office-pdf"] = factory();
})((typeof self !== 'undefined' ? self : this), function() {
return /******/ (function() { // webpackBootstrap
/******/ "use strict";
/******/ // The require scope
/******/ var __webpack_require__ = {};
/******/
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ !function() {
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ }();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/publicPath */
/******/ !function() {
/******/ __webpack_require__.p = "";
/******/ }();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// EXPORTS
__webpack_require__.d(__webpack_exports__, {
"default": function() { return /* binding */ entry_lib; }
});
;// CONCATENATED MODULE: ./node_modules/_@vue_cli-service@5.0.8@@vue/cli-service/lib/commands/build/setPublicPath.js
/* eslint-disable no-var */
// This file is imported into lib/wc client bundles.
if (typeof window !== 'undefined') {
var currentScript = window.document.currentScript
if (false) { var getCurrentScript; }
var src = currentScript && currentScript.src.match(/(.+\/)[^/]+\.js(\?.*)?$/)
if (src) {
__webpack_require__.p = src[1] // eslint-disable-line
}
}
// Indicate to webpack that this file can be concatenated
/* harmony default export */ var setPublicPath = (null);
;// CONCATENATED MODULE: ./node_modules/_vue-loader@15.10.0@vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/_vue-loader@15.10.0@vue-loader/lib/index.js??vue-loader-options!./packages/pdf/src/main.vue?vue&type=template&id=4b4de15c&scoped=true&
var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:"vue-office-pdf",staticClass:"vue-office-pdf"},[(_vm.numPages)?_c('div',{staticClass:"vue-office-pdf-wrapper",staticStyle:{"background":"gray","padding":"30px 0","position":"relative"}},_vm._l((_vm.numPages),function(page){return _c('canvas',{key:page,ref:'canvas'+ page,refInFor:true})}),0):_vm._e()])
}
var staticRenderFns = []
;// CONCATENATED MODULE: ./packages/pdf/src/worker.js
const worker = 'LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDIyIE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi8KIWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciIsW10sdCk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPXQoKTplWyJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIiXT1lLnBkZmpzV29ya2VyPXQoKX0oZ2xvYmFsVGhpcywoKCk9PigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZT1bLChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Xb3JrZXJUYXNrPXQuV29ya2VyTWVzc2FnZUhhbmRsZXI9dm9pZCAwO3ZhciByPWEoMiksbj1hKDMpLGk9YSg0KSxzPWEoNiksbz1hKDY5KSxjPWEoNjMpLGw9YSgxMDApLGg9YSgxMDEpLHU9YSgxMDIpO2NsYXNzIFdvcmtlclRhc2t7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lPWU7dGhpcy50ZXJtaW5hdGVkPSExO3RoaXMuX2NhcGFiaWxpdHk9KDAsci5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKX1nZXQgZmluaXNoZWQoKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfWZpbmlzaCgpe3RoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpfXRlcm1pbmF0ZSgpe3RoaXMudGVybWluYXRlZD0hMH1lbnN1cmVOb3RUZXJtaW5hdGVkKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19dC5Xb3JrZXJUYXNrPVdvcmtlclRhc2s7Y2xhc3MgV29ya2VyTWVzc2FnZUhhbmRsZXJ7c3RhdGljIHNldHVwKGUsdCl7bGV0IGE9ITE7ZS5vbigidGVzdCIsKGZ1bmN0aW9uIHdwaFNldHVwVGVzdCh0KXtpZighYSl7YT0hMDtlLnNlbmQoInRlc3QiLHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KX19KSk7ZS5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24gd3BoQ29uZmlndXJlKGUpeygwLHIuc2V0VmVyYm9zaXR5TGV2ZWwpKGUudmVyYm9zaXR5KX0pKTtlLm9uKCJHZXREb2NSZXF1ZXN0IiwoZnVuY3Rpb24gd3BoU2V0dXBEb2MoZSl7cmV0dXJuIFdvcmtlck1lc3NhZ2VIYW5kbGVyLmNyZWF0ZURvY3VtZW50SGFuZGxlcihlLHQpfSkpfXN0YXRpYyBjcmVhdGVEb2N1bWVudEhhbmRsZXIoZSx0KXtsZXQgYSxkPSExLGY9bnVsbDtjb25zdCBnPVtdLHA9KDAsci5nZXRWZXJib3NpdHlMZXZlbCkoKSx7ZG9jSWQ6bSxhcGlWZXJzaW9uOmJ9PWUseT0iMy4wLjI3OSI7aWYoYiE9PXkpdGhyb3cgbmV3IEVycm9yKGBUaGUgQVBJIHZlcnNpb24gIiR7Yn0iIGRvZXMgbm90IG1hdGNoIHRoZSBXb3JrZXIgdmVyc2lvbiAiMy4wLjI3OSIuYCk7Y29uc3Qgdz1bXTtmb3IoY29uc3QgZSBpbltdKXcucHVzaChlKTtpZih3Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgQXJyYXkucHJvdG90eXBlYCBjb250YWlucyB1bmV4cGVjdGVkIGVudW1lcmFibGUgcHJvcGVydGllczogIit3LmpvaW4oIiwgIikrIjsgdGh1cyBicmVha2luZyBlLmcuIGBmb3IuLi5pbmAgaXRlcmF0aW9uIG9mIGBBcnJheWBzLiIpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVhZGFibGVTdHJlYW0pe2NvbnN0IGU9IlRoZSBicm93c2VyL2Vudmlyb25tZW50IGxhY2tzIG5hdGl2ZSBzdXBwb3J0IGZvciBjcml0aWNhbCBmdW5jdGlvbmFsaXR5IHVzZWQgYnkgdGhlIFBERi5qcyBsaWJyYXJ5IChlLmcuIGBSZWFkYWJsZVN0cmVhbWApOyAiO2lmKGwuaXNOb2RlSlMpdGhyb3cgbmV3IEVycm9yKGUrInBsZWFzZSB1c2UgYSBgbGVnYWN5YC1idWlsZCBpbnN0ZWFkLiIpO3Rocm93IG5ldyBFcnJvcihlKyJwbGVhc2UgdXBkYXRlIHRvIGEgc3VwcG9ydGVkIGJyb3dzZXIuIil9Y29uc3QgUz1tKyJfd29ya2VyIjtsZXQgeD1uZXcgaC5NZXNzYWdlSGFuZGxlcihTLG0sdCk7ZnVuY3Rpb24gZW5zdXJlTm90VGVybWluYXRlZCgpe2lmKGQpdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKX1mdW5jdGlvbiBzdGFydFdvcmtlclRhc2soZSl7Zy5wdXNoKGUpfWZ1bmN0aW9uIGZpbmlzaFdvcmtlclRhc2soZSl7ZS5maW5pc2goKTtjb25zdCB0PWcuaW5kZXhPZihlKTtnLnNwbGljZSh0LDEpfWFzeW5jIGZ1bmN0aW9uIGxvYWREb2N1bWVudChlKXthd2FpdCBhLmVuc3VyZURvYygiY2hlY2tIZWFkZXIiKTthd2FpdCBhLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTthd2FpdCBhLmVuc3VyZURvYygicGFyc2UiLFtlXSk7YXdhaXQgYS5lbnN1cmVEb2MoImNoZWNrRmlyc3RQYWdlIixbZV0pO2F3YWl0IGEuZW5zdXJlRG9jKCJjaGVja0xhc3RQYWdlIixbZV0pO2NvbnN0IHQ9YXdhaXQgYS5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2lmKHQpe2NvbnN0IGU9bmV3IFdvcmtlclRhc2soImxvYWRYZmFGb250cyIpO3N0YXJ0V29ya2VyVGFzayhlKTthd2FpdCBQcm9taXNlLmFsbChbYS5sb2FkWGZhRm9udHMoeCxlKS5jYXRjaCgoZT0+e30pKS50aGVuKCgoKT0+ZmluaXNoV29ya2VyVGFzayhlKSkpLGEubG9hZFhmYUltYWdlcygpXSl9Y29uc3RbcixuXT1hd2FpdCBQcm9taXNlLmFsbChbYS5lbnN1cmVEb2MoIm51bVBhZ2VzIiksYS5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7cmV0dXJue251bVBhZ2VzOnIsZmluZ2VycHJpbnRzOm4saHRtbEZvclhmYTp0P2F3YWl0IGEuZW5zdXJlRG9jKCJodG1sRm9yWGZhIik6bnVsbH19ZnVuY3Rpb24gZ2V0UGRmTWFuYWdlcih7ZGF0YTplLHBhc3N3b3JkOnQsZGlzYWJsZUF1dG9GZXRjaDphLHJhbmdlQ2h1bmtTaXplOm4sbGVuZ3RoOmksZG9jQmFzZVVybDpvLGVuYWJsZVhmYTpjLGV2YWx1YXRvck9wdGlvbnM6bH0pe2NvbnN0IGg9KDAsci5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtsZXQgZDtpZihlKXt0cnl7ZD1uZXcgcy5Mb2NhbFBkZk1hbmFnZXIobSxlLHQseCxsLGMsbyk7aC5yZXNvbHZlKGQpfWNhdGNoKGUpe2gucmVqZWN0KGUpfXJldHVybiBoLnByb21pc2V9bGV0IGcscD1bXTt0cnl7Zz1uZXcgdS5QREZXb3JrZXJTdHJlYW0oeCl9Y2F0Y2goZSl7aC5yZWplY3QoZSk7cmV0dXJuIGgucHJvbWlzZX1jb25zdCBiPWcuZ2V0RnVsbFJlYWRlcigpO2IuaGVhZGVyc1JlYWR5LnRoZW4oKGZ1bmN0aW9uKCl7aWYoYi5pc1JhbmdlU3VwcG9ydGVkKXthPWF8fGIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7ZD1uZXcgcy5OZXR3b3JrUGRmTWFuYWdlcihtLGcse21zZ0hhbmRsZXI6eCxwYXNzd29yZDp0LGxlbmd0aDpiLmNvbnRlbnRMZW5ndGgsZGlzYWJsZUF1dG9GZXRjaDphLHJhbmdlQ2h1bmtTaXplOm59LGwsYyxvKTtmb3IoY29uc3QgZSBvZiBwKWQuc2VuZFByb2dyZXNzaXZlRGF0YShlKTtwPVtdO2gucmVzb2x2ZShkKTtmPW51bGx9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtoLnJlamVjdChlKTtmPW51bGx9KSk7bGV0IHk9MDtuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxhKXtjb25zdCByZWFkQ2h1bms9ZnVuY3Rpb24oe3ZhbHVlOmUsZG9uZTpufSl7dHJ5e2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtpZihuKXtkfHxmdW5jdGlvbigpe2NvbnN0IGU9KDAsci5hcnJheXNUb0J5dGVzKShwKTtpJiZlLmxlbmd0aCE9PWkmJigwLHIud2FybikoInJlcG9ydGVkIEhUVFAgbGVuZ3RoIGlzIGRpZmZlcmVudCBmcm9tIGFjdHVhbCIpO3RyeXtkPW5ldyBzLkxvY2FsUGRmTWFuYWdlcihtLGUsdCx4LGwsYyxvKTtoLnJlc29sdmUoZCl9Y2F0Y2goZSl7aC5yZWplY3QoZSl9cD1bXX0oKTtmPW51bGw7cmV0dXJufXkrPSgwLHIuYXJyYXlCeXRlTGVuZ3RoKShlKTtiLmlzU3RyZWFtaW5nU3VwcG9ydGVkfHx4LnNlbmQoIkRvY1Byb2dyZXNzIix7bG9hZGVkOnksdG90YWw6TWF0aC5tYXgoeSxiLmNvbnRlbnRMZW5ndGh8fDApfSk7ZD9kLnNlbmRQcm9ncmVzc2l2ZURhdGEoZSk6cC5wdXNoKGUpO2IucmVhZCgpLnRoZW4ocmVhZENodW5rLGEpfWNhdGNoKGUpe2EoZSl9fTtiLnJlYWQoKS50aGVuKHJlYWRDaHVuayxhKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aC5yZWplY3QoZSk7Zj1udWxsfSkpO2Y9ZnVuY3Rpb24oZSl7Zy5jYW5jZWxBbGxSZXF1ZXN0cyhlKX07cmV0dXJuIGgucHJvbWlzZX14Lm9uKCJHZXRQYWdlIiwoZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlKGUpe3JldHVybiBhLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbYS5lbnN1cmUoZSwicm90YXRlIiksYS5lbnN1cmUoZSwicmVmIiksYS5lbnN1cmUoZSwidXNlclVuaXQiKSxhLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihbZSx0LGEscl0pe3JldHVybntyb3RhdGU6ZSxyZWY6dCx1c2VyVW5pdDphLHZpZXc6cn19KSl9KSl9KSk7eC5vbigiR2V0UGFnZUluZGV4IiwoZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlSW5kZXgoZSl7Y29uc3QgdD1uLlJlZi5nZXQoZS5udW0sZS5nZW4pO3JldHVybiBhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3RdKX0pKTt4Lm9uKCJHZXREZXN0aW5hdGlvbnMiLChmdW5jdGlvbiB3cGhTZXR1cEdldERlc3RpbmF0aW9ucyhlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJkZXN0aW5hdGlvbnMiKX0pKTt4Lm9uKCJHZXREZXN0aW5hdGlvbiIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0RGVzdGluYXRpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygiZ2V0RGVzdGluYXRpb24iLFtlLmlkXSl9KSk7eC5vbigiR2V0UGFnZUxhYmVscyIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUxhYmVscyhlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwYWdlTGFiZWxzIil9KSk7eC5vbigiR2V0UGFnZUxheW91dCIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUxheW91dChlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwYWdlTGF5b3V0Iil9KSk7eC5vbigiR2V0UGFnZU1vZGUiLChmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2VNb2RlKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSk7eC5vbigiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJ2aWV3ZXJQcmVmZXJlbmNlcyIpfSkpO3gub24oIkdldE9wZW5BY3Rpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIil9KSk7eC5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbiB3cGhTZXR1cEdldEF0dGFjaG1lbnRzKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIil9KSk7eC5vbigiR2V0SmF2YVNjcmlwdCIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0SmF2YVNjcmlwdChlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSk7eC5vbigiR2V0RG9jSlNBY3Rpb25zIiwoZnVuY3Rpb24gd3BoU2V0dXBHZXREb2NKU0FjdGlvbnMoZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIil9KSk7eC5vbigiR2V0UGFnZUpTQWN0aW9ucyIsKGZ1bmN0aW9uKHtwYWdlSW5kZXg6ZX0pe3JldHVybiBhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlKGUsImpzQWN0aW9ucyIpfSkpfSkpO3gub24oIkdldE91dGxpbmUiLChmdW5jdGlvbiB3cGhTZXR1cEdldE91dGxpbmUoZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygiZG9jdW1lbnRPdXRsaW5lIil9KSk7eC5vbigiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygib3B0aW9uYWxDb250ZW50Q29uZmlnIil9KSk7eC5vbigiR2V0UGVybWlzc2lvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwZXJtaXNzaW9ucyIpfSkpO3gub24oIkdldE1ldGFkYXRhIiwoZnVuY3Rpb24gd3BoU2V0dXBHZXRNZXRhZGF0YShlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxhLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pKTt4Lm9uKCJHZXRNYXJrSW5mbyIsKGZ1bmN0aW9uIHdwaFNldHVwR2V0TWFya0luZm8oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygibWFya0luZm8iKX0pKTt4Lm9uKCJHZXREYXRhIiwoZnVuY3Rpb24gd3BoU2V0dXBHZXREYXRhKGUpe3JldHVybiBhLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ieXRlc30pKX0pKTt4Lm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKHtwYWdlSW5kZXg6ZSxpbnRlbnQ6dH0pe3JldHVybiBhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24oYSl7Y29uc3Qgcj1uZXcgV29ya2VyVGFzayhgR2V0QW5ub3RhdGlvbnM6IHBhZ2UgJHtlfWApO3N0YXJ0V29ya2VyVGFzayhyKTtyZXR1cm4gYS5nZXRBbm5vdGF0aW9uc0RhdGEoeCxyLHQpLnRoZW4oKGU9PntmaW5pc2hXb3JrZXJUYXNrKHIpO3JldHVybiBlfSksKGU9PntmaW5pc2hXb3JrZXJUYXNrKHIpfSkpfSkpfSkpO3gub24oIkdldEZpZWxkT2JqZWN0cyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZURvYygiZmllbGRPYmplY3RzIil9KSk7eC5vbigiSGFzSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlRG9jKCJoYXNKU0FjdGlvbnMiKX0pKTt4Lm9uKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlRG9jKCJjYWxjdWxhdGlvbk9yZGVySWRzIil9KSk7eC5vbigiU2F2ZURvY3VtZW50IiwoZnVuY3Rpb24oe2lzUHVyZVhmYTplLG51bVBhZ2VzOnQsYW5ub3RhdGlvblN0b3JhZ2U6cyxmaWxlbmFtZTpvfSl7Y29uc3QgbD1bYS5yZXF1ZXN0TG9hZGVkU3RyZWFtKCksYS5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybSIpLGEuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm1SZWYiKSxhLmVuc3VyZURvYygieHJlZiIpLGEuZW5zdXJlRG9jKCJzdGFydFhSZWYiKV0saD1lP251bGw6KDAsaS5nZXROZXdBbm5vdGF0aW9uc01hcCkocyk7aWYoaClmb3IoY29uc3RbZSx0XW9mIGgpbC5wdXNoKGEuZ2V0UGFnZShlKS50aGVuKChhPT57Y29uc3Qgcj1uZXcgV29ya2VyVGFzayhgU2F2ZSAoZWRpdG9yKTogcGFnZSAke2V9YCk7cmV0dXJuIGEuc2F2ZU5ld0Fubm90YXRpb25zKHgscix0KS5maW5hbGx5KChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2socil9KSl9KSkpO2lmKGUpbC5wdXNoKGEuc2VyaWFsaXplWGZhRGF0YShzKSk7ZWxzZSBmb3IobGV0IGU9MDtlPHQ7ZSsrKWwucHVzaChhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24odCl7Y29uc3QgYT1uZXcgV29ya2VyVGFzayhgU2F2ZTogcGFnZSAke2V9YCk7cmV0dXJuIHQuc2F2ZSh4LGEscykuZmluYWxseSgoZnVuY3Rpb24oKXtmaW5pc2hXb3JrZXJUYXNrKGEpfSkpfSkpKTtyZXR1cm4gUHJvbWlzZS5hbGwobCkudGhlbigoZnVuY3Rpb24oW3QsYSxpLHMsbCwuLi5oXSl7bGV0IHU9W10sZD1udWxsO2lmKGUpe2Q9aFswXTtpZighZClyZXR1cm4gdC5ieXRlc31lbHNle3U9aC5mbGF0KDIpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gdC5ieXRlc31jb25zdCBmPWEgaW5zdGFuY2VvZiBuLkRpY3QmJmEuZ2V0KCJYRkEiKXx8bnVsbDtsZXQgZz1udWxsLHA9ITE7aWYoQXJyYXkuaXNBcnJheShmKSl7Zm9yKGxldCBlPTAsdD1mLmxlbmd0aDtlPHQ7ZSs9MilpZigiZGF0YXNldHMiPT09ZltlXSl7Zz1mW2UrMV07aT1udWxsO3A9ITB9bnVsbD09PWcmJihnPXMuZ2V0TmV3UmVmKCkpfWVsc2UgaWYoZil7aT1udWxsOygwLHIud2FybikoIlVuc3VwcG9ydGVkIFhGQSB0eXBlLiIpfWxldCBtPU9iamVjdC5jcmVhdGUobnVsbCk7aWYocy50cmFpbGVyKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD1zLnRyYWlsZXIuZ2V0KCJJbmZvIil8fG51bGw7dCBpbnN0YW5jZW9mIG4uRGljdCYmdC5mb3JFYWNoKCgodCxhKT0+eyJzdHJpbmciPT10eXBlb2YgYSYmKGVbdF09KDAsci5zdHJpbmdUb1BERlN0cmluZykoYSkpfSkpO209e3Jvb3RSZWY6cy50cmFpbGVyLmdldFJhdygiUm9vdCIpfHxudWxsLGVuY3J5cHRSZWY6cy50cmFpbGVyLmdldFJhdygiRW5jcnlwdCIpfHxudWxsLG5ld1JlZjpzLmdldE5ld1JlZigpLGluZm9SZWY6cy50cmFpbGVyLmdldFJhdygiSW5mbyIpfHxudWxsLGluZm86ZSxmaWxlSWRzOnMudHJhaWxlci5nZXQoIklEIil8fG51bGwsc3RhcnRYUmVmOmwsZmlsZW5hbWU6b319cy5yZXNldE5ld1JlZigpO3JldHVybigwLGMuaW5jcmVtZW50YWxVcGRhdGUpKHtvcmlnaW5hbERhdGE6dC5ieXRlcyx4cmVmSW5mbzptLG5ld1JlZnM6dSx4cmVmOnMsaGFzWGZhOiEhZix4ZmFEYXRhc2V0c1JlZjpnLGhhc1hmYURhdGFzZXRzRW50cnk6cCxhY3JvRm9ybVJlZjppLGFjcm9Gb3JtOmEseGZhRGF0YTpkfSl9KSl9KSk7eC5vbigiR2V0T3BlcmF0b3JMaXN0IiwoZnVuY3Rpb24gd3BoU2V0dXBSZW5kZXJQYWdlKGUsdCl7Y29uc3Qgbj1lLnBhZ2VJbmRleDthLmdldFBhZ2UobikudGhlbigoZnVuY3Rpb24oYSl7Y29uc3QgaT1uZXcgV29ya2VyVGFzayhgR2V0T3BlcmF0b3JMaXN0OiBwYWdlICR7bn1gKTtzdGFydFdvcmtlclRhc2soaSk7Y29uc3Qgcz1wPj1yLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDthLmdldE9wZXJhdG9yTGlzdCh7aGFuZGxlcjp4LHNpbms6dCx0YXNrOmksaW50ZW50OmUuaW50ZW50LGNhY2hlS2V5OmUuY2FjaGVLZXksYW5ub3RhdGlvblN0b3JhZ2U6ZS5hbm5vdGF0aW9uU3RvcmFnZX0pLnRoZW4oKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soaSk7cyYmKDAsci5pbmZvKShgcGFnZT0ke24rMX0gLSBnZXRPcGVyYXRvckxpc3Q6IHRpbWU9JHtEYXRlLm5vdygpLXN9bXMsIGxlbj0ke2UubGVuZ3RofWApO3QuY2xvc2UoKX0pLChmdW5jdGlvbihlKXtmaW5pc2hXb3JrZXJUYXNrKGkpO2kudGVybWluYXRlZHx8dC5lcnJvcihlKX0pKX0pKX0pKTt4Lm9uKCJHZXRUZXh0Q29udGVudCIsKGZ1bmN0aW9uIHdwaEV4dHJhY3RUZXh0KGUsdCl7Y29uc3Qgbj1lLnBhZ2VJbmRleDthLmdldFBhZ2UobikudGhlbigoZnVuY3Rpb24oYSl7Y29uc3QgaT1uZXcgV29ya2VyVGFzaygiR2V0VGV4dENvbnRlbnQ6IHBhZ2UgIituKTtzdGFydFdvcmtlclRhc2soaSk7Y29uc3Qgcz1wPj1yLlZlcmJvc2l0eUxldmVsLklORk9TP0RhdGUubm93KCk6MDthLmV4dHJhY3RUZXh0Q29udGVudCh7aGFuZGxlcjp4LHRhc2s6aSxzaW5rOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ZS5pbmNsdWRlTWFya2VkQ29udGVudCxjb21iaW5lVGV4dEl0ZW1zOmUuY29tYmluZVRleHRJdGVtc30pLnRoZW4oKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayhpKTtzJiYoMCxyLmluZm8pKGBwYWdlPSR7bisxfSAtIGdldFRleHRDb250ZW50OiB0aW1lPWArKERhdGUubm93KCktcykrIm1zIik7dC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soaSk7aS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpO3gub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbiB3cGhHZXRTdHJ1Y3RUcmVlKGUpe3JldHVybiBhLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZShlLCJnZXRTdHJ1Y3RUcmVlIil9KSl9KSk7eC5vbigiRm9udEZhbGxiYWNrIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZm9udEZhbGxiYWNrKGUuaWQseCl9KSk7eC5vbigiQ2xlYW51cCIsKGZ1bmN0aW9uIHdwaENsZWFudXAoZSl7cmV0dXJuIGEuY2xlYW51cCghMCl9KSk7eC5vbigiVGVybWluYXRlIiwoZnVuY3Rpb24gd3BoVGVybWluYXRlKGUpe2Q9ITA7Y29uc3QgdD1bXTtpZihhKXthLnRlcm1pbmF0ZShuZXcgci5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtjb25zdCBlPWEuY2xlYW51cCgpO3QucHVzaChlKTthPW51bGx9ZWxzZSgwLG8uY2xlYXJHbG9iYWxDYWNoZXMpKCk7ZiYmZihuZXcgci5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtmb3IoY29uc3QgZSBvZiBnKXt0LnB1c2goZS5maW5pc2hlZCk7ZS50ZXJtaW5hdGUoKX1yZXR1cm4gUHJvbWlzZS5hbGwodCkudGhlbigoZnVuY3Rpb24oKXt4LmRlc3Ryb3koKTt4PW51bGx9KSl9KSk7eC5vbigiUmVhZHkiLChmdW5jdGlvbiB3cGhSZWFkeSh0KXshZnVuY3Rpb24gc2V0dXBEb2MoZSl7ZnVuY3Rpb24gb25TdWNjZXNzKGUpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTt4LnNlbmQoIkdldERvYyIse3BkZkluZm86ZX0pfWZ1bmN0aW9uIG9uRmFpbHVyZShlKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7aWYoZSBpbnN0YW5jZW9mIHIuUGFzc3dvcmRFeGNlcHRpb24pe2NvbnN0IHQ9bmV3IFdvcmtlclRhc2soYFBhc3N3b3JkRXhjZXB0aW9uOiByZXNwb25zZSAke2UuY29kZX1gKTtzdGFydFdvcmtlclRhc2sodCk7eC5zZW5kV2l0aFByb21pc2UoIlBhc3N3b3JkUmVxdWVzdCIsZSkudGhlbigoZnVuY3Rpb24oe3Bhc3N3b3JkOmV9KXtmaW5pc2hXb3JrZXJUYXNrKHQpO2EudXBkYXRlUGFzc3dvcmQoZSk7cGRmTWFuYWdlclJlYWR5KCl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayh0KTt4LnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSl9KSl9ZWxzZSBlIGluc3RhbmNlb2Ygci5JbnZhbGlkUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygci5NaXNzaW5nUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2Ygci5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiByLlVua25vd25FcnJvckV4Y2VwdGlvbj94LnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSk6eC5zZW5kKCJEb2NFeGNlcHRpb24iLG5ldyByLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKSl9ZnVuY3Rpb24gcGRmTWFuYWdlclJlYWR5KCl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2xvYWREb2N1bWVudCghMSkudGhlbihvblN1Y2Nlc3MsKGZ1bmN0aW9uKGUpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtlIGluc3RhbmNlb2YgaS5YUmVmUGFyc2VFeGNlcHRpb24/YS5yZXF1ZXN0TG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7bG9hZERvY3VtZW50KCEwKS50aGVuKG9uU3VjY2VzcyxvbkZhaWx1cmUpfSkpOm9uRmFpbHVyZShlKX0pKX1lbnN1cmVOb3RUZXJtaW5hdGVkKCk7Z2V0UGRmTWFuYWdlcihlKS50aGVuKChmdW5jdGlvbihlKXtpZihkKXtlLnRlcm1pbmF0ZShuZXcgci5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTt0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWE9ZTthLnJlcXVlc3RMb2FkZWRTdHJlYW0oITApLnRoZW4oKGU9Pnt4LnNlbmQoIkRhdGFMb2FkZWQiLHtsZW5ndGg6ZS5ieXRlcy5ieXRlTGVuZ3RofSl9KSl9KSkudGhlbihwZGZNYW5hZ2VyUmVhZHksb25GYWlsdXJlKX0oZSk7ZT1udWxsfSkpO3JldHVybiBTfXN0YXRpYyBpbml0aWFsaXplRnJvbVBvcnQoZSl7Y29uc3QgdD1uZXcgaC5NZXNzYWdlSGFuZGxlcigid29ya2VyIiwibWFpbiIsZSk7V29ya2VyTWVzc2FnZUhhbmRsZXIuc2V0dXAodCxlKTt0LnNlbmQoInJlYWR5IixudWxsKX19dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1Xb3JrZXJNZXNzYWdlSGFuZGxlcjsidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyYmIWwuaXNOb2RlSlMmJiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmZnVuY3Rpb24gaXNNZXNzYWdlUG9ydChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBlfShzZWxmKSYmV29ya2VyTWVzc2FnZUhhbmRsZXIuaW5pdGlhbGl6ZUZyb21Qb3J0KHNlbGYpfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlZlcmJvc2l0eUxldmVsPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXQuVGV4dFJlbmRlcmluZ01vZGU9dC5TdHJlYW1UeXBlPXQuUmVuZGVyaW5nSW50ZW50RmxhZz10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10LlBhZ2VBY3Rpb25FdmVudFR5cGU9dC5PUFM9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTElORV9GQUNUT1I9dC5MSU5FX0RFU0NFTlRfRkFDVE9SPXQuSW52YWxpZFBERkV4Y2VwdGlvbj10LkltYWdlS2luZD10LklERU5USVRZX01BVFJJWD10LkZvcm1hdEVycm9yPXQuRm9udFR5cGU9dC5GZWF0dXJlVGVzdD10LkZPTlRfSURFTlRJVFlfTUFUUklYPXQuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuQmFzZUV4Y2VwdGlvbj10LkFubm90YXRpb25UeXBlPXQuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlPXQuQW5ub3RhdGlvblJldmlld1N0YXRlPXQuQW5ub3RhdGlvblJlcGx5VHlwZT10LkFubm90YXRpb25Nb2RlPXQuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXQuQW5ub3RhdGlvbkZsYWc9dC5Bbm5vdGF0aW9uRmllbGRGbGFnPXQuQW5ub3RhdGlvbkVkaXRvclR5cGU9dC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PXQuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXQuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT10LkFib3J0RXhjZXB0aW9uPXZvaWQgMDt0LmFycmF5Qnl0ZUxlbmd0aD1hcnJheUJ5dGVMZW5ndGg7dC5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uIGFycmF5c1RvQnl0ZXMoZSl7Y29uc3QgdD1lLmxlbmd0aDtpZigxPT09dCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTtsZXQgYT0wO2ZvcihsZXQgcj0wO3I8dDtyKyspYSs9YXJyYXlCeXRlTGVuZ3RoKGVbcl0pO2xldCByPTA7Y29uc3Qgbj1uZXcgVWludDhBcnJheShhKTtmb3IobGV0IGE9MDthPHQ7YSsrKXtsZXQgdD1lW2FdO3QgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwodD0ic3RyaW5nIj09dHlwZW9mIHQ/c3RyaW5nVG9CeXRlcyh0KTpuZXcgVWludDhBcnJheSh0KSk7Y29uc3QgaT10LmJ5dGVMZW5ndGg7bi5zZXQodCxyKTtyKz1pfXJldHVybiBufTt0LmFzc2VydD1mdW5jdGlvbiBhc3NlcnQoZSx0KXtlfHx1bnJlYWNoYWJsZSh0KX07dC5ieXRlc1RvU3RyaW5nPWZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmdm9pZCAwIT09ZS5sZW5ndGh8fHVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7Y29uc3QgdD1lLmxlbmd0aCxhPTgxOTI7aWYodDxhKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Y29uc3Qgcj1bXTtmb3IobGV0IG49MDtuPHQ7bis9YSl7Y29uc3QgaT1NYXRoLm1pbihuK2EsdCkscz1lLnN1YmFycmF5KG4saSk7ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIHIuam9pbigiIil9O3QuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk9ZnVuY3Rpb24gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkoKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHQ9ITE7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNldHRsZWQiLHtnZXQ6KCk9PnR9KTtlLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGEscil7ZS5yZXNvbHZlPWZ1bmN0aW9uKGUpe3Q9ITA7YShlKX07ZS5yZWplY3Q9ZnVuY3Rpb24oZSl7dD0hMDtyKGUpfX0pKTtyZXR1cm4gZX07dC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPWZ1bmN0aW9uIGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwoZSx0PW51bGwsYT1udWxsKXtpZighZSlyZXR1cm4gbnVsbDt0cnl7aWYoYSYmInN0cmluZyI9PXR5cGVvZiBlKXtpZihhLmFkZERlZmF1bHRQcm90b2NvbCYmZS5zdGFydHNXaXRoKCJ3d3cuIikpe2NvbnN0IHQ9ZS5tYXRjaCgvXC4vZyk7dCYmdC5sZW5ndGg+PTImJihlPWBodHRwOi8vJHtlfWApfWlmKGEudHJ5Q29udmVydEVuY29kaW5nKXRyeXtlPXN0cmluZ1RvVVRGOFN0cmluZyhlKX1jYXRjaChlKXt9fWNvbnN0IHI9dD9uZXcgVVJMKGUsdCk6bmV3IFVSTChlKTtpZihmdW5jdGlvbiBfaXNWYWxpZFByb3RvY29sKGUpe2lmKCFlKXJldHVybiExO3N3aXRjaChlLnByb3RvY29sKXtjYXNlImh0dHA6IjpjYXNlImh0dHBzOiI6Y2FzZSJmdHA6IjpjYXNlIm1haWx0bzoiOmNhc2UidGVsOiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHIpKXJldHVybiByfWNhdGNoKGUpe31yZXR1cm4gbnVsbH07dC5lc2NhcGVTdHJpbmc9ZnVuY3Rpb24gZXNjYXBlU3RyaW5nKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbKClcXFxuXHJdKS9nLChlPT4iXG4iPT09ZT8iXFxuIjoiXHIiPT09ZT8iXFxyIjpgXFwke2V9YCkpfTt0LmdldE1vZGlmaWNhdGlvbkRhdGU9ZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZShlPW5ldyBEYXRlKXtyZXR1cm5bZS5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksKGUuZ2V0VVRDTW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIildLmpvaW4oIiIpfTt0LmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCl7cmV0dXJuIHJ9O3QuaW5mbz1mdW5jdGlvbiBpbmZvKGUpe3I+PWEuSU5GT1MmJmNvbnNvbGUubG9nKGBJbmZvOiAke2V9YCl9O3QuaXNBcnJheUJ1ZmZlcj1mdW5jdGlvbiBpc0FycmF5QnVmZmVyKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH07dC5pc0FycmF5RXF1YWw9ZnVuY3Rpb24gaXNBcnJheUVxdWFsKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspaWYoZVthXSE9PXRbYV0pcmV0dXJuITE7cmV0dXJuITB9O3QuaXNBc2NpaT1mdW5jdGlvbiBpc0FzY2lpKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX07dC5vYmplY3RGcm9tTWFwPWZ1bmN0aW9uIG9iamVjdEZyb21NYXAoZSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFthLHJdb2YgZSl0W2FdPXI7cmV0dXJuIHR9O3Qub2JqZWN0U2l6ZT1mdW5jdGlvbiBvYmplY3RTaXplKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5sZW5ndGh9O3Quc2V0VmVyYm9zaXR5TGV2ZWw9ZnVuY3Rpb24gc2V0VmVyYm9zaXR5TGV2ZWwoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHI9ZSl9O3Quc2hhZG93PXNoYWRvdzt0LnN0cmluZzMyPWZ1bmN0aW9uIHN0cmluZzMyKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmUpfTt0LnN0cmluZ1RvQnl0ZXM9c3RyaW5nVG9CeXRlczt0LnN0cmluZ1RvUERGU3RyaW5nPWZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKGUpe2lmKGVbMF0+PSLDryIpe2xldCB0OyLDviI9PT1lWzBdJiYiw78iPT09ZVsxXT90PSJ1dGYtMTZiZSI6IsO/Ij09PWVbMF0mJiLDviI9PT1lWzFdP3Q9InV0Zi0xNmxlIjoiw68iPT09ZVswXSYmIsK7Ij09PWVbMV0mJiLCvyI9PT1lWzJdJiYodD0idXRmLTgiKTtpZih0KXRyeXtjb25zdCBhPW5ldyBUZXh0RGVjb2Rlcih0LHtmYXRhbDohMH0pLHI9c3RyaW5nVG9CeXRlcyhlKTtyZXR1cm4gYS5kZWNvZGUocil9Y2F0Y2goZSl7d2Fybihgc3RyaW5nVG9QREZTdHJpbmc6ICIke2V9Ii5gKX19Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9c1tlLmNoYXJDb2RlQXQoYSldO3QucHVzaChyP1N0cmluZy5mcm9tQ2hhckNvZGUocik6ZS5jaGFyQXQoYSkpfXJldHVybiB0LmpvaW4oIiIpfTt0LnN0cmluZ1RvVVRGMTZCRVN0cmluZz1mdW5jdGlvbiBzdHJpbmdUb1VURjE2QkVTdHJpbmcoZSl7Y29uc3QgdD1bIsO+w78iXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGEpO3QucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHI+PjgmMjU1KSxTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZyKSl9cmV0dXJuIHQuam9pbigiIil9O3Quc3RyaW5nVG9VVEY4U3RyaW5nPXN0cmluZ1RvVVRGOFN0cmluZzt0LnVucmVhY2hhYmxlPXVucmVhY2hhYmxlO3QudXRmOFN0cmluZ1RvU3RyaW5nPWZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX07dC53YXJuPXdhcm47dC5JREVOVElUWV9NQVRSSVg9WzEsMCwwLDEsMCwwXTt0LkZPTlRfSURFTlRJVFlfTUFUUklYPVsuMDAxLDAsMCwuMDAxLDAsMF07dC5MSU5FX0ZBQ1RPUj0xLjM1O3QuTElORV9ERVNDRU5UX0ZBQ1RPUj0uMzU7dC5SZW5kZXJpbmdJbnRlbnRGbGFnPXtBTlk6MSxESVNQTEFZOjIsUFJJTlQ6NCxBTk5PVEFUSU9OU19GT1JNUzoxNixBTk5PVEFUSU9OU19TVE9SQUdFOjMyLEFOTk9UQVRJT05TX0RJU0FCTEU6NjQsT1BMSVNUOjI1Nn07dC5Bbm5vdGF0aW9uTW9kZT17RElTQUJMRTowLEVOQUJMRToxLEVOQUJMRV9GT1JNUzoyLEVOQUJMRV9TVE9SQUdFOjN9O3QuQW5ub3RhdGlvbkVkaXRvclByZWZpeD0icGRmanNfaW50ZXJuYWxfZWRpdG9yXyI7dC5Bbm5vdGF0aW9uRWRpdG9yVHlwZT17RElTQUJMRTotMSxOT05FOjAsRlJFRVRFWFQ6MyxJTks6MTV9O3QuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGU9e0ZSRUVURVhUX1NJWkU6MSxGUkVFVEVYVF9DT0xPUjoyLEZSRUVURVhUX09QQUNJVFk6MyxJTktfQ09MT1I6MTEsSU5LX1RISUNLTkVTUzoxMixJTktfT1BBQ0lUWToxM307dC5QZXJtaXNzaW9uRmxhZz17UFJJTlQ6NCxNT0RJRllfQ09OVEVOVFM6OCxDT1BZOjE2LE1PRElGWV9BTk5PVEFUSU9OUzozMixGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOjI1NixDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOjUxMixBU1NFTUJMRToxMDI0LFBSSU5UX0hJR0hfUVVBTElUWToyMDQ4fTt0LlRleHRSZW5kZXJpbmdNb2RlPXtGSUxMOjAsU1RST0tFOjEsRklMTF9TVFJPS0U6MixJTlZJU0lCTEU6MyxGSUxMX0FERF9UT19QQVRIOjQsU1RST0tFX0FERF9UT19QQVRIOjUsRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6NixBRERfVE9fUEFUSDo3LEZJTExfU1RST0tFX01BU0s6MyxBRERfVE9fUEFUSF9GTEFHOjR9O3QuSW1hZ2VLaW5kPXtHUkFZU0NBTEVfMUJQUDoxLFJHQl8yNEJQUDoyLFJHQkFfMzJCUFA6M307dC5Bbm5vdGF0aW9uVHlwZT17VEVYVDoxLExJTks6MixGUkVFVEVYVDozLExJTkU6NCxTUVVBUkU6NSxDSVJDTEU6NixQT0xZR09OOjcsUE9MWUxJTkU6OCxISUdITElHSFQ6OSxVTkRFUkxJTkU6MTAsU1FVSUdHTFk6MTEsU1RSSUtFT1VUOjEyLFNUQU1QOjEzLENBUkVUOjE0LElOSzoxNSxQT1BVUDoxNixGSUxFQVRUQUNITUVOVDoxNyxTT1VORDoxOCxNT1ZJRToxOSxXSURHRVQ6MjAsU0NSRUVOOjIxLFBSSU5URVJNQVJLOjIyLFRSQVBORVQ6MjMsV0FURVJNQVJLOjI0LFRIUkVFRDoyNSxSRURBQ1Q6MjZ9O3QuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlPXtNQVJLRUQ6Ik1hcmtlZCIsUkVWSUVXOiJSZXZpZXcifTt0LkFubm90YXRpb25NYXJrZWRTdGF0ZT17TUFSS0VEOiJNYXJrZWQiLFVOTUFSS0VEOiJVbm1hcmtlZCJ9O3QuQW5ub3RhdGlvblJldmlld1N0YXRlPXtBQ0NFUFRFRDoiQWNjZXB0ZWQiLFJFSkVDVEVEOiJSZWplY3RlZCIsQ0FOQ0VMTEVEOiJDYW5jZWxsZWQiLENPTVBMRVRFRDoiQ29tcGxldGVkIixOT05FOiJOb25lIn07dC5Bbm5vdGF0aW9uUmVwbHlUeXBlPXtHUk9VUDoiR3JvdXAiLFJFUExZOiJSIn07dC5Bbm5vdGF0aW9uRmxhZz17SU5WSVNJQkxFOjEsSElEREVOOjIsUFJJTlQ6NCxOT1pPT006OCxOT1JPVEFURToxNixOT1ZJRVc6MzIsUkVBRE9OTFk6NjQsTE9DS0VEOjEyOCxUT0dHTEVOT1ZJRVc6MjU2LExPQ0tFRENPTlRFTlRTOjUxMn07dC5Bbm5vdGF0aW9uRmllbGRGbGFnPXtSRUFET05MWToxLFJFUVVJUkVEOjIsTk9FWFBPUlQ6NCxNVUxUSUxJTkU6NDA5NixQQVNTV09SRDo4MTkyLE5PVE9HR0xFVE9PRkY6MTYzODQsUkFESU86MzI3NjgsUFVTSEJVVFRPTjo2NTUzNixDT01CTzoxMzEwNzIsRURJVDoyNjIxNDQsU09SVDo1MjQyODgsRklMRVNFTEVDVDoxMDQ4NTc2LE1VTFRJU0VMRUNUOjIwOTcxNTIsRE9OT1RTUEVMTENIRUNLOjQxOTQzMDQsRE9OT1RTQ1JPTEw6ODM4ODYwOCxDT01COjE2Nzc3MjE2LFJJQ0hURVhUOjMzNTU0NDMyLFJBRElPU0lOVU5JU09OOjMzNTU0NDMyLENPTU1JVE9OU0VMQ0hBTkdFOjY3MTA4ODY0fTt0LkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9e1NPTElEOjEsREFTSEVEOjIsQkVWRUxFRDozLElOU0VUOjQsVU5ERVJMSU5FOjV9O3QuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT17RToiTW91c2UgRW50ZXIiLFg6Ik1vdXNlIEV4aXQiLEQ6Ik1vdXNlIERvd24iLFU6Ik1vdXNlIFVwIixGbzoiRm9jdXMiLEJsOiJCbHVyIixQTzoiUGFnZU9wZW4iLFBDOiJQYWdlQ2xvc2UiLFBWOiJQYWdlVmlzaWJsZSIsUEk6IlBhZ2VJbnZpc2libGUiLEs6IktleXN0cm9rZSIsRjoiRm9ybWF0IixWOiJWYWxpZGF0ZSIsQzoiQ2FsY3VsYXRlIn07dC5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT17V0M6IldpbGxDbG9zZSIsV1M6IldpbGxTYXZlIixEUzoiRGlkU2F2ZSIsV1A6IldpbGxQcmludCIsRFA6IkRpZFByaW50In07dC5QYWdlQWN0aW9uRXZlbnRUeXBlPXtPOiJQYWdlT3BlbiIsQzoiUGFnZUNsb3NlIn07dC5TdHJlYW1UeXBlPXtVTktOT1dOOiJVTktOT1dOIixGTEFURToiRkxBVEUiLExaVzoiTFpXIixEQ1Q6IkRDVCIsSlBYOiJKUFgiLEpCSUc6IkpCSUciLEE4NToiQTg1IixBSFg6IkFIWCIsQ0NGOiJDQ0YiLFJMWDoiUkxYIn07dC5Gb250VHlwZT17VU5LTk9XTjoiVU5LTk9XTiIsVFlQRTE6IlRZUEUxIixUWVBFMVNUQU5EQVJEOiJUWVBFMVNUQU5EQVJEIixUWVBFMUM6IlRZUEUxQyIsQ0lERk9OVFRZUEUwOiJDSURGT05UVFlQRTAiLENJREZPTlRUWVBFMEM6IkNJREZPTlRUWVBFMEMiLFRSVUVUWVBFOiJUUlVFVFlQRSIsQ0lERk9OVFRZUEUyOiJDSURGT05UVFlQRTIiLFRZUEUzOiJUWVBFMyIsT1BFTlRZUEU6Ik9QRU5UWVBFIixUWVBFMDoiVFlQRTAiLE1NVFlQRTE6Ik1NVFlQRTEifTtjb25zdCBhPXtFUlJPUlM6MCxXQVJOSU5HUzoxLElORk9TOjV9O3QuVmVyYm9zaXR5TGV2ZWw9YTt0LkNNYXBDb21wcmVzc2lvblR5cGU9e05PTkU6MCxCSU5BUlk6MX07dC5PUFM9e2RlcGVuZGVuY3k6MSxzZXRMaW5lV2lkdGg6MixzZXRMaW5lQ2FwOjMsc2V0TGluZUpvaW46NCxzZXRNaXRlckxpbWl0OjUsc2V0RGFzaDo2LHNldFJlbmRlcmluZ0ludGVudDo3LHNldEZsYXRuZXNzOjgsc2V0R1N0YXRlOjksc2F2ZToxMCxyZXN0b3JlOjExLHRyYW5zZm9ybToxMixtb3ZlVG86MTMsbGluZVRvOjE0LGN1cnZlVG86MTUsY3VydmVUbzI6MTYsY3VydmVUbzM6MTcsY2xvc2VQYXRoOjE4LHJlY3RhbmdsZToxOSxzdHJva2U6MjAsY2xvc2VTdHJva2U6MjEsZmlsbDoyMixlb0ZpbGw6MjMsZmlsbFN0cm9rZToyNCxlb0ZpbGxTdHJva2U6MjUsY2xvc2VGaWxsU3Ryb2tlOjI2LGNsb3NlRU9GaWxsU3Ryb2tlOjI3LGVuZFBhdGg6MjgsY2xpcDoyOSxlb0NsaXA6MzAsYmVnaW5UZXh0OjMxLGVuZFRleHQ6MzIsc2V0Q2hhclNwYWNpbmc6MzMsc2V0V29yZFNwYWNpbmc6MzQsc2V0SFNjYWxlOjM1LHNldExlYWRpbmc6MzYsc2V0Rm9udDozNyxzZXRUZXh0UmVuZGVyaW5nTW9kZTozOCxzZXRUZXh0UmlzZTozOSxtb3ZlVGV4dDo0MCxzZXRMZWFkaW5nTW92ZVRleHQ6NDEsc2V0VGV4dE1hdHJpeDo0MixuZXh0TGluZTo0MyxzaG93VGV4dDo0NCxzaG93U3BhY2VkVGV4dDo0NSxuZXh0TGluZVNob3dUZXh0OjQ2LG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OjQ3LHNldENoYXJXaWR0aDo0OCxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6NDksc2V0U3Ryb2tlQ29sb3JTcGFjZTo1MCxzZXRGaWxsQ29sb3JTcGFjZTo1MSxzZXRTdHJva2VDb2xvcjo1MixzZXRTdHJva2VDb2xvck46NTMsc2V0RmlsbENvbG9yOjU0LHNldEZpbGxDb2xvck46NTUsc2V0U3Ryb2tlR3JheTo1NixzZXRGaWxsR3JheTo1NyxzZXRTdHJva2VSR0JDb2xvcjo1OCxzZXRGaWxsUkdCQ29sb3I6NTksc2V0U3Ryb2tlQ01ZS0NvbG9yOjYwLHNldEZpbGxDTVlLQ29sb3I6NjEsc2hhZGluZ0ZpbGw6NjIsYmVnaW5JbmxpbmVJbWFnZTo2MyxiZWdpbkltYWdlRGF0YTo2NCxlbmRJbmxpbmVJbWFnZTo2NSxwYWludFhPYmplY3Q6NjYsbWFya1BvaW50OjY3LG1hcmtQb2ludFByb3BzOjY4LGJlZ2luTWFya2VkQ29udGVudDo2OSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczo3MCxlbmRNYXJrZWRDb250ZW50OjcxLGJlZ2luQ29tcGF0OjcyLGVuZENvbXBhdDo3MyxwYWludEZvcm1YT2JqZWN0QmVnaW46NzQscGFpbnRGb3JtWE9iamVjdEVuZDo3NSxiZWdpbkdyb3VwOjc2LGVuZEdyb3VwOjc3LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SW1hZ2VNYXNrWE9iamVjdDo4MyxwYWludEltYWdlTWFza1hPYmplY3RHcm91cDo4NCxwYWludEltYWdlWE9iamVjdDo4NSxwYWludElubGluZUltYWdlWE9iamVjdDo4NixwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOjg3LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Ojg4LHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDo4OSxwYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6OTAsY29uc3RydWN0UGF0aDo5MX07dC5VTlNVUFBPUlRFRF9GRUFUVVJFUz17Zm9ybXM6ImZvcm1zIixqYXZhU2NyaXB0OiJqYXZhU2NyaXB0IixzaWduYXR1cmVzOiJzaWduYXR1cmVzIixzbWFzazoic21hc2siLHNoYWRpbmdQYXR0ZXJuOiJzaGFkaW5nUGF0dGVybiIsZXJyb3JUaWxpbmdQYXR0ZXJuOiJlcnJvclRpbGluZ1BhdHRlcm4iLGVycm9yRXh0R1N0YXRlOiJlcnJvckV4dEdTdGF0ZSIsZXJyb3JYT2JqZWN0OiJlcnJvclhPYmplY3QiLGVycm9yRm9udExvYWRUeXBlMzoiZXJyb3JGb250TG9hZFR5cGUzIixlcnJvckZvbnRTdGF0ZToiZXJyb3JGb250U3RhdGUiLGVycm9yRm9udE1pc3Npbmc6ImVycm9yRm9udE1pc3NpbmciLGVycm9yRm9udFRyYW5zbGF0ZToiZXJyb3JGb250VHJhbnNsYXRlIixlcnJvckNvbG9yU3BhY2U6ImVycm9yQ29sb3JTcGFjZSIsZXJyb3JPcGVyYXRvckxpc3Q6ImVycm9yT3BlcmF0b3JMaXN0IixlcnJvckZvbnRUb1VuaWNvZGU6ImVycm9yRm9udFRvVW5pY29kZSIsZXJyb3JGb250TG9hZE5hdGl2ZToiZXJyb3JGb250TG9hZE5hdGl2ZSIsZXJyb3JGb250QnVpbGRQYXRoOiJlcnJvckZvbnRCdWlsZFBhdGgiLGVycm9yRm9udEdldFBhdGg6ImVycm9yRm9udEdldFBhdGgiLGVycm9yTWFya2VkQ29udGVudDoiZXJyb3JNYXJrZWRDb250ZW50IixlcnJvckNvbnRlbnRTdWJTdHJlYW06ImVycm9yQ29udGVudFN1YlN0cmVhbSJ9O3QuUGFzc3dvcmRSZXNwb25zZXM9e05FRURfUEFTU1dPUkQ6MSxJTkNPUlJFQ1RfUEFTU1dPUkQ6Mn07bGV0IHI9YS5XQVJOSU5HUztmdW5jdGlvbiB3YXJuKGUpe3I+PWEuV0FSTklOR1MmJmNvbnNvbGUubG9nKGBXYXJuaW5nOiAke2V9YCl9ZnVuY3Rpb24gdW5yZWFjaGFibGUoZSl7dGhyb3cgbmV3IEVycm9yKGUpfWZ1bmN0aW9uIHNoYWRvdyhlLHQsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pO3JldHVybiBhfWNvbnN0IG49ZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbkNsb3N1cmUoKXtmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKGUsdCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VFeGNlcHRpb24mJnVucmVhY2hhYmxlKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRXhjZXB0aW9uLiIpO3RoaXMubWVzc2FnZT1lO3RoaXMubmFtZT10fUJhc2VFeGNlcHRpb24ucHJvdG90eXBlPW5ldyBFcnJvcjtCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yPUJhc2VFeGNlcHRpb247cmV0dXJuIEJhc2VFeGNlcHRpb259KCk7dC5CYXNlRXhjZXB0aW9uPW47dC5QYXNzd29yZEV4Y2VwdGlvbj1jbGFzcyBQYXNzd29yZEV4Y2VwdGlvbiBleHRlbmRzIG57Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLCJQYXNzd29yZEV4Y2VwdGlvbiIpO3RoaXMuY29kZT10fX07dC5Vbmtub3duRXJyb3JFeGNlcHRpb249Y2xhc3MgVW5rbm93bkVycm9yRXhjZXB0aW9uIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpO3RoaXMuZGV0YWlscz10fX07dC5JbnZhbGlkUERGRXhjZXB0aW9uPWNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkludmFsaWRQREZFeGNlcHRpb24iKX19O3QuTWlzc2luZ1BERkV4Y2VwdGlvbj1jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJNaXNzaW5nUERGRXhjZXB0aW9uIil9fTt0LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1jbGFzcyBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIik7dGhpcy5zdGF0dXM9dH19O3QuRm9ybWF0RXJyb3I9Y2xhc3MgRm9ybWF0RXJyb3IgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkZvcm1hdEVycm9yIil9fTt0LkFib3J0RXhjZXB0aW9uPWNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJBYm9ydEV4Y2VwdGlvbiIpfX07ZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhlKXsic3RyaW5nIiE9dHlwZW9mIGUmJnVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Y29uc3QgdD1lLmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDsrK3IpYVtyXT0yNTUmZS5jaGFyQ29kZUF0KHIpO3JldHVybiBhfWZ1bmN0aW9uIGFycmF5Qnl0ZUxlbmd0aChlKXtpZih2b2lkIDAhPT1lLmxlbmd0aClyZXR1cm4gZS5sZW5ndGg7aWYodm9pZCAwIT09ZS5ieXRlTGVuZ3RoKXJldHVybiBlLmJ5dGVMZW5ndGg7dW5yZWFjaGFibGUoIkludmFsaWQgYXJndW1lbnQgZm9yIGFycmF5Qnl0ZUxlbmd0aCIpfXQuRmVhdHVyZVRlc3Q9Y2xhc3MgRmVhdHVyZVRlc3R7c3RhdGljIGdldCBpc0xpdHRsZUVuZGlhbigpe3JldHVybiBzaGFkb3codGhpcywiaXNMaXR0bGVFbmRpYW4iLGZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheSg0KTtlWzBdPTE7cmV0dXJuIDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXX0oKSl9c3RhdGljIGdldCBpc0V2YWxTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCl7dHJ5e25ldyBGdW5jdGlvbigiIik7cmV0dXJuITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpKX1zdGF0aWMgZ2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfX07Y29uc3QgaT1bLi4uQXJyYXkoMjU2KS5rZXlzKCldLm1hcCgoZT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKSk7Y2xhc3MgVXRpbHtzdGF0aWMgbWFrZUhleENvbG9yKGUsdCxhKXtyZXR1cm5gIyR7aVtlXX0ke2lbdF19JHtpW2FdfWB9c3RhdGljIHNjYWxlTWluTWF4KGUsdCl7bGV0IGE7aWYoZVswXSl7aWYoZVswXTwwKXthPXRbMF07dFswXT10WzFdO3RbMV09YX10WzBdKj1lWzBdO3RbMV0qPWVbMF07aWYoZVszXTwwKXthPXRbMl07dFsyXT10WzNdO3RbM109YX10WzJdKj1lWzNdO3RbM10qPWVbM119ZWxzZXthPXRbMF07dFswXT10WzJdO3RbMl09YTthPXRbMV07dFsxXT10WzNdO3RbM109YTtpZihlWzFdPDApe2E9dFsyXTt0WzJdPXRbM107dFszXT1hfXRbMl0qPWVbMV07dFszXSo9ZVsxXTtpZihlWzJdPDApe2E9dFswXTt0WzBdPXRbMV07dFsxXT1hfXRbMF0qPWVbMl07dFsxXSo9ZVsyXX10WzBdKz1lWzRdO3RbMV0rPWVbNF07dFsyXSs9ZVs1XTt0WzNdKz1lWzVdfXN0YXRpYyB0cmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zdGF0aWMgYXBwbHlUcmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMV0qdFsyXSt0WzRdLGVbMF0qdFsxXStlWzFdKnRbM10rdFs1XV19c3RhdGljIGFwcGx5SW52ZXJzZVRyYW5zZm9ybShlLHQpe2NvbnN0IGE9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bKGVbMF0qdFszXS1lWzFdKnRbMl0rdFsyXSp0WzVdLXRbNF0qdFszXSkvYSwoLWVbMF0qdFsxXStlWzFdKnRbMF0rdFs0XSp0WzFdLXRbNV0qdFswXSkvYV19c3RhdGljIGdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGUsdCl7Y29uc3QgYT1VdGlsLmFwcGx5VHJhbnNmb3JtKGUsdCkscj1VdGlsLmFwcGx5VHJhbnNmb3JtKGUuc2xpY2UoMiw0KSx0KSxuPVV0aWwuYXBwbHlUcmFuc2Zvcm0oW2VbMF0sZVszXV0sdCksaT1VdGlsLmFwcGx5VHJhbnNmb3JtKFtlWzJdLGVbMV1dLHQpO3JldHVybltNYXRoLm1pbihhWzBdLHJbMF0sblswXSxpWzBdKSxNYXRoLm1pbihhWzFdLHJbMV0sblsxXSxpWzFdKSxNYXRoLm1heChhWzBdLHJbMF0sblswXSxpWzBdKSxNYXRoLm1heChhWzFdLHJbMV0sblsxXSxpWzFdKV19c3RhdGljIGludmVyc2VUcmFuc2Zvcm0oZSl7Y29uc3QgdD1lWzBdKmVbM10tZVsxXSplWzJdO3JldHVybltlWzNdL3QsLWVbMV0vdCwtZVsyXS90LGVbMF0vdCwoZVsyXSplWzVdLWVbNF0qZVszXSkvdCwoZVs0XSplWzFdLWVbNV0qZVswXSkvdF19c3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpe2NvbnN0IHQ9W2VbMF0sZVsyXSxlWzFdLGVbM11dLGE9ZVswXSp0WzBdK2VbMV0qdFsyXSxyPWVbMF0qdFsxXStlWzFdKnRbM10sbj1lWzJdKnRbMF0rZVszXSp0WzJdLGk9ZVsyXSp0WzFdK2VbM10qdFszXSxzPShhK2kpLzIsbz1NYXRoLnNxcnQoKGEraSkqKjItNCooYSppLW4qcikpLzIsYz1zK298fDEsbD1zLW98fDE7cmV0dXJuW01hdGguc3FydChjKSxNYXRoLnNxcnQobCldfXN0YXRpYyBub3JtYWxpemVSZWN0KGUpe2NvbnN0IHQ9ZS5zbGljZSgwKTtpZihlWzBdPmVbMl0pe3RbMF09ZVsyXTt0WzJdPWVbMF19aWYoZVsxXT5lWzNdKXt0WzFdPWVbM107dFszXT1lWzFdfXJldHVybiB0fXN0YXRpYyBpbnRlcnNlY3QoZSx0KXtjb25zdCBhPU1hdGgubWF4KE1hdGgubWluKGVbMF0sZVsyXSksTWF0aC5taW4odFswXSx0WzJdKSkscj1NYXRoLm1pbihNYXRoLm1heChlWzBdLGVbMl0pLE1hdGgubWF4KHRbMF0sdFsyXSkpO2lmKGE+cilyZXR1cm4gbnVsbDtjb25zdCBuPU1hdGgubWF4KE1hdGgubWluKGVbMV0sZVszXSksTWF0aC5taW4odFsxXSx0WzNdKSksaT1NYXRoLm1pbihNYXRoLm1heChlWzFdLGVbM10pLE1hdGgubWF4KHRbMV0sdFszXSkpO3JldHVybiBuPmk/bnVsbDpbYSxuLHIsaV19c3RhdGljIGJlemllckJvdW5kaW5nQm94KGUsdCxhLHIsbixpLHMsbyl7Y29uc3QgYz1bXSxsPVtbXSxbXV07bGV0IGgsdSxkLGYsZyxwLG0sYjtmb3IobGV0IGw9MDtsPDI7KytsKXtpZigwPT09bCl7dT02KmUtMTIqYSs2Km47aD0tMyplKzkqYS05Km4rMypzO2Q9MyphLTMqZX1lbHNle3U9Nip0LTEyKnIrNippO2g9LTMqdCs5KnItOSppKzMqbztkPTMqci0zKnR9aWYoTWF0aC5hYnMoaCk8MWUtMTIpe2lmKE1hdGguYWJzKHUpPDFlLTEyKWNvbnRpbnVlO2Y9LWQvdTswPGYmJmY8MSYmYy5wdXNoKGYpfWVsc2V7bT11KnUtNCpkKmg7Yj1NYXRoLnNxcnQobSk7aWYoIShtPDApKXtnPSgtdStiKS8oMipoKTswPGcmJmc8MSYmYy5wdXNoKGcpO3A9KC11LWIpLygyKmgpOzA8cCYmcDwxJiZjLnB1c2gocCl9fX1sZXQgeSx3PWMubGVuZ3RoO2NvbnN0IFM9dztmb3IoO3ctLTspe2Y9Y1t3XTt5PTEtZjtsWzBdW3ddPXkqeSp5KmUrMyp5KnkqZiphKzMqeSpmKmYqbitmKmYqZipzO2xbMV1bd109eSp5KnkqdCszKnkqeSpmKnIrMyp5KmYqZippK2YqZipmKm99bFswXVtTXT1lO2xbMV1bU109dDtsWzBdW1MrMV09cztsWzFdW1MrMV09bztsWzBdLmxlbmd0aD1sWzFdLmxlbmd0aD1TKzI7cmV0dXJuW01hdGgubWluKC4uLmxbMF0pLE1hdGgubWluKC4uLmxbMV0pLE1hdGgubWF4KC4uLmxbMF0pLE1hdGgubWF4KC4uLmxbMV0pXX19dC5VdGlsPVV0aWw7Y29uc3Qgcz1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzI4LDcxMSw3MTAsNzI5LDczMyw3MzEsNzMwLDczMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MjI2LDgyMjQsODIyNSw4MjMwLDgyMTIsODIxMSw0MDIsODI2MCw4MjQ5LDgyNTAsODcyMiw4MjQwLDgyMjIsODIyMCw4MjIxLDgyMTYsODIxNyw4MjE4LDg0ODIsNjQyNTcsNjQyNTgsMzIxLDMzOCwzNTIsMzc2LDM4MSwzMDUsMzIyLDMzOSwzNTMsMzgyLDAsODM2NF07ZnVuY3Rpb24gc3RyaW5nVG9VVEY4U3RyaW5nKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5SZWZTZXRDYWNoZT10LlJlZlNldD10LlJlZj10Lk5hbWU9dC5FT0Y9dC5EaWN0PXQuQ21kPXQuQ0lSQ1VMQVJfUkVGPXZvaWQgMDt0LmNsZWFyUHJpbWl0aXZlQ2FjaGVzPWZ1bmN0aW9uIGNsZWFyUHJpbWl0aXZlQ2FjaGVzKCl7by5fY2xlYXJDYWNoZSgpO3MuX2NsZWFyQ2FjaGUoKTtsLl9jbGVhckNhY2hlKCl9O3QuaXNDbWQ9ZnVuY3Rpb24gaXNDbWQoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIG8mJih2b2lkIDA9PT10fHxlLmNtZD09PXQpfTt0LmlzRGljdD1mdW5jdGlvbiBpc0RpY3QoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIERpY3QmJih2b2lkIDA9PT10fHxpc05hbWUoZS5nZXQoIlR5cGUiKSx0KSl9O3QuaXNOYW1lPWlzTmFtZTt0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uIGlzUmVmc0VxdWFsKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59O3ZhciByPWEoMik7Y29uc3Qgbj1TeW1ib2woIkNJUkNVTEFSX1JFRiIpO3QuQ0lSQ1VMQVJfUkVGPW47Y29uc3QgaT1TeW1ib2woIkVPRiIpO3QuRU9GPWk7Y29uc3Qgcz1mdW5jdGlvbiBOYW1lQ2xvc3VyZSgpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCk7Y2xhc3MgTmFtZXtjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9ZX1zdGF0aWMgZ2V0KHQpe3JldHVybiBlW3RdfHwoZVt0XT1uZXcgTmFtZSh0KSl9c3RhdGljIF9jbGVhckNhY2hlKCl7ZT1PYmplY3QuY3JlYXRlKG51bGwpfX1yZXR1cm4gTmFtZX0oKTt0Lk5hbWU9cztjb25zdCBvPWZ1bmN0aW9uIENtZENsb3N1cmUoKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO2NsYXNzIENtZHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNtZD1lfXN0YXRpYyBnZXQodCl7cmV0dXJuIGVbdF18fChlW3RdPW5ldyBDbWQodCkpfXN0YXRpYyBfY2xlYXJDYWNoZSgpe2U9T2JqZWN0LmNyZWF0ZShudWxsKX19cmV0dXJuIENtZH0oKTt0LkNtZD1vO2NvbnN0IGM9ZnVuY3Rpb24gbm9uU2VyaWFsaXphYmxlQ2xvc3VyZSgpe3JldHVybiBjfTtjbGFzcyBEaWN0e2NvbnN0cnVjdG9yKGU9bnVsbCl7dGhpcy5fbWFwPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy54cmVmPWU7dGhpcy5vYmpJZD1udWxsO3RoaXMuc3VwcHJlc3NFbmNyeXB0aW9uPSExO3RoaXMuX19ub25TZXJpYWxpemFibGVfXz1jfWFzc2lnblhyZWYoZSl7dGhpcy54cmVmPWV9Z2V0IHNpemUoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbWFwKS5sZW5ndGh9Z2V0KGUsdCxhKXtsZXQgcj10aGlzLl9tYXBbZV07aWYodm9pZCAwPT09ciYmdm9pZCAwIT09dCl7cj10aGlzLl9tYXBbdF07dm9pZCAwPT09ciYmdm9pZCAwIT09YSYmKHI9dGhpcy5fbWFwW2FdKX1yZXR1cm4gciBpbnN0YW5jZW9mIGwmJnRoaXMueHJlZj90aGlzLnhyZWYuZmV0Y2gocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6cn1hc3luYyBnZXRBc3luYyhlLHQsYSl7bGV0IHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PXImJnZvaWQgMCE9PXQpe3I9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcFthXSl9cmV0dXJuIHIgaW5zdGFuY2VvZiBsJiZ0aGlzLnhyZWY/dGhpcy54cmVmLmZldGNoQXN5bmMocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6cn1nZXRBcnJheShlLHQsYSl7bGV0IHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PXImJnZvaWQgMCE9PXQpe3I9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcFthXSl9ciBpbnN0YW5jZW9mIGwmJnRoaXMueHJlZiYmKHI9dGhpcy54cmVmLmZldGNoKHIsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKTtpZihBcnJheS5pc0FycmF5KHIpKXtyPXIuc2xpY2UoKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspcltlXWluc3RhbmNlb2YgbCYmdGhpcy54cmVmJiYocltlXT10aGlzLnhyZWYuZmV0Y2gocltlXSx0aGlzLnN1cHByZXNzRW5jcnlwdGlvbikpfXJldHVybiByfWdldFJhdyhlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWdldEtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbWFwKX1nZXRSYXdWYWx1ZXMoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9tYXApfXNldChlLHQpe3RoaXMuX21hcFtlXT10fWhhcyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWZvckVhY2goZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9c3RhdGljIGdldCBlbXB0eSgpe2NvbnN0IGU9bmV3IERpY3QobnVsbCk7ZS5zZXQ9KGUsdCk9PnsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZW1wdHkiLGUpfXN0YXRpYyBtZXJnZSh7eHJlZjplLGRpY3RBcnJheTp0LG1lcmdlU3ViRGljdHM6YT0hMX0pe2NvbnN0IHI9bmV3IERpY3QoZSksbj1uZXcgTWFwO2Zvcihjb25zdCBlIG9mIHQpaWYoZSBpbnN0YW5jZW9mIERpY3QpZm9yKGNvbnN0W3Qscl1vZiBPYmplY3QuZW50cmllcyhlLl9tYXApKXtsZXQgZT1uLmdldCh0KTtpZih2b2lkIDA9PT1lKXtlPVtdO24uc2V0KHQsZSl9ZWxzZSBpZighKGEmJnIgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtlLnB1c2gocil9Zm9yKGNvbnN0W3QsYV1vZiBuKXtpZigxPT09YS5sZW5ndGh8fCEoYVswXWluc3RhbmNlb2YgRGljdCkpe3IuX21hcFt0XT1hWzBdO2NvbnRpbnVlfWNvbnN0IG49bmV3IERpY3QoZSk7Zm9yKGNvbnN0IGUgb2YgYSlmb3IoY29uc3RbdCxhXW9mIE9iamVjdC5lbnRyaWVzKGUuX21hcCkpdm9pZCAwPT09bi5fbWFwW3RdJiYobi5fbWFwW3RdPWEpO24uc2l6ZT4wJiYoci5fbWFwW3RdPW4pfW4uY2xlYXIoKTtyZXR1cm4gci5zaXplPjA/cjpEaWN0LmVtcHR5fX10LkRpY3Q9RGljdDtjb25zdCBsPWZ1bmN0aW9uIFJlZkNsb3N1cmUoKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO2NsYXNzIFJlZntjb25zdHJ1Y3RvcihlLHQpe3RoaXMubnVtPWU7dGhpcy5nZW49dH10b1N0cmluZygpe3JldHVybiAwPT09dGhpcy5nZW4/YCR7dGhpcy5udW19UmA6YCR7dGhpcy5udW19UiR7dGhpcy5nZW59YH1zdGF0aWMgZ2V0KHQsYSl7Y29uc3Qgcj0wPT09YT9gJHt0fVJgOmAke3R9UiR7YX1gO3JldHVybiBlW3JdfHwoZVtyXT1uZXcgUmVmKHQsYSkpfXN0YXRpYyBfY2xlYXJDYWNoZSgpe2U9T2JqZWN0LmNyZWF0ZShudWxsKX19cmV0dXJuIFJlZn0oKTt0LlJlZj1sO2NsYXNzIFJlZlNldHtjb25zdHJ1Y3RvcihlPW51bGwpe3RoaXMuX3NldD1uZXcgU2V0KGUmJmUuX3NldCl9aGFzKGUpe3JldHVybiB0aGlzLl9zZXQuaGFzKGUudG9TdHJpbmcoKSl9cHV0KGUpe3RoaXMuX3NldC5hZGQoZS50b1N0cmluZygpKX1yZW1vdmUoZSl7dGhpcy5fc2V0LmRlbGV0ZShlLnRvU3RyaW5nKCkpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuX3NldC52YWx1ZXMoKX1jbGVhcigpe3RoaXMuX3NldC5jbGVhcigpfX10LlJlZlNldD1SZWZTZXQ7Y2xhc3MgUmVmU2V0Q2FjaGV7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9tYXAuc2l6ZX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcC5nZXQoZS50b1N0cmluZygpKX1oYXMoZSl7cmV0dXJuIHRoaXMuX21hcC5oYXMoZS50b1N0cmluZygpKX1wdXQoZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0KX1wdXRBbGlhcyhlLHQpe3RoaXMuX21hcC5zZXQoZS50b1N0cmluZygpLHRoaXMuZ2V0KHQpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLl9tYXAudmFsdWVzKCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19dC5SZWZTZXRDYWNoZT1SZWZTZXRDYWNoZTtmdW5jdGlvbiBpc05hbWUoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIHMmJih2b2lkIDA9PT10fHxlLm5hbWU9PT10KX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj10LkRvY1N0YXRzPXZvaWQgMDt0LmNvbGxlY3RBY3Rpb25zPWZ1bmN0aW9uIGNvbGxlY3RBY3Rpb25zKGUsdCxhKXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCkscz1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJBQSIsc3RvcFdoZW5Gb3VuZDohMX0pO2lmKHMpZm9yKGxldCB0PXMubGVuZ3RoLTE7dD49MDt0LS0pe2NvbnN0IHI9c1t0XTtpZihyIGluc3RhbmNlb2Ygbi5EaWN0KWZvcihjb25zdCB0IG9mIHIuZ2V0S2V5cygpKXtjb25zdCBzPWFbdF07aWYoIXMpY29udGludWU7Y29uc3Qgbz1yLmdldFJhdyh0KSxjPW5ldyBuLlJlZlNldCxsPVtdO19jb2xsZWN0SlMobyxlLGwsYyk7bC5sZW5ndGg+MCYmKGlbc109bCl9fWlmKHQuaGFzKCJBIikpe2NvbnN0IGE9dC5nZXQoIkEiKSxyPW5ldyBuLlJlZlNldCxzPVtdO19jb2xsZWN0SlMoYSxlLHMscik7cy5sZW5ndGg+MCYmKGkuQWN0aW9uPXMpfXJldHVybigwLHIub2JqZWN0U2l6ZSkoaSk+MD9pOm51bGx9O3QuZW5jb2RlVG9YbWxTdHJpbmc9ZnVuY3Rpb24gZW5jb2RlVG9YbWxTdHJpbmcoZSl7Y29uc3QgdD1bXTtsZXQgYT0wO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lLmNvZGVQb2ludEF0KHIpO2lmKDMyPD1uJiZuPD0xMjYpe2NvbnN0IGk9b1tuXTtpZihpKXthPHImJnQucHVzaChlLnN1YnN0cmluZyhhLHIpKTt0LnB1c2goaSk7YT1yKzF9fWVsc2V7YTxyJiZ0LnB1c2goZS5zdWJzdHJpbmcoYSxyKSk7dC5wdXNoKGAmI3gke24udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9O2ApO24+NTUyOTUmJihuPDU3MzQ0fHxuPjY1NTMzKSYmcisrO2E9cisxfX1pZigwPT09dC5sZW5ndGgpcmV0dXJuIGU7YTxlLmxlbmd0aCYmdC5wdXNoKGUuc3Vic3RyaW5nKGEsZS5sZW5ndGgpKTtyZXR1cm4gdC5qb2luKCIiKX07dC5lc2NhcGVQREZOYW1lPWZ1bmN0aW9uIGVzY2FwZVBERk5hbWUoZSl7Y29uc3QgdD1bXTtsZXQgYT0wO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQocik7aWYobjwzM3x8bj4xMjZ8fDM1PT09bnx8NDA9PT1ufHw0MT09PW58fDYwPT09bnx8NjI9PT1ufHw5MT09PW58fDkzPT09bnx8MTIzPT09bnx8MTI1PT09bnx8NDc9PT1ufHwzNz09PW4pe2E8ciYmdC5wdXNoKGUuc3Vic3RyaW5nKGEscikpO3QucHVzaChgIyR7bi50b1N0cmluZygxNil9YCk7YT1yKzF9fWlmKDA9PT10Lmxlbmd0aClyZXR1cm4gZTthPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcoYSxlLmxlbmd0aCkpO3JldHVybiB0LmpvaW4oIiIpfTt0LmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5PWZ1bmN0aW9uIGdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KGUpe2xldCB0O3JldHVybiBmdW5jdGlvbigpe2lmKGUpe2xldCBhPWUoKTtlPW51bGw7dD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgZT0wLHI9YS5sZW5ndGg7ZTxyO2UrPTIpdFthW2VdXT1hW2UrMV07YT1udWxsfXJldHVybiB0fX07dC5nZXRJbmhlcml0YWJsZVByb3BlcnR5PWdldEluaGVyaXRhYmxlUHJvcGVydHk7dC5nZXRMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGUpe2xldCB0O3JldHVybiBmdW5jdGlvbigpe2lmKGUpe3Q9T2JqZWN0LmNyZWF0ZShudWxsKTtlKHQpO2U9bnVsbH1yZXR1cm4gdH19O3QuZ2V0TmV3QW5ub3RhdGlvbnNNYXA9ZnVuY3Rpb24gZ2V0TmV3QW5ub3RhdGlvbnNNYXAoZSl7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdFthLG5db2YgZSl7aWYoIWEuc3RhcnRzV2l0aChyLkFubm90YXRpb25FZGl0b3JQcmVmaXgpKWNvbnRpbnVlO2xldCBlPXQuZ2V0KG4ucGFnZUluZGV4KTtpZighZSl7ZT1bXTt0LnNldChuLnBhZ2VJbmRleCxlKX1lLnB1c2gobil9cmV0dXJuIHQuc2l6ZT4wP3Q6bnVsbH07dC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMz09PWV8fDEwPT09ZX07dC5sb2cyPWZ1bmN0aW9uIGxvZzIoZSl7aWYoZTw9MClyZXR1cm4gMDtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nMihlKSl9O3QubnVtYmVyVG9TdHJpbmc9ZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcoZSl7aWYoTnVtYmVyLmlzSW50ZWdlcihlKSlyZXR1cm4gZS50b1N0cmluZygpO2NvbnN0IHQ9TWF0aC5yb3VuZCgxMDAqZSk7aWYodCUxMDA9PTApcmV0dXJuKHQvMTAwKS50b1N0cmluZygpO2lmKHQlMTA9PTApcmV0dXJuIGUudG9GaXhlZCgxKTtyZXR1cm4gZS50b0ZpeGVkKDIpfTt0LnBhcnNlWEZBUGF0aD1mdW5jdGlvbiBwYXJzZVhGQVBhdGgoZSl7Y29uc3QgdD0vKC4rKVxbKFxkKylcXSQvO3JldHVybiBlLnNwbGl0KCIuIikubWFwKChlPT57Y29uc3QgYT1lLm1hdGNoKHQpO3JldHVybiBhP3tuYW1lOmFbMV0scG9zOnBhcnNlSW50KGFbMl0sMTApfTp7bmFtZTplLHBvczowfX0pKX07dC5yZWFkSW50OD1mdW5jdGlvbiByZWFkSW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9O3QucmVhZFVpbnQxNj1mdW5jdGlvbiByZWFkVWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfTt0LnJlYWRVaW50MzI9ZnVuY3Rpb24gcmVhZFVpbnQzMihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH07dC5yZWNvdmVySnNVUkw9ZnVuY3Rpb24gcmVjb3ZlckpzVVJMKGUpe2NvbnN0IHQ9bmV3IFJlZ0V4cCgiXlxccyooIitbImFwcC5sYXVuY2hVUkwiLCJ3aW5kb3cub3BlbiIsInhmYS5ob3N0LmdvdG9VUkwiXS5qb2luKCJ8Iikuc3BsaXQoIi4iKS5qb2luKCJcXC4iKSsiKVxcKCg/Oid8XCIpKFteJ1wiXSopKD86J3xcIikoPzosXFxzKihcXHcrKVxcKXxcXCkpIiwiaSIpLmV4ZWMoZSk7aWYodCYmdFsyXSl7Y29uc3QgZT10WzJdO2xldCBhPSExOyJ0cnVlIj09PXRbM10mJiJhcHAubGF1bmNoVVJMIj09PXRbMV0mJihhPSEwKTtyZXR1cm57dXJsOmUsbmV3V2luZG93OmF9fXJldHVybiBudWxsfTt0LnRvUm9tYW5OdW1lcmFscz1mdW5jdGlvbiB0b1JvbWFuTnVtZXJhbHMoZSx0PSExKXsoMCxyLmFzc2VydCkoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wLCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIik7Y29uc3QgYT1bXTtsZXQgbjtmb3IoO2U+PTFlMzspe2UtPTFlMzthLnB1c2goIk0iKX1uPWUvMTAwfDA7ZSU9MTAwO2EucHVzaChzW25dKTtuPWUvMTB8MDtlJT0xMDthLnB1c2goc1sxMCtuXSk7YS5wdXNoKHNbMjArZV0pO2NvbnN0IGk9YS5qb2luKCIiKTtyZXR1cm4gdD9pLnRvTG93ZXJDYXNlKCk6aX07dC52YWxpZGF0ZUNTU0ZvbnQ9ZnVuY3Rpb24gdmFsaWRhdGVDU1NGb250KGUpe2NvbnN0IHQ9bmV3IFNldChbIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjcwMCIsIjgwMCIsIjkwMCIsIjEwMDAiLCJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciJdKSx7Zm9udEZhbWlseTphLGZvbnRXZWlnaHQ6bixpdGFsaWNBbmdsZTppfT1lO2lmKC9eIi4qIiQvLnRlc3QoYSkpe2lmKC9bXlxcXSIvLnRlc3QoYS5zbGljZSgxLGEubGVuZ3RoLTEpKSl7KDAsci53YXJuKShgWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIHVuZXNjYXBlZCAiOiAke2F9LmApO3JldHVybiExfX1lbHNlIGlmKC9eJy4qJyQvLnRlc3QoYSkpe2lmKC9bXlxcXScvLnRlc3QoYS5zbGljZSgxLGEubGVuZ3RoLTEpKSl7KDAsci53YXJuKShgWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIHVuZXNjYXBlZCAnOiAke2F9LmApO3JldHVybiExfX1lbHNlIGZvcihjb25zdCBlIG9mIGEuc3BsaXQoL1sgXHRdKy8pKWlmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QoZSl8fCEvXltcdy1cXF0rJC8udGVzdChlKSl7KDAsci53YXJuKShgWEZBIC0gRm9udEZhbWlseSBjb250YWlucyBzb21lIGludmFsaWQgPGN1c3RvbS1pZGVudD46ICR7YX0uYCk7cmV0dXJuITF9Y29uc3Qgcz1uP24udG9TdHJpbmcoKToiIjtlLmZvbnRXZWlnaHQ9dC5oYXMocyk/czoiNDAwIjtjb25zdCBvPXBhcnNlRmxvYXQoaSk7ZS5pdGFsaWNBbmdsZT1pc05hTihvKXx8bzwtOTB8fG8+OTA/IjE0IjppLnRvU3RyaW5nKCk7cmV0dXJuITB9O3ZhciByPWEoMiksbj1hKDMpLGk9YSg1KTt0LlBERl9WRVJTSU9OX1JFR0VYUD0vXlsxLTldXC5cZCQvO2NsYXNzIE1pc3NpbmdEYXRhRXhjZXB0aW9uIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoYE1pc3NpbmcgZGF0YSBbJHtlfSwgJHt0fSlgLCJNaXNzaW5nRGF0YUV4Y2VwdGlvbiIpO3RoaXMuYmVnaW49ZTt0aGlzLmVuZD10fX10Lk1pc3NpbmdEYXRhRXhjZXB0aW9uPU1pc3NpbmdEYXRhRXhjZXB0aW9uO2NsYXNzIFBhcnNlckVPRkV4Y2VwdGlvbiBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJQYXJzZXJFT0ZFeGNlcHRpb24iKX19dC5QYXJzZXJFT0ZFeGNlcHRpb249UGFyc2VyRU9GRXhjZXB0aW9uO2NsYXNzIFhSZWZFbnRyeUV4Y2VwdGlvbiBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJYUmVmRW50cnlFeGNlcHRpb24iKX19dC5YUmVmRW50cnlFeGNlcHRpb249WFJlZkVudHJ5RXhjZXB0aW9uO2NsYXNzIFhSZWZQYXJzZUV4Y2VwdGlvbiBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJYUmVmUGFyc2VFeGNlcHRpb24iKX19dC5YUmVmUGFyc2VFeGNlcHRpb249WFJlZlBhcnNlRXhjZXB0aW9uO3QuRG9jU3RhdHM9Y2xhc3MgRG9jU3RhdHN7Y29uc3RydWN0b3IoZSl7dGhpcy5faGFuZGxlcj1lO3RoaXMuX3N0cmVhbVR5cGVzPW5ldyBTZXQ7dGhpcy5fZm9udFR5cGVzPW5ldyBTZXR9X3NlbmQoKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3N0cmVhbVR5cGVzKWVbdF09ITA7Zm9yKGNvbnN0IGUgb2YgdGhpcy5fZm9udFR5cGVzKXRbZV09ITA7dGhpcy5faGFuZGxlci5zZW5kKCJEb2NTdGF0cyIse3N0cmVhbVR5cGVzOmUsZm9udFR5cGVzOnR9KX1hZGRTdHJlYW1UeXBlKGUpe2lmKCF0aGlzLl9zdHJlYW1UeXBlcy5oYXMoZSkpe3RoaXMuX3N0cmVhbVR5cGVzLmFkZChlKTt0aGlzLl9zZW5kKCl9fWFkZEZvbnRUeXBlKGUpe2lmKCF0aGlzLl9mb250VHlwZXMuaGFzKGUpKXt0aGlzLl9mb250VHlwZXMuYWRkKGUpO3RoaXMuX3NlbmQoKX19fTtmdW5jdGlvbiBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OmUsa2V5OnQsZ2V0QXJyYXk6YT0hMSxzdG9wV2hlbkZvdW5kOnI9ITB9KXtsZXQgaTtjb25zdCBzPW5ldyBuLlJlZlNldDtmb3IoO2UgaW5zdGFuY2VvZiBuLkRpY3QmJighZS5vYmpJZHx8IXMuaGFzKGUub2JqSWQpKTspe2Uub2JqSWQmJnMucHV0KGUub2JqSWQpO2NvbnN0IG49YT9lLmdldEFycmF5KHQpOmUuZ2V0KHQpO2lmKHZvaWQgMCE9PW4pe2lmKHIpcmV0dXJuIG47aXx8KGk9W10pO2kucHVzaChuKX1lPWUuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gaX1jb25zdCBzPVsiIiwiQyIsIkNDIiwiQ0NDIiwiQ0QiLCJEIiwiREMiLCJEQ0MiLCJEQ0NDIiwiQ00iLCIiLCJYIiwiWFgiLCJYWFgiLCJYTCIsIkwiLCJMWCIsIkxYWCIsIkxYWFgiLCJYQyIsIiIsIkkiLCJJSSIsIklJSSIsIklWIiwiViIsIlZJIiwiVklJIiwiVklJSSIsIklYIl07ZnVuY3Rpb24gX2NvbGxlY3RKUyhlLHQsYSxzKXtpZighZSlyZXR1cm47bGV0IG89bnVsbDtpZihlIGluc3RhbmNlb2Ygbi5SZWYpe2lmKHMuaGFzKGUpKXJldHVybjtvPWU7cy5wdXQobyk7ZT10LmZldGNoKGUpfWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IHIgb2YgZSlfY29sbGVjdEpTKHIsdCxhLHMpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIG4uRGljdCl7aWYoKDAsbi5pc05hbWUpKGUuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSl7Y29uc3QgdD1lLmdldCgiSlMiKTtsZXQgbjt0IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtP249dC5nZXRTdHJpbmcoKToic3RyaW5nIj09dHlwZW9mIHQmJihuPXQpO249biYmKDAsci5zdHJpbmdUb1BERlN0cmluZykobikucmVwbGFjZSgvXHUwMDAwL2csIiIpO24mJmEucHVzaChuKX1fY29sbGVjdEpTKGUuZ2V0UmF3KCJOZXh0IiksdCxhLHMpfW8mJnMucmVtb3ZlKG8pfWNvbnN0IG89ezYwOiImbHQ7Iiw2MjoiJmd0OyIsMzg6IiZhbXA7IiwzNDoiJnF1b3Q7IiwzOToiJmFwb3M7In19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5CYXNlU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDIpO2NsYXNzIEJhc2VTdHJlYW17Y29uc3RydWN0b3IoKXt0aGlzLmNvbnN0cnVjdG9yPT09QmFzZVN0cmVhbSYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTdHJlYW0uIil9Z2V0IGxlbmd0aCgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBnZXR0ZXIgYGxlbmd0aGAgYWNjZXNzZWQiKX1nZXQgaXNFbXB0eSgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBnZXR0ZXIgYGlzRW1wdHlgIGFjY2Vzc2VkIil9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJpc0RhdGFMb2FkZWQiLCEwKX1nZXRCeXRlKCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZWAgY2FsbGVkIil9Z2V0Qnl0ZXMoZSl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZXNgIGNhbGxlZCIpfXBlZWtCeXRlKCl7Y29uc3QgZT10aGlzLmdldEJ5dGUoKTstMSE9PWUmJnRoaXMucG9zLS07cmV0dXJuIGV9cGVla0J5dGVzKGUpe2NvbnN0IHQ9dGhpcy5nZXRCeXRlcyhlKTt0aGlzLnBvcy09dC5sZW5ndGg7cmV0dXJuIHR9Z2V0VWludDE2KCl7Y29uc3QgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fWdldEludDMyKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX1nZXRCeXRlUmFuZ2UoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfWdldFN0cmluZyhlKXtyZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZ2V0Qnl0ZXMoZSkpfXNraXAoZSl7dGhpcy5wb3MrPWV8fDF9cmVzZXQoKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9bW92ZVN0YXJ0KCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX1tYWtlU3ViU3RyZWFtKGUsdCxhPW51bGwpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYG1ha2VTdWJTdHJlYW1gIGNhbGxlZCIpfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuIG51bGx9fXQuQmFzZVN0cmVhbT1CYXNlU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTmV0d29ya1BkZk1hbmFnZXI9dC5Mb2NhbFBkZk1hbmFnZXI9dm9pZCAwO3ZhciByPWEoMiksbj1hKDcpLGk9YSg0KSxzPWEoOSksbz1hKDgpO2Z1bmN0aW9uIHBhcnNlRG9jQmFzZVVybChlKXtpZihlKXtjb25zdCB0PSgwLHIuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCkoZSk7aWYodClyZXR1cm4gdC5ocmVmOygwLHIud2FybikoYEludmFsaWQgYWJzb2x1dGUgZG9jQmFzZVVybDogIiR7ZX0iLmApfXJldHVybiBudWxsfWNsYXNzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VQZGZNYW5hZ2VyJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVBkZk1hbmFnZXIuIil9Z2V0IGRvY0lkKCl7cmV0dXJuIHRoaXMuX2RvY0lkfWdldCBwYXNzd29yZCgpe3JldHVybiB0aGlzLl9wYXNzd29yZH1nZXQgZG9jQmFzZVVybCgpe2NvbnN0IGU9dGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJkb2NCYXNlVXJsIixlLmJhc2VVcmx8fHRoaXMuX2RvY0Jhc2VVcmwpfWVuc3VyZURvYyhlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LGUsdCl9ZW5zdXJlWFJlZihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsZSx0KX1lbnN1cmVDYXRhbG9nKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZyxlLHQpfWdldFBhZ2UoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShlKX1mb250RmFsbGJhY2soZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5mb250RmFsbGJhY2soZSx0KX1sb2FkWGZhRm9udHMoZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5sb2FkWGZhRm9udHMoZSx0KX1sb2FkWGZhSW1hZ2VzKCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpfXNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuc2VyaWFsaXplWGZhRGF0YShlKX1jbGVhbnVwKGU9ITEpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmNsZWFudXAoZSl9YXN5bmMgZW5zdXJlKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpfXJlcXVlc3RSYW5nZShlLHQpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RSYW5nZWAgY2FsbGVkIil9cmVxdWVzdExvYWRlZFN0cmVhbShlPSExKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfXVwZGF0ZVBhc3N3b3JkKGUpe3RoaXMuX3Bhc3N3b3JkPWV9dGVybWluYXRlKGUpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fXQuTG9jYWxQZGZNYW5hZ2VyPWNsYXNzIExvY2FsUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUsdCxhLHIsbixpLGMpe3N1cGVyKCk7dGhpcy5fZG9jSWQ9ZTt0aGlzLl9wYXNzd29yZD1hO3RoaXMuX2RvY0Jhc2VVcmw9cGFyc2VEb2NCYXNlVXJsKGMpO3RoaXMubXNnSGFuZGxlcj1yO3RoaXMuZXZhbHVhdG9yT3B0aW9ucz1uO3RoaXMuZW5hYmxlWGZhPWk7Y29uc3QgbD1uZXcgby5TdHJlYW0odCk7dGhpcy5wZGZEb2N1bWVudD1uZXcgcy5QREZEb2N1bWVudCh0aGlzLGwpO3RoaXMuX2xvYWRlZFN0cmVhbVByb21pc2U9UHJvbWlzZS5yZXNvbHZlKGwpfWFzeW5jIGVuc3VyZShlLHQsYSl7Y29uc3Qgcj1lW3RdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkoZSxhKTpyfXJlcXVlc3RSYW5nZShlLHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX1yZXF1ZXN0TG9hZGVkU3RyZWFtKGU9ITEpe3JldHVybiB0aGlzLl9sb2FkZWRTdHJlYW1Qcm9taXNlfXRlcm1pbmF0ZShlKXt9fTt0Lk5ldHdvcmtQZGZNYW5hZ2VyPWNsYXNzIE5ldHdvcmtQZGZNYW5hZ2VyIGV4dGVuZHMgQmFzZVBkZk1hbmFnZXJ7Y29uc3RydWN0b3IoZSx0LGEscixpLG8pe3N1cGVyKCk7dGhpcy5fZG9jSWQ9ZTt0aGlzLl9wYXNzd29yZD1hLnBhc3N3b3JkO3RoaXMuX2RvY0Jhc2VVcmw9cGFyc2VEb2NCYXNlVXJsKG8pO3RoaXMubXNnSGFuZGxlcj1hLm1zZ0hhbmRsZXI7dGhpcy5ldmFsdWF0b3JPcHRpb25zPXI7dGhpcy5lbmFibGVYZmE9aTt0aGlzLnN0cmVhbU1hbmFnZXI9bmV3IG4uQ2h1bmtlZFN0cmVhbU1hbmFnZXIodCx7bXNnSGFuZGxlcjphLm1zZ0hhbmRsZXIsbGVuZ3RoOmEubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6YS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmEucmFuZ2VDaHVua1NpemV9KTt0aGlzLnBkZkRvY3VtZW50PW5ldyBzLlBERkRvY3VtZW50KHRoaXMsdGhpcy5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKX1hc3luYyBlbnN1cmUoZSx0LGEpe3RyeXtjb25zdCByPWVbdF07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseShlLGEpOnJ9Y2F0Y2gocil7aWYoIShyIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpdGhyb3cgcjthd2FpdCB0aGlzLnJlcXVlc3RSYW5nZShyLmJlZ2luLHIuZW5kKTtyZXR1cm4gdGhpcy5lbnN1cmUoZSx0LGEpfX1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfXJlcXVlc3RMb2FkZWRTdHJlYW0oZT0hMSl7cmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0QWxsQ2h1bmtzKGUpfXNlbmRQcm9ncmVzc2l2ZURhdGEoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLm9uUmVjZWl2ZURhdGEoe2NodW5rOmV9KX10ZXJtaW5hdGUoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLmFib3J0KGUpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DaHVua2VkU3RyZWFtTWFuYWdlcj10LkNodW5rZWRTdHJlYW09dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpLGk9YSg4KTtjbGFzcyBDaHVua2VkU3RyZWFtIGV4dGVuZHMgaS5TdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKG5ldyBVaW50OEFycmF5KGUpLDAsZSxudWxsKTt0aGlzLmNodW5rU2l6ZT10O3RoaXMuX2xvYWRlZENodW5rcz1uZXcgU2V0O3RoaXMubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpO3RoaXMubWFuYWdlcj1hO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTA7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMX1nZXRNaXNzaW5nQ2h1bmtzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxhPXRoaXMubnVtQ2h1bmtzO3Q8YTsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfWdldCBudW1DaHVua3NMb2FkZWQoKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfW9uUmVjZWl2ZURhdGEoZSx0KXtjb25zdCBhPXRoaXMuY2h1bmtTaXplO2lmKGUlYSE9MCl0aHJvdyBuZXcgRXJyb3IoYEJhZCBiZWdpbiBvZmZzZXQ6ICR7ZX1gKTtjb25zdCByPWUrdC5ieXRlTGVuZ3RoO2lmKHIlYSE9MCYmciE9PXRoaXMuYnl0ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgQmFkIGVuZCBvZmZzZXQ6ICR7cn1gKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheSh0KSxlKTtjb25zdCBuPU1hdGguZmxvb3IoZS9hKSxpPU1hdGguZmxvb3IoKHItMSkvYSkrMTtmb3IobGV0IGU9bjtlPGk7KytlKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoZSl9b25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGUpe2xldCB0PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoO2NvbnN0IGE9TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShlKSx0KTt0Kz1lLmJ5dGVMZW5ndGg7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9dDtjb25zdCByPXQ+PXRoaXMuZW5kP3RoaXMubnVtQ2h1bmtzOk1hdGguZmxvb3IodC90aGlzLmNodW5rU2l6ZSk7Zm9yKGxldCBlPWE7ZTxyOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGUpfWVuc3VyZUJ5dGUoZSl7aWYoZTx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX1lbnN1cmVSYW5nZShlLHQpe2lmKGU+PXQpcmV0dXJuO2lmKHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybjtjb25zdCBhPU1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSk7aWYoYT50aGlzLm51bUNodW5rcylyZXR1cm47Y29uc3Qgcj1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKTtmb3IobGV0IGk9YTtpPHI7KytpKWlmKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGkpKXRocm93IG5ldyBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGUsdCl9bmV4dEVtcHR5Q2h1bmsoZSl7Y29uc3QgdD10aGlzLm51bUNodW5rcztmb3IobGV0IGE9MDthPHQ7KythKXtjb25zdCByPShlK2EpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMocikpcmV0dXJuIHJ9cmV0dXJuIG51bGx9aGFzQ2h1bmsoZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7aWYoZT49dGhpcy5lbmQpcmV0dXJuLTE7ZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKTtyZXR1cm4gdGhpcy5ieXRlc1t0aGlzLnBvcysrXX1nZXRCeXRlcyhlKXtjb25zdCB0PXRoaXMuYnl0ZXMsYT10aGlzLnBvcyxyPXRoaXMuZW5kO2lmKCFlKXtyPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGEscik7cmV0dXJuIHQuc3ViYXJyYXkoYSxyKX1sZXQgbj1hK2U7bj5yJiYobj1yKTtuPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGEsbik7dGhpcy5wb3M9bjtyZXR1cm4gdC5zdWJhcnJheShhLG4pfWdldEJ5dGVSYW5nZShlLHQpe2U8MCYmKGU9MCk7dD50aGlzLmVuZCYmKHQ9dGhpcy5lbmQpO3Q+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoZSx0KTtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7dD9lK3Q+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoZSxlK3QpOmU+PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZUJ5dGUoZSk7ZnVuY3Rpb24gQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbSgpe31DaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHRoaXMpO0NodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlLmdldE1pc3NpbmdDaHVua3M9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuY2h1bmtTaXplLHQ9TWF0aC5mbG9vcih0aGlzLnN0YXJ0L2UpLGE9TWF0aC5mbG9vcigodGhpcy5lbmQtMSkvZSkrMSxyPVtdO2ZvcihsZXQgZT10O2U8YTsrK2UpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhlKXx8ci5wdXNoKGUpO3JldHVybiByfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUsImlzRGF0YUxvYWRlZCIse2dldCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfHwwPT09dGhpcy5nZXRNaXNzaW5nQ2h1bmtzKCkubGVuZ3RofSxjb25maWd1cmFibGU6ITB9KTtjb25zdCByPW5ldyBDaHVua2VkU3RyZWFtU3Vic3RyZWFtO3IucG9zPXIuc3RhcnQ9ZTtyLmVuZD1lK3R8fHRoaXMuZW5kO3IuZGljdD1hO3JldHVybiByfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuW3RoaXNdfX10LkNodW5rZWRTdHJlYW09Q2h1bmtlZFN0cmVhbTt0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPWNsYXNzIENodW5rZWRTdHJlYW1NYW5hZ2Vye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7dGhpcy5jaHVua1NpemU9dC5yYW5nZUNodW5rU2l6ZTt0aGlzLnN0cmVhbT1uZXcgQ2h1bmtlZFN0cmVhbSh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKTt0aGlzLnBkZk5ldHdvcmtTdHJlYW09ZTt0aGlzLmRpc2FibGVBdXRvRmV0Y2g9dC5kaXNhYmxlQXV0b0ZldGNoO3RoaXMubXNnSGFuZGxlcj10Lm1zZ0hhbmRsZXI7dGhpcy5jdXJyUmVxdWVzdElkPTA7dGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXA7dGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXA7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcDt0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wO3RoaXMuYWJvcnRlZD0hMTt0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PSgwLHIuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9c2VuZFJlcXVlc3QoZSx0KXtjb25zdCBhPXRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihlLHQpO2EuaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fChhLm9uUHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcykpO2xldCBuPVtdLGk9MDtyZXR1cm4gbmV3IFByb21pc2UoKChlLHQpPT57Y29uc3QgcmVhZENodW5rPXM9Pnt0cnl7aWYoIXMuZG9uZSl7Y29uc3QgZT1zLnZhbHVlO24ucHVzaChlKTtpKz0oMCxyLmFycmF5Qnl0ZUxlbmd0aCkoZSk7YS5pc1N0cmVhbWluZ1N1cHBvcnRlZCYmdGhpcy5vblByb2dyZXNzKHtsb2FkZWQ6aX0pO2EucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpO3JldHVybn1jb25zdCBvPSgwLHIuYXJyYXlzVG9CeXRlcykobik7bj1udWxsO2Uobyl9Y2F0Y2goZSl7dChlKX19O2EucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpfSkpLnRoZW4oKHQ9Pnt0aGlzLmFib3J0ZWR8fHRoaXMub25SZWNlaXZlRGF0YSh7Y2h1bms6dCxiZWdpbjplfSl9KSl9cmVxdWVzdEFsbENodW5rcyhlPSExKXtpZighZSl7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRNaXNzaW5nQ2h1bmtzKCk7dGhpcy5fcmVxdWVzdENodW5rcyhlKX1yZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlfV9yZXF1ZXN0Q2h1bmtzKGUpe2NvbnN0IHQ9dGhpcy5jdXJyUmVxdWVzdElkKyssYT1uZXcgU2V0O3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQodCxhKTtmb3IoY29uc3QgdCBvZiBlKXRoaXMuc3RyZWFtLmhhc0NodW5rKHQpfHxhLmFkZCh0KTtpZigwPT09YS5zaXplKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBuPSgwLHIuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Quc2V0KHQsbik7Y29uc3QgaT1bXTtmb3IoY29uc3QgZSBvZiBhKXtsZXQgYT10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGUpO2lmKCFhKXthPVtdO3RoaXMuX3JlcXVlc3RzQnlDaHVuay5zZXQoZSxhKTtpLnB1c2goZSl9YS5wdXNoKHQpfWlmKGkubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy5ncm91cENodW5rcyhpKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPXQuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxhPU1hdGgubWluKHQuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QoZSxhKS5jYXRjaChuLnJlamVjdCl9fXJldHVybiBuLnByb21pc2UuY2F0Y2goKGU9PntpZighdGhpcy5hYm9ydGVkKXRocm93IGV9KSl9Z2V0U3RyZWFtKCl7cmV0dXJuIHRoaXMuc3RyZWFtfXJlcXVlc3RSYW5nZShlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Y29uc3QgYT10aGlzLmdldEJlZ2luQ2h1bmsoZSkscj10aGlzLmdldEVuZENodW5rKHQpLG49W107Zm9yKGxldCBlPWE7ZTxyOysrZSluLnB1c2goZSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3Mobil9cmVxdWVzdFJhbmdlcyhlPVtdKXtjb25zdCB0PVtdO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9dGhpcy5nZXRCZWdpbkNodW5rKGEuYmVnaW4pLHI9dGhpcy5nZXRFbmRDaHVuayhhLmVuZCk7Zm9yKGxldCBhPWU7YTxyOysrYSl0LmluY2x1ZGVzKGEpfHx0LnB1c2goYSl9dC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3ModCl9Z3JvdXBDaHVua3MoZSl7Y29uc3QgdD1bXTtsZXQgYT0tMSxyPS0xO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbil7Y29uc3QgaT1lW25dO2E8MCYmKGE9aSk7aWYocj49MCYmcisxIT09aSl7dC5wdXNoKHtiZWdpbkNodW5rOmEsZW5kQ2h1bms6cisxfSk7YT1pfW4rMT09PWUubGVuZ3RoJiZ0LnB1c2goe2JlZ2luQ2h1bms6YSxlbmRDaHVuazppKzF9KTtyPWl9cmV0dXJuIHR9b25Qcm9ncmVzcyhlKXt0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplK2UubG9hZGVkLHRvdGFsOnRoaXMubGVuZ3RofSl9b25SZWNlaXZlRGF0YShlKXtjb25zdCB0PWUuY2h1bmssYT12b2lkIDA9PT1lLmJlZ2luLHI9YT90aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDplLmJlZ2luLG49cit0LmJ5dGVMZW5ndGgsaT1NYXRoLmZsb29yKHIvdGhpcy5jaHVua1NpemUpLHM9bjx0aGlzLmxlbmd0aD9NYXRoLmZsb29yKG4vdGhpcy5jaHVua1NpemUpOk1hdGguY2VpbChuL3RoaXMuY2h1bmtTaXplKTtpZihhKXt0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEodCk7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9bn1lbHNlIHRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEocix0KTt0aGlzLnN0cmVhbS5pc0RhdGFMb2FkZWQmJnRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7Y29uc3Qgbz1bXTtmb3IobGV0IGU9aTtlPHM7KytlKXtjb25zdCB0PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5nZXQoZSk7aWYodCl7dGhpcy5fcmVxdWVzdHNCeUNodW5rLmRlbGV0ZShlKTtmb3IoY29uc3QgYSBvZiB0KXtjb25zdCB0PXRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQoYSk7dC5oYXMoZSkmJnQuZGVsZXRlKGUpO3Quc2l6ZT4wfHxvLnB1c2goYSl9fX1pZighdGhpcy5kaXNhYmxlQXV0b0ZldGNoJiYwPT09dGhpcy5fcmVxdWVzdHNCeUNodW5rLnNpemUpe2xldCBlO2lmKDE9PT10aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQpe2NvbnN0IHQ9dGhpcy5zdHJlYW0ubnVtQ2h1bmtzLTE7dGhpcy5zdHJlYW0uaGFzQ2h1bmsodCl8fChlPXQpfWVsc2UgZT10aGlzLnN0cmVhbS5uZXh0RW1wdHlDaHVuayhzKTtOdW1iZXIuaXNJbnRlZ2VyKGUpJiZ0aGlzLl9yZXF1ZXN0Q2h1bmtzKFtlXSl9Zm9yKGNvbnN0IGUgb2Ygbyl7Y29uc3QgdD10aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQoZSk7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKGUpO3QucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX1vbkVycm9yKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfWdldEJlZ2luQ2h1bmsoZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9Z2V0RW5kQ2h1bmsoZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9YWJvcnQoZSl7dGhpcy5hYm9ydGVkPSEwO3RoaXMucGRmTmV0d29ya1N0cmVhbSYmdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKGUpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LnZhbHVlcygpKXQucmVqZWN0KGUpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5TdHJpbmdTdHJlYW09dC5TdHJlYW09dC5OdWxsU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDUpLG49YSgyKTtjbGFzcyBTdHJlYW0gZXh0ZW5kcyByLkJhc2VTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEscil7c3VwZXIoKTt0aGlzLmJ5dGVzPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5P2U6bmV3IFVpbnQ4QXJyYXkoZSk7dGhpcy5zdGFydD10fHwwO3RoaXMucG9zPXRoaXMuc3RhcnQ7dGhpcy5lbmQ9dCthfHx0aGlzLmJ5dGVzLmxlbmd0aDt0aGlzLmRpY3Q9cn1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMuc3RhcnR9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMubGVuZ3RofWdldEJ5dGUoKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuZW5kPy0xOnRoaXMuYnl0ZXNbdGhpcy5wb3MrK119Z2V0Qnl0ZXMoZSl7Y29uc3QgdD10aGlzLmJ5dGVzLGE9dGhpcy5wb3Mscj10aGlzLmVuZDtpZighZSlyZXR1cm4gdC5zdWJhcnJheShhLHIpO2xldCBuPWErZTtuPnImJihuPXIpO3RoaXMucG9zPW47cmV0dXJuIHQuc3ViYXJyYXkoYSxuKX1nZXRCeXRlUmFuZ2UoZSx0KXtlPDAmJihlPTApO3Q+dGhpcy5lbmQmJih0PXRoaXMuZW5kKTtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfXJlc2V0KCl7dGhpcy5wb3M9dGhpcy5zdGFydH1tb3ZlU3RhcnQoKXt0aGlzLnN0YXJ0PXRoaXMucG9zfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7cmV0dXJuIG5ldyBTdHJlYW0odGhpcy5ieXRlcy5idWZmZXIsZSx0LGEpfX10LlN0cmVhbT1TdHJlYW07dC5TdHJpbmdTdHJlYW09Y2xhc3MgU3RyaW5nU3RyZWFtIGV4dGVuZHMgU3RyZWFte2NvbnN0cnVjdG9yKGUpe3N1cGVyKCgwLG4uc3RyaW5nVG9CeXRlcykoZSkpfX07dC5OdWxsU3RyZWFtPWNsYXNzIE51bGxTdHJlYW0gZXh0ZW5kcyBTdHJlYW17Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWludDhBcnJheSgwKSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBhZ2U9dC5QREZEb2N1bWVudD12b2lkIDA7dmFyIHI9YSgxMCksbj1hKDIpLGk9YSg0KSxzPWEoMyksbz1hKDQ5KSxjPWEoNSksbD1hKDY1KSxoPWEoNjcpLHU9YSg2OSksZD1hKDk4KSxmPWEoMTUpLGc9YSg4KSxwPWEoNzMpLG09YSg2MCksYj1hKDEzKSx5PWEoMTcpLHc9YSg3MiksUz1hKDYzKSx4PWEoNzQpLGs9YSg5OSk7Y29uc3QgQz1bMCwwLDYxMiw3OTJdO2NsYXNzIFBhZ2V7Y29uc3RydWN0b3Ioe3BkZk1hbmFnZXI6ZSx4cmVmOnQscGFnZUluZGV4OmEscGFnZURpY3Q6cixyZWY6bixnbG9iYWxJZEZhY3Rvcnk6aSxmb250Q2FjaGU6cyxidWlsdEluQ01hcENhY2hlOm8sc3RhbmRhcmRGb250RGF0YUNhY2hlOmMsZ2xvYmFsSW1hZ2VDYWNoZTpsLG5vbkJsZW5kTW9kZXNTZXQ6aCx4ZmFGYWN0b3J5OnV9KXt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnBhZ2VJbmRleD1hO3RoaXMucGFnZURpY3Q9cjt0aGlzLnhyZWY9dDt0aGlzLnJlZj1uO3RoaXMuZm9udENhY2hlPXM7dGhpcy5idWlsdEluQ01hcENhY2hlPW87dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9Yzt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9bDt0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9aDt0aGlzLmV2YWx1YXRvck9wdGlvbnM9ZS5ldmFsdWF0b3JPcHRpb25zO3RoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsO3RoaXMueGZhRmFjdG9yeT11O2NvbnN0IGQ9e29iajowfTt0aGlzLl9sb2NhbElkRmFjdG9yeT1jbGFzcyBleHRlbmRzIGl7c3RhdGljIGNyZWF0ZU9iaklkKCl7cmV0dXJuYHAke2F9XyR7KytkLm9ian1gfXN0YXRpYyBnZXRQYWdlT2JqSWQoKXtyZXR1cm5gcGFnZSR7bi50b1N0cmluZygpfWB9fX1fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShlLHQ9ITEpe2NvbnN0IGE9KDAsaS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0aGlzLnBhZ2VEaWN0LGtleTplLGdldEFycmF5OnQsc3RvcFdoZW5Gb3VuZDohMX0pO3JldHVybiBBcnJheS5pc0FycmF5KGEpPzEhPT1hLmxlbmd0aCYmYVswXWluc3RhbmNlb2Ygcy5EaWN0P3MuRGljdC5tZXJnZSh7eHJlZjp0aGlzLnhyZWYsZGljdEFycmF5OmF9KTphWzBdOmF9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5wYWdlRGljdC5nZXRBcnJheSgiQ29udGVudHMiKX1nZXQgcmVzb3VyY2VzKCl7Y29uc3QgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJSZXNvdXJjZXMiKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywicmVzb3VyY2VzIixlIGluc3RhbmNlb2Ygcy5EaWN0P2U6cy5EaWN0LmVtcHR5KX1fZ2V0Qm91bmRpbmdCb3goZSl7aWYodGhpcy54ZmFEYXRhKXJldHVybiB0aGlzLnhmYURhdGEuYmJveDtjb25zdCB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXtpZih0WzJdLXRbMF0hPTAmJnRbM10tdFsxXSE9MClyZXR1cm4gdDsoMCxuLndhcm4pKGBFbXB0eSAvJHtlfSBlbnRyeS5gKX1yZXR1cm4gbnVsbH1nZXQgbWVkaWFCb3goKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywibWVkaWFCb3giLHRoaXMuX2dldEJvdW5kaW5nQm94KCJNZWRpYUJveCIpfHxDKX1nZXQgY3JvcEJveCgpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjcm9wQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiQ3JvcEJveCIpfHx0aGlzLm1lZGlhQm94KX1nZXQgdXNlclVuaXQoKXtsZXQgZT10aGlzLnBhZ2VEaWN0LmdldCgiVXNlclVuaXQiKTsoIm51bWJlciIhPXR5cGVvZiBlfHxlPD0wKSYmKGU9MSk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInVzZXJVbml0IixlKX1nZXQgdmlldygpe2NvbnN0e2Nyb3BCb3g6ZSxtZWRpYUJveDp0fT10aGlzO2xldCBhO2lmKGU9PT10fHwoMCxuLmlzQXJyYXlFcXVhbCkoZSx0KSlhPXQ7ZWxzZXtjb25zdCByPW4uVXRpbC5pbnRlcnNlY3QoZSx0KTtyJiZyWzJdLXJbMF0hPTAmJnJbM10tclsxXSE9MD9hPXI6KDAsbi53YXJuKSgiRW1wdHkgL0Nyb3BCb3ggYW5kIC9NZWRpYUJveCBpbnRlcnNlY3Rpb24uIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZpZXciLGF8fHQpfWdldCByb3RhdGUoKXtsZXQgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJSb3RhdGUiKXx8MDtlJTkwIT0wP2U9MDplPj0zNjA/ZSU9MzYwOmU8MCYmKGU9KGUlMzYwKzM2MCklMzYwKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywicm90YXRlIixlKX1fb25TdWJTdHJlYW1FcnJvcihlLHQsYSl7aWYoIXRoaXMuZXZhbHVhdG9yT3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgdDtlLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpuLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yQ29udGVudFN1YlN0cmVhbX0pOygwLG4ud2FybikoYGdldENvbnRlbnRTdHJlYW0gLSBpZ25vcmluZyBzdWItc3RyZWFtICgke2F9KTogIiR7dH0iLmApfWdldENvbnRlbnRTdHJlYW0oZSl7cmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiY29udGVudCIpLnRoZW4oKHQ9PnQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/dDpBcnJheS5pc0FycmF5KHQpP25ldyB5LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbSh0LHRoaXMuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0aGlzLGUpKTpuZXcgZy5OdWxsU3RyZWFtKSl9Z2V0IHhmYURhdGEoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywieGZhRGF0YSIsdGhpcy54ZmFGYWN0b3J5P3tiYm94OnRoaXMueGZhRmFjdG9yeS5nZXRCb3VuZGluZ0JveCh0aGlzLnBhZ2VJbmRleCl9Om51bGwpfWFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsYSl7aWYodGhpcy54ZmFGYWN0b3J5KXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y29uc3Qgbj1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksaT10aGlzLnBhZ2VEaWN0LHM9dGhpcy5hbm5vdGF0aW9ucy5zbGljZSgpLG89YXdhaXQgci5Bbm5vdGF0aW9uRmFjdG9yeS5zYXZlTmV3QW5ub3RhdGlvbnMobix0LGEpO2Zvcihjb25zdHtyZWY6ZX1vZiBvLmFubm90YXRpb25zKXMucHVzaChlKTtjb25zdCBjPWkuZ2V0KCJBbm5vdHMiKTtpLnNldCgiQW5ub3RzIixzKTtjb25zdCBsPVtdO2xldCBoPW51bGw7dGhpcy54cmVmLmVuY3J5cHQmJihoPXRoaXMueHJlZi5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKSk7KDAsUy53cml0ZU9iamVjdCkodGhpcy5yZWYsaSxsLGgpO2MmJmkuc2V0KCJBbm5vdHMiLGMpO2NvbnN0IHU9by5kZXBlbmRlbmNpZXM7dS5wdXNoKHtyZWY6dGhpcy5yZWYsZGF0YTpsLmpvaW4oIiIpfSwuLi5vLmFubm90YXRpb25zKTtyZXR1cm4gdX1zYXZlKGUsdCxhKXtjb25zdCByPW5ldyBiLlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KTtyZXR1cm4gdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMudGhlbigoZnVuY3Rpb24oZSl7Y29uc3QgaT1bXTtmb3IoY29uc3QgcyBvZiBlKXMubXVzdEJlUHJpbnRlZChhKSYmaS5wdXNoKHMuc2F2ZShyLHQsYSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYHNhdmUgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKSk7cmV0dXJuIFByb21pc2UuYWxsKGkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcigoZT0+ISFlKSl9KSl9KSl9bG9hZFJlc291cmNlcyhlKXt0aGlzLnJlc291cmNlc1Byb21pc2V8fCh0aGlzLnJlc291cmNlc1Byb21pc2U9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJyZXNvdXJjZXMiKSk7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZS50aGVuKCgoKT0+bmV3IHAuT2JqZWN0TG9hZGVyKHRoaXMucmVzb3VyY2VzLGUsdGhpcy54cmVmKS5sb2FkKCkpKX1nZXRPcGVyYXRvckxpc3Qoe2hhbmRsZXI6ZSxzaW5rOnQsdGFzazphLGludGVudDpzLGNhY2hlS2V5Om8sYW5ub3RhdGlvblN0b3JhZ2U6Yz1udWxsfSl7Y29uc3QgbD10aGlzLmdldENvbnRlbnRTdHJlYW0oZSksaD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSksdT1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksZD10aGlzLnhmYUZhY3Rvcnk/bnVsbDooMCxpLmdldE5ld0Fubm90YXRpb25zTWFwKShjKTtsZXQgZj1Qcm9taXNlLnJlc29sdmUobnVsbCk7aWYoZCl7Y29uc3QgZT1kLmdldCh0aGlzLnBhZ2VJbmRleCk7ZSYmKGY9ci5Bbm5vdGF0aW9uRmFjdG9yeS5wcmludE5ld0Fubm90YXRpb25zKHUsYSxlKSl9Y29uc3QgZz1Qcm9taXNlLmFsbChbbCxoXSkudGhlbigoKFtyXSk9Pntjb25zdCBuPW5ldyBtLk9wZXJhdG9yTGlzdChzLHQpO2Uuc2VuZCgiU3RhcnRSZW5kZXJQYWdlIix7dHJhbnNwYXJlbmN5OnUuaGFzQmxlbmRNb2Rlcyh0aGlzLnJlc291cmNlcyx0aGlzLm5vbkJsZW5kTW9kZXNTZXQpLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxjYWNoZUtleTpvfSk7cmV0dXJuIHUuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06cix0YXNrOmEscmVzb3VyY2VzOnRoaXMucmVzb3VyY2VzLG9wZXJhdG9yTGlzdDpufSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX0pKTtyZXR1cm4gUHJvbWlzZS5hbGwoW2csdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMsZl0pLnRoZW4oKGZ1bmN0aW9uKFtlLHQscl0pe3ImJih0PXQuY29uY2F0KHIpKTtpZigwPT09dC5sZW5ndGh8fHMmbi5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0RJU0FCTEUpe2UuZmx1c2goITApO3JldHVybntsZW5ndGg6ZS50b3RhbExlbmd0aH19Y29uc3QgaT0hIShzJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUyksbz0hIShzJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5BTlkpLGw9ISEocyZuLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSksaD0hIShzJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCksZD1bXTtmb3IoY29uc3QgZSBvZiB0KShvfHxsJiZlLm11c3RCZVZpZXdlZChjKXx8aCYmZS5tdXN0QmVQcmludGVkKGMpKSYmZC5wdXNoKGUuZ2V0T3BlcmF0b3JMaXN0KHUsYSxzLGksYykuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGFubm90YXRpb24gZGF0YSBkdXJpbmcgIiR7YS5uYW1lfSIgdGFzazogIiR7ZX0iLmApO3JldHVybntvcExpc3Q6bnVsbCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fSkpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZCkudGhlbigoZnVuY3Rpb24odCl7bGV0IGE9ITEscj0hMTtmb3IoY29uc3R7b3BMaXN0Om4sc2VwYXJhdGVGb3JtOmksc2VwYXJhdGVDYW52YXM6c31vZiB0KXtlLmFkZE9wTGlzdChuKTtpJiYoYT1pKTtzJiYocj1zKX1lLmZsdXNoKCEwLHtmb3JtOmEsY2FudmFzOnJ9KTtyZXR1cm57bGVuZ3RoOmUudG90YWxMZW5ndGh9fSkpfSkpfWV4dHJhY3RUZXh0Q29udGVudCh7aGFuZGxlcjplLHRhc2s6dCxpbmNsdWRlTWFya2VkQ29udGVudDphLHNpbms6cixjb21iaW5lVGV4dEl0ZW1zOm59KXtjb25zdCBpPXRoaXMuZ2V0Q29udGVudFN0cmVhbShlKSxzPXRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdKTtyZXR1cm4gUHJvbWlzZS5hbGwoW2ksc10pLnRoZW4oKChbaV0pPT5uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSkuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTppLHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMsaW5jbHVkZU1hcmtlZENvbnRlbnQ6YSxjb21iaW5lVGV4dEl0ZW1zOm4sc2luazpyLHZpZXdCb3g6dGhpcy52aWV3fSkpKX1hc3luYyBnZXRTdHJ1Y3RUcmVlKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygic3RydWN0VHJlZVJvb3QiKTtpZighZSlyZXR1cm4gbnVsbDtyZXR1cm4oYXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbZV0pKS5zZXJpYWxpemFibGV9X3BhcnNlU3RydWN0VHJlZShlKXtjb25zdCB0PW5ldyB3LlN0cnVjdFRyZWVQYWdlKGUsdGhpcy5wYWdlRGljdCk7dC5wYXJzZSgpO3JldHVybiB0fWFzeW5jIGdldEFubm90YXRpb25zRGF0YShlLHQsYSl7Y29uc3Qgcj1hd2FpdCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucztpZigwPT09ci5sZW5ndGgpcmV0dXJuW107Y29uc3QgaT1bXSxzPVtdO2xldCBvO2NvbnN0IGM9ISEoYSZuLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxsPSEhKGEmbi5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGg9ISEoYSZuLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpO2Zvcihjb25zdCBhIG9mIHIpe2NvbnN0IHI9Y3x8bCYmYS52aWV3YWJsZTsocnx8aCYmYS5wcmludGFibGUpJiZzLnB1c2goYS5kYXRhKTtpZihhLmhhc1RleHRDb250ZW50JiZyKXtvfHwobz1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSkpO2kucHVzaChhLmV4dHJhY3RUZXh0Q29udGVudChvLHQsdGhpcy52aWV3KS5jYXRjaCgoZnVuY3Rpb24oZSl7KDAsbi53YXJuKShgZ2V0QW5ub3RhdGlvbnNEYXRhIC0gaWdub3JpbmcgdGV4dENvbnRlbnQgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKX0pKSl9fWF3YWl0IFByb21pc2UuYWxsKGkpO3JldHVybiBzfWdldCBhbm5vdGF0aW9ucygpe2NvbnN0IGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQW5ub3RzIik7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImFubm90YXRpb25zIixBcnJheS5pc0FycmF5KGUpP2U6W10pfWdldCBfcGFyc2VkQW5ub3RhdGlvbnMoKXtjb25zdCBlPXRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiYW5ub3RhdGlvbnMiKS50aGVuKCgoKT0+e2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpcy5hbm5vdGF0aW9ucyllLnB1c2goci5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLHQsdGhpcy5wZGZNYW5hZ2VyLHRoaXMuX2xvY2FsSWRGYWN0b3J5LCExKS5jYXRjaCgoZnVuY3Rpb24oZSl7KDAsbi53YXJuKShgX3BhcnNlZEFubm90YXRpb25zOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO3JldHVybiBQcm9taXNlLmFsbChlKS50aGVuKChmdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGU7Y29uc3QgdD1bXTtsZXQgYTtmb3IoY29uc3QgbiBvZiBlKWlmKG4paWYobiBpbnN0YW5jZW9mIHIuUG9wdXBBbm5vdGF0aW9uKXthfHwoYT1bXSk7YS5wdXNoKG4pfWVsc2UgdC5wdXNoKG4pO2EmJnQucHVzaCguLi5hKTtyZXR1cm4gdH0pKX0pKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIixlKX1nZXQganNBY3Rpb25zKCl7Y29uc3QgZT0oMCxpLmNvbGxlY3RBY3Rpb25zKSh0aGlzLnhyZWYsdGhpcy5wYWdlRGljdCxuLlBhZ2VBY3Rpb25FdmVudFR5cGUpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLGUpfX10LlBhZ2U9UGFnZTtjb25zdCB2PW5ldyBVaW50OEFycmF5KFszNyw4MCw2OCw3MCw0NV0pLEY9bmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsOTcsMTE0LDExNiwxMjAsMTE0LDEwMSwxMDJdKSxPPW5ldyBVaW50OEFycmF5KFsxMDEsMTEwLDEwMCwxMTEsOTgsMTA2XSk7ZnVuY3Rpb24gZmluZChlLHQsYT0xMDI0LHI9ITEpe2NvbnN0IG49dC5sZW5ndGgsaT1lLnBlZWtCeXRlcyhhKSxzPWkubGVuZ3RoLW47aWYoczw9MClyZXR1cm4hMTtpZihyKXtjb25zdCBhPW4tMTtsZXQgcj1pLmxlbmd0aC0xO2Zvcig7cj49YTspe2xldCBzPTA7Zm9yKDtzPG4mJmlbci1zXT09PXRbYS1zXTspcysrO2lmKHM+PW4pe2UucG9zKz1yLWE7cmV0dXJuITB9ci0tfX1lbHNle2xldCBhPTA7Zm9yKDthPD1zOyl7bGV0IHI9MDtmb3IoO3I8biYmaVthK3JdPT09dFtyXTspcisrO2lmKHI+PW4pe2UucG9zKz1hO3JldHVybiEwfWErK319cmV0dXJuITF9dC5QREZEb2N1bWVudD1jbGFzcyBQREZEb2N1bWVudHtjb25zdHJ1Y3RvcihlLHQpe2lmKHQubGVuZ3RoPD0wKXRocm93IG5ldyBuLkludmFsaWRQREZFeGNlcHRpb24oIlRoZSBQREYgZmlsZSBpcyBlbXB0eSwgaS5lLiBpdHMgc2l6ZSBpcyB6ZXJvIGJ5dGVzLiIpO3RoaXMucGRmTWFuYWdlcj1lO3RoaXMuc3RyZWFtPXQ7dGhpcy54cmVmPW5ldyBrLlhSZWYodCxlKTt0aGlzLl9wYWdlUHJvbWlzZXM9bmV3IE1hcDt0aGlzLl92ZXJzaW9uPW51bGw7Y29uc3QgYT17Zm9udDowfTt0aGlzLl9nbG9iYWxJZEZhY3Rvcnk9Y2xhc3N7c3RhdGljIGdldERvY0lkKCl7cmV0dXJuYGdfJHtlLmRvY0lkfWB9c3RhdGljIGNyZWF0ZUZvbnRJZCgpe3JldHVybiJmIisgKythLmZvbnR9c3RhdGljIGNyZWF0ZU9iaklkKCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgY3JlYXRlT2JqSWRgIGNhbGxlZC4iKX1zdGF0aWMgZ2V0UGFnZU9iaklkKCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGFnZU9iaklkYCBjYWxsZWQuIil9fX1wYXJzZShlKXt0aGlzLnhyZWYucGFyc2UoZSk7dGhpcy5jYXRhbG9nPW5ldyBoLkNhdGFsb2codGhpcy5wZGZNYW5hZ2VyLHRoaXMueHJlZil9Z2V0IGxpbmVhcml6YXRpb24oKXtsZXQgZT1udWxsO3RyeXtlPWYuTGluZWFyaXphdGlvbi5jcmVhdGUodGhpcy5zdHJlYW0pfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKShlKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywibGluZWFyaXphdGlvbiIsZSl9Z2V0IHN0YXJ0WFJlZigpe2NvbnN0IGU9dGhpcy5zdHJlYW07bGV0IHQ9MDtpZih0aGlzLmxpbmVhcml6YXRpb24pe2UucmVzZXQoKTtmaW5kKGUsTykmJih0PWUucG9zKzYtZS5zdGFydCl9ZWxzZXtjb25zdCBhPTEwMjQscj1GLmxlbmd0aDtsZXQgbj0hMSxzPWUuZW5kO2Zvcig7IW4mJnM+MDspe3MtPWEtcjtzPDAmJihzPTApO2UucG9zPXM7bj1maW5kKGUsRixhLCEwKX1pZihuKXtlLnNraXAoOSk7bGV0IGE7ZG97YT1lLmdldEJ5dGUoKX13aGlsZSgoMCxpLmlzV2hpdGVTcGFjZSkoYSkpO2xldCByPSIiO2Zvcig7YT49MzImJmE8PTU3Oyl7cis9U3RyaW5nLmZyb21DaGFyQ29kZShhKTthPWUuZ2V0Qnl0ZSgpfXQ9cGFyc2VJbnQociwxMCk7aXNOYU4odCkmJih0PTApfX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywic3RhcnRYUmVmIix0KX1jaGVja0hlYWRlcigpe2NvbnN0IGU9dGhpcy5zdHJlYW07ZS5yZXNldCgpO2lmKCFmaW5kKGUsdikpcmV0dXJuO2UubW92ZVN0YXJ0KCk7ZS5za2lwKHYubGVuZ3RoKTtsZXQgdCxhPSIiO2Zvcig7KHQ9ZS5nZXRCeXRlKCkpPjMyJiZhLmxlbmd0aDw3OylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2kuUERGX1ZFUlNJT05fUkVHRVhQLnRlc3QoYSk/dGhpcy5fdmVyc2lvbj1hOigwLG4ud2FybikoYEludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAke2F9YCl9cGFyc2VTdGFydFhSZWYoKXt0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKX1nZXQgbnVtUGFnZXMoKXtsZXQgZT0wO2U9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXM7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX1faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlLHQ9MCl7cmV0dXJuISFBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChlPT57aWYoISgoZT10aGlzLnhyZWYuZmV0Y2hJZlJlZihlKSlpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuITE7aWYoZS5oYXMoIktpZHMiKSl7aWYoKyt0PjEwKXsoMCxuLndhcm4pKCJfaGFzT25seURvY3VtZW50U2lnbmF0dXJlczogbWF4aW11bSByZWN1cnNpb24gZGVwdGggcmVhY2hlZCIpO3JldHVybiExfXJldHVybiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGUuZ2V0KCJLaWRzIiksdCl9Y29uc3QgYT0oMCxzLmlzTmFtZSkoZS5nZXQoIkZUIiksIlNpZyIpLHI9ZS5nZXQoIlJlY3QiKSxpPUFycmF5LmlzQXJyYXkocikmJnIuZXZlcnkoKGU9PjA9PT1lKSk7cmV0dXJuIGEmJml9KSl9Z2V0IF94ZmFTdHJlYW1zKCl7Y29uc3QgZT10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmdldCgiWEZBIiksYT17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpe2FbInhkcDp4ZHAiXT10O3JldHVybiBhfWlmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7ZSs9Mil7bGV0IG47bj0wPT09ZT8ieGRwOnhkcCI6ZT09PXItMj8iL3hkcDp4ZHAiOnRbZV07aWYoIWEuaGFzT3duUHJvcGVydHkobikpY29udGludWU7Y29uc3QgaT10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2UrMV0pO2kgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFpLmlzRW1wdHkmJihhW25dPWkpfXJldHVybiBhfWdldCB4ZmFEYXRhc2V0cygpe2NvbnN0IGU9dGhpcy5feGZhU3RyZWFtcztpZighZSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywieGZhRGF0YXNldHMiLG51bGwpO2Zvcihjb25zdCB0IG9mWyJkYXRhc2V0cyIsInhkcDp4ZHAiXSl7Y29uc3QgYT1lW3RdO2lmKGEpdHJ5e2NvbnN0IGU9e1t0XTooMCxuLnN0cmluZ1RvVVRGOFN0cmluZykoYS5nZXRTdHJpbmcoKSl9O3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbmV3IGQuRGF0YXNldFJlYWRlcihlKSl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7YnJlYWt9fXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCl9Z2V0IHhmYURhdGEoKXtjb25zdCBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFthLHJdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYocil0cnl7dFthXT0oMCxuLnN0cmluZ1RvVVRGOFN0cmluZykoci5nZXRTdHJpbmcoKSl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7cmV0dXJuIG51bGx9cmV0dXJuIHR9Z2V0IHhmYUZhY3RvcnkoKXtsZXQgZTt0aGlzLnBkZk1hbmFnZXIuZW5hYmxlWGZhJiZ0aGlzLmNhdGFsb2cubmVlZHNSZW5kZXJpbmcmJnRoaXMuZm9ybUluZm8uaGFzWGZhJiYhdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSYmKGU9dGhpcy54ZmFEYXRhKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywieGZhRmFjdG9yeSIsZT9uZXcgeC5YRkFGYWN0b3J5KGUpOm51bGwpfWdldCBpc1B1cmVYZmEoKXtyZXR1cm4hIXRoaXMueGZhRmFjdG9yeSYmdGhpcy54ZmFGYWN0b3J5LmlzVmFsaWQoKX1nZXQgaHRtbEZvclhmYSgpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldFBhZ2VzKCk6bnVsbH1hc3luYyBsb2FkWGZhSW1hZ2VzKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygieGZhSW1hZ2VzIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5nZXRLZXlzKCksYT1uZXcgcC5PYmplY3RMb2FkZXIoZSx0LHRoaXMueHJlZik7YXdhaXQgYS5sb2FkKCk7Y29uc3Qgcj1uZXcgTWFwO2Zvcihjb25zdCBhIG9mIHQpe2NvbnN0IHQ9ZS5nZXQoYSk7dCBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmci5zZXQoYSx0LmdldEJ5dGVzKCkpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMocil9YXN5bmMgbG9hZFhmYUZvbnRzKGUsdCl7Y29uc3QgYT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKTtpZighYSlyZXR1cm47Y29uc3Qgcj1hd2FpdCBhLmdldEFzeW5jKCJEUiIpO2lmKCEociBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IGM9bmV3IHAuT2JqZWN0TG9hZGVyKHIsWyJGb250Il0sdGhpcy54cmVmKTthd2FpdCBjLmxvYWQoKTtjb25zdCBsPXIuZ2V0KCJGb250Iik7aWYoIShsIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgaD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMpO2gudXNlU3lzdGVtRm9udHM9ITE7Y29uc3QgdT1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmh9KSxkPW5ldyBtLk9wZXJhdG9yTGlzdCxmPVtdLGc9e2dldCBmb250KCl7cmV0dXJuIGYuYXQoLTEpfSxzZXQgZm9udChlKXtmLnB1c2goZSl9LGNsb25lKCl7cmV0dXJuIHRoaXN9fSx5PW5ldyBNYXA7bC5mb3JFYWNoKCgoZSx0KT0+e3kuc2V0KGUsdCl9KSk7Y29uc3Qgdz1bXTtmb3IoY29uc3RbZSxhXW9mIHkpe2NvbnN0IG89YS5nZXQoIkZvbnREZXNjcmlwdG9yIik7aWYoIShvIGluc3RhbmNlb2Ygcy5EaWN0KSljb250aW51ZTtsZXQgYz1vLmdldCgiRm9udEZhbWlseSIpO2M9Yy5yZXBsYWNlKC9bIF0rKFxkKS9nLCIkMSIpO2NvbnN0IGw9e2ZvbnRGYW1pbHk6Yyxmb250V2VpZ2h0Om8uZ2V0KCJGb250V2VpZ2h0IiksaXRhbGljQW5nbGU6LW8uZ2V0KCJJdGFsaWNBbmdsZSIpfTsoMCxpLnZhbGlkYXRlQ1NTRm9udCkobCkmJncucHVzaCh1LmhhbmRsZVNldEZvbnQocixbcy5OYW1lLmdldChlKSwxXSxudWxsLGQsdCxnLG51bGwsbCkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYGxvYWRYZmFGb250czogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKX1hd2FpdCBQcm9taXNlLmFsbCh3KTtjb25zdCBTPXRoaXMueGZhRmFjdG9yeS5zZXRGb250cyhmKTtpZighUylyZXR1cm47aC5pZ25vcmVFcnJvcnM9ITA7dy5sZW5ndGg9MDtmLmxlbmd0aD0wO2NvbnN0IHg9bmV3IFNldDtmb3IoY29uc3QgZSBvZiBTKSgwLG8uZ2V0WGZhRm9udE5hbWUpKGAke2V9LVJlZ3VsYXJgKXx8eC5hZGQoZSk7eC5zaXplJiZTLnB1c2goIlBkZkpTLUZhbGxiYWNrIik7Zm9yKGNvbnN0IGUgb2YgUylpZigheC5oYXMoZSkpZm9yKGNvbnN0IGEgb2Zbe25hbWU6IlJlZ3VsYXIiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJCb2xkIixmb250V2VpZ2h0OjcwMCxpdGFsaWNBbmdsZTowfSx7bmFtZToiSXRhbGljIixmb250V2VpZ2h0OjQwMCxpdGFsaWNBbmdsZToxMn0se25hbWU6IkJvbGRJdGFsaWMiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjEyfV0pe2NvbnN0IGk9YCR7ZX0tJHthLm5hbWV9YCxjPSgwLG8uZ2V0WGZhRm9udERpY3QpKGkpO3cucHVzaCh1LmhhbmRsZVNldEZvbnQocixbcy5OYW1lLmdldChpKSwxXSxudWxsLGQsdCxnLGMse2ZvbnRGYW1pbHk6ZSxmb250V2VpZ2h0OmEuZm9udFdlaWdodCxpdGFsaWNBbmdsZTphLml0YWxpY0FuZ2xlfSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYGxvYWRYZmFGb250czogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKX1hd2FpdCBQcm9taXNlLmFsbCh3KTt0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMoZix4KX1hc3luYyBzZXJpYWxpemVYZmFEYXRhKGUpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEoZSk6bnVsbH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbnx8dGhpcy5fdmVyc2lvbn1nZXQgZm9ybUluZm8oKXtjb25zdCBlPXtoYXNGaWVsZHM6ITEsaGFzQWNyb0Zvcm06ITEsaGFzWGZhOiExLGhhc1NpZ25hdHVyZXM6ITF9LHQ9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtO2lmKCF0KXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSk7dHJ5e2NvbnN0IGE9dC5nZXQoIkZpZWxkcyIpLHI9QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtlLmhhc0ZpZWxkcz1yO2NvbnN0IG49dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjB8fG4gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFuLmlzRW1wdHk7Y29uc3QgaT0hISgxJnQuZ2V0KCJTaWdGbGFncyIpKSxzPWkmJnRoaXMuX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoYSk7ZS5oYXNBY3JvRm9ybT1yJiYhcztlLmhhc1NpZ25hdHVyZXM9aX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoYENhbm5vdCBmZXRjaCBmb3JtIGluZm9ybWF0aW9uOiAiJHtlfSIuYCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImZvcm1JbmZvIixlKX1nZXQgZG9jdW1lbnRJbmZvKCl7Y29uc3QgZT17UERGRm9ybWF0VmVyc2lvbjp0aGlzLnZlcnNpb24sTGFuZ3VhZ2U6dGhpcy5jYXRhbG9nLmxhbmcsRW5jcnlwdEZpbHRlck5hbWU6dGhpcy54cmVmLmVuY3J5cHQ/dGhpcy54cmVmLmVuY3J5cHQuZmlsdGVyTmFtZTpudWxsLElzTGluZWFyaXplZDohIXRoaXMubGluZWFyaXphdGlvbixJc0Fjcm9Gb3JtUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtLElzWEZBUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1hmYSxJc0NvbGxlY3Rpb25QcmVzZW50OiEhdGhpcy5jYXRhbG9nLmNvbGxlY3Rpb24sSXNTaWduYXR1cmVzUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1NpZ25hdHVyZXN9O2xldCB0O3RyeXt0PXRoaXMueHJlZi50cmFpbGVyLmdldCgiSW5mbyIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiVGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX1pZighKHQgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLGUpO2Zvcihjb25zdCBhIG9mIHQuZ2V0S2V5cygpKXtjb25zdCByPXQuZ2V0KGEpO3N3aXRjaChhKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2Ygcil7ZVthXT0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShyKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKHIgaW5zdGFuY2VvZiBzLk5hbWUpe2VbYV09cjtjb250aW51ZX1icmVhaztkZWZhdWx0OmxldCB0O3N3aXRjaCh0eXBlb2Ygcil7Y2FzZSJzdHJpbmciOnQ9KDAsbi5zdHJpbmdUb1BERlN0cmluZykocik7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6dD1yO2JyZWFrO2RlZmF1bHQ6ciBpbnN0YW5jZW9mIHMuTmFtZSYmKHQ9cil9aWYodm9pZCAwPT09dCl7KDAsbi53YXJuKShgQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJHthfSIsIGluIEluZm86ICR7cn0uYCk7Y29udGludWV9ZS5DdXN0b218fChlLkN1c3RvbT1PYmplY3QuY3JlYXRlKG51bGwpKTtlLkN1c3RvbVthXT10O2NvbnRpbnVlfSgwLG4ud2FybikoYEJhZCB2YWx1ZSwgZm9yIGtleSAiJHthfSIsIGluIEluZm86ICR7cn0uYCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRvY3VtZW50SW5mbyIsZSl9Z2V0IGZpbmdlcnByaW50cygpe2Z1bmN0aW9uIHZhbGlkYXRlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gaGV4U3RyaW5nKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1hLnRvU3RyaW5nKDE2KTt0LnB1c2goZS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfWNvbnN0IGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJRCIpO2xldCB0LGE7aWYoQXJyYXkuaXNBcnJheShlKSYmdmFsaWRhdGUoZVswXSkpe3Q9KDAsbi5zdHJpbmdUb0J5dGVzKShlWzBdKTtlWzFdIT09ZVswXSYmdmFsaWRhdGUoZVsxXSkmJihhPSgwLG4uc3RyaW5nVG9CeXRlcykoZVsxXSkpfWVsc2UgdD0oMCxsLmNhbGN1bGF0ZU1ENSkodGhpcy5zdHJlYW0uZ2V0Qnl0ZVJhbmdlKDAsMTAyNCksMCwxMDI0KTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZmluZ2VycHJpbnRzIixbaGV4U3RyaW5nKHQpLGE/aGV4U3RyaW5nKGEpOm51bGxdKX1hc3luYyBfZ2V0TGluZWFyaXphdGlvblBhZ2UoZSl7Y29uc3R7Y2F0YWxvZzp0LGxpbmVhcml6YXRpb246YSx4cmVmOnJ9PXRoaXMsaT1zLlJlZi5nZXQoYS5vYmplY3ROdW1iZXJGaXJzdCwwKTt0cnl7Y29uc3QgZT1hd2FpdCByLmZldGNoQXN5bmMoaSk7aWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7bGV0IGE9ZS5nZXRSYXcoIlR5cGUiKTthIGluc3RhbmNlb2Ygcy5SZWYmJihhPWF3YWl0IHIuZmV0Y2hBc3luYyhhKSk7aWYoKDAscy5pc05hbWUpKGEsIlBhZ2UiKXx8IWUuaGFzKCJUeXBlIikmJiFlLmhhcygiS2lkcyIpKXt0LnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoaSl8fHQucGFnZUtpZHNDb3VudENhY2hlLnB1dChpLDEpO3QucGFnZUluZGV4Q2FjaGUuaGFzKGkpfHx0LnBhZ2VJbmRleENhY2hlLnB1dChpLDApO3JldHVybltlLGldfX10aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVGhlIExpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2Vzbid0IHBvaW50IHRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LiIpfWNhdGNoKGEpeygwLG4ud2FybikoYF9nZXRMaW5lYXJpemF0aW9uUGFnZTogIiR7YS5tZXNzYWdlfSIuYCk7cmV0dXJuIHQuZ2V0UGFnZURpY3QoZSl9fWdldFBhZ2UoZSl7Y29uc3QgdD10aGlzLl9wYWdlUHJvbWlzZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3R7Y2F0YWxvZzphLGxpbmVhcml6YXRpb246cix4ZmFGYWN0b3J5Om59PXRoaXM7bGV0IGk7aT1uP1Byb21pc2UucmVzb2x2ZShbcy5EaWN0LmVtcHR5LG51bGxdKTpyJiZyLnBhZ2VGaXJzdD09PWU/dGhpcy5fZ2V0TGluZWFyaXphdGlvblBhZ2UoZSk6YS5nZXRQYWdlRGljdChlKTtpPWkudGhlbigoKFt0LHJdKT0+bmV3IFBhZ2Uoe3BkZk1hbmFnZXI6dGhpcy5wZGZNYW5hZ2VyLHhyZWY6dGhpcy54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OnQscmVmOnIsZ2xvYmFsSWRGYWN0b3J5OnRoaXMuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6YS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTphLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmEuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6YS5nbG9iYWxJbWFnZUNhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6YS5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6bn0pKSk7dGhpcy5fcGFnZVByb21pc2VzLnNldChlLGkpO3JldHVybiBpfWFzeW5jIGNoZWNrRmlyc3RQYWdlKGU9ITEpe2lmKCFlKXRyeXthd2FpdCB0aGlzLmdldFBhZ2UoMCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uKXt0aGlzLl9wYWdlUHJvbWlzZXMuZGVsZXRlKDApO2F3YWl0IHRoaXMuY2xlYW51cCgpO3Rocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbn19fWFzeW5jIGNoZWNrTGFzdFBhZ2UoZT0hMSl7Y29uc3R7Y2F0YWxvZzp0LHBkZk1hbmFnZXI6YX09dGhpczt0LnNldEFjdHVhbE51bVBhZ2VzKCk7bGV0IHI7dHJ5e2F3YWl0IFByb21pc2UuYWxsKFthLmVuc3VyZURvYygieGZhRmFjdG9yeSIpLGEuZW5zdXJlRG9jKCJsaW5lYXJpemF0aW9uIiksYS5lbnN1cmVDYXRhbG9nKCJudW1QYWdlcyIpXSk7aWYodGhpcy54ZmFGYWN0b3J5KXJldHVybjtyPXRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6dC5udW1QYWdlcztpZighTnVtYmVyLmlzSW50ZWdlcihyKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpcyBub3QgYW4gaW50ZWdlci4iKTtpZihyPD0xKXJldHVybjthd2FpdCB0aGlzLmdldFBhZ2Uoci0xKX1jYXRjaChzKXt0aGlzLl9wYWdlUHJvbWlzZXMuZGVsZXRlKHItMSk7YXdhaXQgdGhpcy5jbGVhbnVwKCk7aWYocyBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uJiYhZSl0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247KDAsbi53YXJuKShgY2hlY2tMYXN0UGFnZSAtIGludmFsaWQgL1BhZ2VzIHRyZWUgL0NvdW50OiAke3J9LmApO2xldCBvO3RyeXtvPWF3YWl0IHQuZ2V0QWxsUGFnZURpY3RzKGUpfWNhdGNoKGEpe2lmKGEgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbiYmIWUpdGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9uO3Quc2V0QWN0dWFsTnVtUGFnZXMoMSk7cmV0dXJufWZvcihjb25zdFtlLFtyLG5dXW9mIG8pe2xldCBpO2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7aT1Qcm9taXNlLnJlamVjdChyKTtpLmNhdGNoKCgoKT0+e30pKX1lbHNlIGk9UHJvbWlzZS5yZXNvbHZlKG5ldyBQYWdlKHtwZGZNYW5hZ2VyOmEseHJlZjp0aGlzLnhyZWYscGFnZUluZGV4OmUscGFnZURpY3Q6cixyZWY6bixnbG9iYWxJZEZhY3Rvcnk6dGhpcy5fZ2xvYmFsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0Lmdsb2JhbEltYWdlQ2FjaGUsbm9uQmxlbmRNb2Rlc1NldDp0Lm5vbkJsZW5kTW9kZXNTZXQseGZhRmFjdG9yeTpudWxsfSkpO3RoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxpKX10LnNldEFjdHVhbE51bVBhZ2VzKG8uc2l6ZSl9fWZvbnRGYWxsYmFjayhlLHQpe3JldHVybiB0aGlzLmNhdGFsb2cuZm9udEZhbGxiYWNrKGUsdCl9YXN5bmMgY2xlYW51cChlPSExKXtyZXR1cm4gdGhpcy5jYXRhbG9nP3RoaXMuY2F0YWxvZy5jbGVhbnVwKGUpOigwLHUuY2xlYXJHbG9iYWxDYWNoZXMpKCl9X2NvbGxlY3RGaWVsZE9iamVjdHMoZSx0LGEpe2NvbnN0IGk9dGhpcy54cmVmLmZldGNoSWZSZWYodCk7aWYoaS5oYXMoIlQiKSl7Y29uc3QgdD0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShpLmdldCgiVCIpKTtlPSIiPT09ZT90OmAke2V9LiR7dH1gfWEuaGFzKGUpfHxhLnNldChlLFtdKTthLmdldChlKS5wdXNoKHIuQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlKHRoaXMueHJlZix0LHRoaXMucGRmTWFuYWdlcix0aGlzLl9sb2NhbElkRmFjdG9yeSwhMCkudGhlbigoZT0+ZSYmZS5nZXRGaWVsZE9iamVjdCgpKSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLG4ud2FybikoYF9jb2xsZWN0RmllbGRPYmplY3RzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO2lmKGkuaGFzKCJLaWRzIikpe2NvbnN0IHQ9aS5nZXQoIktpZHMiKTtmb3IoY29uc3QgciBvZiB0KXRoaXMuX2NvbGxlY3RGaWVsZE9iamVjdHMoZSxyLGEpfX1nZXQgZmllbGRPYmplY3RzKCl7aWYoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJmaWVsZE9iamVjdHMiLFByb21pc2UucmVzb2x2ZShudWxsKSk7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiB0aGlzLmNhdGFsb2cuYWNyb0Zvcm0uZ2V0KCJGaWVsZHMiKSl0aGlzLl9jb2xsZWN0RmllbGRPYmplY3RzKCIiLGUsdCk7Y29uc3QgYT1bXTtmb3IoY29uc3RbcixuXW9mIHQpYS5wdXNoKFByb21pc2UuYWxsKG4pLnRoZW4oKHQ9PnsodD10LmZpbHRlcigoZT0+ISFlKSkpLmxlbmd0aD4wJiYoZVtyXT10KX0pKSk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5hbGwoYSkudGhlbigoKCk9PmUpKSl9Z2V0IGhhc0pTQWN0aW9ucygpe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiX3BhcnNlSGFzSlNBY3Rpb25zIik7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImhhc0pTQWN0aW9ucyIsZSl9YXN5bmMgX3BhcnNlSGFzSlNBY3Rpb25zKCl7Y29uc3RbZSx0XT1hd2FpdCBQcm9taXNlLmFsbChbdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImpzQWN0aW9ucyIpLHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpXSk7cmV0dXJuISFlfHwhIXQmJk9iamVjdC52YWx1ZXModCkuc29tZSgoZT0+ZS5zb21lKChlPT5udWxsIT09ZS5hY3Rpb25zKSkpKX1nZXQgY2FsY3VsYXRpb25PcmRlcklkcygpe2NvbnN0IGU9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtO2lmKCFlfHwhZS5oYXMoIkNPIikpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpO2NvbnN0IHQ9ZS5nZXQoIkNPIik7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk7Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiB0KWUgaW5zdGFuY2VvZiBzLlJlZiYmYS5wdXNoKGUudG9TdHJpbmcoKSk7cmV0dXJuIDA9PT1hLmxlbmd0aD8oMCxuLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk6KDAsbi5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLGEpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Qb3B1cEFubm90YXRpb249dC5NYXJrdXBBbm5vdGF0aW9uPXQuQW5ub3RhdGlvbkZhY3Rvcnk9dC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGU9dC5Bbm5vdGF0aW9uPXZvaWQgMDt0LmdldFF1YWRQb2ludHM9Z2V0UXVhZFBvaW50czt2YXIgcj1hKDIpLG49YSg0KSxpPWEoMTEpLHM9YSgzKSxvPWEoNjMpLGM9YSg1KSxsPWEoNTgpLGg9YSg2NyksdT1hKDEyKSxkPWEoNzApLGY9YSg3MyksZz1hKDYwKSxwPWEoOCksbT1hKDc0KTt0LkFubm90YXRpb25GYWN0b3J5PWNsYXNzIEFubm90YXRpb25GYWN0b3J5e3N0YXRpYyBjcmVhdGUoZSx0LGEscixuKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxhLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxhLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksYS5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksbj90aGlzLl9nZXRQYWdlSW5kZXgoZSx0LGEpOi0xXSkudGhlbigoKFtpLHMsbyxjLGxdKT0+YS5lbnN1cmUodGhpcywiX2NyZWF0ZSIsW2UsdCxhLHIsaSxvLGMsbixsXSkpKX1zdGF0aWMgX2NyZWF0ZShlLHQsYSxpLG8sYz1udWxsLGwsaCx1PS0xKXtjb25zdCBkPWUuZmV0Y2hJZlJlZih0KTtpZighKGQgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCBmPXQgaW5zdGFuY2VvZiBzLlJlZj90LnRvU3RyaW5nKCk6YGFubm90XyR7aS5jcmVhdGVPYmpJZCgpfWA7bGV0IGc9ZC5nZXQoIlN1YnR5cGUiKTtnPWcgaW5zdGFuY2VvZiBzLk5hbWU/Zy5uYW1lOm51bGw7Y29uc3QgcD17eHJlZjplLHJlZjp0LGRpY3Q6ZCxzdWJ0eXBlOmcsaWQ6ZixwZGZNYW5hZ2VyOmEsYWNyb0Zvcm06byBpbnN0YW5jZW9mIHMuRGljdD9vOnMuRGljdC5lbXB0eSxhdHRhY2htZW50czpjLHhmYURhdGFzZXRzOmwsY29sbGVjdEZpZWxkczpoLHBhZ2VJbmRleDp1fTtzd2l0Y2goZyl7Y2FzZSJMaW5rIjpyZXR1cm4gbmV3IExpbmtBbm5vdGF0aW9uKHApO2Nhc2UiVGV4dCI6cmV0dXJuIG5ldyBUZXh0QW5ub3RhdGlvbihwKTtjYXNlIldpZGdldCI6bGV0IGU9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpkLGtleToiRlQifSk7ZT1lIGluc3RhbmNlb2Ygcy5OYW1lP2UubmFtZTpudWxsO3N3aXRjaChlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IFRleHRXaWRnZXRBbm5vdGF0aW9uKHApO2Nhc2UiQnRuIjpyZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24ocCk7Y2FzZSJDaCI6cmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKHApO2Nhc2UiU2lnIjpyZXR1cm4gbmV3IFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24ocCl9KDAsci53YXJuKShgVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSAiJHtlfSIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGZpZWxkIHR5cGUuYCk7cmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uKHApO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgUG9wdXBBbm5vdGF0aW9uKHApO2Nhc2UiRnJlZVRleHQiOnJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uKHApO2Nhc2UiTGluZSI6cmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbihwKTtjYXNlIlNxdWFyZSI6cmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uKHApO2Nhc2UiQ2lyY2xlIjpyZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb24ocCk7Y2FzZSJQb2x5TGluZSI6cmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb24ocCk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uKHApO2Nhc2UiQ2FyZXQiOnJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uKHApO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IElua0Fubm90YXRpb24ocCk7Y2FzZSJIaWdobGlnaHQiOnJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbihwKTtjYXNlIlVuZGVybGluZSI6cmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uKHApO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgU3F1aWdnbHlBbm5vdGF0aW9uKHApO2Nhc2UiU3RyaWtlT3V0IjpyZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb24ocCk7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb24ocCk7Y2FzZSJGaWxlQXR0YWNobWVudCI6cmV0dXJuIG5ldyBGaWxlQXR0YWNobWVudEFubm90YXRpb24ocCk7ZGVmYXVsdDpofHwoZz8oMCxyLndhcm4pKGBVbmltcGxlbWVudGVkIGFubm90YXRpb24gdHlwZSAiJHtnfSIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uYCk6KDAsci53YXJuKSgiQW5ub3RhdGlvbiBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCAvU3VidHlwZS4iKSk7cmV0dXJuIG5ldyBBbm5vdGF0aW9uKHApfX1zdGF0aWMgYXN5bmMgX2dldFBhZ2VJbmRleChlLHQsYSl7dHJ5e2NvbnN0IHI9YXdhaXQgZS5mZXRjaElmUmVmQXN5bmModCk7aWYoIShyIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm4tMTtjb25zdCBuPXIuZ2V0UmF3KCJQIik7aWYoIShuIGluc3RhbmNlb2Ygcy5SZWYpKXJldHVybi0xO3JldHVybiBhd2FpdCBhLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW25dKX1jYXRjaChlKXsoMCxyLndhcm4pKGBfZ2V0UGFnZUluZGV4OiAiJHtlfSIuYCk7cmV0dXJuLTF9fXN0YXRpYyBhc3luYyBzYXZlTmV3QW5ub3RhdGlvbnMoZSx0LGEpe2NvbnN0IG49ZS54cmVmO2xldCBpO2NvbnN0IGM9W10sbD1bXTtmb3IoY29uc3QgaCBvZiBhKXN3aXRjaChoLmFubm90YXRpb25UeXBlKXtjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6aWYoIWkpe2NvbnN0IGU9bmV3IHMuRGljdChuKTtlLnNldCgiQmFzZUZvbnQiLHMuTmFtZS5nZXQoIkhlbHZldGljYSIpKTtlLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRm9udCIpKTtlLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiVHlwZTEiKSk7ZS5zZXQoIkVuY29kaW5nIixzLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSk7Y29uc3QgdD1bXTtpPW4uZ2V0TmV3UmVmKCk7KDAsby53cml0ZU9iamVjdCkoaSxlLHQsbnVsbCk7Yy5wdXNoKHtyZWY6aSxkYXRhOnQuam9pbigiIil9KX1sLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24obixoLGMse2V2YWx1YXRvcjplLHRhc2s6dCxiYXNlRm9udFJlZjppfSkpO2JyZWFrO2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6bC5wdXNoKElua0Fubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbihuLGgsYykpfXJldHVybnthbm5vdGF0aW9uczphd2FpdCBQcm9taXNlLmFsbChsKSxkZXBlbmRlbmNpZXM6Y319c3RhdGljIGFzeW5jIHByaW50TmV3QW5ub3RhdGlvbnMoZSx0LGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49ZS54cmVmLGk9W107Zm9yKGNvbnN0IHMgb2YgYSlzd2l0Y2gocy5hbm5vdGF0aW9uVHlwZSl7Y2FzZSByLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUOmkucHVzaChGcmVlVGV4dEFubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKG4scyx7ZXZhbHVhdG9yOmUsdGFzazp0fSkpO2JyZWFrO2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks6aS5wdXNoKElua0Fubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKG4scykpfXJldHVybiBQcm9taXNlLmFsbChpKX19O2Z1bmN0aW9uIGdldFJnYkNvbG9yKGUsdD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMykpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O2NvbnN0IGE9dHx8bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTp1LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0oZSwwLGEsMCk7cmV0dXJuIGE7Y2FzZSAzOnUuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2JJdGVtKGUsMCxhLDApO3JldHVybiBhO2Nhc2UgNDp1LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oZSwwLGEsMCk7cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gZ2V0UXVhZFBvaW50cyhlLHQpe2lmKCFlLmhhcygiUXVhZFBvaW50cyIpKXJldHVybiBudWxsO2NvbnN0IGE9ZS5nZXRBcnJheSgiUXVhZFBvaW50cyIpO2lmKCFBcnJheS5pc0FycmF5KGEpfHwwPT09YS5sZW5ndGh8fGEubGVuZ3RoJTg+MClyZXR1cm4gbnVsbDtjb25zdCByPVtdO2ZvcihsZXQgZT0wLG49YS5sZW5ndGgvODtlPG47ZSsrKXtyLnB1c2goW10pO2ZvcihsZXQgbj04KmUsaT04KmUrODtuPGk7bis9Mil7Y29uc3QgaT1hW25dLHM9YVtuKzFdO2lmKG51bGwhPT10JiYoaTx0WzBdfHxpPnRbMl18fHM8dFsxXXx8cz50WzNdKSlyZXR1cm4gbnVsbDtyW2VdLnB1c2goe3g6aSx5OnN9KX19cmV0dXJuIHIubWFwKChlPT57Y29uc3RbdCxhLHIsbl09ZS5yZWR1Y2UoKChbZSx0LGEscl0sbik9PltNYXRoLm1pbihlLG4ueCksTWF0aC5tYXgodCxuLngpLE1hdGgubWluKGEsbi55KSxNYXRoLm1heChyLG4ueSldKSxbTnVtYmVyLk1BWF9WQUxVRSxOdW1iZXIuTUlOX1ZBTFVFLE51bWJlci5NQVhfVkFMVUUsTnVtYmVyLk1JTl9WQUxVRV0pO3JldHVyblt7eDp0LHk6bn0se3g6YSx5Om59LHt4OnQseTpyfSx7eDphLHk6cn1dfSkpfWZ1bmN0aW9uIGdldFRyYW5zZm9ybU1hdHJpeChlLHQsYSl7Y29uc3RbbixpLHMsb109ci5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHQsYSk7aWYobj09PXN8fGk9PT1vKXJldHVyblsxLDAsMCwxLGVbMF0sZVsxXV07Y29uc3QgYz0oZVsyXS1lWzBdKS8ocy1uKSxsPShlWzNdLWVbMV0pLyhvLWkpO3JldHVybltjLDAsMCxsLGVbMF0tbipjLGVbMV0taSpsXX1jbGFzcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9ZS5kaWN0O3RoaXMuc2V0VGl0bGUodC5nZXQoIlQiKSk7dGhpcy5zZXRDb250ZW50cyh0LmdldCgiQ29udGVudHMiKSk7dGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKHQuZ2V0KCJNIikpO3RoaXMuc2V0RmxhZ3ModC5nZXQoIkYiKSk7dGhpcy5zZXRSZWN0YW5nbGUodC5nZXRBcnJheSgiUmVjdCIpKTt0aGlzLnNldENvbG9yKHQuZ2V0QXJyYXkoIkMiKSk7dGhpcy5zZXRCb3JkZXJTdHlsZSh0KTt0aGlzLnNldEFwcGVhcmFuY2UodCk7dGhpcy5zZXRPcHRpb25hbENvbnRlbnQodCk7Y29uc3QgYT10LmdldCgiTUsiKTt0aGlzLnNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMoYSk7dGhpcy5zZXRSb3RhdGlvbihhKTt0aGlzLl9zdHJlYW1zPVtdO3RoaXMuYXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSk7dGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOmUuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOmUuc3VidHlwZSxoYXNPd25DYW52YXM6ITF9O2lmKGUuY29sbGVjdEZpZWxkcyl7Y29uc3QgYT10LmdldCgiS2lkcyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgYSl0IGluc3RhbmNlb2Ygcy5SZWYmJmUucHVzaCh0LnRvU3RyaW5nKCkpOzAhPT1lLmxlbmd0aCYmKHRoaXMuZGF0YS5raWRJZHM9ZSl9dGhpcy5kYXRhLmFjdGlvbnM9KDAsbi5jb2xsZWN0QWN0aW9ucykoZS54cmVmLHQsci5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKTt0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZSh0KTt0aGlzLmRhdGEucGFnZUluZGV4PWUucGFnZUluZGV4fXRoaXMuX2ZhbGxiYWNrRm9udERpY3Q9bnVsbH1faGFzRmxhZyhlLHQpe3JldHVybiEhKGUmdCl9X2lzVmlld2FibGUoZSl7cmV0dXJuIXRoaXMuX2hhc0ZsYWcoZSxyLkFubm90YXRpb25GbGFnLklOVklTSUJMRSkmJiF0aGlzLl9oYXNGbGFnKGUsci5Bbm5vdGF0aW9uRmxhZy5OT1ZJRVcpfV9pc1ByaW50YWJsZShlKXtyZXR1cm4gdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuUFJJTlQpJiYhdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKX1tdXN0QmVWaWV3ZWQoZSl7Y29uc3QgdD1lJiZlLmdldCh0aGlzLmRhdGEuaWQpO3JldHVybiB0JiZ2b2lkIDAhPT10LmhpZGRlbj8hdC5oaWRkZW46dGhpcy52aWV3YWJsZSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxyLkFubm90YXRpb25GbGFnLkhJRERFTil9bXVzdEJlUHJpbnRlZChlKXtjb25zdCB0PWUmJmUuZ2V0KHRoaXMuZGF0YS5pZCk7cmV0dXJuIHQmJnZvaWQgMCE9PXQucHJpbnQ/dC5wcmludDp0aGlzLnByaW50YWJsZX1nZXQgdmlld2FibGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZGF0YS5xdWFkUG9pbnRzJiYoMD09PXRoaXMuZmxhZ3N8fHRoaXMuX2lzVmlld2FibGUodGhpcy5mbGFncykpfWdldCBwcmludGFibGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZGF0YS5xdWFkUG9pbnRzJiYoMCE9PXRoaXMuZmxhZ3MmJnRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpKX1fcGFyc2VTdHJpbmdIZWxwZXIoZSl7Y29uc3QgdD0ic3RyaW5nIj09dHlwZW9mIGU/KDAsci5zdHJpbmdUb1BERlN0cmluZykoZSk6IiI7cmV0dXJue3N0cjp0LGRpcjp0JiYicnRsIj09PSgwLGwuYmlkaSkodCkuZGlyPyJydGwiOiJsdHIifX1zZXRUaXRsZShlKXt0aGlzLl90aXRsZT10aGlzLl9wYXJzZVN0cmluZ0hlbHBlcihlKX1zZXRDb250ZW50cyhlKXt0aGlzLl9jb250ZW50cz10aGlzLl9wYXJzZVN0cmluZ0hlbHBlcihlKX1zZXRNb2RpZmljYXRpb25EYXRlKGUpe3RoaXMubW9kaWZpY2F0aW9uRGF0ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsfXNldEZsYWdzKGUpe3RoaXMuZmxhZ3M9TnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wP2U6MH1oYXNGbGFnKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsZSl9c2V0UmVjdGFuZ2xlKGUpe0FycmF5LmlzQXJyYXkoZSkmJjQ9PT1lLmxlbmd0aD90aGlzLnJlY3RhbmdsZT1yLlV0aWwubm9ybWFsaXplUmVjdChlKTp0aGlzLnJlY3RhbmdsZT1bMCwwLDAsMF19c2V0Q29sb3IoZSl7dGhpcy5jb2xvcj1nZXRSZ2JDb2xvcihlKX1zZXRMaW5lRW5kaW5ncyhlKXt0aGlzLmxpbmVFbmRpbmdzPVsiTm9uZSIsIk5vbmUiXTtpZihBcnJheS5pc0FycmF5KGUpJiYyPT09ZS5sZW5ndGgpZm9yKGxldCB0PTA7dDwyO3QrKyl7Y29uc3QgYT1lW3RdO2lmKGEgaW5zdGFuY2VvZiBzLk5hbWUpc3dpdGNoKGEubmFtZSl7Y2FzZSJOb25lIjpjb250aW51ZTtjYXNlIlNxdWFyZSI6Y2FzZSJDaXJjbGUiOmNhc2UiRGlhbW9uZCI6Y2FzZSJPcGVuQXJyb3ciOmNhc2UiQ2xvc2VkQXJyb3ciOmNhc2UiQnV0dCI6Y2FzZSJST3BlbkFycm93IjpjYXNlIlJDbG9zZWRBcnJvdyI6Y2FzZSJTbGFzaCI6dGhpcy5saW5lRW5kaW5nc1t0XT1hLm5hbWU7Y29udGludWV9KDAsci53YXJuKShgSWdub3JpbmcgaW52YWxpZCBsaW5lRW5kaW5nOiAke2F9YCl9fXNldFJvdGF0aW9uKGUpe3RoaXMucm90YXRpb249MDtpZihlIGluc3RhbmNlb2Ygcy5EaWN0KXtsZXQgdD1lLmdldCgiUiIpfHwwO2lmKE51bWJlci5pc0ludGVnZXIodCkmJjAhPT10KXt0JT0zNjA7dDwwJiYodCs9MzYwKTt0JTkwPT0wJiYodGhpcy5yb3RhdGlvbj10KX19fXNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMoZSl7aWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7dGhpcy5ib3JkZXJDb2xvcj1nZXRSZ2JDb2xvcihlLmdldEFycmF5KCJCQyIpLG51bGwpO3RoaXMuYmFja2dyb3VuZENvbG9yPWdldFJnYkNvbG9yKGUuZ2V0QXJyYXkoIkJHIiksbnVsbCl9ZWxzZSB0aGlzLmJvcmRlckNvbG9yPXRoaXMuYmFja2dyb3VuZENvbG9yPW51bGx9c2V0Qm9yZGVyU3R5bGUoZSl7dGhpcy5ib3JkZXJTdHlsZT1uZXcgQW5ub3RhdGlvbkJvcmRlclN0eWxlO2lmKGUgaW5zdGFuY2VvZiBzLkRpY3QpaWYoZS5oYXMoIkJTIikpe2NvbnN0IHQ9ZS5nZXQoIkJTIiksYT10LmdldCgiVHlwZSIpO2lmKCFhfHwoMCxzLmlzTmFtZSkoYSwiQm9yZGVyIikpe3RoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSx0aGlzLnJlY3RhbmdsZSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKTt0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpfX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7Y29uc3QgdD1lLmdldEFycmF5KCJCb3JkZXIiKTtpZihBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD49Myl7dGhpcy5ib3JkZXJTdHlsZS5zZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKHRbMF0pO3RoaXMuYm9yZGVyU3R5bGUuc2V0VmVydGljYWxDb3JuZXJSYWRpdXModFsxXSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCh0WzJdLHRoaXMucmVjdGFuZ2xlKTs0PT09dC5sZW5ndGgmJnRoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KHRbM10sITApfX1lbHNlIHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgoMCl9c2V0QXBwZWFyYW5jZShlKXt0aGlzLmFwcGVhcmFuY2U9bnVsbDtjb25zdCB0PWUuZ2V0KCJBUCIpO2lmKCEodCBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IGE9dC5nZXQoIk4iKTtpZihhIGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtKXt0aGlzLmFwcGVhcmFuY2U9YTtyZXR1cm59aWYoIShhIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3Qgcj1lLmdldCgiQVMiKTtyIGluc3RhbmNlb2Ygcy5OYW1lJiZhLmhhcyhyLm5hbWUpJiYodGhpcy5hcHBlYXJhbmNlPWEuZ2V0KHIubmFtZSkpfXNldE9wdGlvbmFsQ29udGVudChlKXt0aGlzLm9jPW51bGw7Y29uc3QgdD1lLmdldCgiT0MiKTt0IGluc3RhbmNlb2Ygcy5OYW1lPygwLHIud2FybikoInNldE9wdGlvbmFsQ29udGVudDogU3VwcG9ydCBmb3IgL05hbWUtZW50cnkgaXMgbm90IGltcGxlbWVudGVkLiIpOnQgaW5zdGFuY2VvZiBzLkRpY3QmJih0aGlzLm9jPXQpfWxvYWRSZXNvdXJjZXMoZSx0KXtyZXR1cm4gdC5kaWN0LmdldEFzeW5jKCJSZXNvdXJjZXMiKS50aGVuKCh0PT57aWYoIXQpcmV0dXJuO3JldHVybiBuZXcgZi5PYmplY3RMb2FkZXIodCxlLHQueHJlZikubG9hZCgpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSl9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSl7Y29uc3Qgbz10aGlzLmRhdGE7bGV0IGM9dGhpcy5hcHBlYXJhbmNlO2NvbnN0IGw9ISEodGhpcy5kYXRhLmhhc093bkNhbnZhcyYmYSZyLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSk7aWYoIWMpe2lmKCFsKXJldHVybntvcExpc3Q6bmV3IGcuT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX07Yz1uZXcgcC5TdHJpbmdTdHJlYW0oIiIpO2MuZGljdD1uZXcgcy5EaWN0fWNvbnN0IGg9Yy5kaWN0LHU9YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiQ29sb3JTcGFjZSIsIlBhdHRlcm4iLCJTaGFkaW5nIiwiWE9iamVjdCIsIkZvbnQiXSxjKSxkPWguZ2V0QXJyYXkoIkJCb3giKXx8WzAsMCwxLDFdLGY9aC5nZXRBcnJheSgiTWF0cml4Iil8fFsxLDAsMCwxLDAsMF0sbT1nZXRUcmFuc2Zvcm1NYXRyaXgoby5yZWN0LGQsZiksYj1uZXcgZy5PcGVyYXRvckxpc3Q7bGV0IHk7dGhpcy5vYyYmKHk9YXdhaXQgZS5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpKTt2b2lkIDAhPT15JiZiLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLHldKTtiLmFkZE9wKHIuT1BTLmJlZ2luQW5ub3RhdGlvbixbby5pZCxvLnJlY3QsbSxmLGxdKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmMsdGFzazp0LHJlc291cmNlczp1LG9wZXJhdG9yTGlzdDpiLGZhbGxiYWNrRm9udERpY3Q6dGhpcy5fZmFsbGJhY2tGb250RGljdH0pO2IuYWRkT3Aoci5PUFMuZW5kQW5ub3RhdGlvbixbXSk7dm9pZCAwIT09eSYmYi5hZGRPcChyLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKTt0aGlzLnJlc2V0KCk7cmV0dXJue29wTGlzdDpiLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczpsfX1hc3luYyBzYXZlKGUsdCxhKXtyZXR1cm4gbnVsbH1nZXQgaGFzVGV4dENvbnRlbnQoKXtyZXR1cm4hMX1hc3luYyBleHRyYWN0VGV4dENvbnRlbnQoZSx0LGEpe2lmKCF0aGlzLmFwcGVhcmFuY2UpcmV0dXJuO2NvbnN0IHI9YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiRm9udCIsIlByb3BlcnRpZXMiLCJYT2JqZWN0Il0sdGhpcy5hcHBlYXJhbmNlKSxuPVtdLGk9W10scz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlKGUsdCl7Zm9yKGNvbnN0IHQgb2YgZS5pdGVtcyl7aS5wdXNoKHQuc3RyKTtpZih0Lmhhc0VPTCl7bi5wdXNoKGkuam9pbigiIikpO2kubGVuZ3RoPTB9fX19O2F3YWl0IGUuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTp0aGlzLmFwcGVhcmFuY2UsdGFzazp0LHJlc291cmNlczpyLGluY2x1ZGVNYXJrZWRDb250ZW50OiEwLGNvbWJpbmVUZXh0SXRlbXM6ITAsc2luazpzLHZpZXdCb3g6YX0pO3RoaXMucmVzZXQoKTtpLmxlbmd0aCYmbi5wdXNoKGkuam9pbigiIikpO24ubGVuZ3RoPjAmJih0aGlzLmRhdGEudGV4dENvbnRlbnQ9bil9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gdGhpcy5kYXRhLmtpZElkcz97aWQ6dGhpcy5kYXRhLmlkLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcix0eXBlOiIiLGtpZElkczp0aGlzLmRhdGEua2lkSWRzLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCxyb3RhdGlvbjp0aGlzLnJvdGF0aW9ufTpudWxsfXJlc2V0KCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5fc3RyZWFtcyllLnJlc2V0KCl9X2NvbnN0cnVjdEZpZWxkTmFtZShlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSl7KDAsci53YXJuKSgiVW5rbm93biBmaWVsZCBuYW1lLCBmYWxsaW5nIGJhY2sgdG8gZW1wdHkgZmllbGQgbmFtZS4iKTtyZXR1cm4iIn1pZighZS5oYXMoIlBhcmVudCIpKXJldHVybigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpO2NvbnN0IHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpKTtsZXQgYT1lO2NvbnN0IG49bmV3IHMuUmVmU2V0O2Uub2JqSWQmJm4ucHV0KGUub2JqSWQpO2Zvcig7YS5oYXMoIlBhcmVudCIpOyl7YT1hLmdldCgiUGFyZW50Iik7aWYoIShhIGluc3RhbmNlb2Ygcy5EaWN0KXx8YS5vYmpJZCYmbi5oYXMoYS5vYmpJZCkpYnJlYWs7YS5vYmpJZCYmbi5wdXQoYS5vYmpJZCk7YS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGEuZ2V0KCJUIikpKX1yZXR1cm4gdC5qb2luKCIuIil9fXQuQW5ub3RhdGlvbj1Bbm5vdGF0aW9uO2NsYXNzIEFubm90YXRpb25Cb3JkZXJTdHlsZXtjb25zdHJ1Y3Rvcigpe3RoaXMud2lkdGg9MTt0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDt0aGlzLmRhc2hBcnJheT1bM107dGhpcy5ob3Jpem9udGFsQ29ybmVyUmFkaXVzPTA7dGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz0wfXNldFdpZHRoKGUsdD1bMCwwLDAsMF0pe2lmKGUgaW5zdGFuY2VvZiBzLk5hbWUpdGhpcy53aWR0aD0wO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZihlPjApe2NvbnN0IGE9KHRbMl0tdFswXSkvMixuPSh0WzNdLXRbMV0pLzI7aWYoYT4wJiZuPjAmJihlPmF8fGU+bikpeygwLHIud2FybikoYEFubm90YXRpb25Cb3JkZXJTdHlsZS5zZXRXaWR0aCAtIGlnbm9yaW5nIHdpZHRoOiAke2V9YCk7ZT0xfX10aGlzLndpZHRoPWV9fXNldFN0eWxlKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTIjp0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDticmVhaztjYXNlIkQiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkRBU0hFRDticmVhaztjYXNlIkIiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ7YnJlYWs7Y2FzZSJJIjp0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDticmVhaztjYXNlIlUiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlVOREVSTElORX19c2V0RGFzaEFycmF5KGUsdD0hMSl7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7bGV0IGE9ITAscj0hMDtmb3IoY29uc3QgdCBvZiBlKXtpZighKCt0Pj0wKSl7YT0hMTticmVha310PjAmJihyPSExKX1pZihhJiYhcil7dGhpcy5kYXNoQXJyYXk9ZTt0JiZ0aGlzLnNldFN0eWxlKHMuTmFtZS5nZXQoIkQiKSl9ZWxzZSB0aGlzLndpZHRoPTB9ZWxzZSBlJiYodGhpcy53aWR0aD0wKX1zZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKGUpe051bWJlci5pc0ludGVnZXIoZSkmJih0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9ZSl9c2V0VmVydGljYWxDb3JuZXJSYWRpdXMoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMudmVydGljYWxDb3JuZXJSYWRpdXM9ZSl9fXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlPUFubm90YXRpb25Cb3JkZXJTdHlsZTtjbGFzcyBNYXJrdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdCB0PWUuZGljdDtpZih0LmhhcygiSVJUIikpe2NvbnN0IGU9dC5nZXRSYXcoIklSVCIpO3RoaXMuZGF0YS5pblJlcGx5VG89ZSBpbnN0YW5jZW9mIHMuUmVmP2UudG9TdHJpbmcoKTpudWxsO2NvbnN0IGE9dC5nZXQoIlJUIik7dGhpcy5kYXRhLnJlcGx5VHlwZT1hIGluc3RhbmNlb2Ygcy5OYW1lP2EubmFtZTpyLkFubm90YXRpb25SZXBseVR5cGUuUkVQTFl9aWYodGhpcy5kYXRhLnJlcGx5VHlwZT09PXIuQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCl7Y29uc3QgZT10LmdldCgiSVJUIik7dGhpcy5zZXRUaXRsZShlLmdldCgiVCIpKTt0aGlzLmRhdGEudGl0bGVPYmo9dGhpcy5fdGl0bGU7dGhpcy5zZXRDb250ZW50cyhlLmdldCgiQ29udGVudHMiKSk7dGhpcy5kYXRhLmNvbnRlbnRzT2JqPXRoaXMuX2NvbnRlbnRzO2lmKGUuaGFzKCJDcmVhdGlvbkRhdGUiKSl7dGhpcy5zZXRDcmVhdGlvbkRhdGUoZS5nZXQoIkNyZWF0aW9uRGF0ZSIpKTt0aGlzLmRhdGEuY3JlYXRpb25EYXRlPXRoaXMuY3JlYXRpb25EYXRlfWVsc2UgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZT1udWxsO2lmKGUuaGFzKCJNIikpe3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShlLmdldCgiTSIpKTt0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT10aGlzLm1vZGlmaWNhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT1udWxsO3RoaXMuZGF0YS5oYXNQb3B1cD1lLmhhcygiUG9wdXAiKTtpZihlLmhhcygiQyIpKXt0aGlzLnNldENvbG9yKGUuZ2V0QXJyYXkoIkMiKSk7dGhpcy5kYXRhLmNvbG9yPXRoaXMuY29sb3J9ZWxzZSB0aGlzLmRhdGEuY29sb3I9bnVsbH1lbHNle3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENyZWF0aW9uRGF0ZSh0LmdldCgiQ3JlYXRpb25EYXRlIikpO3RoaXMuZGF0YS5jcmVhdGlvbkRhdGU9dGhpcy5jcmVhdGlvbkRhdGU7dGhpcy5kYXRhLmhhc1BvcHVwPXQuaGFzKCJQb3B1cCIpO3QuaGFzKCJDIil8fCh0aGlzLmRhdGEuY29sb3I9bnVsbCl9dC5oYXMoIlJDIikmJih0aGlzLmRhdGEucmljaFRleHQ9bS5YRkFGYWN0b3J5LmdldFJpY2hUZXh0QXNIdG1sKHQuZ2V0KCJSQyIpKSl9c2V0Q3JlYXRpb25EYXRlKGUpe3RoaXMuY3JlYXRpb25EYXRlPSJzdHJpbmciPT10eXBlb2YgZT9lOm51bGx9X3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmUsZXh0cmE6dCxzdHJva2VDb2xvcjphLGZpbGxDb2xvcjpyLGJsZW5kTW9kZTpuLHN0cm9rZUFscGhhOmksZmlsbEFscGhhOm8scG9pbnRzQ2FsbGJhY2s6Y30pe2xldCBsPU51bWJlci5NQVhfVkFMVUUsaD1OdW1iZXIuTUFYX1ZBTFVFLHU9TnVtYmVyLk1JTl9WQUxVRSxkPU51bWJlci5NSU5fVkFMVUU7Y29uc3QgZj1bInEiXTt0JiZmLnB1c2godCk7YSYmZi5wdXNoKGAke2FbMF19ICR7YVsxXX0gJHthWzJdfSBSR2ApO3ImJmYucHVzaChgJHtyWzBdfSAke3JbMV19ICR7clsyXX0gcmdgKTtsZXQgZz10aGlzLmRhdGEucXVhZFBvaW50cztnfHwoZz1bW3t4OnRoaXMucmVjdGFuZ2xlWzBdLHk6dGhpcy5yZWN0YW5nbGVbM119LHt4OnRoaXMucmVjdGFuZ2xlWzJdLHk6dGhpcy5yZWN0YW5nbGVbM119LHt4OnRoaXMucmVjdGFuZ2xlWzBdLHk6dGhpcy5yZWN0YW5nbGVbMV19LHt4OnRoaXMucmVjdGFuZ2xlWzJdLHk6dGhpcy5yZWN0YW5nbGVbMV19XV0pO2Zvcihjb25zdCBlIG9mIGcpe2NvbnN0W3QsYSxyLG5dPWMoZixlKTtsPU1hdGgubWluKGwsdCk7dT1NYXRoLm1heCh1LGEpO2g9TWF0aC5taW4oaCxyKTtkPU1hdGgubWF4KGQsbil9Zi5wdXNoKCJRIik7Y29uc3QgbT1uZXcgcy5EaWN0KGUpLGI9bmV3IHMuRGljdChlKTtiLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRm9ybSIpKTtjb25zdCB5PW5ldyBwLlN0cmluZ1N0cmVhbShmLmpvaW4oIiAiKSk7eS5kaWN0PWI7bS5zZXQoIkZtMCIseSk7Y29uc3Qgdz1uZXcgcy5EaWN0KGUpO24mJncuc2V0KCJCTSIscy5OYW1lLmdldChuKSk7Im51bWJlciI9PXR5cGVvZiBpJiZ3LnNldCgiQ0EiLGkpOyJudW1iZXIiPT10eXBlb2YgbyYmdy5zZXQoImNhIixvKTtjb25zdCBTPW5ldyBzLkRpY3QoZSk7Uy5zZXQoIkdTMCIsdyk7Y29uc3QgeD1uZXcgcy5EaWN0KGUpO3guc2V0KCJFeHRHU3RhdGUiLFMpO3guc2V0KCJYT2JqZWN0IixtKTtjb25zdCBrPW5ldyBzLkRpY3QoZSk7ay5zZXQoIlJlc291cmNlcyIseCk7Y29uc3QgQz10aGlzLmRhdGEucmVjdD1bbCxoLHUsZF07ay5zZXQoIkJCb3giLEMpO3RoaXMuYXBwZWFyYW5jZT1uZXcgcC5TdHJpbmdTdHJlYW0oIi9HUzAgZ3MgL0ZtMCBEbyIpO3RoaXMuYXBwZWFyYW5jZS5kaWN0PWs7dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSx5KX1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QW5ub3RhdGlvbihlLHQsYSxyKXtjb25zdCBuPWUuZ2V0TmV3UmVmKCksaT1lLmdldE5ld1JlZigpLHM9dGhpcy5jcmVhdGVOZXdEaWN0KHQsZSx7YXBSZWY6aX0pLGM9YXdhaXQgdGhpcy5jcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKHQsZSxyKSxsPVtdO2xldCBoPWUuZW5jcnlwdD9lLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGkubnVtLGkuZ2VuKTpudWxsOygwLG8ud3JpdGVPYmplY3QpKGksYyxsLGgpO2EucHVzaCh7cmVmOmksZGF0YTpsLmpvaW4oIiIpfSk7bC5sZW5ndGg9MDtoPWUuZW5jcnlwdD9lLmVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKG4ubnVtLG4uZ2VuKTpudWxsOygwLG8ud3JpdGVPYmplY3QpKG4scyxsLGgpO3JldHVybntyZWY6bixkYXRhOmwuam9pbigiIil9fXN0YXRpYyBhc3luYyBjcmVhdGVOZXdQcmludEFubm90YXRpb24oZSx0LGEpe2NvbnN0IHI9YXdhaXQgdGhpcy5jcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKHQsZSxhKSxuPXRoaXMuY3JlYXRlTmV3RGljdCh0LGUse2FwOnJ9KTtyZXR1cm4gbmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0Om4seHJlZjplfSl9fXQuTWFya3VwQW5ub3RhdGlvbj1NYXJrdXBBbm5vdGF0aW9uO2NsYXNzIFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0IHQ9ZS5kaWN0LGE9dGhpcy5kYXRhO3RoaXMucmVmPWUucmVmO2EuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ7dm9pZCAwPT09YS5maWVsZE5hbWUmJihhLmZpZWxkTmFtZT10aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUodCkpO3ZvaWQgMD09PWEuYWN0aW9ucyYmKGEuYWN0aW9ucz0oMCxuLmNvbGxlY3RBY3Rpb25zKShlLnhyZWYsdCxyLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGUpKTtsZXQgbz0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJWIixnZXRBcnJheTohMH0pO2EuZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUobyk7Y29uc3QgYz0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJEViIsZ2V0QXJyYXk6ITB9KTthLmRlZmF1bHRGaWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShjKTtpZih2b2lkIDA9PT1vJiZlLnhmYURhdGFzZXRzKXtjb25zdCB0PXRoaXMuX3RpdGxlLnN0cjtpZih0KXt0aGlzLl9oYXNWYWx1ZUZyb21YRkE9ITA7YS5maWVsZFZhbHVlPW89ZS54ZmFEYXRhc2V0cy5nZXRWYWx1ZSh0KX19dm9pZCAwPT09byYmbnVsbCE9PWEuZGVmYXVsdEZpZWxkVmFsdWUmJihhLmZpZWxkVmFsdWU9YS5kZWZhdWx0RmllbGRWYWx1ZSk7YS5hbHRlcm5hdGl2ZVRleHQ9KDAsci5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIlRVIil8fCIiKTtjb25zdCBsPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkRBIn0pfHxlLmFjcm9Gb3JtLmdldCgiREEiKTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0ic3RyaW5nIj09dHlwZW9mIGw/bDoiIjthLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlKTtjb25zdCBoPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkZUIn0pO2EuZmllbGRUeXBlPWggaW5zdGFuY2VvZiBzLk5hbWU/aC5uYW1lOm51bGw7Y29uc3QgdT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJEUiJ9KSxkPWUuYWNyb0Zvcm0uZ2V0KCJEUiIpLGY9dGhpcy5hcHBlYXJhbmNlJiZ0aGlzLmFwcGVhcmFuY2UuZGljdC5nZXQoIlJlc291cmNlcyIpO3RoaXMuX2ZpZWxkUmVzb3VyY2VzPXtsb2NhbFJlc291cmNlczp1LGFjcm9Gb3JtUmVzb3VyY2VzOmQsYXBwZWFyYW5jZVJlc291cmNlczpmLG1lcmdlZFJlc291cmNlczpzLkRpY3QubWVyZ2Uoe3hyZWY6ZS54cmVmLGRpY3RBcnJheTpbdSxmLGRdLG1lcmdlU3ViRGljdHM6ITB9KX07YS5maWVsZEZsYWdzPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkZmIn0pOyghTnVtYmVyLmlzSW50ZWdlcihhLmZpZWxkRmxhZ3MpfHxhLmZpZWxkRmxhZ3M8MCkmJihhLmZpZWxkRmxhZ3M9MCk7YS5yZWFkT25seT10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkVBRE9OTFkpO2EucmVxdWlyZWQ9dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFUVVJUkVEKTthLmhpZGRlbj10aGlzLl9oYXNGbGFnKGEuYW5ub3RhdGlvbkZsYWdzLHIuQW5ub3RhdGlvbkZsYWcuSElEREVOKX1fZGVjb2RlRm9ybVZhbHVlKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuZmlsdGVyKChlPT4ic3RyaW5nIj09dHlwZW9mIGUpKS5tYXAoKGU9PigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUpKSk6ZSBpbnN0YW5jZW9mIHMuTmFtZT8oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT8oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsfWhhc0ZpZWxkRmxhZyhlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX1zdGF0aWMgX2dldFJvdGF0aW9uTWF0cml4KGUsdCxhKXtzd2l0Y2goZSl7Y2FzZSA5MDpyZXR1cm5bMCwxLC0xLDAsdCwwXTtjYXNlIDE4MDpyZXR1cm5bLTEsMCwwLC0xLHQsYV07Y2FzZSAyNzA6cmV0dXJuWzAsLTEsMSwwLDAsYV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19Z2V0Um90YXRpb25NYXRyaXgoZSl7Y29uc3QgdD1lP2UuZ2V0KHRoaXMuZGF0YS5pZCk6dm9pZCAwO2xldCBhPXQmJnQucm90YXRpb247dm9pZCAwPT09YSYmKGE9dGhpcy5yb3RhdGlvbik7aWYoMD09PWEpcmV0dXJuIHIuSURFTlRJVFlfTUFUUklYO2NvbnN0IG49dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0saT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXTtyZXR1cm4gV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Um90YXRpb25NYXRyaXgoYSxuLGkpfWdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhlKXtjb25zdCB0PWU/ZS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDA7bGV0IGE9dCYmdC5yb3RhdGlvbjt2b2lkIDA9PT1hJiYoYT10aGlzLnJvdGF0aW9uKTtpZighdGhpcy5iYWNrZ3JvdW5kQ29sb3ImJiF0aGlzLmJvcmRlckNvbG9yKXJldHVybiIiO2NvbnN0IHI9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sbj10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxzPTA9PT1hfHwxODA9PT1hP2AwIDAgJHtyfSAke259IHJlYDpgMCAwICR7bn0gJHtyfSByZWA7bGV0IG89IiI7dGhpcy5iYWNrZ3JvdW5kQ29sb3ImJihvPWAkeygwLGkuZ2V0UGRmQ29sb3IpKHRoaXMuYmFja2dyb3VuZENvbG9yLCEwKX0gJHtzfSBmIGApO2lmKHRoaXMuYm9yZGVyQ29sb3Ipe28rPWAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDF9IHcgJHsoMCxpLmdldFBkZkNvbG9yKSh0aGlzLmJvcmRlckNvbG9yLCExKX0gJHtzfSBTIGB9cmV0dXJuIG99YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSl7aWYobiYmISh0aGlzIGluc3RhbmNlb2YgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbikpcmV0dXJue29wTGlzdDpuZXcgZy5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiEwLHNlcGFyYXRlQ2FudmFzOiExfTtpZighdGhpcy5faGFzVGV4dClyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7Y29uc3Qgcz1hd2FpdCB0aGlzLl9nZXRBcHBlYXJhbmNlKGUsdCxpKTtpZih0aGlzLmFwcGVhcmFuY2UmJm51bGw9PT1zKXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LGEsbixpKTtjb25zdCBvPW5ldyBnLk9wZXJhdG9yTGlzdDtpZighdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fG51bGw9PT1zKXJldHVybntvcExpc3Q6byxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9O2NvbnN0IGM9WzAsMCx0aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSx0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXV0sbD1nZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5kYXRhLnJlY3QsYyxbMSwwLDAsMSwwLDBdKTtsZXQgaDt0aGlzLm9jJiYoaD1hd2FpdCBlLnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCkpO3ZvaWQgMCE9PWgmJm8uYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsaF0pO28uYWRkT3Aoci5PUFMuYmVnaW5Bbm5vdGF0aW9uLFt0aGlzLmRhdGEuaWQsdGhpcy5kYXRhLnJlY3QsbCx0aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpLCExXSk7Y29uc3QgdT1uZXcgcC5TdHJpbmdTdHJlYW0ocyk7YXdhaXQgZS5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp1LHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLG9wZXJhdG9yTGlzdDpvfSk7by5hZGRPcChyLk9QUy5lbmRBbm5vdGF0aW9uLFtdKTt2b2lkIDAhPT1oJiZvLmFkZE9wKHIuT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pO3JldHVybntvcExpc3Q6byxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fV9nZXRNS0RpY3QoZSl7Y29uc3QgdD1uZXcgcy5EaWN0KG51bGwpO2UmJnQuc2V0KCJSIixlKTt0aGlzLmJvcmRlckNvbG9yJiZ0LnNldCgiQkMiLEFycmF5LmZyb20odGhpcy5ib3JkZXJDb2xvciwoZT0+ZS8yNTUpKSk7dGhpcy5iYWNrZ3JvdW5kQ29sb3ImJnQuc2V0KCJCRyIsQXJyYXkuZnJvbSh0aGlzLmJhY2tncm91bmRDb2xvciwoZT0+ZS8yNTUpKSk7cmV0dXJuIHQuc2l6ZT4wP3Q6bnVsbH1hc3luYyBzYXZlKGUsdCxhKXtjb25zdCBuPWE/YS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDA7bGV0IGk9biYmbi52YWx1ZSxjPW4mJm4ucm90YXRpb247aWYoaT09PXRoaXMuZGF0YS5maWVsZFZhbHVlfHx2b2lkIDA9PT1pKXtpZighdGhpcy5faGFzVmFsdWVGcm9tWEZBJiZ2b2lkIDA9PT1jKXJldHVybiBudWxsO2k9aXx8dGhpcy5kYXRhLmZpZWxkVmFsdWV9aWYodm9pZCAwPT09YyYmIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQSYmQXJyYXkuaXNBcnJheShpKSYmQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkmJmkubGVuZ3RoPT09dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoJiZpLmV2ZXJ5KCgoZSx0KT0+ZT09PXRoaXMuZGF0YS5maWVsZFZhbHVlW3RdKSkpcmV0dXJuIG51bGw7dm9pZCAwPT09YyYmKGM9dGhpcy5yb3RhdGlvbik7bGV0IGw9YXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShlLHQsYSk7aWYobnVsbD09PWwpcmV0dXJuIG51bGw7Y29uc3R7eHJlZjpofT1lLHU9aC5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKHUgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybiBudWxsO2NvbnN0IGQ9WzAsMCx0aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSx0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXV0sZj17cGF0aDooMCxyLnN0cmluZ1RvUERGU3RyaW5nKSh1LmdldCgiVCIpfHwiIiksdmFsdWU6aX0sZz1oLmdldE5ld1JlZigpLHA9bmV3IHMuRGljdChoKTtwLnNldCgiTiIsZyk7Y29uc3QgbT1oLmVuY3J5cHQ7bGV0IGI9bnVsbCx5PW51bGw7aWYobSl7Yj1tLmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sdGhpcy5yZWYuZ2VuKTt5PW0uY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGcubnVtLGcuZ2VuKTtsPXkuZW5jcnlwdFN0cmluZyhsKX1jb25zdCBlbmNvZGVyPWU9PigwLHIuaXNBc2NpaSkoZSk/ZTooMCxyLnN0cmluZ1RvVVRGMTZCRVN0cmluZykoZSk7dS5zZXQoIlYiLEFycmF5LmlzQXJyYXkoaSk/aS5tYXAoZW5jb2Rlcik6ZW5jb2RlcihpKSk7dS5zZXQoIkFQIixwKTt1LnNldCgiTSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7Y29uc3Qgdz10aGlzLl9nZXRNS0RpY3QoYyk7dyYmdS5zZXQoIk1LIix3KTtjb25zdCBTPW5ldyBzLkRpY3QoaCk7Uy5zZXQoIkxlbmd0aCIsbC5sZW5ndGgpO1Muc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO1Muc2V0KCJSZXNvdXJjZXMiLHRoaXMuX2dldFNhdmVGaWVsZFJlc291cmNlcyhoKSk7Uy5zZXQoIkJCb3giLGQpO2NvbnN0IHg9dGhpcy5nZXRSb3RhdGlvbk1hdHJpeChhKTt4IT09ci5JREVOVElUWV9NQVRSSVgmJlMuc2V0KCJNYXRyaXgiLHgpO2NvbnN0IGs9W2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxuYF07KDAsby53cml0ZURpY3QpKHUsayxiKTtrLnB1c2goIlxuZW5kb2JqXG4iKTtjb25zdCBDPVtgJHtnLm51bX0gJHtnLmdlbn0gb2JqXG5gXTsoMCxvLndyaXRlRGljdCkoUyxDLHkpO0MucHVzaCgiIHN0cmVhbVxuIixsLCJcbmVuZHN0cmVhbVxuZW5kb2JqXG4iKTtyZXR1cm5be3JlZjp0aGlzLnJlZixkYXRhOmsuam9pbigiIikseGZhOmZ9LHtyZWY6ZyxkYXRhOkMuam9pbigiIikseGZhOm51bGx9XX1hc3luYyBfZ2V0QXBwZWFyYW5jZShlLHQsYSl7aWYodGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSlyZXR1cm4gbnVsbDtjb25zdCBuPWE/YS5nZXQodGhpcy5kYXRhLmlkKTp2b2lkIDA7bGV0IHMsbztpZihuKXtzPW4uZm9ybWF0dGVkVmFsdWV8fG4udmFsdWU7bz1uLnJvdGF0aW9ufWlmKHZvaWQgMD09PW8mJnZvaWQgMD09PXMmJighdGhpcy5faGFzVmFsdWVGcm9tWEZBfHx0aGlzLmFwcGVhcmFuY2UpKXJldHVybiBudWxsO2lmKHZvaWQgMD09PXMpe3M9dGhpcy5kYXRhLmZpZWxkVmFsdWU7aWYoIXMpcmV0dXJuIiJ9QXJyYXkuaXNBcnJheShzKSYmMT09PXMubGVuZ3RoJiYocz1zWzBdKTsoMCxyLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiBzLCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpO3M9cy50cmltKCk7aWYoIiI9PT1zKXJldHVybiIiO3ZvaWQgMD09PW8mJihvPXRoaXMucm90YXRpb24pO2xldCBjPS0xO3RoaXMuZGF0YS5tdWx0aUxpbmUmJihjPXMuc3BsaXQoL1xyXG58XHJ8XG4vKS5sZW5ndGgpO2xldCBsPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLGg9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF07OTAhPT1vJiYyNzAhPT1vfHwoW2gsbF09W2wsaF0pO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpO2NvbnN0IHU9YXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEoZSx0LHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKSxbZCxmXT10aGlzLl9jb21wdXRlRm9udFNpemUobC0yLGgtNCxzLHUsYyk7bGV0IGc9dS5kZXNjZW50O2lzTmFOKGcpJiYoZz0wKTtjb25zdCBwPU1hdGgubWluKE1hdGguZmxvb3IoKGwtZikvMiksMikrTWF0aC5hYnMoZykqZixtPXRoaXMuZGF0YS50ZXh0QWxpZ25tZW50O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpcmV0dXJuIHRoaXMuX2dldE11bHRpbGluZUFwcGVhcmFuY2UoZCxzLHUsZixoLGwsbSwyLHAsYSk7Y29uc3QgYj11LmVuY29kZVN0cmluZyhzKS5qb2luKCIiKTtpZih0aGlzLmRhdGEuY29tYilyZXR1cm4gdGhpcy5fZ2V0Q29tYkFwcGVhcmFuY2UoZCx1LGIsaCwyLHAsYSk7Y29uc3QgeT10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhhKTtpZigwPT09bXx8bT4yKXJldHVybmAvVHggQk1DIHEgJHt5fUJUIGArZCtgIDEgMCAwIDEgMiAke3B9IFRtICgkeygwLHIuZXNjYXBlU3RyaW5nKShiKX0pIFRqIEVUIFEgRU1DYDtyZXR1cm5gL1R4IEJNQyBxICR7eX1CVCBgK2QrYCAxIDAgMCAxIDAgMCBUbSAke3RoaXMuX3JlbmRlclRleHQoYix1LGYsaCxtLDIscCl9IEVUIFEgRU1DYH1zdGF0aWMgYXN5bmMgX2dldEZvbnREYXRhKGUsdCxhLHIpe2NvbnN0IG49bmV3IGcuT3BlcmF0b3JMaXN0LGk9e2ZvbnQ6bnVsbCxjbG9uZSgpe3JldHVybiB0aGlzfX0se2ZvbnROYW1lOm8sZm9udFNpemU6Y309YTthd2FpdCBlLmhhbmRsZVNldEZvbnQocixbbyYmcy5OYW1lLmdldChvKSxjXSxudWxsLG4sdCxpLG51bGwpO3JldHVybiBpLmZvbnR9X2dldFRleHRXaWR0aChlLHQpe3JldHVybiB0LmNoYXJzVG9HbHlwaHMoZSkucmVkdWNlKCgoZSx0KT0+ZSt0LndpZHRoKSwwKS8xZTN9X2NvbXB1dGVGb250U2l6ZShlLHQsYSxuLHMpe2xldHtmb250U2l6ZTpvfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO2lmKCFvKXtjb25zdCByb3VuZFdpdGhUd29EaWdpdHM9ZT0+TWF0aC5mbG9vcigxMDAqZSkvMTAwO2lmKC0xPT09cyl7Y29uc3QgaT10aGlzLl9nZXRUZXh0V2lkdGgoYSxuKTtvPXJvdW5kV2l0aFR3b0RpZ2l0cyhNYXRoLm1pbihlL3IuTElORV9GQUNUT1IsdC9pKSl9ZWxzZXtjb25zdCBpPWEuc3BsaXQoL1xyXG4/fFxuLyksYz1bXTtmb3IoY29uc3QgZSBvZiBpKXtjb25zdCB0PW4uZW5jb2RlU3RyaW5nKGUpLmpvaW4oIiIpLGE9bi5jaGFyc1RvR2x5cGhzKHQpLHI9bi5nZXRDaGFyUG9zaXRpb25zKHQpO2MucHVzaCh7bGluZTp0LGdseXBoczphLHBvc2l0aW9uczpyfSl9Y29uc3QgaXNUb29CaWc9YT0+e2xldCByPTA7Zm9yKGNvbnN0IGkgb2YgYyl7cis9dGhpcy5fc3BsaXRMaW5lKG51bGwsbixhLHQsaSkubGVuZ3RoKmE7aWYocj5lKXJldHVybiEwfXJldHVybiExfTtvPTEyO2xldCBsPW8qci5MSU5FX0ZBQ1RPUixoPU1hdGgucm91bmQoZS9sKTtoPU1hdGgubWF4KGgscyk7Zm9yKDs7KXtsPWUvaDtvPXJvdW5kV2l0aFR3b0RpZ2l0cyhsL3IuTElORV9GQUNUT1IpO2lmKCFpc1Rvb0JpZyhvKSlicmVhaztoKyt9fWNvbnN0e2ZvbnROYW1lOmMsZm9udENvbG9yOmx9PXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9KDAsaS5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZSkoe2ZvbnRTaXplOm8sZm9udE5hbWU6Yyxmb250Q29sb3I6bH0pfXJldHVyblt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSxvXX1fcmVuZGVyVGV4dChlLHQsYSxpLHMsbyxjKXtsZXQgbDtpZigxPT09cyl7bD0oaS10aGlzLl9nZXRUZXh0V2lkdGgoZSx0KSphKS8yfWVsc2UgaWYoMj09PXMpe2w9aS10aGlzLl9nZXRUZXh0V2lkdGgoZSx0KSphLW99ZWxzZSBsPW87bD0oMCxuLm51bWJlclRvU3RyaW5nKShsKTtyZXR1cm5gJHtsfSAke2M9KDAsbi5udW1iZXJUb1N0cmluZykoYyl9IFRkICgkeygwLHIuZXNjYXBlU3RyaW5nKShlKX0pIFRqYH1fZ2V0U2F2ZUZpZWxkUmVzb3VyY2VzKGUpe2NvbnN0e2xvY2FsUmVzb3VyY2VzOnQsYXBwZWFyYW5jZVJlc291cmNlczphLGFjcm9Gb3JtUmVzb3VyY2VzOnJ9PXRoaXMuX2ZpZWxkUmVzb3VyY2VzLG49dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSYmdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250TmFtZTtpZighbilyZXR1cm4gdHx8cy5EaWN0LmVtcHR5O2Zvcihjb25zdCBlIG9mW3QsYV0paWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7Y29uc3QgdD1lLmdldCgiRm9udCIpO2lmKHQgaW5zdGFuY2VvZiBzLkRpY3QmJnQuaGFzKG4pKXJldHVybiBlfWlmKHIgaW5zdGFuY2VvZiBzLkRpY3Qpe2NvbnN0IGE9ci5nZXQoIkZvbnQiKTtpZihhIGluc3RhbmNlb2Ygcy5EaWN0JiZhLmhhcyhuKSl7Y29uc3Qgcj1uZXcgcy5EaWN0KGUpO3Iuc2V0KG4sYS5nZXRSYXcobikpO2NvbnN0IGk9bmV3IHMuRGljdChlKTtpLnNldCgiRm9udCIscik7cmV0dXJuIHMuRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbaSx0XSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiB0fHxzLkRpY3QuZW1wdHl9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gbnVsbH19Y2xhc3MgVGV4dFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuX2hhc1RleHQ9ITA7Y29uc3QgdD1lLmRpY3Q7InN0cmluZyIhPXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPSIiKTtsZXQgYT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJRIn0pOyghTnVtYmVyLmlzSW50ZWdlcihhKXx8YTwwfHxhPjIpJiYoYT1udWxsKTt0aGlzLmRhdGEudGV4dEFsaWdubWVudD1hO2xldCBpPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6Ik1heExlbiJ9KTsoIU51bWJlci5pc0ludGVnZXIoaSl8fGk8MCkmJihpPTApO3RoaXMuZGF0YS5tYXhMZW49aTt0aGlzLmRhdGEubXVsdGlMaW5lPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSUxJTkUpO3RoaXMuZGF0YS5jb21iPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSUxJTkUpJiYhdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5GSUxFU0VMRUNUKSYmMCE9PXRoaXMuZGF0YS5tYXhMZW47dGhpcy5kYXRhLmRvTm90U2Nyb2xsPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5ET05PVFNDUk9MTCl9X2dldENvbWJBcHBlYXJhbmNlKGUsdCxhLGkscyxvLGMpe2NvbnN0IGw9KDAsbi5udW1iZXJUb1N0cmluZykoaS90aGlzLmRhdGEubWF4TGVuKSxoPVtdLHU9dC5nZXRDaGFyUG9zaXRpb25zKGEpO2Zvcihjb25zdFtlLHRdb2YgdSloLnB1c2goYCgkeygwLHIuZXNjYXBlU3RyaW5nKShhLnN1YnN0cmluZyhlLHQpKX0pIFRqYCk7cmV0dXJuYC9UeCBCTUMgcSAke3RoaXMuZ2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGMpfUJUIGArZStgIDEgMCAwIDEgJHtzfSAke299IFRtICR7aC5qb2luKGAgJHtsfSAwIFRkIGApfSBFVCBRIEVNQ2B9X2dldE11bHRpbGluZUFwcGVhcmFuY2UoZSx0LGEscixuLGkscyxvLGMsbCl7Y29uc3QgaD10LnNwbGl0KC9cclxuP3xcbi8pLHU9W10sZD1uLTIqbztmb3IoY29uc3QgZSBvZiBoKXtjb25zdCB0PXRoaXMuX3NwbGl0TGluZShlLGEscixkKTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PTA9PT11Lmxlbmd0aD9vOjA7dS5wdXNoKHRoaXMuX3JlbmRlclRleHQoZSxhLHIsbixzLHQsLXIpKX19Y29uc3QgZj11LmpvaW4oIlxuIik7cmV0dXJuYC9UeCBCTUMgcSAke3RoaXMuZ2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGwpfUJUIGArZStgIDEgMCAwIDEgMCAke2l9IFRtICR7Zn0gRVQgUSBFTUNgfV9zcGxpdExpbmUoZSx0LGEscixuPXt9KXtlPW4ubGluZXx8dC5lbmNvZGVTdHJpbmcoZSkuam9pbigiIik7Y29uc3QgaT1uLmdseXBoc3x8dC5jaGFyc1RvR2x5cGhzKGUpO2lmKGkubGVuZ3RoPD0xKXJldHVybltlXTtjb25zdCBzPW4ucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSksbz1hLzFlMyxjPVtdO2xldCBsPS0xLGg9LTEsdT0tMSxkPTAsZj0wO2ZvcihsZXQgdD0wLGE9aS5sZW5ndGg7dDxhO3QrKyl7Y29uc3RbYSxuXT1zW3RdLGc9aVt0XSxwPWcud2lkdGgqbztpZigiICI9PT1nLnVuaWNvZGUpaWYoZitwPnIpe2MucHVzaChlLnN1YnN0cmluZyhkLGEpKTtkPWE7Zj1wO2w9LTE7dT0tMX1lbHNle2YrPXA7bD1hO2g9bjt1PXR9ZWxzZSBpZihmK3A+cilpZigtMSE9PWwpe2MucHVzaChlLnN1YnN0cmluZyhkLGgpKTtkPWg7dD11KzE7bD0tMTtmPTB9ZWxzZXtjLnB1c2goZS5zdWJzdHJpbmcoZCxhKSk7ZD1hO2Y9cH1lbHNlIGYrPXB9ZDxlLmxlbmd0aCYmYy5wdXNoKGUuc3Vic3RyaW5nKGQsZS5sZW5ndGgpKTtyZXR1cm4gY31nZXRGaWVsZE9iamVjdCgpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWUsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZXx8IiIsbXVsdGlsaW5lOnRoaXMuZGF0YS5tdWx0aUxpbmUscGFzc3dvcmQ6dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZToidGV4dCJ9fX1jbGFzcyBCdXR0b25XaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW51bGw7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPW51bGw7dGhpcy5kYXRhLmNoZWNrQm94PSF0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pJiYhdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO3RoaXMuZGF0YS5yYWRpb0J1dHRvbj10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pJiYhdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO3RoaXMuZGF0YS5wdXNoQnV0dG9uPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTt0aGlzLmRhdGEuaXNUb29sdGlwT25seT0hMTtpZih0aGlzLmRhdGEuY2hlY2tCb3gpdGhpcy5fcHJvY2Vzc0NoZWNrQm94KGUpO2Vsc2UgaWYodGhpcy5kYXRhLnJhZGlvQnV0dG9uKXRoaXMuX3Byb2Nlc3NSYWRpb0J1dHRvbihlKTtlbHNlIGlmKHRoaXMuZGF0YS5wdXNoQnV0dG9uKXt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPSEwO3RoaXMuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpfWVsc2UoMCxyLndhcm4pKCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb24iKX1hc3luYyBnZXRPcGVyYXRvckxpc3QoZSx0LGEsbixpKXtpZih0aGlzLmRhdGEucHVzaEJ1dHRvbilyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLCExLGkpO2xldCBzPW51bGwsbz1udWxsO2lmKGkpe2NvbnN0IGU9aS5nZXQodGhpcy5kYXRhLmlkKTtzPWU/ZS52YWx1ZTpudWxsO289ZT9lLnJvdGF0aW9uOm51bGx9aWYobnVsbD09PXMmJnRoaXMuYXBwZWFyYW5jZSlyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7bnVsbD09cyYmKHM9dGhpcy5kYXRhLmNoZWNrQm94P3RoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlKTtjb25zdCBjPXM/dGhpcy5jaGVja2VkQXBwZWFyYW5jZTp0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U7aWYoYyl7Y29uc3Qgcz10aGlzLmFwcGVhcmFuY2UsbD1jLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpfHxyLklERU5USVRZX01BVFJJWDtvJiZjLmRpY3Quc2V0KCJNYXRyaXgiLHRoaXMuZ2V0Um90YXRpb25NYXRyaXgoaSkpO3RoaXMuYXBwZWFyYW5jZT1jO2NvbnN0IGg9c3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7dGhpcy5hcHBlYXJhbmNlPXM7Yy5kaWN0LnNldCgiTWF0cml4IixsKTtyZXR1cm4gaH1yZXR1cm57b3BMaXN0Om5ldyBnLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fWFzeW5jIHNhdmUoZSx0LGEpe3JldHVybiB0aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5fc2F2ZUNoZWNrYm94KGUsdCxhKTp0aGlzLmRhdGEucmFkaW9CdXR0b24/dGhpcy5fc2F2ZVJhZGlvQnV0dG9uKGUsdCxhKTpudWxsfWFzeW5jIF9zYXZlQ2hlY2tib3goZSx0LGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49YS5nZXQodGhpcy5kYXRhLmlkKTtsZXQgaT1uJiZuLnJvdGF0aW9uLGM9biYmbi52YWx1ZTtpZih2b2lkIDA9PT1pKXtpZih2b2lkIDA9PT1jKXJldHVybiBudWxsO2lmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlPT09YylyZXR1cm4gbnVsbH1jb25zdCBsPWUueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKGwgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybiBudWxsO3ZvaWQgMD09PWkmJihpPXRoaXMucm90YXRpb24pO3ZvaWQgMD09PWMmJihjPXRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlKTtjb25zdCBoPXtwYXRoOigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGwuZ2V0KCJUIil8fCIiKSx2YWx1ZTpjP3RoaXMuZGF0YS5leHBvcnRWYWx1ZToiIn0sdT1zLk5hbWUuZ2V0KGM/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiJPZmYiKTtsLnNldCgiViIsdSk7bC5zZXQoIkFTIix1KTtsLnNldCgiTSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7Y29uc3QgZD10aGlzLl9nZXRNS0RpY3QoaSk7ZCYmbC5zZXQoIk1LIixkKTtjb25zdCBmPWUueHJlZi5lbmNyeXB0O2xldCBnPW51bGw7ZiYmKGc9Zi5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLHRoaXMucmVmLmdlbikpO2NvbnN0IHA9W2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxuYF07KDAsby53cml0ZURpY3QpKGwscCxnKTtwLnB1c2goIlxuZW5kb2JqXG4iKTtyZXR1cm5be3JlZjp0aGlzLnJlZixkYXRhOnAuam9pbigiIikseGZhOmh9XX1hc3luYyBfc2F2ZVJhZGlvQnV0dG9uKGUsdCxhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBuPWEuZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IGk9biYmbi5yb3RhdGlvbixjPW4mJm4udmFsdWU7aWYodm9pZCAwPT09aSl7aWYodm9pZCAwPT09YylyZXR1cm4gbnVsbDtpZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZT09PWMpcmV0dXJuIG51bGx9Y29uc3QgbD1lLnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZik7aWYoIShsIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm4gbnVsbDt2b2lkIDA9PT1jJiYoYz10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSk7dm9pZCAwPT09aSYmKGk9dGhpcy5yb3RhdGlvbik7Y29uc3QgaD17cGF0aDooMCxyLnN0cmluZ1RvUERGU3RyaW5nKShsLmdldCgiVCIpfHwiIiksdmFsdWU6Yz90aGlzLmRhdGEuYnV0dG9uVmFsdWU6IiJ9LHU9cy5OYW1lLmdldChjP3RoaXMuZGF0YS5idXR0b25WYWx1ZToiT2ZmIik7bGV0IGQ9bnVsbDtjb25zdCBmPWUueHJlZi5lbmNyeXB0O2lmKGMpaWYodGhpcy5wYXJlbnQgaW5zdGFuY2VvZiBzLlJlZil7Y29uc3QgdD1lLnhyZWYuZmV0Y2godGhpcy5wYXJlbnQpO2xldCBhPW51bGw7ZiYmKGE9Zi5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5wYXJlbnQubnVtLHRoaXMucGFyZW50LmdlbikpO3Quc2V0KCJWIix1KTtkPVtgJHt0aGlzLnBhcmVudC5udW19ICR7dGhpcy5wYXJlbnQuZ2VufSBvYmpcbmBdOygwLG8ud3JpdGVEaWN0KSh0LGQsYSk7ZC5wdXNoKCJcbmVuZG9ialxuIil9ZWxzZSB0aGlzLnBhcmVudCBpbnN0YW5jZW9mIHMuRGljdCYmdGhpcy5wYXJlbnQuc2V0KCJWIix1KTtsLnNldCgiQVMiLHUpO2wuc2V0KCJNIixgRDokeygwLHIuZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKX1gKTtjb25zdCBnPXRoaXMuX2dldE1LRGljdChpKTtnJiZsLnNldCgiTUsiLGcpO2xldCBwPW51bGw7ZiYmKHA9Zi5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLHRoaXMucmVmLmdlbikpO2NvbnN0IG09W2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxuYF07KDAsby53cml0ZURpY3QpKGwsbSxwKTttLnB1c2goIlxuZW5kb2JqXG4iKTtjb25zdCBiPVt7cmVmOnRoaXMucmVmLGRhdGE6bS5qb2luKCIiKSx4ZmE6aH1dO251bGwhPT1kJiZiLnB1c2goe3JlZjp0aGlzLnBhcmVudCxkYXRhOmQuam9pbigiIikseGZhOm51bGx9KTtyZXR1cm4gYn1fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsdCl7Y29uc3QgYT10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSxpPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLG89WzAsMCxhLGldLGM9LjgqTWF0aC5taW4oYSxpKTtsZXQgbCxoO2lmKCJjaGVjayI9PT10KXtsPXt3aWR0aDouNzU1KmMsaGVpZ2h0Oi43MDUqY307aD0iMyJ9ZWxzZSBpZigiZGlzYyI9PT10KXtsPXt3aWR0aDouNzkxKmMsaGVpZ2h0Oi43MDUqY307aD0ibCJ9ZWxzZSgwLHIudW5yZWFjaGFibGUpKGBfZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlIC0gdW5zdXBwb3J0ZWQgdHlwZTogJHt0fWApO2NvbnN0IHU9YHEgQlQgL1BkZkpzWmFEYiAke2N9IFRmIDAgZyAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKChhLWwud2lkdGgpLzIpfSAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKChpLWwuaGVpZ2h0KS8yKX0gVGQgKCR7aH0pIFRqIEVUIFFgLGQ9bmV3IHMuRGljdChlLnhyZWYpO2Quc2V0KCJGb3JtVHlwZSIsMSk7ZC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7ZC5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSk7ZC5zZXQoIkJCb3giLG8pO2Quc2V0KCJNYXRyaXgiLFsxLDAsMCwxLDAsMF0pO2Quc2V0KCJMZW5ndGgiLHUubGVuZ3RoKTtjb25zdCBmPW5ldyBzLkRpY3QoZS54cmVmKSxnPW5ldyBzLkRpY3QoZS54cmVmKTtnLnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpO2Yuc2V0KCJGb250IixnKTtkLnNldCgiUmVzb3VyY2VzIixmKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBwLlN0cmluZ1N0cmVhbSh1KTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3Q9ZDt0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSl9X3Byb2Nlc3NDaGVja0JveChlKXtjb25zdCB0PWUuZGljdC5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgYT10LmdldCgiTiIpO2lmKCEoYSBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IHI9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgciYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXIpO2NvbnN0IG49bnVsbCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiYiT2ZmIiE9PXRoaXMuZGF0YS5maWVsZFZhbHVlP3RoaXMuZGF0YS5maWVsZFZhbHVlOiJZZXMiLGk9YS5nZXRLZXlzKCk7aWYoMD09PWkubGVuZ3RoKWkucHVzaCgiT2ZmIixuKTtlbHNlIGlmKDE9PT1pLmxlbmd0aCkiT2ZmIj09PWlbMF0/aS5wdXNoKG4pOmkudW5zaGlmdCgiT2ZmIik7ZWxzZSBpZihpLmluY2x1ZGVzKG4pKXtpLmxlbmd0aD0wO2kucHVzaCgiT2ZmIixuKX1lbHNle2NvbnN0IGU9aS5maW5kKChlPT4iT2ZmIiE9PWUpKTtpLmxlbmd0aD0wO2kucHVzaCgiT2ZmIixlKX1pLmluY2x1ZGVzKHRoaXMuZGF0YS5maWVsZFZhbHVlKXx8KHRoaXMuZGF0YS5maWVsZFZhbHVlPSJPZmYiKTt0aGlzLmRhdGEuZXhwb3J0VmFsdWU9aVsxXTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPWEuZ2V0KHRoaXMuZGF0YS5leHBvcnRWYWx1ZSl8fG51bGw7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPWEuZ2V0KCJPZmYiKXx8bnVsbDt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlP3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTp0aGlzLl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UoZSwiY2hlY2siKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9dGhpcy5mYWxsYmFja0ZvbnREaWN0fV9wcm9jZXNzUmFkaW9CdXR0b24oZSl7dGhpcy5kYXRhLmZpZWxkVmFsdWU9dGhpcy5kYXRhLmJ1dHRvblZhbHVlPW51bGw7Y29uc3QgdD1lLmRpY3QuZ2V0KCJQYXJlbnQiKTtpZih0IGluc3RhbmNlb2Ygcy5EaWN0KXt0aGlzLnBhcmVudD1lLmRpY3QuZ2V0UmF3KCJQYXJlbnQiKTtjb25zdCBhPXQuZ2V0KCJWIik7YSBpbnN0YW5jZW9mIHMuTmFtZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShhKSl9Y29uc3QgYT1lLmRpY3QuZ2V0KCJBUCIpO2lmKCEoYSBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IHI9YS5nZXQoIk4iKTtpZihyIGluc3RhbmNlb2Ygcy5EaWN0KXtmb3IoY29uc3QgZSBvZiByLmdldEtleXMoKSlpZigiT2ZmIiE9PWUpe3RoaXMuZGF0YS5idXR0b25WYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUoZSk7YnJlYWt9dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1yLmdldCh0aGlzLmRhdGEuYnV0dG9uVmFsdWUpfHxudWxsO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1yLmdldCgiT2ZmIil8fG51bGw7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT90aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSk6dGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsImRpc2MiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9dGhpcy5mYWxsYmFja0ZvbnREaWN0fX1fcHJvY2Vzc1B1c2hCdXR0b24oZSl7aWYoZS5kaWN0LmhhcygiQSIpfHxlLmRpY3QuaGFzKCJBQSIpfHx0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KXt0aGlzLmRhdGEuaXNUb29sdGlwT25seT0hZS5kaWN0LmhhcygiQSIpJiYhZS5kaWN0LmhhcygiQUEiKTtoLkNhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6ZS5kaWN0LHJlc3VsdE9iajp0aGlzLmRhdGEsZG9jQmFzZVVybDplLnBkZk1hbmFnZXIuZG9jQmFzZVVybCxkb2NBdHRhY2htZW50czplLmF0dGFjaG1lbnRzfSl9ZWxzZSgwLHIud2FybikoIlB1c2ggYnV0dG9ucyB3aXRob3V0IGFjdGlvbiBkaWN0aW9uYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKX1nZXRGaWVsZE9iamVjdCgpe2xldCBlLHQ9ImJ1dHRvbiI7aWYodGhpcy5kYXRhLmNoZWNrQm94KXt0PSJjaGVja2JveCI7ZT10aGlzLmRhdGEuZXhwb3J0VmFsdWV9ZWxzZSBpZih0aGlzLmRhdGEucmFkaW9CdXR0b24pe3Q9InJhZGlvYnV0dG9uIjtlPXRoaXMuZGF0YS5idXR0b25WYWx1ZX1yZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlfHwiT2ZmIixkZWZhdWx0VmFsdWU6dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGV4cG9ydFZhbHVlczplLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZTp0fX1nZXQgZmFsbGJhY2tGb250RGljdCgpe2NvbnN0IGU9bmV3IHMuRGljdDtlLnNldCgiQmFzZUZvbnQiLHMuTmFtZS5nZXQoIlphcGZEaW5nYmF0cyIpKTtlLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixzLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHNFbmNvZGluZyIpKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fWNsYXNzIENob2ljZVdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5vcHRpb25zPVtdO2NvbnN0IHQ9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDplLmRpY3Qsa2V5OiJPcHQifSk7aWYoQXJyYXkuaXNBcnJheSh0KSl7Y29uc3QgYT1lLnhyZWY7Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7ZSsrKXtjb25zdCByPWEuZmV0Y2hJZlJlZih0W2VdKSxuPUFycmF5LmlzQXJyYXkocik7dGhpcy5kYXRhLm9wdGlvbnNbZV09e2V4cG9ydFZhbHVlOnRoaXMuX2RlY29kZUZvcm1WYWx1ZShuP2EuZmV0Y2hJZlJlZihyWzBdKTpyKSxkaXNwbGF5VmFsdWU6dGhpcy5fZGVjb2RlRm9ybVZhbHVlKG4/YS5mZXRjaElmUmVmKHJbMV0pOnIpfX19InN0cmluZyI9PXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZT1bdGhpcy5kYXRhLmZpZWxkVmFsdWVdOnRoaXMuZGF0YS5maWVsZFZhbHVlfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9W10pO3RoaXMuZGF0YS5jb21ibz10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQk8pO3RoaXMuZGF0YS5tdWx0aVNlbGVjdD10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElTRUxFQ1QpO3RoaXMuX2hhc1RleHQ9ITB9Z2V0RmllbGRPYmplY3QoKXtjb25zdCBlPXRoaXMuZGF0YS5jb21ibz8iY29tYm9ib3giOiJsaXN0Ym94Iix0PXRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wP3RoaXMuZGF0YS5maWVsZFZhbHVlWzBdOm51bGw7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0LGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxudW1JdGVtczp0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGgsbXVsdGlwbGVTZWxlY3Rpb246dGhpcy5kYXRhLm11bHRpU2VsZWN0LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsaXRlbXM6dGhpcy5kYXRhLm9wdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6ZX19YXN5bmMgX2dldEFwcGVhcmFuY2UoZSx0LGEpe2lmKHRoaXMuZGF0YS5jb21ibylyZXR1cm4gc3VwZXIuX2dldEFwcGVhcmFuY2UoZSx0LGEpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49YS5nZXQodGhpcy5kYXRhLmlkKTtpZighbilyZXR1cm4gbnVsbDtjb25zdCBzPW4ucm90YXRpb247bGV0IG89bi52YWx1ZTtpZih2b2lkIDA9PT1zJiZ2b2lkIDA9PT1vKXJldHVybiBudWxsO3ZvaWQgMD09PW8/bz10aGlzLmRhdGEuZmllbGRWYWx1ZTpBcnJheS5pc0FycmF5KG8pfHwobz1bb10pO2xldCBjPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLGw9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF07OTAhPT1zJiYyNzAhPT1zfHwoW2wsY109W2MsbF0pO2NvbnN0IGg9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoLHU9W107Zm9yKGxldCBlPTA7ZTxoO2UrKyl7Y29uc3R7ZXhwb3J0VmFsdWU6dH09dGhpcy5kYXRhLm9wdGlvbnNbZV07by5pbmNsdWRlcyh0KSYmdS5wdXNoKGUpfXRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT0oMCxpLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpO2NvbnN0IGQ9YXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEoZSx0LHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKTtsZXQgZix7Zm9udFNpemU6Z309dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTtpZihnKWY9dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U7ZWxzZXtjb25zdCBlPShjLTIpL2g7bGV0IHQsYT0tMTtmb3IoY29uc3R7ZGlzcGxheVZhbHVlOmV9b2YgdGhpcy5kYXRhLm9wdGlvbnMpe2NvbnN0IHI9dGhpcy5fZ2V0VGV4dFdpZHRoKGUsZCk7aWYocj5hKXthPXI7dD1lfX1bZixnXT10aGlzLl9jb21wdXRlRm9udFNpemUoZSxsLTQsdCxkLC0xKX1jb25zdCBwPWcqci5MSU5FX0ZBQ1RPUixtPShwLWcpLzIsYj1NYXRoLmZsb29yKGMvcCk7bGV0IHk7aWYoMT09PXUubGVuZ3RoKXtjb25zdCBlPXVbMF07eT1lLWUlYn1lbHNlIHk9dS5sZW5ndGg/dVswXTowO2NvbnN0IHc9TWF0aC5taW4oeStiKzEsaCksUz1bIi9UeCBCTUMgcSIsYDEgMSAke2x9ICR7Y30gcmUgVyBuYF07aWYodS5sZW5ndGgpe1MucHVzaCgiMC42MDAwMDYgMC43NTY4NjYgMC44NTQ5MDQgcmciKTtmb3IoY29uc3QgZSBvZiB1KXk8PWUmJmU8dyYmUy5wdXNoKGAxICR7Yy0oZS15KzEpKnB9ICR7bH0gJHtwfSByZSBmYCl9Uy5wdXNoKCJCVCIsZixgMSAwIDAgMSAwICR7Y30gVG1gKTtmb3IobGV0IGU9eTtlPHc7ZSsrKXtjb25zdHtkaXNwbGF5VmFsdWU6dH09dGhpcy5kYXRhLm9wdGlvbnNbZV0sYT1lPT09eT8yOjAscj1lPT09eT9tOjA7Uy5wdXNoKHRoaXMuX3JlbmRlclRleHQodCxkLGcsbCwwLGEsLXArcikpfVMucHVzaCgiRVQgUSBFTUMiKTtyZXR1cm4gUy5qb2luKCJcbiIpfX1jbGFzcyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuZmllbGRWYWx1ZT1udWxsfWdldEZpZWxkT2JqZWN0KCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19Y2xhc3MgVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0IHQ9ZS5kaWN0O3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlRFWFQ7aWYodGhpcy5kYXRhLmhhc0FwcGVhcmFuY2UpdGhpcy5kYXRhLm5hbWU9Ik5vSWNvbiI7ZWxzZXt0aGlzLmRhdGEucmVjdFsxXT10aGlzLmRhdGEucmVjdFszXS0yMjt0aGlzLmRhdGEucmVjdFsyXT10aGlzLmRhdGEucmVjdFswXSsyMjt0aGlzLmRhdGEubmFtZT10LmhhcygiTmFtZSIpP3QuZ2V0KCJOYW1lIikubmFtZToiTm90ZSJ9aWYodC5oYXMoIlN0YXRlIikpe3RoaXMuZGF0YS5zdGF0ZT10LmdldCgiU3RhdGUiKXx8bnVsbDt0aGlzLmRhdGEuc3RhdGVNb2RlbD10LmdldCgiU3RhdGVNb2RlbCIpfHxudWxsfWVsc2V7dGhpcy5kYXRhLnN0YXRlPW51bGw7dGhpcy5kYXRhLnN0YXRlTW9kZWw9bnVsbH19fWNsYXNzIExpbmtBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5MSU5LO2NvbnN0IHQ9Z2V0UXVhZFBvaW50cyhlLmRpY3QsdGhpcy5yZWN0YW5nbGUpO3QmJih0aGlzLmRhdGEucXVhZFBvaW50cz10KTt0aGlzLmRhdGEuYm9yZGVyQ29sb3I9dGhpcy5kYXRhLmJvcmRlckNvbG9yfHx0aGlzLmRhdGEuY29sb3I7aC5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUuZGljdCxyZXN1bHRPYmo6dGhpcy5kYXRhLGRvY0Jhc2VVcmw6ZS5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwsZG9jQXR0YWNobWVudHM6ZS5hdHRhY2htZW50c30pfX1jbGFzcyBQb3B1cEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlBPUFVQO2xldCB0PWUuZGljdC5nZXQoIlBhcmVudCIpO2lmKCF0KXsoMCxyLndhcm4pKCJQb3B1cCBhbm5vdGF0aW9uIGhhcyBhIG1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnQgYW5ub3RhdGlvbi4iKTtyZXR1cm59Y29uc3QgYT10LmdldCgiU3VidHlwZSIpO3RoaXMuZGF0YS5wYXJlbnRUeXBlPWEgaW5zdGFuY2VvZiBzLk5hbWU/YS5uYW1lOm51bGw7Y29uc3Qgbj1lLmRpY3QuZ2V0UmF3KCJQYXJlbnQiKTt0aGlzLmRhdGEucGFyZW50SWQ9biBpbnN0YW5jZW9mIHMuUmVmP24udG9TdHJpbmcoKTpudWxsO2NvbnN0IGk9dC5nZXRBcnJheSgiUmVjdCIpO0FycmF5LmlzQXJyYXkoaSkmJjQ9PT1pLmxlbmd0aD90aGlzLmRhdGEucGFyZW50UmVjdD1yLlV0aWwubm9ybWFsaXplUmVjdChpKTp0aGlzLmRhdGEucGFyZW50UmVjdD1bMCwwLDAsMF07Y29uc3Qgbz10LmdldCgiUlQiKTsoMCxzLmlzTmFtZSkobyxyLkFubm90YXRpb25SZXBseVR5cGUuR1JPVVApJiYodD10LmdldCgiSVJUIikpO2lmKHQuaGFzKCJNIikpe3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZSh0LmdldCgiTSIpKTt0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT10aGlzLm1vZGlmaWNhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT1udWxsO2lmKHQuaGFzKCJDIikpe3RoaXMuc2V0Q29sb3IodC5nZXRBcnJheSgiQyIpKTt0aGlzLmRhdGEuY29sb3I9dGhpcy5jb2xvcn1lbHNlIHRoaXMuZGF0YS5jb2xvcj1udWxsO2lmKCF0aGlzLnZpZXdhYmxlKXtjb25zdCBlPXQuZ2V0KCJGIik7dGhpcy5faXNWaWV3YWJsZShlKSYmdGhpcy5zZXRGbGFncyhlKX10aGlzLnNldFRpdGxlKHQuZ2V0KCJUIikpO3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENvbnRlbnRzKHQuZ2V0KCJDb250ZW50cyIpKTt0aGlzLmRhdGEuY29udGVudHNPYmo9dGhpcy5fY29udGVudHM7dC5oYXMoIlJDIikmJih0aGlzLmRhdGEucmljaFRleHQ9bS5YRkFGYWN0b3J5LmdldFJpY2hUZXh0QXNIdG1sKHQuZ2V0KCJSQyIpKSl9fXQuUG9wdXBBbm5vdGF0aW9uPVBvcHVwQW5ub3RhdGlvbjtjbGFzcyBGcmVlVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkZSRUVURVhUfWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiEhdGhpcy5hcHBlYXJhbmNlfXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6YSxhcDpufSl7Y29uc3R7Y29sb3I6byxmb250U2l6ZTpjLHJlY3Q6bCxyb3RhdGlvbjpoLHVzZXI6dSx2YWx1ZTpkfT1lLGY9bmV3IHMuRGljdCh0KTtmLnNldCgiVHlwZSIscy5OYW1lLmdldCgiQW5ub3QiKSk7Zi5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZyZWVUZXh0IikpO2Yuc2V0KCJDcmVhdGlvbkRhdGUiLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2Yuc2V0KCJSZWN0IixsKTtjb25zdCBnPWAvSGVsdiAke2N9IFRmICR7KDAsaS5nZXRQZGZDb2xvcikobywhMCl9YDtmLnNldCgiREEiLGcpO2Yuc2V0KCJDb250ZW50cyIsZCk7Zi5zZXQoIkYiLDQpO2Yuc2V0KCJCb3JkZXIiLFswLDAsMF0pO2Yuc2V0KCJSb3RhdGUiLGgpO3UmJmYuc2V0KCJUIiwoMCxyLnN0cmluZ1RvVVRGOFN0cmluZykodSkpO2NvbnN0IHA9bmV3IHMuRGljdCh0KTtmLnNldCgiQVAiLHApO2E/cC5zZXQoIk4iLGEpOnAuc2V0KCJOIixuKTtyZXR1cm4gZn1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7Y29uc3R7YmFzZUZvbnRSZWY6byxldmFsdWF0b3I6Yyx0YXNrOmx9PWEse2NvbG9yOmgsZm9udFNpemU6dSxyZWN0OmQscm90YXRpb246Zix2YWx1ZTpnfT1lLG09bmV3IHMuRGljdCh0KSxiPW5ldyBzLkRpY3QodCk7aWYobyliLnNldCgiSGVsdiIsbyk7ZWxzZXtjb25zdCBlPW5ldyBzLkRpY3QodCk7ZS5zZXQoIkJhc2VGb250IixzLk5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkZvbnQiKSk7ZS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIlR5cGUxIikpO2Uuc2V0KCJFbmNvZGluZyIscy5OYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO2Iuc2V0KCJIZWx2IixlKX1tLnNldCgiRm9udCIsYik7Y29uc3QgeT1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShjLGwse2ZvbnROYW1lOiJIZWx2ZXRpY2EiLGZvbnRTaXplOnV9LG0pLFt3LFMseCxrXT1kO2xldCBDPXgtdyx2PWstUztmJTE4MCE9MCYmKFtDLHZdPVt2LENdKTtjb25zdCBGPWcuc3BsaXQoIlxuIiksTz11LzFlMztsZXQgVD0tMS8wO2NvbnN0IE09W107Zm9yKGxldCBlIG9mIEYpe2U9eS5lbmNvZGVTdHJpbmcoZSkuam9pbigiIik7TS5wdXNoKGUpO2xldCB0PTA7Y29uc3QgYT15LmNoYXJzVG9HbHlwaHMoZSk7Zm9yKGNvbnN0IGUgb2YgYSl0Kz1lLndpZHRoKk87VD1NYXRoLm1heChULHQpfWxldCBFPTE7VD5DJiYoRT1DL1QpO2xldCBEPTE7Y29uc3QgTj1yLkxJTkVfRkFDVE9SKnUsUj1yLkxJTkVfREVTQ0VOVF9GQUNUT1IqdSxMPU4qRi5sZW5ndGg7TD52JiYoRD12L0wpO2NvbnN0IGo9dSpNYXRoLm1pbihFLEQpLCQ9WyJxIixgMCAwICR7KDAsbi5udW1iZXJUb1N0cmluZykoQyl9ICR7KDAsbi5udW1iZXJUb1N0cmluZykodil9IHJlIFcgbmAsIkJUIixgMSAwIDAgMSAwICR7KDAsbi5udW1iZXJUb1N0cmluZykoditSKX0gVG0gMCBUYyAkeygwLGkuZ2V0UGRmQ29sb3IpKGgsITApfWAsYC9IZWx2ICR7KDAsbi5udW1iZXJUb1N0cmluZykoail9IFRmYF0sXz0oMCxuLm51bWJlclRvU3RyaW5nKShOKTtmb3IoY29uc3QgZSBvZiBNKSQucHVzaChgMCAtJHtffSBUZCAoJHsoMCxyLmVzY2FwZVN0cmluZykoZSl9KSBUamApOyQucHVzaCgiRVQiLCJRIik7Y29uc3QgVT0kLmpvaW4oIlxuIiksWD1uZXcgcy5EaWN0KHQpO1guc2V0KCJGb3JtVHlwZSIsMSk7WC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7WC5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSk7WC5zZXQoIkJCb3giLFswLDAsQyx2XSk7WC5zZXQoIkxlbmd0aCIsVS5sZW5ndGgpO1guc2V0KCJSZXNvdXJjZXMiLG0pO2lmKGYpe2NvbnN0IGU9V2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Um90YXRpb25NYXRyaXgoZixDLHYpO1guc2V0KCJNYXRyaXgiLGUpfWNvbnN0IEg9bmV3IHAuU3RyaW5nU3RyZWFtKFUpO0guZGljdD1YO3JldHVybiBIfX1jbGFzcyBMaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkxJTkU7Y29uc3QgYT10LmdldEFycmF5KCJMIik7dGhpcy5kYXRhLmxpbmVDb29yZGluYXRlcz1yLlV0aWwubm9ybWFsaXplUmVjdChhKTt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IG49dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxpPXQuZ2V0KCJDQSIpO2xldCBzPW51bGwsbz10LmdldEFycmF5KCJJQyIpO2lmKG8pe289Z2V0UmdiQ29sb3IobyxudWxsKTtzPW8/QXJyYXkuZnJvbShvLChlPT5lLzI1NSkpOm51bGx9Y29uc3QgYz1zP2k6bnVsbCxsPXRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEsaD0yKmwsdT1bdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1swXS1oLHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMV0taCx0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzJdK2gsdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1szXStoXTtyLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLHUpfHwodGhpcy5yZWN0YW5nbGU9dSk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOmAke2x9IHdgLHN0cm9rZUNvbG9yOm4sZmlsbENvbG9yOnMsc3Ryb2tlQWxwaGE6aSxmaWxsQWxwaGE6Yyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaChgJHthWzBdfSAke2FbMV19IG1gLGAke2FbMl19ICR7YVszXX0gbGAsIlMiKTtyZXR1cm5bdFswXS54LWwsdFsxXS54K2wsdFszXS55LWwsdFsxXS55K2xdfX0pfX19Y2xhc3MgU3F1YXJlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuU1FVQVJFO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7bGV0IHI9bnVsbCxuPWUuZGljdC5nZXRBcnJheSgiSUMiKTtpZihuKXtuPWdldFJnYkNvbG9yKG4sbnVsbCk7cj1uP0FycmF5LmZyb20obiwoZT0+ZS8yNTUpKTpudWxsfWNvbnN0IGk9cj9hOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFyKXJldHVybjt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjplLnhyZWYsZXh0cmE6YCR7dGhpcy5ib3JkZXJTdHlsZS53aWR0aH0gd2Asc3Ryb2tlQ29sb3I6dCxmaWxsQ29sb3I6cixzdHJva2VBbHBoYTphLGZpbGxBbHBoYTppLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgYT10WzJdLngrdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLG49dFsyXS55K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixpPXRbM10ueC10WzJdLngtdGhpcy5ib3JkZXJTdHlsZS53aWR0aCxzPXRbMV0ueS10WzNdLnktdGhpcy5ib3JkZXJTdHlsZS53aWR0aDtlLnB1c2goYCR7YX0gJHtufSAke2l9ICR7c30gcmVgKTtyP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpO3JldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX19Y2xhc3MgQ2lyY2xlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7bGV0IHI9bnVsbCxuPWUuZGljdC5nZXRBcnJheSgiSUMiKTtpZihuKXtuPWdldFJnYkNvbG9yKG4sbnVsbCk7cj1uP0FycmF5LmZyb20obiwoZT0+ZS8yNTUpKTpudWxsfWNvbnN0IGk9cj9hOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFyKXJldHVybjtjb25zdCBzPTQvMypNYXRoLnRhbihNYXRoLlBJLzgpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmUueHJlZixleHRyYTpgJHt0aGlzLmJvcmRlclN0eWxlLndpZHRofSB3YCxzdHJva2VDb2xvcjp0LGZpbGxDb2xvcjpyLHN0cm9rZUFscGhhOmEsZmlsbEFscGhhOmkscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntjb25zdCBhPXRbMF0ueCt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzBdLnktdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLGk9dFszXS54LXRoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixvPXRbM10ueSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsYz1hKyhpLWEpLzIsbD1uKyhvLW4pLzIsaD0oaS1hKS8yKnMsdT0oby1uKS8yKnM7ZS5wdXNoKGAke2N9ICR7b30gbWAsYCR7YytofSAke299ICR7aX0gJHtsK3V9ICR7aX0gJHtsfSBjYCxgJHtpfSAke2wtdX0gJHtjK2h9ICR7bn0gJHtjfSAke259IGNgLGAke2MtaH0gJHtufSAke2F9ICR7bC11fSAke2F9ICR7bH0gY2AsYCR7YX0gJHtsK3V9ICR7Yy1ofSAke299ICR7Y30gJHtvfSBjYCwiaCIpO3I/ZS5wdXNoKCJCIik6ZS5wdXNoKCJTIik7cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fX1jbGFzcyBQb2x5bGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dH09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTt0aGlzLmRhdGEudmVydGljZXM9W107aWYoISh0aGlzIGluc3RhbmNlb2YgUG9seWdvbkFubm90YXRpb24pKXt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzfWNvbnN0IGE9dC5nZXRBcnJheSgiVmVydGljZXMiKTtpZihBcnJheS5pc0FycmF5KGEpKXtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKz0yKXRoaXMuZGF0YS52ZXJ0aWNlcy5wdXNoKHt4OmFbZV0seTphW2UrMV19KTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBhPXRoaXMuY29sb3I/QXJyYXkuZnJvbSh0aGlzLmNvbG9yLChlPT5lLzI1NSkpOlswLDAsMF0sbj10LmdldCgiQ0EiKSxpPXRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEscz0yKmksbz1bMS8wLDEvMCwtMS8wLC0xLzBdO2Zvcihjb25zdCBlIG9mIHRoaXMuZGF0YS52ZXJ0aWNlcyl7b1swXT1NYXRoLm1pbihvWzBdLGUueC1zKTtvWzFdPU1hdGgubWluKG9bMV0sZS55LXMpO29bMl09TWF0aC5tYXgob1syXSxlLngrcyk7b1szXT1NYXRoLm1heChvWzNdLGUueStzKX1yLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLG8pfHwodGhpcy5yZWN0YW5nbGU9byk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOmAke2l9IHdgLHN0cm9rZUNvbG9yOmEsc3Ryb2tlQWxwaGE6bixwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGE9dGhpcy5kYXRhLnZlcnRpY2VzO2ZvcihsZXQgdD0wLHI9YS5sZW5ndGg7dDxyO3QrKyllLnB1c2goYCR7YVt0XS54fSAke2FbdF0ueX0gJHswPT09dD8ibSI6ImwifWApO2UucHVzaCgiUyIpO3JldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX19fWNsYXNzIFBvbHlnb25Bbm5vdGF0aW9uIGV4dGVuZHMgUG9seWxpbmVBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlBPTFlHT059fWNsYXNzIENhcmV0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuQ0FSRVR9fWNsYXNzIElua0Fubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLklOSzt0aGlzLmRhdGEuaW5rTGlzdHM9W107Y29uc3QgdD1lLmRpY3QuZ2V0QXJyYXkoIklua0xpc3QiKTtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm47Y29uc3QgYT1lLnhyZWY7Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXt0aGlzLmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKGxldCByPTAsbj10W2VdLmxlbmd0aDtyPG47cis9Mil0aGlzLmRhdGEuaW5rTGlzdHNbZV0ucHVzaCh7eDphLmZldGNoSWZSZWYodFtlXVtyXSkseTphLmZldGNoSWZSZWYodFtlXVtyKzFdKX0pfWlmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIiksbj10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLGk9MipuLHM9WzEvMCwxLzAsLTEvMCwtMS8wXTtmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGEuaW5rTGlzdHMpZm9yKGNvbnN0IHQgb2YgZSl7c1swXT1NYXRoLm1pbihzWzBdLHQueC1pKTtzWzFdPU1hdGgubWluKHNbMV0sdC55LWkpO3NbMl09TWF0aC5tYXgoc1syXSx0LngraSk7c1szXT1NYXRoLm1heChzWzNdLHQueStpKX1yLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLHMpfHwodGhpcy5yZWN0YW5nbGU9cyk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOmAke259IHdgLHN0cm9rZUNvbG9yOnQsc3Ryb2tlQWxwaGE6YSxwb2ludHNDYWxsYmFjazooZSx0KT0+e2Zvcihjb25zdCB0IG9mIHRoaXMuZGF0YS5pbmtMaXN0cyl7Zm9yKGxldCBhPTAscj10Lmxlbmd0aDthPHI7YSsrKWUucHVzaChgJHt0W2FdLnh9ICR7dFthXS55fSAkezA9PT1hPyJtIjoibCJ9YCk7ZS5wdXNoKCJTIil9cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6YSxhcDpufSl7Y29uc3R7cGF0aHM6aSxyZWN0Om8scm90YXRpb246Y309ZSxsPW5ldyBzLkRpY3QodCk7bC5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkFubm90IikpO2wuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJJbmsiKSk7bC5zZXQoIkNyZWF0aW9uRGF0ZSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7bC5zZXQoIlJlY3QiLG8pO2wuc2V0KCJJbmtMaXN0IixpLm1hcCgoZT0+ZS5wb2ludHMpKSk7bC5zZXQoIkYiLDQpO2wuc2V0KCJCb3JkZXIiLFswLDAsMF0pO2wuc2V0KCJSb3RhdGUiLGMpO2NvbnN0IGg9bmV3IHMuRGljdCh0KTtsLnNldCgiQVAiLGgpO2E/aC5zZXQoIk4iLGEpOmguc2V0KCJOIixuKTtyZXR1cm4gbH1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7Y29uc3R7Y29sb3I6cixyZWN0Om8scm90YXRpb246YyxwYXRoczpsLHRoaWNrbmVzczpoLG9wYWNpdHk6dX09ZSxbZCxmLGcsbV09bztsZXQgYj1nLWQseT1tLWY7YyUxODAhPTAmJihbYix5XT1beSxiXSk7Y29uc3Qgdz1bYCR7aH0gdyAxIEogMSBqYCxgJHsoMCxpLmdldFBkZkNvbG9yKShyLCExKX1gXTsxIT09dSYmdy5wdXNoKCIvUjAgZ3MiKTtjb25zdCBTPVtdO2Zvcihjb25zdHtiZXppZXI6ZX1vZiBsKXtTLmxlbmd0aD0wO1MucHVzaChgJHsoMCxuLm51bWJlclRvU3RyaW5nKShlWzBdKX0gJHsoMCxuLm51bWJlclRvU3RyaW5nKShlWzFdKX0gbWApO2ZvcihsZXQgdD0yLGE9ZS5sZW5ndGg7dDxhO3QrPTYpe2NvbnN0IGE9ZS5zbGljZSh0LHQrNikubWFwKG4ubnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKTtTLnB1c2goYCR7YX0gY2ApfVMucHVzaCgiUyIpO3cucHVzaChTLmpvaW4oIlxuIikpfWNvbnN0IHg9dy5qb2luKCJcbiIpLGs9bmV3IHMuRGljdCh0KTtrLnNldCgiRm9ybVR5cGUiLDEpO2suc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO2suc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJYT2JqZWN0IikpO2suc2V0KCJCQm94IixbMCwwLGIseV0pO2suc2V0KCJMZW5ndGgiLHgubGVuZ3RoKTtpZihjKXtjb25zdCBlPVdpZGdldEFubm90YXRpb24uX2dldFJvdGF0aW9uTWF0cml4KGMsYix5KTtrLnNldCgiTWF0cml4IixlKX1pZigxIT09dSl7Y29uc3QgZT1uZXcgcy5EaWN0KHQpLGE9bmV3IHMuRGljdCh0KSxyPW5ldyBzLkRpY3QodCk7ci5zZXQoIkNBIix1KTtyLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRXh0R1N0YXRlIikpO2Euc2V0KCJSMCIscik7ZS5zZXQoIkV4dEdTdGF0ZSIsYSk7ay5zZXQoIlJlc291cmNlcyIsZSl9Y29uc3QgQz1uZXcgcC5TdHJpbmdTdHJlYW0oeCk7Qy5kaWN0PWs7cmV0dXJuIEN9fWNsYXNzIEhpZ2hsaWdodEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVDtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKGUuZGljdCxudWxsKSl7Y29uc3QgdD10aGlzLmFwcGVhcmFuY2UmJnRoaXMuYXBwZWFyYW5jZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7aWYoIXRoaXMuYXBwZWFyYW5jZXx8IXR8fCF0LmhhcygiRXh0R1N0YXRlIikpe3RoaXMuYXBwZWFyYW5jZSYmKDAsci53YXJuKSgiSGlnaGxpZ2h0QW5ub3RhdGlvbiAtIGlnbm9yaW5nIGJ1aWx0LWluIGFwcGVhcmFuY2Ugc3RyZWFtLiIpO2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzEsMSwwXSxhPWUuZGljdC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGZpbGxDb2xvcjp0LGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTphLHBvaW50c0NhbGxiYWNrOihlLHQpPT57ZS5wdXNoKGAke3RbMF0ueH0gJHt0WzBdLnl9IG1gLGAke3RbMV0ueH0gJHt0WzFdLnl9IGxgLGAke3RbM10ueH0gJHt0WzNdLnl9IGxgLGAke3RbMl0ueH0gJHt0WzJdLnl9IGxgLCJmIik7cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgdGhpcy5kYXRhLmhhc1BvcHVwPSExfX1jbGFzcyBVbmRlcmxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyhlLmRpY3QsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjp0LHN0cm9rZUFscGhhOmEscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goYCR7dFsyXS54fSAke3RbMl0ueX0gbWAsYCR7dFszXS54fSAke3RbM10ueX0gbGAsIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19ZWxzZSB0aGlzLmRhdGEuaGFzUG9wdXA9ITF9fWNsYXNzIFNxdWlnZ2x5QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuU1FVSUdHTFk7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyhlLmRpY3QsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjp0LHN0cm9rZUFscGhhOmEscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntjb25zdCBhPSh0WzBdLnktdFsyXS55KS82O2xldCByPWEsbj10WzJdLng7Y29uc3QgaT10WzJdLnkscz10WzNdLng7ZS5wdXNoKGAke259ICR7aStyfSBtYCk7ZG97bis9MjtyPTA9PT1yP2E6MDtlLnB1c2goYCR7bn0gJHtpK3J9IGxgKX13aGlsZShuPHMpO2UucHVzaCgiUyIpO3JldHVyblt0WzJdLngscyxpLTIqYSxpKzIqYV19fSl9fWVsc2UgdGhpcy5kYXRhLmhhc1BvcHVwPSExfX1jbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5TVFJJS0VPVVQ7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyhlLmRpY3QsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IHQ9dGhpcy5jb2xvcj9BcnJheS5mcm9tKHRoaXMuY29sb3IsKGU9PmUvMjU1KSk6WzAsMCwwXSxhPWUuZGljdC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZS54cmVmLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjp0LHN0cm9rZUFscGhhOmEscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goKHRbMF0ueCt0WzJdLngpLzIrIiAiKyh0WzBdLnkrdFsyXS55KS8yKyIgbSIsKHRbMV0ueCt0WzNdLngpLzIrIiAiKyh0WzFdLnkrdFszXS55KS8yKyIgbCIsIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19ZWxzZSB0aGlzLmRhdGEuaGFzUG9wdXA9ITF9fWNsYXNzIFN0YW1wQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuU1RBTVB9fWNsYXNzIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3QgdD1uZXcgZC5GaWxlU3BlYyhlLmRpY3QuZ2V0KCJGUyIpLGUueHJlZik7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ7dGhpcy5kYXRhLmZpbGU9dC5zZXJpYWxpemFibGV9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKHtmb250U2l6ZTplLGZvbnROYW1lOnQsZm9udENvbG9yOmF9KXtyZXR1cm5gLyR7KDAsci5lc2NhcGVQREZOYW1lKSh0KX0gJHtlfSBUZiAke2dldFBkZkNvbG9yKGEsITApfWB9O3QuZ2V0UGRmQ29sb3I9Z2V0UGRmQ29sb3I7dC5wYXJzZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uIHBhcnNlRGVmYXVsdEFwcGVhcmFuY2UoZSl7cmV0dXJuIG5ldyBEZWZhdWx0QXBwZWFyYW5jZUV2YWx1YXRvcihlKS5wYXJzZSgpfTt2YXIgcj1hKDQpLG49YSgyKSxpPWEoMTIpLHM9YSgxMyksbz1hKDMpLGM9YSg4KTtjbGFzcyBEZWZhdWx0QXBwZWFyYW5jZUV2YWx1YXRvciBleHRlbmRzIHMuRXZhbHVhdG9yUHJlcHJvY2Vzc29ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKG5ldyBjLlN0cmluZ1N0cmVhbShlKSl9cGFyc2UoKXtjb25zdCBlPXtmbjowLGFyZ3M6W119LHQ9e2ZvbnRTaXplOjAsZm9udE5hbWU6IiIsZm9udENvbG9yOm5ldyBVaW50OENsYW1wZWRBcnJheSgzKX07dHJ5e2Zvcig7Oyl7ZS5hcmdzLmxlbmd0aD0wO2lmKCF0aGlzLnJlYWQoZSkpYnJlYWs7aWYoMCE9PXRoaXMuc2F2ZWRTdGF0ZXNEZXB0aCljb250aW51ZTtjb25zdHtmbjphLGFyZ3M6cn09ZTtzd2l0Y2goMHxhKXtjYXNlIG4uT1BTLnNldEZvbnQ6Y29uc3RbZSxhXT1yO2UgaW5zdGFuY2VvZiBvLk5hbWUmJih0LmZvbnROYW1lPWUubmFtZSk7Im51bWJlciI9PXR5cGVvZiBhJiZhPjAmJih0LmZvbnRTaXplPWEpO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0RmlsbFJHQkNvbG9yOmkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2JJdGVtKHIsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIG4uT1BTLnNldEZpbGxHcmF5OmkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShyLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTppLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0ociwwLHQuZm9udENvbG9yLDApfX19Y2F0Y2goZSl7KDAsbi53YXJuKShgcGFyc2VEZWZhdWx0QXBwZWFyYW5jZSAtIGlnbm9yaW5nIGVycm9yczogIiR7ZX0iLmApfXJldHVybiB0fX1mdW5jdGlvbiBnZXRQZGZDb2xvcihlLHQpe2lmKGVbMF09PT1lWzFdJiZlWzFdPT09ZVsyXSl7Y29uc3QgYT1lWzBdLzI1NTtyZXR1cm5gJHsoMCxyLm51bWJlclRvU3RyaW5nKShhKX0gJHt0PyJnIjoiRyJ9YH1yZXR1cm4gQXJyYXkuZnJvbShlLChlPT4oMCxyLm51bWJlclRvU3RyaW5nKShlLzI1NSkpKS5qb2luKCIgIikrIiAiKyh0PyJyZyI6IlJHIil9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ29sb3JTcGFjZT12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDUpLHM9YSg0KTtjbGFzcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUNvbG9yU3BhY2UmJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBDb2xvclNwYWNlLiIpO3RoaXMubmFtZT1lO3RoaXMubnVtQ29tcHM9dH1nZXRSZ2IoZSx0KXtjb25zdCBhPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTt0aGlzLmdldFJnYkl0ZW0oZSx0LGEsMCk7cmV0dXJuIGF9Z2V0UmdiSXRlbShlLHQsYSxuKXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbSIpfWdldFJnYkJ1ZmZlcihlLHQsYSxuLGkscyxvKXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyIil9Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7KDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCIpfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuITF9aXNEZWZhdWx0RGVjb2RlKGUsdCl7cmV0dXJuIENvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKGUsdGhpcy5udW1Db21wcyl9ZmlsbFJnYihlLHQsYSxyLG4saSxzLG8sYyl7Y29uc3QgbD10KmE7bGV0IGg9bnVsbDtjb25zdCB1PTE8PHMsZD1hIT09bnx8dCE9PXI7aWYodGhpcy5pc1Bhc3N0aHJvdWdoKHMpKWg9bztlbHNlIGlmKDE9PT10aGlzLm51bUNvbXBzJiZsPnUmJiJEZXZpY2VHcmF5IiE9PXRoaXMubmFtZSYmIkRldmljZVJHQiIhPT10aGlzLm5hbWUpe2NvbnN0IHQ9czw9OD9uZXcgVWludDhBcnJheSh1KTpuZXcgVWludDE2QXJyYXkodSk7Zm9yKGxldCBlPTA7ZTx1O2UrKyl0W2VdPWU7Y29uc3QgYT1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyp1KTt0aGlzLmdldFJnYkJ1ZmZlcih0LDAsdSxhLDAscywwKTtpZihkKXtoPW5ldyBVaW50OEFycmF5KDMqbCk7bGV0IGU9MDtmb3IobGV0IHQ9MDt0PGw7Kyt0KXtjb25zdCByPTMqb1t0XTtoW2UrK109YVtyXTtoW2UrK109YVtyKzFdO2hbZSsrXT1hW3IrMl19fWVsc2V7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGw7KytyKXtjb25zdCBuPTMqb1tyXTtlW3QrK109YVtuXTtlW3QrK109YVtuKzFdO2VbdCsrXT1hW24rMl07dCs9Y319fWVsc2UgaWYoZCl7aD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMypsKTt0aGlzLmdldFJnYkJ1ZmZlcihvLDAsbCxoLDAscywwKX1lbHNlIHRoaXMuZ2V0UmdiQnVmZmVyKG8sMCxyKmksZSwwLHMsYyk7aWYoaClpZihkKSFmdW5jdGlvbiByZXNpemVSZ2JJbWFnZShlLHQsYSxyLG4saSxzKXtzPTEhPT1zPzA6cztjb25zdCBvPWEvbixjPXIvaTtsZXQgbCxoPTA7Y29uc3QgdT1uZXcgVWludDE2QXJyYXkobiksZD0zKmE7Zm9yKGxldCBlPTA7ZTxuO2UrKyl1W2VdPTMqTWF0aC5mbG9vcihlKm8pO2ZvcihsZXQgYT0wO2E8aTthKyspe2NvbnN0IHI9TWF0aC5mbG9vcihhKmMpKmQ7Zm9yKGxldCBhPTA7YTxuO2ErKyl7bD1yK3VbYV07dFtoKytdPWVbbCsrXTt0W2grK109ZVtsKytdO3RbaCsrXT1lW2wrK107aCs9c319fShoLGUsdCxhLHIsbixjKTtlbHNle2xldCB0PTAsYT0wO2ZvcihsZXQgbj0wLHM9cippO248cztuKyspe2VbdCsrXT1oW2ErK107ZVt0KytdPWhbYSsrXTtlW3QrK109aFthKytdO3QrPWN9fX1nZXQgdXNlc1plcm9Ub09uZVJhbmdlKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInVzZXNaZXJvVG9PbmVSYW5nZSIsITApfXN0YXRpYyBfY2FjaGUoZSx0LGEscil7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJsb2NhbENvbG9yU3BhY2VDYWNoZSIgYXJndW1lbnQuJyk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRDb2xvclNwYWNlIiBhcmd1bWVudC4nKTtsZXQgaSxzO2lmKGUgaW5zdGFuY2VvZiBuLlJlZil7cz1lO2U9dC5mZXRjaChlKX1lIGluc3RhbmNlb2Ygbi5OYW1lJiYoaT1lLm5hbWUpOyhpfHxzKSYmYS5zZXQoaSxzLHIpfXN0YXRpYyBnZXRDYWNoZWQoZSx0LGEpe2lmKCFhKXRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5nZXRDYWNoZWQgLSBleHBlY3RlZCAibG9jYWxDb2xvclNwYWNlQ2FjaGUiIGFyZ3VtZW50LicpO2lmKGUgaW5zdGFuY2VvZiBuLlJlZil7Y29uc3Qgcj1hLmdldEJ5UmVmKGUpO2lmKHIpcmV0dXJuIHI7dHJ5e2U9dC5mZXRjaChlKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlfX1pZihlIGluc3RhbmNlb2Ygbi5OYW1lKXtjb25zdCB0PWEuZ2V0QnlOYW1lKGUubmFtZSk7aWYodClyZXR1cm4gdH1yZXR1cm4gbnVsbH1zdGF0aWMgYXN5bmMgcGFyc2VBc3luYyh7Y3M6ZSx4cmVmOnQscmVzb3VyY2VzOmE9bnVsbCxwZGZGdW5jdGlvbkZhY3Rvcnk6cixsb2NhbENvbG9yU3BhY2VDYWNoZTpufSl7Y29uc3QgaT10aGlzLl9wYXJzZShlLHQsYSxyKTt0aGlzLl9jYWNoZShlLHQsbixpKTtyZXR1cm4gaX1zdGF0aWMgcGFyc2Uoe2NzOmUseHJlZjp0LHJlc291cmNlczphPW51bGwscGRmRnVuY3Rpb25GYWN0b3J5OnIsbG9jYWxDb2xvclNwYWNlQ2FjaGU6bn0pe2NvbnN0IGk9dGhpcy5nZXRDYWNoZWQoZSx0LG4pO2lmKGkpcmV0dXJuIGk7Y29uc3Qgcz10aGlzLl9wYXJzZShlLHQsYSxyKTt0aGlzLl9jYWNoZShlLHQsbixzKTtyZXR1cm4gc31zdGF0aWMgX3BhcnNlKGUsdCxhPW51bGwsaSl7aWYoKGU9dC5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2Ygbi5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiUGF0dGVybiI6cmV0dXJuIG5ldyBQYXR0ZXJuQ1MobnVsbCk7ZGVmYXVsdDppZihhIGluc3RhbmNlb2Ygbi5EaWN0KXtjb25zdCByPWEuZ2V0KCJDb2xvclNwYWNlIik7aWYociBpbnN0YW5jZW9mIG4uRGljdCl7Y29uc3Qgcz1yLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBuLk5hbWUpcmV0dXJuIHRoaXMuX3BhcnNlKHMsdCxhLGkpO2U9czticmVha319fXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogJHtlLm5hbWV9YCl9aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgbj10LmZldGNoSWZSZWYoZVswXSkubmFtZTtsZXQgcyxvLHUsZCxmLGc7c3dpdGNoKG4pe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiQ2FsR3JheSI6cz10LmZldGNoSWZSZWYoZVsxXSk7ZD1zLmdldEFycmF5KCJXaGl0ZVBvaW50Iik7Zj1zLmdldEFycmF5KCJCbGFja1BvaW50Iik7Zz1zLmdldCgiR2FtbWEiKTtyZXR1cm4gbmV3IGMoZCxmLGcpO2Nhc2UiQ2FsUkdCIjpzPXQuZmV0Y2hJZlJlZihlWzFdKTtkPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTtmPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTtnPXMuZ2V0QXJyYXkoIkdhbW1hIik7Y29uc3QgcD1zLmdldEFycmF5KCJNYXRyaXgiKTtyZXR1cm4gbmV3IGwoZCxmLGcscCk7Y2FzZSJJQ0NCYXNlZCI6Y29uc3QgbT10LmZldGNoSWZSZWYoZVsxXSkuZGljdDtvPW0uZ2V0KCJOIik7Y29uc3QgYj1tLmdldCgiQWx0ZXJuYXRlIik7aWYoYil7Y29uc3QgZT10aGlzLl9wYXJzZShiLHQsYSxpKTtpZihlLm51bUNvbXBzPT09bylyZXR1cm4gZTsoMCxyLndhcm4pKCJJQ0NCYXNlZCBjb2xvciBzcGFjZTogSWdub3JpbmcgaW5jb3JyZWN0IC9BbHRlcm5hdGUgZW50cnkuIil9aWYoMT09PW8pcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O2lmKDM9PT1vKXJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO2lmKDQ9PT1vKXJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215azticmVhaztjYXNlIlBhdHRlcm4iOnU9ZVsxXXx8bnVsbDt1JiYodT10aGlzLl9wYXJzZSh1LHQsYSxpKSk7cmV0dXJuIG5ldyBQYXR0ZXJuQ1ModSk7Y2FzZSJJIjpjYXNlIkluZGV4ZWQiOnU9dGhpcy5fcGFyc2UoZVsxXSx0LGEsaSk7Y29uc3QgeT10LmZldGNoSWZSZWYoZVsyXSkrMSx3PXQuZmV0Y2hJZlJlZihlWzNdKTtyZXR1cm4gbmV3IEluZGV4ZWRDUyh1LHksdyk7Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOmNvbnN0IFM9dC5mZXRjaElmUmVmKGVbMV0pO289QXJyYXkuaXNBcnJheShTKT9TLmxlbmd0aDoxO3U9dGhpcy5fcGFyc2UoZVsyXSx0LGEsaSk7Y29uc3QgeD1pLmNyZWF0ZShlWzNdKTtyZXR1cm4gbmV3IEFsdGVybmF0ZUNTKG8sdSx4KTtjYXNlIkxhYiI6cz10LmZldGNoSWZSZWYoZVsxXSk7ZD1zLmdldEFycmF5KCJXaGl0ZVBvaW50Iik7Zj1zLmdldEFycmF5KCJCbGFja1BvaW50Iik7Y29uc3Qgaz1zLmdldEFycmF5KCJSYW5nZSIpO3JldHVybiBuZXcgaChkLGYsayk7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5pbXBsZW1lbnRlZCBDb2xvclNwYWNlIG9iamVjdDogJHtufWApfX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5yZWNvZ25pemVkIENvbG9yU3BhY2Ugb2JqZWN0OiAke2V9YCl9c3RhdGljIGlzRGVmYXVsdERlY29kZShlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2lmKDIqdCE9PWUubGVuZ3RoKXsoMCxyLndhcm4pKCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoIik7cmV0dXJuITB9Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCs9MilpZigwIT09ZVt0XXx8MSE9PWVbdCsxXSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgZ2V0IHNpbmdsZXRvbnMoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywic2luZ2xldG9ucyIse2dldCBncmF5KCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImdyYXkiLG5ldyBEZXZpY2VHcmF5Q1MpfSxnZXQgcmdiKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInJnYiIsbmV3IERldmljZVJnYkNTKX0sZ2V0IGNteWsoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiY215ayIsbmV3IG8pfX0pfX10LkNvbG9yU3BhY2U9Q29sb3JTcGFjZTtjbGFzcyBBbHRlcm5hdGVDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJBbHRlcm5hdGUiLGUpO3RoaXMuYmFzZT10O3RoaXMudGludEZuPWE7dGhpcy50bXBCdWY9bmV3IEZsb2F0MzJBcnJheSh0Lm51bUNvbXBzKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2NvbnN0IG49dGhpcy50bXBCdWY7dGhpcy50aW50Rm4oZSx0LG4sMCk7dGhpcy5iYXNlLmdldFJnYkl0ZW0obiwwLGEscil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89dGhpcy50aW50Rm4sYz10aGlzLmJhc2UsbD0xLygoMTw8aSktMSksaD1jLm51bUNvbXBzLHU9Yy51c2VzWmVyb1RvT25lUmFuZ2UsZD0oYy5pc1Bhc3N0aHJvdWdoKDgpfHwhdSkmJjA9PT1zO2xldCBmPWQ/bjowO2NvbnN0IGc9ZD9yOm5ldyBVaW50OENsYW1wZWRBcnJheShoKmEpLHA9dGhpcy5udW1Db21wcyxtPW5ldyBGbG9hdDMyQXJyYXkocCksYj1uZXcgRmxvYXQzMkFycmF5KGgpO2xldCB5LHc7Zm9yKHk9MDt5PGE7eSsrKXtmb3Iodz0wO3c8cDt3KyspbVt3XT1lW3QrK10qbDtvKG0sMCxiLDApO2lmKHUpZm9yKHc9MDt3PGg7dysrKWdbZisrXT0yNTUqYlt3XTtlbHNle2MuZ2V0UmdiSXRlbShiLDAsZyxmKTtmKz1ofX1kfHxjLmdldFJnYkJ1ZmZlcihnLDAsYSxyLG4sOCxzKX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gdGhpcy5iYXNlLmdldE91dHB1dExlbmd0aChlKnRoaXMuYmFzZS5udW1Db21wcy90aGlzLm51bUNvbXBzLHQpfX1jbGFzcyBQYXR0ZXJuQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJQYXR0ZXJuIixudWxsKTt0aGlzLmJhc2U9ZX1pc0RlZmF1bHREZWNvZGUoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIFBhdHRlcm5DUy5pc0RlZmF1bHREZWNvZGUiKX19Y2xhc3MgSW5kZXhlZENTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoIkluZGV4ZWQiLDEpO3RoaXMuYmFzZT1lO3RoaXMuaGlnaFZhbD10O2NvbnN0IG49ZS5udW1Db21wcyp0O3RoaXMubG9va3VwPW5ldyBVaW50OEFycmF5KG4pO2lmKGEgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2NvbnN0IGU9YS5nZXRCeXRlcyhuKTt0aGlzLmxvb2t1cC5zZXQoZSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICR7YX1gKTtmb3IobGV0IGU9MDtlPG47KytlKXRoaXMubG9va3VwW2VdPTI1NSZhLmNoYXJDb2RlQXQoZSl9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29uc3Qgbj10aGlzLmJhc2UubnVtQ29tcHMsaT1lW3RdKm47dGhpcy5iYXNlLmdldFJnYkJ1ZmZlcih0aGlzLmxvb2t1cCxpLDEsYSxyLDgsMCl9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89dGhpcy5iYXNlLGM9by5udW1Db21wcyxsPW8uZ2V0T3V0cHV0TGVuZ3RoKGMscyksaD10aGlzLmxvb2t1cDtmb3IobGV0IGk9MDtpPGE7KytpKXtjb25zdCBhPWVbdCsrXSpjO28uZ2V0UmdiQnVmZmVyKGgsYSwxLHIsbiw4LHMpO24rPWx9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzLHQpfWlzRGVmYXVsdERlY29kZShlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2lmKDIhPT1lLmxlbmd0aCl7KDAsci53YXJuKSgiRGVjb2RlIG1hcCBsZW5ndGggaXMgbm90IGNvcnJlY3QiKTtyZXR1cm4hMH1pZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDwxKXsoMCxyLndhcm4pKCJCaXRzIHBlciBjb21wb25lbnQgaXMgbm90IGNvcnJlY3QiKTtyZXR1cm4hMH1yZXR1cm4gMD09PWVbMF0mJmVbMV09PT0oMTw8dCktMX19Y2xhc3MgRGV2aWNlR3JheUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VHcmF5IiwxKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2NvbnN0IG49MjU1KmVbdF07YVtyXT1hW3IrMV09YVtyKzJdPW59Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89MjU1LygoMTw8aSktMSk7bGV0IGM9dCxsPW47Zm9yKGxldCB0PTA7dDxhOysrdCl7Y29uc3QgdD1vKmVbYysrXTtyW2wrK109dDtyW2wrK109dDtyW2wrK109dDtsKz1zfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KX19Y2xhc3MgRGV2aWNlUmdiQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZVJHQiIsMyl9Z2V0UmdiSXRlbShlLHQsYSxyKXthW3JdPTI1NSplW3RdO2FbcisxXT0yNTUqZVt0KzFdO2FbcisyXT0yNTUqZVt0KzJdfWdldFJnYkJ1ZmZlcihlLHQsYSxyLG4saSxzKXtpZig4PT09aSYmMD09PXMpe3Iuc2V0KGUuc3ViYXJyYXkodCx0KzMqYSksbik7cmV0dXJufWNvbnN0IG89MjU1LygoMTw8aSktMSk7bGV0IGM9dCxsPW47Zm9yKGxldCB0PTA7dDxhOysrdCl7cltsKytdPW8qZVtjKytdO3JbbCsrXT1vKmVbYysrXTtyW2wrK109byplW2MrK107bCs9c319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuIDg9PT1lfX1jb25zdCBvPWZ1bmN0aW9uIERldmljZUNteWtDU0Nsb3N1cmUoKXtmdW5jdGlvbiBjb252ZXJ0VG9SZ2IoZSx0LGEscixuKXtjb25zdCBpPWVbdF0qYSxzPWVbdCsxXSphLG89ZVt0KzJdKmEsYz1lW3QrM10qYTtyW25dPTI1NStpKigtNC4zODczMzIzODQ2MDk5ODgqaSs1NC40ODYxNTE5NDE4OTE3NipzKzE4LjgyMjkwNTAyMTY1MzAyKm8rMjEyLjI1NjYyNDUxNjM5NTg1KmMtMjg1LjIzMzEwMjYxMzcwMDQpK3MqKDEuNzE0OTc2MzQ3NzM2MjEzNCpzLTUuNjA5NjczNjkwNDA0NzMxNSpvKy0xNy44NzM4NzA4NjE0MTU0NDQqYy01LjQ5NzAwNjQyNzE5NjM2NikrbyooLTIuNTIxNzM0MDEzMTY4MzAzMypvLTIxLjI0ODkyMzMzNzM1MzA3MypjKzE3LjUxMTkyNzA4NDE4MTMpK2MqKC0yMS44NjEyMjE0NzQ2MzYwNSpjLTE4OS40ODE4MDgzNTkyMjc0Nyk7cltuKzFdPTI1NStpKig4Ljg0MTA0MTQyMjAzNjE0OSppKzYwLjExODAyNzA0NTU5NzM2NipzKzYuODcxNDI1NTkyMDQ5MDA3Km8rMzEuMTU5MTAwMTMwMDU1OTIyKmMtNzkuMjk3MDg0NDgxNjU0OCkrcyooLTE1LjMxMDM2MTMwNjk2NzgxNypzKzE3LjU3NTI1MTI2MTEwOTQ4MipvKzEzMS4zNTI1MDkxMjQ5Mzk3NipjLTE5MC45NDUzMzAyNTg4OTUxKStvKig0LjQ0NDMzOTEwMjg1MjczOSpvKzkuODYzMjg2MTQ5MzQwNSpjLTI0Ljg2NzQxNTgyNTU1ODc4KStjKigtMjAuNzM3MzI1NDcxMTgxMDM0KmMtMTg3LjgwNDUzNzA5NzE5NTc4KTtyW24rMl09MjU1K2kqKC44ODQyNTIyNDMwMDAzMjk2KmkrOC4wNzg2Nzc1MDMxMTI5MjgqcyszMC44OTk3ODMwOTcwMzcyOSpvLS4yMzg4MzIzODY4OTE3ODkzNCpjLTE0LjE4MzU3Njc5OTY3MzI4NikrcyooMTAuNDk1OTMyNzM0MzIwNzIqcys2My4wMjM3ODQ5NDc1NDA1MipvKzUwLjYwNjk1NzY1NjM2MDczNCpjLTExMi4yMzg4NDI1MzcxOTI0OCkrbyooLjAzMjk2MDQxMTE0ODczMjE3Km8rMTE1LjYwMzg0NDQ5NjQ2NjQxKmMtMTkzLjU4MjA5MzU2ODYxNTA1KStjKigtMjIuMzM4MTY4MDczMDk4ODYqYy0xODAuMTI2MTM5NzQ3MDgzNjcpfXJldHVybiBjbGFzcyBEZXZpY2VDbXlrQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZUNNWUsiLDQpfWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKGUsdCwxLGEscil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89MS8oKDE8PGkpLTEpO2ZvcihsZXQgaT0wO2k8YTtpKyspe2NvbnZlcnRUb1JnYihlLHQsbyxyLG4pO3QrPTQ7bis9MytzfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fX0oKSxjPWZ1bmN0aW9uIENhbEdyYXlDU0Nsb3N1cmUoKXtmdW5jdGlvbiBjb252ZXJ0VG9SZ2IoZSx0LGEscixuLGkpe2NvbnN0IHM9KHRbYV0qaSkqKmUuRyxvPWUuWVcqcyxjPU1hdGgubWF4KDI5NS44Km8qKi4zMzMzMzMzMzMzMzMzMzMzLTQwLjgsMCk7cltuXT1jO3JbbisxXT1jO3JbbisyXT1jfXJldHVybiBjbGFzcyBDYWxHcmF5Q1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiQ2FsR3JheSIsMSk7aWYoIWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxHcmF5Iik7dD10fHxbMCwwLDBdO2E9YXx8MTt0aGlzLlhXPWVbMF07dGhpcy5ZVz1lWzFdO3RoaXMuWlc9ZVsyXTt0aGlzLlhCPXRbMF07dGhpcy5ZQj10WzFdO3RoaXMuWkI9dFsyXTt0aGlzLkc9YTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX0sIG5vIGZhbGxiYWNrIGF2YWlsYWJsZWApO2lmKHRoaXMuWEI8MHx8dGhpcy5ZQjwwfHx0aGlzLlpCPDApeygwLHIuaW5mbykoYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLlhCPXRoaXMuWUI9dGhpcy5aQj0wfTA9PT10aGlzLlhCJiYwPT09dGhpcy5ZQiYmMD09PXRoaXMuWkJ8fCgwLHIud2FybikoYCR7dGhpcy5uYW1lfSwgQmxhY2tQb2ludDogWEI6ICR7dGhpcy5YQn0sIFlCOiAke3RoaXMuWUJ9LCBaQjogJHt0aGlzLlpCfSwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLmApO2lmKHRoaXMuRzwxKXsoMCxyLmluZm8pKGBJbnZhbGlkIEdhbW1hOiAke3RoaXMuR30gZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5HPTF9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKHRoaXMsZSx0LGEsciwxKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixuLGkscyl7Y29uc3Qgbz0xLygoMTw8aSktMSk7Zm9yKGxldCBpPTA7aTxhOysraSl7Y29udmVydFRvUmdiKHRoaXMsZSx0LHIsbixvKTt0Kz0xO24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCl9fX0oKSxsPWZ1bmN0aW9uIENhbFJHQkNTQ2xvc3VyZSgpe2NvbnN0IGU9bmV3IEZsb2F0MzJBcnJheShbLjg5NTEsLjI2NjQsLS4xNjE0LC0uNzUwMiwxLjcxMzUsLjAzNjcsLjAzODksLS4wNjg1LDEuMDI5Nl0pLHQ9bmV3IEZsb2F0MzJBcnJheShbLjk4Njk5MjksLS4xNDcwNTQzLC4xNTk5NjI3LC40MzIzMDUzLC41MTgzNjAzLC4wNDkyOTEyLC0uMDA4NTI4NywuMDQwMDQyOCwuOTY4NDg2N10pLGE9bmV3IEZsb2F0MzJBcnJheShbMy4yNDA0NTQyLC0xLjUzNzEzODUsLS40OTg1MzE0LC0uOTY5MjY2LDEuODc2MDEwOCwuMDQxNTU2LC4wNTU2NDM0LC0uMjA0MDI1OSwxLjA1NzIyNTJdKSxuPW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxXSksaT1uZXcgRmxvYXQzMkFycmF5KDMpLHM9bmV3IEZsb2F0MzJBcnJheSgzKSxvPW5ldyBGbG9hdDMyQXJyYXkoMyk7ZnVuY3Rpb24gbWF0cml4UHJvZHVjdChlLHQsYSl7YVswXT1lWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXTthWzFdPWVbM10qdFswXStlWzRdKnRbMV0rZVs1XSp0WzJdO2FbMl09ZVs2XSp0WzBdK2VbN10qdFsxXStlWzhdKnRbMl19ZnVuY3Rpb24gc1JHQlRyYW5zZmVyRnVuY3Rpb24oZSl7cmV0dXJuIGU8PS4wMDMxMzA4P2FkanVzdFRvUmFuZ2UoMCwxLDEyLjkyKmUpOmU+PS45OTU1NDUyNT8xOmFkanVzdFRvUmFuZ2UoMCwxLDEuMDU1KmUqKigxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYWRqdXN0VG9SYW5nZShlLHQsYSl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxhKSl9ZnVuY3Rpb24gZGVjb2RlTChlKXtyZXR1cm4gZTwwPy1kZWNvZGVMKC1lKTplPjg/KChlKzE2KS8xMTYpKiozOi4wMDExMDcwNTY0NTk4Nzk0NTM5KmV9ZnVuY3Rpb24gY29udmVydFRvUmdiKHIsYyxsLGgsdSxkKXtjb25zdCBmPWFkanVzdFRvUmFuZ2UoMCwxLGNbbF0qZCksZz1hZGp1c3RUb1JhbmdlKDAsMSxjW2wrMV0qZCkscD1hZGp1c3RUb1JhbmdlKDAsMSxjW2wrMl0qZCksbT0xPT09Zj8xOmYqKnIuR1IsYj0xPT09Zz8xOmcqKnIuR0cseT0xPT09cD8xOnAqKnIuR0Isdz1yLk1YQSptK3IuTVhCKmIrci5NWEMqeSxTPXIuTVlBKm0rci5NWUIqYityLk1ZQyp5LHg9ci5NWkEqbStyLk1aQipiK3IuTVpDKnksaz1zO2tbMF09dztrWzFdPVM7a1syXT14O2NvbnN0IEM9bzshZnVuY3Rpb24gbm9ybWFsaXplV2hpdGVQb2ludFRvRmxhdChhLHIsbil7aWYoMT09PWFbMF0mJjE9PT1hWzJdKXtuWzBdPXJbMF07blsxXT1yWzFdO25bMl09clsyXTtyZXR1cm59Y29uc3Qgcz1uO21hdHJpeFByb2R1Y3QoZSxyLHMpO2NvbnN0IG89aTshZnVuY3Rpb24gY29udmVydFRvRmxhdChlLHQsYSl7YVswXT0xKnRbMF0vZVswXTthWzFdPTEqdFsxXS9lWzFdO2FbMl09MSp0WzJdL2VbMl19KGEscyxvKTttYXRyaXhQcm9kdWN0KHQsbyxuKX0oci53aGl0ZVBvaW50LGssQyk7Y29uc3Qgdj1zOyFmdW5jdGlvbiBjb21wZW5zYXRlQmxhY2tQb2ludChlLHQsYSl7aWYoMD09PWVbMF0mJjA9PT1lWzFdJiYwPT09ZVsyXSl7YVswXT10WzBdO2FbMV09dFsxXTthWzJdPXRbMl07cmV0dXJufWNvbnN0IHI9ZGVjb2RlTCgwKSxuPSgxLXIpLygxLWRlY29kZUwoZVswXSkpLGk9MS1uLHM9KDEtcikvKDEtZGVjb2RlTChlWzFdKSksbz0xLXMsYz0oMS1yKS8oMS1kZWNvZGVMKGVbMl0pKSxsPTEtYzthWzBdPXRbMF0qbitpO2FbMV09dFsxXSpzK287YVsyXT10WzJdKmMrbH0oci5ibGFja1BvaW50LEMsdik7Y29uc3QgRj1vOyFmdW5jdGlvbiBub3JtYWxpemVXaGl0ZVBvaW50VG9ENjUoYSxyLG4pe2NvbnN0IHM9bjttYXRyaXhQcm9kdWN0KGUscixzKTtjb25zdCBvPWk7IWZ1bmN0aW9uIGNvbnZlcnRUb0Q2NShlLHQsYSl7YVswXT0uOTUwNDcqdFswXS9lWzBdO2FbMV09MSp0WzFdL2VbMV07YVsyXT0xLjA4ODgzKnRbMl0vZVsyXX0oYSxzLG8pO21hdHJpeFByb2R1Y3QodCxvLG4pfShuLHYsRik7Y29uc3QgTz1zO21hdHJpeFByb2R1Y3QoYSxGLE8pO2hbdV09MjU1KnNSR0JUcmFuc2ZlckZ1bmN0aW9uKE9bMF0pO2hbdSsxXT0yNTUqc1JHQlRyYW5zZmVyRnVuY3Rpb24oT1sxXSk7aFt1KzJdPTI1NSpzUkdCVHJhbnNmZXJGdW5jdGlvbihPWzJdKX1yZXR1cm4gY2xhc3MgQ2FsUkdCQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxhLG4pe3N1cGVyKCJDYWxSR0IiLDMpO2lmKCFlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsUkdCIik7dD10fHxuZXcgRmxvYXQzMkFycmF5KDMpO2E9YXx8bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKTtuPW58fG5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMSwwLDAsMCwxXSk7Y29uc3QgaT1lWzBdLHM9ZVsxXSxvPWVbMl07dGhpcy53aGl0ZVBvaW50PWU7Y29uc3QgYz10WzBdLGw9dFsxXSxoPXRbMl07dGhpcy5ibGFja1BvaW50PXQ7dGhpcy5HUj1hWzBdO3RoaXMuR0c9YVsxXTt0aGlzLkdCPWFbMl07dGhpcy5NWEE9blswXTt0aGlzLk1ZQT1uWzFdO3RoaXMuTVpBPW5bMl07dGhpcy5NWEI9blszXTt0aGlzLk1ZQj1uWzRdO3RoaXMuTVpCPW5bNV07dGhpcy5NWEM9bls2XTt0aGlzLk1ZQz1uWzddO3RoaXMuTVpDPW5bOF07aWYoaTwwfHxvPDB8fDEhPT1zKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgJHt0aGlzLm5hbWV9LCBubyBmYWxsYmFjayBhdmFpbGFibGVgKTtpZihjPDB8fGw8MHx8aDwwKXsoMCxyLmluZm8pKGBJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICR7dGhpcy5uYW1lfSBbJHtjfSwgJHtsfSwgJHtofV0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO3RoaXMuYmxhY2tQb2ludD1uZXcgRmxvYXQzMkFycmF5KDMpfWlmKHRoaXMuR1I8MHx8dGhpcy5HRzwwfHx0aGlzLkdCPDApeygwLHIuaW5mbykoYEludmFsaWQgR2FtbWEgWyR7dGhpcy5HUn0sICR7dGhpcy5HR30sICR7dGhpcy5HQn1dIGZvciAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO3RoaXMuR1I9dGhpcy5HRz10aGlzLkdCPTF9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKHRoaXMsZSx0LGEsciwxKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixuLGkscyl7Y29uc3Qgbz0xLygoMTw8aSktMSk7Zm9yKGxldCBpPTA7aTxhOysraSl7Y29udmVydFRvUmdiKHRoaXMsZSx0LHIsbixvKTt0Kz0zO24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX19KCksaD1mdW5jdGlvbiBMYWJDU0Nsb3N1cmUoKXtmdW5jdGlvbiBmbl9nKGUpe2xldCB0O3Q9ZT49Ni8yOT9lKiozOjEwOC84NDEqKGUtNC8yOSk7cmV0dXJuIHR9ZnVuY3Rpb24gZGVjb2RlKGUsdCxhLHIpe3JldHVybiBhK2UqKHItYSkvdH1mdW5jdGlvbiBjb252ZXJ0VG9SZ2IoZSx0LGEscixuLGkpe2xldCBzPXRbYV0sbz10W2ErMV0sYz10W2ErMl07aWYoITEhPT1yKXtzPWRlY29kZShzLHIsMCwxMDApO289ZGVjb2RlKG8scixlLmFtaW4sZS5hbWF4KTtjPWRlY29kZShjLHIsZS5ibWluLGUuYm1heCl9bz5lLmFtYXg/bz1lLmFtYXg6bzxlLmFtaW4mJihvPWUuYW1pbik7Yz5lLmJtYXg/Yz1lLmJtYXg6YzxlLmJtaW4mJihjPWUuYm1pbik7Y29uc3QgbD0ocysxNikvMTE2LGg9bCtvLzUwMCx1PWwtYy8yMDAsZD1lLlhXKmZuX2coaCksZj1lLllXKmZuX2cobCksZz1lLlpXKmZuX2codSk7bGV0IHAsbSxiO2lmKGUuWlc8MSl7cD0zLjEzMzkqZCstMS42MTcqZistLjQ5MDYqZzttPS0uOTc4NSpkKzEuOTE2KmYrLjAzMzMqZztiPS4wNzIqZCstLjIyOSpmKzEuNDA1NypnfWVsc2V7cD0zLjI0MDYqZCstMS41MzcyKmYrLS40OTg2Kmc7bT0tLjk2ODkqZCsxLjg3NTgqZisuMDQxNSpnO2I9LjA1NTcqZCstLjIwNCpmKzEuMDU3Kmd9bltpXT0yNTUqTWF0aC5zcXJ0KHApO25baSsxXT0yNTUqTWF0aC5zcXJ0KG0pO25baSsyXT0yNTUqTWF0aC5zcXJ0KGIpfXJldHVybiBjbGFzcyBMYWJDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJMYWIiLDMpO2lmKCFlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgTGFiIik7dD10fHxbMCwwLDBdO2E9YXx8Wy0xMDAsMTAwLC0xMDAsMTAwXTt0aGlzLlhXPWVbMF07dGhpcy5ZVz1lWzFdO3RoaXMuWlc9ZVsyXTt0aGlzLmFtaW49YVswXTt0aGlzLmFtYXg9YVsxXTt0aGlzLmJtaW49YVsyXTt0aGlzLmJtYXg9YVszXTt0aGlzLlhCPXRbMF07dGhpcy5ZQj10WzFdO3RoaXMuWkI9dFsyXTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzLCBubyBmYWxsYmFjayBhdmFpbGFibGUiKTtpZih0aGlzLlhCPDB8fHRoaXMuWUI8MHx8dGhpcy5aQjwwKXsoMCxyLmluZm8pKCJJbnZhbGlkIEJsYWNrUG9pbnQsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0Iik7dGhpcy5YQj10aGlzLllCPXRoaXMuWkI9MH1pZih0aGlzLmFtaW4+dGhpcy5hbWF4fHx0aGlzLmJtaW4+dGhpcy5ibWF4KXsoMCxyLmluZm8pKCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMiKTt0aGlzLmFtaW49LTEwMDt0aGlzLmFtYXg9MTAwO3RoaXMuYm1pbj0tMTAwO3RoaXMuYm1heD0xMDB9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29udmVydFRvUmdiKHRoaXMsZSx0LCExLGEscil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89KDE8PGkpLTE7Zm9yKGxldCBpPTA7aTxhO2krKyl7Y29udmVydFRvUmdiKHRoaXMsZSx0LG8scixuKTt0Kz0zO24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzRGVmYXVsdERlY29kZShlLHQpe3JldHVybiEwfWdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fX0oKX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBhcnRpYWxFdmFsdWF0b3I9dC5FdmFsdWF0b3JQcmVwcm9jZXNzb3I9dm9pZCAwO3ZhciByPWEoMiksbj1hKDE0KSxpPWEoMykscz1hKDMyKSxvPWEoMzYpLGM9YSgzNSksbD1hKDM5KSxoPWEoMzgpLHU9YSg0OCksZD1hKDQ5KSxmPWEoNDApLGc9YSg1NSkscD1hKDE1KSxtPWEoNTcpLGI9YSg4KSx5PWEoNSksdz1hKDU4KSxTPWEoMTIpLHg9YSgxNyksaz1hKDM3KSxDPWEoNCksdj1hKDQzKSxGPWEoNTkpLE89YSg2MCksVD1hKDYxKTtjb25zdCBNPU9iamVjdC5mcmVlemUoe21heEltYWdlU2l6ZTotMSxkaXNhYmxlRm9udEZhY2U6ITEsaWdub3JlRXJyb3JzOiExLGlzRXZhbFN1cHBvcnRlZDohMCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDohMCxmb250RXh0cmFQcm9wZXJ0aWVzOiExLHVzZVN5c3RlbUZvbnRzOiEwLGNNYXBVcmw6bnVsbCxzdGFuZGFyZEZvbnREYXRhVXJsOm51bGx9KSxFPTEsRD0yLE49UHJvbWlzZS5yZXNvbHZlKCk7ZnVuY3Rpb24gbm9ybWFsaXplQmxlbmRNb2RlKGUsdD0hMSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT1ub3JtYWxpemVCbGVuZE1vZGUodCwhMCk7aWYoZSlyZXR1cm4gZX0oMCxyLndhcm4pKGBVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAke2V9YCk7cmV0dXJuInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXJldHVybiB0P251bGw6InNvdXJjZS1vdmVyIjtzd2l0Y2goZS5uYW1lKXtjYXNlIk5vcm1hbCI6Y2FzZSJDb21wYXRpYmxlIjpyZXR1cm4ic291cmNlLW92ZXIiO2Nhc2UiTXVsdGlwbHkiOnJldHVybiJtdWx0aXBseSI7Y2FzZSJTY3JlZW4iOnJldHVybiJzY3JlZW4iO2Nhc2UiT3ZlcmxheSI6cmV0dXJuIm92ZXJsYXkiO2Nhc2UiRGFya2VuIjpyZXR1cm4iZGFya2VuIjtjYXNlIkxpZ2h0ZW4iOnJldHVybiJsaWdodGVuIjtjYXNlIkNvbG9yRG9kZ2UiOnJldHVybiJjb2xvci1kb2RnZSI7Y2FzZSJDb2xvckJ1cm4iOnJldHVybiJjb2xvci1idXJuIjtjYXNlIkhhcmRMaWdodCI6cmV0dXJuImhhcmQtbGlnaHQiO2Nhc2UiU29mdExpZ2h0IjpyZXR1cm4ic29mdC1saWdodCI7Y2FzZSJEaWZmZXJlbmNlIjpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSJFeGNsdXNpb24iOnJldHVybiJleGNsdXNpb24iO2Nhc2UiSHVlIjpyZXR1cm4iaHVlIjtjYXNlIlNhdHVyYXRpb24iOnJldHVybiJzYXR1cmF0aW9uIjtjYXNlIkNvbG9yIjpyZXR1cm4iY29sb3IiO2Nhc2UiTHVtaW5vc2l0eSI6cmV0dXJuImx1bWlub3NpdHkifWlmKHQpcmV0dXJuIG51bGw7KDAsci53YXJuKShgVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZTogJHtlLm5hbWV9YCk7cmV0dXJuInNvdXJjZS1vdmVyIn1mdW5jdGlvbiBpbmNyZW1lbnRDYWNoZWRJbWFnZU1hc2tDb3VudChlKXtlLmZuPT09ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0JiZlLmFyZ3NbMF0mJmUuYXJnc1swXS5jb3VudD4wJiZlLmFyZ3NbMF0uY291bnQrK31jbGFzcyBUaW1lU2xvdE1hbmFnZXJ7c3RhdGljIGdldCBUSU1FX1NMT1RfRFVSQVRJT05fTVMoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiVElNRV9TTE9UX0RVUkFUSU9OX01TIiwyMCl9c3RhdGljIGdldCBDSEVDS19USU1FX0VWRVJZKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkNIRUNLX1RJTUVfRVZFUlkiLDEwMCl9Y29uc3RydWN0b3IoKXt0aGlzLnJlc2V0KCl9Y2hlY2soKXtpZigrK3RoaXMuY2hlY2tlZDxUaW1lU2xvdE1hbmFnZXIuQ0hFQ0tfVElNRV9FVkVSWSlyZXR1cm4hMTt0aGlzLmNoZWNrZWQ9MDtyZXR1cm4gdGhpcy5lbmRUaW1lPD1EYXRlLm5vdygpfXJlc2V0KCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrVGltZVNsb3RNYW5hZ2VyLlRJTUVfU0xPVF9EVVJBVElPTl9NUzt0aGlzLmNoZWNrZWQ9MH19Y2xhc3MgUGFydGlhbEV2YWx1YXRvcntjb25zdHJ1Y3Rvcih7eHJlZjplLGhhbmRsZXI6dCxwYWdlSW5kZXg6YSxpZEZhY3Rvcnk6cixmb250Q2FjaGU6bixidWlsdEluQ01hcENhY2hlOmksc3RhbmRhcmRGb250RGF0YUNhY2hlOnMsZ2xvYmFsSW1hZ2VDYWNoZTpvLG9wdGlvbnM6Yz1udWxsfSl7dGhpcy54cmVmPWU7dGhpcy5oYW5kbGVyPXQ7dGhpcy5wYWdlSW5kZXg9YTt0aGlzLmlkRmFjdG9yeT1yO3RoaXMuZm9udENhY2hlPW47dGhpcy5idWlsdEluQ01hcENhY2hlPWk7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9czt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9bzt0aGlzLm9wdGlvbnM9Y3x8TTt0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ9ITE7dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kPXRoaXMuZmV0Y2hCdWlsdEluQ01hcC5iaW5kKHRoaXMpfWdldCBfcGRmRnVuY3Rpb25GYWN0b3J5KCl7Y29uc3QgZT1uZXcgZy5QREZGdW5jdGlvbkZhY3Rvcnkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLm9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkfSk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIl9wZGZGdW5jdGlvbkZhY3RvcnkiLGUpfWNsb25lKGU9bnVsbCl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKHRoaXMpO3Qub3B0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zLGUpO3JldHVybiB0fWhhc0JsZW5kTW9kZXMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiExO2lmKGUub2JqSWQmJnQuaGFzKGUub2JqSWQpKXJldHVybiExO2NvbnN0IGE9bmV3IGkuUmVmU2V0KHQpO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IG49W2VdLHM9dGhpcy54cmVmO2Zvcig7bi5sZW5ndGg7KXtjb25zdCBlPW4uc2hpZnQoKSx0PWUuZ2V0KCJFeHRHU3RhdGUiKTtpZih0IGluc3RhbmNlb2YgaS5EaWN0KWZvcihsZXQgZSBvZiB0LmdldFJhd1ZhbHVlcygpKXtpZihlIGluc3RhbmNlb2YgaS5SZWYpe2lmKGEuaGFzKGUpKWNvbnRpbnVlO3RyeXtlPXMuZmV0Y2goZSl9Y2F0Y2godCl7YS5wdXQoZSk7KDAsci5pbmZvKShgaGFzQmxlbmRNb2RlcyAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKWNvbnRpbnVlO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IHQ9ZS5nZXQoIkJNIik7aWYodCBpbnN0YW5jZW9mIGkuTmFtZSl7aWYoIk5vcm1hbCIhPT10Lm5hbWUpcmV0dXJuITB9ZWxzZSBpZih2b2lkIDAhPT10JiZBcnJheS5pc0FycmF5KHQpKWZvcihjb25zdCBlIG9mIHQpaWYoZSBpbnN0YW5jZW9mIGkuTmFtZSYmIk5vcm1hbCIhPT1lLm5hbWUpcmV0dXJuITB9Y29uc3Qgbz1lLmdldCgiWE9iamVjdCIpO2lmKG8gaW5zdGFuY2VvZiBpLkRpY3QpZm9yKGxldCBlIG9mIG8uZ2V0UmF3VmFsdWVzKCkpe2lmKGUgaW5zdGFuY2VvZiBpLlJlZil7aWYoYS5oYXMoZSkpY29udGludWU7dHJ5e2U9cy5mZXRjaChlKX1jYXRjaCh0KXthLnB1dChlKTsoMCxyLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgWE9iamVjdDogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0pKWNvbnRpbnVlO2UuZGljdC5vYmpJZCYmYS5wdXQoZS5kaWN0Lm9iaklkKTtjb25zdCB0PWUuZGljdC5nZXQoIlJlc291cmNlcyIpO2lmKHQgaW5zdGFuY2VvZiBpLkRpY3QmJighdC5vYmpJZHx8IWEuaGFzKHQub2JqSWQpKSl7bi5wdXNoKHQpO3Qub2JqSWQmJmEucHV0KHQub2JqSWQpfX19Zm9yKGNvbnN0IGUgb2YgYSl0LnB1dChlKTtyZXR1cm4hMX1hc3luYyBmZXRjaEJ1aWx0SW5DTWFwKGUpe2NvbnN0IHQ9dGhpcy5idWlsdEluQ01hcENhY2hlLmdldChlKTtpZih0KXJldHVybiB0O2xldCBhO2lmKG51bGwhPT10aGlzLm9wdGlvbnMuY01hcFVybCl7Y29uc3QgdD1gJHt0aGlzLm9wdGlvbnMuY01hcFVybH0ke2V9LmJjbWFwYCxuPWF3YWl0IGZldGNoKHQpO2lmKCFuLm9rKXRocm93IG5ldyBFcnJvcihgZmV0Y2hCdWlsdEluQ01hcDogZmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7dH0iIHdpdGggIiR7bi5zdGF0dXNUZXh0fSIuYCk7YT17Y01hcERhdGE6bmV3IFVpbnQ4QXJyYXkoYXdhaXQgbi5hcnJheUJ1ZmZlcigpKSxjb21wcmVzc2lvblR5cGU6ci5DTWFwQ29tcHJlc3Npb25UeXBlLkJJTkFSWX19ZWxzZSBhPWF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoQnVpbHRJbkNNYXAiLHtuYW1lOmV9KTthLmNvbXByZXNzaW9uVHlwZSE9PXIuQ01hcENvbXByZXNzaW9uVHlwZS5OT05FJiZ0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuc2V0KGUsYSk7cmV0dXJuIGF9YXN5bmMgZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUpe2NvbnN0IHQ9dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuZ2V0KGUpO2lmKHQpcmV0dXJuIG5ldyBiLlN0cmVhbSh0KTtpZih0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMmJiJTeW1ib2wiIT09ZSYmIlphcGZEaW5nYmF0cyIhPT1lKXJldHVybiBudWxsO2NvbnN0IGE9KDAsbC5nZXRGb250TmFtZVRvRmlsZU1hcCkoKVtlXTtsZXQgbjtpZihudWxsIT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2NvbnN0IGU9YCR7dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmx9JHthfWAsdD1hd2FpdCBmZXRjaChlKTt0Lm9rP249YXdhaXQgdC5hcnJheUJ1ZmZlcigpOigwLHIud2FybikoYGZldGNoU3RhbmRhcmRGb250RGF0YTogZmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7ZX0iIHdpdGggIiR7dC5zdGF0dXNUZXh0fSIuYCl9ZWxzZSB0cnl7bj1hd2FpdCB0aGlzLmhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJGZXRjaFN0YW5kYXJkRm9udERhdGEiLHtmaWxlbmFtZTphfSl9Y2F0Y2goZSl7KDAsci53YXJuKShgZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJHthfSIgd2l0aCAiJHtlfSIuYCl9aWYoIW4pcmV0dXJuIG51bGw7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuc2V0KGUsbik7cmV0dXJuIG5ldyBiLlN0cmVhbShuKX1hc3luYyBidWlsZEZvcm1YT2JqZWN0KGUsdCxhLG4scyxvLGMpe2NvbnN0IGw9dC5kaWN0LGg9bC5nZXRBcnJheSgiTWF0cml4Iik7bGV0IHUsZCxmPWwuZ2V0QXJyYXkoIkJCb3giKTtmPUFycmF5LmlzQXJyYXkoZikmJjQ9PT1mLmxlbmd0aD9yLlV0aWwubm9ybWFsaXplUmVjdChmKTpudWxsO2wuaGFzKCJPQyIpJiYodT1hd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGwuZ2V0KCJPQyIpLGUpKTt2b2lkIDAhPT11JiZuLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLHVdKTtjb25zdCBnPWwuZ2V0KCJHcm91cCIpO2lmKGcpe2Q9e21hdHJpeDpoLGJib3g6ZixzbWFzazphLGlzb2xhdGVkOiExLGtub2Nrb3V0OiExfTtjb25zdCB0PWcuZ2V0KCJTIik7bGV0IHM9bnVsbDtpZigoMCxpLmlzTmFtZSkodCwiVHJhbnNwYXJlbmN5Iikpe2QuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITE7ZC5rbm9ja291dD1nLmdldCgiSyIpfHwhMTtpZihnLmhhcygiQ1MiKSl7Y29uc3QgdD1nLmdldFJhdygiQ1MiKSxhPVMuQ29sb3JTcGFjZS5nZXRDYWNoZWQodCx0aGlzLnhyZWYsYyk7cz1hfHxhd2FpdCB0aGlzLnBhcnNlQ29sb3JTcGFjZSh7Y3M6dCxyZXNvdXJjZXM6ZSxsb2NhbENvbG9yU3BhY2VDYWNoZTpjfSl9fWlmKGEmJmEuYmFja2Ryb3Ape3M9c3x8Uy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO2EuYmFja2Ryb3A9cy5nZXRSZ2IoYS5iYWNrZHJvcCwwKX1uLmFkZE9wKHIuT1BTLmJlZ2luR3JvdXAsW2RdKX1jb25zdCBwPWc/W2gsbnVsbF06W2gsZl07bi5hZGRPcChyLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW4scCk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnMscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8ZSxvcGVyYXRvckxpc3Q6bixpbml0aWFsU3RhdGU6b30pLnRoZW4oKGZ1bmN0aW9uKCl7bi5hZGRPcChyLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKTtnJiZuLmFkZE9wKHIuT1BTLmVuZEdyb3VwLFtkXSk7dm9pZCAwIT09dSYmbi5hZGRPcChyLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKX1fc2VuZEltZ0RhdGEoZSx0LGE9ITEpe2NvbnN0IHI9dD9bdC5iaXRtYXB8fHQuZGF0YS5idWZmZXJdOm51bGw7cmV0dXJuIHRoaXMucGFyc2luZ1R5cGUzRm9udHx8YT90aGlzLmhhbmRsZXIuc2VuZCgiY29tbW9ub2JqIixbZSwiSW1hZ2UiLHRdLHIpOnRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtlLHRoaXMucGFnZUluZGV4LCJJbWFnZSIsdF0scil9YXN5bmMgYnVpbGRQYWludEltYWdlWE9iamVjdCh7cmVzb3VyY2VzOmUsaW1hZ2U6dCxpc0lubGluZTphPSExLG9wZXJhdG9yTGlzdDpuLGNhY2hlS2V5OmksbG9jYWxJbWFnZUNhY2hlOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6b30pe2NvbnN0IGM9dC5kaWN0LGw9Yy5vYmpJZCxoPWMuZ2V0KCJXIiwiV2lkdGgiKSx1PWMuZ2V0KCJIIiwiSGVpZ2h0Iik7aWYoIWh8fCJudW1iZXIiIT10eXBlb2YgaHx8IXV8fCJudW1iZXIiIT10eXBlb2YgdSl7KDAsci53YXJuKSgiSW1hZ2UgZGltZW5zaW9ucyBhcmUgbWlzc2luZywgb3Igbm90IG51bWJlcnMuIik7cmV0dXJufWNvbnN0IGQ9dGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtpZigtMSE9PWQmJmgqdT5kKXtjb25zdCBlPSJJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuIjtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXsoMCxyLndhcm4pKGUpO3JldHVybn10aHJvdyBuZXcgRXJyb3IoZSl9bGV0IGY7Yy5oYXMoIk9DIikmJihmPWF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoYy5nZXQoIk9DIiksZSkpO2xldCBnLHA7aWYoYy5nZXQoIklNIiwiSW1hZ2VNYXNrIil8fCExKXtjb25zdCBlPWMuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSxhPWgrNz4+MyxvPXQuZ2V0Qnl0ZXMoYSp1KSxkPWMuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpe2c9VC5QREZJbWFnZS5jcmVhdGVSYXdNYXNrKHtpbWdBcnJheTpvLHdpZHRoOmgsaGVpZ2h0OnUsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06dCBpbnN0YW5jZW9mIHguRGVjb2RlU3RyZWFtLGludmVyc2VEZWNvZGU6ISFkJiZkWzBdPjAsaW50ZXJwb2xhdGU6ZX0pO2cuY2FjaGVkPSEhaTtwPVtnXTtuLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxwLGYpO2kmJnMuc2V0KGksbCx7Zm46ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn0pO3JldHVybn1nPVQuUERGSW1hZ2UuY3JlYXRlTWFzayh7aW1nQXJyYXk6byx3aWR0aDpoLGhlaWdodDp1LGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnQgaW5zdGFuY2VvZiB4LkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOiEhZCYmZFswXT4wLGludGVycG9sYXRlOmUsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfSk7aWYoZy5pc1NpbmdsZU9wYXF1ZVBpeGVsKXtuLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzayxbXSxmKTtpJiZzLnNldChpLGwse2ZuOnIuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzayxhcmdzOltdLG9wdGlvbmFsQ29udGVudDpmfSk7cmV0dXJufWNvbnN0IG09YG1hc2tfJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7bi5hZGREZXBlbmRlbmN5KG0pO3RoaXMuX3NlbmRJbWdEYXRhKG0sZyk7cD1be2RhdGE6bSx3aWR0aDpnLndpZHRoLGhlaWdodDpnLmhlaWdodCxpbnRlcnBvbGF0ZTpnLmludGVycG9sYXRlLGNvdW50OjF9XTtuLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxwLGYpO2kmJnMuc2V0KGksbCx7Zm46ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn0pO3JldHVybn1jb25zdCBtPWMuZ2V0KCJTTSIsIlNNYXNrIil8fCExLGI9Yy5nZXQoIk1hc2siKXx8ITE7aWYoYSYmIW0mJiFiJiZoK3U8MjAwKXtjb25zdCBpPW5ldyBULlBERkltYWdlKHt4cmVmOnRoaXMueHJlZixyZXM6ZSxpbWFnZTp0LGlzSW5saW5lOmEscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSk7Zz1pLmNyZWF0ZUltYWdlRGF0YSghMCk7bi5hZGRJbWFnZU9wcyhyLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxbZ10sZik7cmV0dXJufWxldCB5PWBpbWdfJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWAsdz0hMTtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpeT1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM18ke3l9YDtlbHNlIGlmKGwpe3c9dGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNob3VsZENhY2hlKGwsdGhpcy5wYWdlSW5kZXgpO3cmJih5PWAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7eX1gKX1uLmFkZERlcGVuZGVuY3koeSk7cD1beSxoLHVdO1QuUERGSW1hZ2UuYnVpbGRJbWFnZSh7eHJlZjp0aGlzLnhyZWYscmVzOmUsaW1hZ2U6dCxpc0lubGluZTphLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6b30pLnRoZW4oKGU9PntnPWUuY3JlYXRlSW1hZ2VEYXRhKCExKTtpJiZsJiZ3JiZ0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkQnl0ZVNpemUobCxnLmRhdGEubGVuZ3RoKTtyZXR1cm4gdGhpcy5fc2VuZEltZ0RhdGEoeSxnLHcpfSkpLmNhdGNoKChlPT57KDAsci53YXJuKShgVW5hYmxlIHRvIGRlY29kZSBpbWFnZSAiJHt5fSI6ICIke2V9Ii5gKTtyZXR1cm4gdGhpcy5fc2VuZEltZ0RhdGEoeSxudWxsLHcpfSkpO24uYWRkSW1hZ2VPcHMoci5PUFMucGFpbnRJbWFnZVhPYmplY3QscCxmKTtpZihpKXtzLnNldChpLGwse2ZuOnIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGFyZ3M6cCxvcHRpb25hbENvbnRlbnQ6Zn0pO2lmKGwpeygwLHIuYXNzZXJ0KSghYSwiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKTt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkUGFnZUluZGV4KGwsdGhpcy5wYWdlSW5kZXgpO3cmJnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGwse29iaklkOnksZm46ci5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczpwLG9wdGlvbmFsQ29udGVudDpmLGJ5dGVTaXplOjB9KX19fWhhbmRsZVNNYXNrKGUsdCxhLHIsbixpKXtjb25zdCBzPWUuZ2V0KCJHIiksbz17c3VidHlwZTplLmdldCgiUyIpLm5hbWUsYmFja2Ryb3A6ZS5nZXQoIkJDIil9LGM9ZS5nZXQoIlRSIik7aWYoKDAsZy5pc1BERkZ1bmN0aW9uKShjKSl7Y29uc3QgZT10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGMpLHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KSxhPW5ldyBGbG9hdDMyQXJyYXkoMSk7Zm9yKGxldCByPTA7cjwyNTY7cisrKXthWzBdPXIvMjU1O2UoYSwwLGEsMCk7dFtyXT0yNTUqYVswXXwwfW8udHJhbnNmZXJNYXA9dH1yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQscyxvLGEscixuLnN0YXRlLmNsb25lKCksaSl9aGFuZGxlVHJhbnNmZXJGdW5jdGlvbihlKXtsZXQgdDtpZihBcnJheS5pc0FycmF5KGUpKXQ9ZTtlbHNle2lmKCEoMCxnLmlzUERGRnVuY3Rpb24pKGUpKXJldHVybiBudWxsO3Q9W2VdfWNvbnN0IGE9W107bGV0IHI9MCxuPTA7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD10aGlzLnhyZWYuZmV0Y2hJZlJlZihlKTtyKys7aWYoKDAsaS5pc05hbWUpKHQsIklkZW50aXR5Iikpe2EucHVzaChudWxsKTtjb250aW51ZX1pZighKDAsZy5pc1BERkZ1bmN0aW9uKSh0KSlyZXR1cm4gbnVsbDtjb25zdCBzPXRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUodCksbz1uZXcgVWludDhBcnJheSgyNTYpLGM9bmV3IEZsb2F0MzJBcnJheSgxKTtmb3IobGV0IGU9MDtlPDI1NjtlKyspe2NbMF09ZS8yNTU7cyhjLDAsYywwKTtvW2VdPTI1NSpjWzBdfDB9YS5wdXNoKG8pO24rK31yZXR1cm4gMSE9PXImJjQhPT1yfHwwPT09bj9udWxsOmF9aGFuZGxlVGlsaW5nVHlwZShlLHQsYSxuLHMsbyxjLGwpe2NvbnN0IGg9bmV3IE8uT3BlcmF0b3JMaXN0LGQ9aS5EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6W3MuZ2V0KCJSZXNvdXJjZXMiKSxhXX0pO3JldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOm4sdGFzazpjLHJlc291cmNlczpkLG9wZXJhdG9yTGlzdDpofSkudGhlbigoZnVuY3Rpb24oKXtjb25zdCBhPWguZ2V0SVIoKSxyPSgwLHUuZ2V0VGlsaW5nUGF0dGVybklSKShhLHMsdCk7by5hZGREZXBlbmRlbmNpZXMoaC5kZXBlbmRlbmNpZXMpO28uYWRkT3AoZSxyKTtzLm9iaklkJiZsLnNldChudWxsLHMub2JqSWQse29wZXJhdG9yTGlzdElSOmEsZGljdDpzfSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt0aGlzLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JUaWxpbmdQYXR0ZXJufSk7KDAsci53YXJuKShgaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46ICIke2V9Ii5gKX19KSl9aGFuZGxlU2V0Rm9udChlLHQsYSxuLG8sYyxsPW51bGwsaD1udWxsKXtjb25zdCB1PXQmJnRbMF1pbnN0YW5jZW9mIGkuTmFtZT90WzBdLm5hbWU6bnVsbDtyZXR1cm4gdGhpcy5sb2FkRm9udCh1LGEsZSxsLGgpLnRoZW4oKHQ9PnQuZm9udC5pc1R5cGUzRm9udD90LmxvYWRUeXBlM0RhdGEodGhpcyxlLG8pLnRoZW4oKGZ1bmN0aW9uKCl7bi5hZGREZXBlbmRlbmNpZXModC50eXBlM0RlcGVuZGVuY2llcyk7cmV0dXJuIHR9KSkuY2F0Y2goKGU9Pnt0aGlzLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250TG9hZFR5cGUzfSk7cmV0dXJuIG5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udChgVHlwZTMgZm9udCBsb2FkIGVycm9yOiAke2V9YCksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KX0pKTp0KSkudGhlbigoZT0+e2MuZm9udD1lLmZvbnQ7ZS5zZW5kKHRoaXMuaGFuZGxlcik7cmV0dXJuIGUubG9hZGVkTmFtZX0pKX1oYW5kbGVUZXh0KGUsdCl7Y29uc3QgYT10LmZvbnQsbj1hLmNoYXJzVG9HbHlwaHMoZSk7aWYoYS5kYXRhKXsoISEodC50ZXh0UmVuZGVyaW5nTW9kZSZyLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpfHwiUGF0dGVybiI9PT10LmZpbGxDb2xvclNwYWNlLm5hbWV8fGEuZGlzYWJsZUZvbnRGYWNlfHx0aGlzLm9wdGlvbnMuZGlzYWJsZUZvbnRGYWNlKSYmUGFydGlhbEV2YWx1YXRvci5idWlsZEZvbnRQYXRocyhhLG4sdGhpcy5oYW5kbGVyLHRoaXMub3B0aW9ucyl9cmV0dXJuIG59ZW5zdXJlU3RhdGVGb250KGUpe2lmKGUuZm9udClyZXR1cm47Y29uc3QgdD1uZXcgci5Gb3JtYXRFcnJvcigiTWlzc2luZyBzZXRGb250IChUZikgb3BlcmF0b3IgYmVmb3JlIHRleHQgcmVuZGVyaW5nIG9wZXJhdG9yLiIpO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IHQ7dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFN0YXRlfSk7KDAsci53YXJuKShgZW5zdXJlU3RhdGVGb250OiAiJHt0fSIuYCl9YXN5bmMgc2V0R1N0YXRlKHtyZXNvdXJjZXM6ZSxnU3RhdGU6dCxvcGVyYXRvckxpc3Q6YSxjYWNoZUtleTpuLHRhc2s6cyxzdGF0ZU1hbmFnZXI6byxsb2NhbEdTdGF0ZUNhY2hlOmMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6bH0pe2NvbnN0IGg9dC5vYmpJZDtsZXQgdT0hMDtjb25zdCBkPVtdO2xldCBmPVByb21pc2UucmVzb2x2ZSgpO2Zvcihjb25zdCBuIG9mIHQuZ2V0S2V5cygpKXtjb25zdCBjPXQuZ2V0KG4pO3N3aXRjaChuKXtjYXNlIlR5cGUiOmJyZWFrO2Nhc2UiTFciOmNhc2UiTEMiOmNhc2UiTEoiOmNhc2UiTUwiOmNhc2UiRCI6Y2FzZSJSSSI6Y2FzZSJGTCI6Y2FzZSJDQSI6Y2FzZSJjYSI6ZC5wdXNoKFtuLGNdKTticmVhaztjYXNlIkZvbnQiOnU9ITE7Zj1mLnRoZW4oKCgpPT50aGlzLmhhbmRsZVNldEZvbnQoZSxudWxsLGNbMF0sYSxzLG8uc3RhdGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2EuYWRkRGVwZW5kZW5jeShlKTtkLnB1c2goW24sW2UsY1sxXV1dKX0pKSkpO2JyZWFrO2Nhc2UiQk0iOmQucHVzaChbbixub3JtYWxpemVCbGVuZE1vZGUoYyldKTticmVhaztjYXNlIlNNYXNrIjppZigoMCxpLmlzTmFtZSkoYywiTm9uZSIpKXtkLnB1c2goW24sITFdKTticmVha31pZihjIGluc3RhbmNlb2YgaS5EaWN0KXt1PSExO2Y9Zi50aGVuKCgoKT0+dGhpcy5oYW5kbGVTTWFzayhjLGUsYSxzLG8sbCkpKTtkLnB1c2goW24sITBdKX1lbHNlKDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgU01hc2sgdHlwZSIpO2JyZWFrO2Nhc2UiVFIiOmNvbnN0IHQ9dGhpcy5oYW5kbGVUcmFuc2ZlckZ1bmN0aW9uKGMpO2QucHVzaChbbix0XSk7YnJlYWs7Y2FzZSJPUCI6Y2FzZSJvcCI6Y2FzZSJPUE0iOmNhc2UiQkciOmNhc2UiQkcyIjpjYXNlIlVDUiI6Y2FzZSJVQ1IyIjpjYXNlIlRSMiI6Y2FzZSJIVCI6Y2FzZSJTTSI6Y2FzZSJTQSI6Y2FzZSJBSVMiOmNhc2UiVEsiOigwLHIuaW5mbykoImdyYXBoaWMgc3RhdGUgb3BlcmF0b3IgIituKTticmVhaztkZWZhdWx0OigwLHIuaW5mbykoIlVua25vd24gZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK24pfX1yZXR1cm4gZi50aGVuKChmdW5jdGlvbigpe2QubGVuZ3RoPjAmJmEuYWRkT3Aoci5PUFMuc2V0R1N0YXRlLFtkXSk7dSYmYy5zZXQobixoLGQpfSkpfWxvYWRGb250KGUsdCxhLG49bnVsbCxjPW51bGwpe2NvbnN0IGVycm9yRm9udD1hc3luYygpPT5uZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6ImdfZm9udF9lcnJvciIsZm9udDpuZXcgcy5FcnJvckZvbnQoYEZvbnQgIiR7ZX0iIGlzIG5vdCBhdmFpbGFibGUuYCksZGljdDp0LGV2YWx1YXRvck9wdGlvbnM6dGhpcy5vcHRpb25zfSksbD10aGlzLnhyZWY7bGV0IGg7aWYodCl0IGluc3RhbmNlb2YgaS5SZWYmJihoPXQpO2Vsc2V7Y29uc3QgdD1hLmdldCgiRm9udCIpO3QmJihoPXQuZ2V0UmF3KGUpKX1pZighaCl7Y29uc3QgYT1gRm9udCAiJHtlfHx0JiZ0LnRvU3RyaW5nKCl9IiBpcyBub3QgYXZhaWxhYmxlYDtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyYmIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7KDAsci53YXJuKShgJHthfS5gKTtyZXR1cm4gZXJyb3JGb250KCl9dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udE1pc3Npbmd9KTsoMCxyLndhcm4pKGAke2F9IC0tIGF0dGVtcHRpbmcgdG8gZmFsbGJhY2sgdG8gYSBkZWZhdWx0IGZvbnQuYCk7aD1ufHxQYXJ0aWFsRXZhbHVhdG9yLmZhbGxiYWNrRm9udERpY3R9aWYodGhpcy5wYXJzaW5nVHlwZTNGb250JiZ0aGlzLnR5cGUzRm9udFJlZnMuaGFzKGgpKXJldHVybiBlcnJvckZvbnQoKTtpZih0aGlzLmZvbnRDYWNoZS5oYXMoaCkpcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChoKTtpZighKCh0PWwuZmV0Y2hJZlJlZihoKSlpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIGVycm9yRm9udCgpO2lmKHQuY2FjaGVLZXkmJnRoaXMuZm9udENhY2hlLmhhcyh0LmNhY2hlS2V5KSlyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KHQuY2FjaGVLZXkpO2NvbnN0IHU9KDAsci5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtsZXQgZDt0cnl7ZD10aGlzLnByZUV2YWx1YXRlRm9udCh0KTtkLmNzc0ZvbnRJbmZvPWN9Y2F0Y2goZSl7KDAsci53YXJuKShgbG9hZEZvbnQgLSBwcmVFdmFsdWF0ZUZvbnQgZmFpbGVkOiAiJHtlfSIuYCk7cmV0dXJuIGVycm9yRm9udCgpfWNvbnN0e2Rlc2NyaXB0b3I6ZixoYXNoOmd9PWQscD1oIGluc3RhbmNlb2YgaS5SZWY7bGV0IG07cCYmKG09YGYke2gudG9TdHJpbmcoKX1gKTtpZihnJiZmIGluc3RhbmNlb2YgaS5EaWN0KXtmLmZvbnRBbGlhc2VzfHwoZi5mb250QWxpYXNlcz1PYmplY3QuY3JlYXRlKG51bGwpKTtjb25zdCBlPWYuZm9udEFsaWFzZXM7aWYoZVtnXSl7Y29uc3QgdD1lW2ddLmFsaWFzUmVmO2lmKHAmJnQmJnRoaXMuZm9udENhY2hlLmhhcyh0KSl7dGhpcy5mb250Q2FjaGUucHV0QWxpYXMoaCx0KTtyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGgpfX1lbHNlIGVbZ109e2ZvbnRJRDp0aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKX07cCYmKGVbZ10uYWxpYXNSZWY9aCk7bT1lW2ddLmZvbnRJRH1pZihwKXRoaXMuZm9udENhY2hlLnB1dChoLHUucHJvbWlzZSk7ZWxzZXttfHwobT10aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKSk7dC5jYWNoZUtleT1gY2FjaGVLZXlfJHttfWA7dGhpcy5mb250Q2FjaGUucHV0KHQuY2FjaGVLZXksdS5wcm9taXNlKX0oMCxyLmFzc2VydCkobSYmbS5zdGFydHNXaXRoKCJmIiksJ1RoZSAiZm9udElEIiBtdXN0IGJlIChjb3JyZWN0bHkpIGRlZmluZWQuJyk7dC5sb2FkZWROYW1lPWAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7bX1gO3RoaXMudHJhbnNsYXRlRm9udChkKS50aGVuKChlPT57dm9pZCAwIT09ZS5mb250VHlwZSYmbC5zdGF0cy5hZGRGb250VHlwZShlLmZvbnRUeXBlKTt1LnJlc29sdmUobmV3IFRyYW5zbGF0ZWRGb250KHtsb2FkZWROYW1lOnQubG9hZGVkTmFtZSxmb250OmUsZGljdDp0LGV2YWx1YXRvck9wdGlvbnM6dGhpcy5vcHRpb25zfSkpfSkpLmNhdGNoKChlPT57dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRyYW5zbGF0ZX0pOygwLHIud2FybikoYGxvYWRGb250IC0gdHJhbnNsYXRlRm9udCBmYWlsZWQ6ICIke2V9Ii5gKTt0cnl7Y29uc3QgZT1mJiZmLmdldCgiRm9udEZpbGUzIiksdD1lJiZlLmdldCgiU3VidHlwZSIpLGE9KDAsby5nZXRGb250VHlwZSkoZC50eXBlLHQmJnQubmFtZSk7dm9pZCAwIT09YSYmbC5zdGF0cy5hZGRGb250VHlwZShhKX1jYXRjaChlKXt9dS5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZTp0LmxvYWRlZE5hbWUsZm9udDpuZXcgcy5FcnJvckZvbnQoZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTplKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSk7cmV0dXJuIHUucHJvbWlzZX1idWlsZFBhdGgoZSx0LGEsbj0hMSl7Y29uc3QgaT1lLmxlbmd0aC0xO2F8fChhPVtdKTtpZihpPDB8fGUuZm5BcnJheVtpXSE9PXIuT1BTLmNvbnN0cnVjdFBhdGgpe2lmKG4peygwLHIud2FybikoYEVuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIiR7dH0iIGluc2lkZSBvZiBhIHRleHQgb2JqZWN0LmApO2UuYWRkT3Aoci5PUFMuc2F2ZSxudWxsKX1sZXQgaTtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107aT1bTWF0aC5taW4oYVswXSxlKSxNYXRoLm1heChhWzBdLGUpLE1hdGgubWluKGFbMV0sdCksTWF0aC5tYXgoYVsxXSx0KV07YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86aT1bYVswXSxhWzBdLGFbMV0sYVsxXV07YnJlYWs7ZGVmYXVsdDppPVsxLzAsLTEvMCwxLzAsLTEvMF19ZS5hZGRPcChyLk9QUy5jb25zdHJ1Y3RQYXRoLFtbdF0sYSxpXSk7biYmZS5hZGRPcChyLk9QUy5yZXN0b3JlLG51bGwpfWVsc2V7Y29uc3Qgbj1lLmFyZ3NBcnJheVtpXTtuWzBdLnB1c2godCk7blsxXS5wdXNoKC4uLmEpO2NvbnN0IHM9blsyXTtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107c1swXT1NYXRoLm1pbihzWzBdLGFbMF0sZSk7c1sxXT1NYXRoLm1heChzWzFdLGFbMF0sZSk7c1syXT1NYXRoLm1pbihzWzJdLGFbMV0sdCk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0sdCk7YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86c1swXT1NYXRoLm1pbihzWzBdLGFbMF0pO3NbMV09TWF0aC5tYXgoc1sxXSxhWzBdKTtzWzJdPU1hdGgubWluKHNbMl0sYVsxXSk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0pfX19cGFyc2VDb2xvclNwYWNlKHtjczplLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmF9KXtyZXR1cm4gUy5Db2xvclNwYWNlLnBhcnNlQXN5bmMoe2NzOmUseHJlZjp0aGlzLnhyZWYscmVzb3VyY2VzOnQscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTphfSkuY2F0Y2goKGU9PntpZihlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbilyZXR1cm4gbnVsbDtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXt0aGlzLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JDb2xvclNwYWNlfSk7KDAsci53YXJuKShgcGFyc2VDb2xvclNwYWNlIC0gaWdub3JpbmcgQ29sb3JTcGFjZTogIiR7ZX0iLmApO3JldHVybiBudWxsfXRocm93IGV9KSl9cGFyc2VTaGFkaW5nKHtzaGFkaW5nOmUscmVzb3VyY2VzOnQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6YSxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6cn0pe2xldCBuPXIuZ2V0KGUpO2lmKCFuKXtjb25zdCBpPXUuUGF0dGVybi5wYXJzZVNoYWRpbmcoZSx0aGlzLnhyZWYsdCx0aGlzLmhhbmRsZXIsdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGEpLmdldElSKCk7bj1gcGF0dGVybl8ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YDtyLnNldChlLG4pO3RoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtuLHRoaXMucGFnZUluZGV4LCJQYXR0ZXJuIixpXSl9cmV0dXJuIG59aGFuZGxlQ29sb3JOKGUsdCxhLG4scyxvLGMsbCxoLGQpe2NvbnN0IGY9YS5wb3AoKTtpZihmIGluc3RhbmNlb2YgaS5OYW1lKXtjb25zdCBnPXMuZ2V0UmF3KGYubmFtZSkscD1nIGluc3RhbmNlb2YgaS5SZWYmJmguZ2V0QnlSZWYoZyk7aWYocCl0cnl7Y29uc3Qgcj1uLmJhc2U/bi5iYXNlLmdldFJnYihhLDApOm51bGwsaT0oMCx1LmdldFRpbGluZ1BhdHRlcm5JUikocC5vcGVyYXRvckxpc3RJUixwLmRpY3Qscik7ZS5hZGRPcCh0LGkpO3JldHVybn1jYXRjaChlKXt9Y29uc3QgbT10aGlzLnhyZWYuZmV0Y2hJZlJlZihnKTtpZihtKXtjb25zdCBpPW0gaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0/bS5kaWN0Om0scz1pLmdldCgiUGF0dGVyblR5cGUiKTtpZihzPT09RSl7Y29uc3Qgcj1uLmJhc2U/bi5iYXNlLmdldFJnYihhLDApOm51bGw7cmV0dXJuIHRoaXMuaGFuZGxlVGlsaW5nVHlwZSh0LHIsbyxtLGksZSxjLGgpfWlmKHM9PT1EKXtjb25zdCBhPWkuZ2V0KCJTaGFkaW5nIikscj1pLmdldEFycmF5KCJNYXRyaXgiKSxuPXRoaXMucGFyc2VTaGFkaW5nKHtzaGFkaW5nOmEscmVzb3VyY2VzOm8sbG9jYWxDb2xvclNwYWNlQ2FjaGU6bCxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6ZH0pO2UuYWRkT3AodCxbIlNoYWRpbmciLG4scl0pO3JldHVybn10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuVHlwZTogJHtzfWApfX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuTmFtZTogJHtmfWApfV9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGUsdCxhKXtpZigrK3Q+MTApeygwLHIud2FybikoIlZpc2liaWxpdHkgZXhwcmVzc2lvbiBpcyB0b28gZGVlcGx5IG5lc3RlZCIpO3JldHVybn1jb25zdCBuPWUubGVuZ3RoLHM9dGhpcy54cmVmLmZldGNoSWZSZWYoZVswXSk7aWYoIShuPDIpJiZzIGluc3RhbmNlb2YgaS5OYW1lKXtzd2l0Y2gocy5uYW1lKXtjYXNlIkFuZCI6Y2FzZSJPciI6Y2FzZSJOb3QiOmEucHVzaChzLm5hbWUpO2JyZWFrO2RlZmF1bHQ6KDAsci53YXJuKShgSW52YWxpZCBvcGVyYXRvciAke3MubmFtZX0gaW4gdmlzaWJpbGl0eSBleHByZXNzaW9uYCk7cmV0dXJufWZvcihsZXQgcj0xO3I8bjtyKyspe2NvbnN0IG49ZVtyXSxzPXRoaXMueHJlZi5mZXRjaElmUmVmKG4pO2lmKEFycmF5LmlzQXJyYXkocykpe2NvbnN0IGU9W107YS5wdXNoKGUpO3RoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24ocyx0LGUpfWVsc2UgbiBpbnN0YW5jZW9mIGkuUmVmJiZhLnB1c2gobi50b1N0cmluZygpKX19ZWxzZSgwLHIud2FybikoIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uIil9YXN5bmMgcGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZSx0KXtsZXQgYTtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXthPXQuZ2V0KCJQcm9wZXJ0aWVzIikuZ2V0KGUubmFtZSl9ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJPcHRpb25hbCBjb250ZW50IHByb3BlcnRpZXMgbWFsZm9ybWVkLiIpO2E9ZX1jb25zdCBuPWEuZ2V0KCJUeXBlIikubmFtZTtpZigiT0NHIj09PW4pcmV0dXJue3R5cGU6bixpZDphLm9iaklkfTtpZigiT0NNRCI9PT1uKXtjb25zdCBlPWEuZ2V0KCJWRSIpO2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHQ9W107dGhpcy5fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihlLDAsdCk7aWYodC5sZW5ndGg+MClyZXR1cm57dHlwZToiT0NNRCIsZXhwcmVzc2lvbjp0fX1jb25zdCB0PWEuZ2V0KCJPQ0dzIik7aWYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgZT1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihjb25zdCBhIG9mIHQpZS5wdXNoKGEudG9TdHJpbmcoKSk7ZWxzZSBlLnB1c2godC5vYmpJZCk7cmV0dXJue3R5cGU6bixpZHM6ZSxwb2xpY3k6YS5nZXQoIlAiKWluc3RhbmNlb2YgaS5OYW1lP2EuZ2V0KCJQIikubmFtZTpudWxsLGV4cHJlc3Npb246bnVsbH19aWYodCBpbnN0YW5jZW9mIGkuUmVmKXJldHVybnt0eXBlOm4saWQ6dC50b1N0cmluZygpfX1yZXR1cm4gbnVsbH1nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTplLHRhc2s6dCxyZXNvdXJjZXM6YSxvcGVyYXRvckxpc3Q6bixpbml0aWFsU3RhdGU6cz1udWxsLGZhbGxiYWNrRm9udERpY3Q6bz1udWxsfSl7YT1hfHxpLkRpY3QuZW1wdHk7cz1zfHxuZXcgRXZhbFN0YXRlO2lmKCFuKXRocm93IG5ldyBFcnJvcignZ2V0T3BlcmF0b3JMaXN0OiBtaXNzaW5nICJvcGVyYXRvckxpc3QiIHBhcmFtZXRlcicpO2NvbnN0IGM9dGhpcyxsPXRoaXMueHJlZjtsZXQgaD0hMTtjb25zdCB1PW5ldyBtLkxvY2FsSW1hZ2VDYWNoZSxkPW5ldyBtLkxvY2FsQ29sb3JTcGFjZUNhY2hlLGY9bmV3IG0uTG9jYWxHU3RhdGVDYWNoZSxnPW5ldyBtLkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLHA9bmV3IE1hcCxiPWEuZ2V0KCJYT2JqZWN0Iil8fGkuRGljdC5lbXB0eSx3PWEuZ2V0KCJQYXR0ZXJuIil8fGkuRGljdC5lbXB0eSx4PW5ldyBTdGF0ZU1hbmFnZXIocyksaz1uZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKGUsbCx4KSxDPW5ldyBUaW1lU2xvdE1hbmFnZXI7ZnVuY3Rpb24gY2xvc2VQZW5kaW5nUmVzdG9yZU9QUyhlKXtmb3IobGV0IGU9MCx0PWsuc2F2ZWRTdGF0ZXNEZXB0aDtlPHQ7ZSsrKW4uYWRkT3Aoci5PUFMucmVzdG9yZSxbXSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbiBwcm9taXNlQm9keShlLHMpe2NvbnN0IG5leHQ9ZnVuY3Rpb24odCl7UHJvbWlzZS5hbGwoW3Qsbi5yZWFkeV0pLnRoZW4oKGZ1bmN0aW9uKCl7dHJ5e3Byb21pc2VCb2R5KGUscyl9Y2F0Y2goZSl7cyhlKX19KSxzKX07dC5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7Qy5yZXNldCgpO2NvbnN0IG09e307bGV0IHYsRixPLFQsTSxFO2Zvcig7ISh2PUMuY2hlY2soKSk7KXttLmFyZ3M9bnVsbDtpZighay5yZWFkKG0pKWJyZWFrO2xldCBlPW0uYXJncyxzPW0uZm47c3dpdGNoKDB8cyl7Y2FzZSByLk9QUy5wYWludFhPYmplY3Q6RT1lWzBdaW5zdGFuY2VvZiBpLk5hbWU7TT1lWzBdLm5hbWU7aWYoRSl7Y29uc3QgdD11LmdldEJ5TmFtZShNKTtpZih0KXtuLmFkZEltYWdlT3BzKHQuZm4sdC5hcmdzLHQub3B0aW9uYWxDb250ZW50KTtpbmNyZW1lbnRDYWNoZWRJbWFnZU1hc2tDb3VudCh0KTtlPW51bGw7Y29udGludWV9fW5leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscyl7aWYoIUUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2xldCBvPWIuZ2V0UmF3KE0pO2lmKG8gaW5zdGFuY2VvZiBpLlJlZil7Y29uc3QgdD11LmdldEJ5UmVmKG8pO2lmKHQpe24uYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpO2luY3JlbWVudENhY2hlZEltYWdlTWFza0NvdW50KHQpO2UoKTtyZXR1cm59Y29uc3QgYT1jLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShvLGMucGFnZUluZGV4KTtpZihhKXtuLmFkZERlcGVuZGVuY3koYS5vYmpJZCk7bi5hZGRJbWFnZU9wcyhhLmZuLGEuYXJncyxhLm9wdGlvbmFsQ29udGVudCk7ZSgpO3JldHVybn1vPWwuZmV0Y2gobyl9aWYoIShvIGluc3RhbmNlb2YgeS5CYXNlU3RyZWFtKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTtjb25zdCBoPW8uZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKGggaW5zdGFuY2VvZiBpLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09aC5uYW1lKWlmKCJJbWFnZSIhPT1oLm5hbWUpe2lmKCJQUyIhPT1oLm5hbWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVuaGFuZGxlZCBYT2JqZWN0IHN1YnR5cGUgJHtoLm5hbWV9YCk7KDAsci5pbmZvKSgiSWdub3JlZCBYT2JqZWN0IHN1YnR5cGUgUFMiKTtlKCl9ZWxzZSBjLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczphLGltYWdlOm8sb3BlcmF0b3JMaXN0Om4sY2FjaGVLZXk6TSxsb2NhbEltYWdlQ2FjaGU6dSxsb2NhbENvbG9yU3BhY2VDYWNoZTpkfSkudGhlbihlLHMpO2Vsc2V7eC5zYXZlKCk7Yy5idWlsZEZvcm1YT2JqZWN0KGEsbyxudWxsLG4sdCx4LnN0YXRlLmNsb25lKCksZCkudGhlbigoZnVuY3Rpb24oKXt4LnJlc3RvcmUoKTtlKCl9KSxzKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighYy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO2MuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6ci5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclhPYmplY3R9KTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSByLk9QUy5zZXRGb250OnZhciBEPWVbMV07bmV4dChjLmhhbmRsZVNldEZvbnQoYSxlLG51bGwsbix0LHguc3RhdGUsbykudGhlbigoZnVuY3Rpb24oZSl7bi5hZGREZXBlbmRlbmN5KGUpO24uYWRkT3Aoci5PUFMuc2V0Rm9udCxbZSxEXSl9KSkpO3JldHVybjtjYXNlIHIuT1BTLmJlZ2luVGV4dDpoPSEwO2JyZWFrO2Nhc2Ugci5PUFMuZW5kVGV4dDpoPSExO2JyZWFrO2Nhc2Ugci5PUFMuZW5kSW5saW5lSW1hZ2U6dmFyIFI9ZVswXS5jYWNoZUtleTtpZihSKXtjb25zdCB0PXUuZ2V0QnlOYW1lKFIpO2lmKHQpe24uYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpO2luY3JlbWVudENhY2hlZEltYWdlTWFza0NvdW50KHQpO2U9bnVsbDtjb250aW51ZX19bmV4dChjLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczphLGltYWdlOmVbMF0saXNJbmxpbmU6ITAsb3BlcmF0b3JMaXN0Om4sY2FjaGVLZXk6Uixsb2NhbEltYWdlQ2FjaGU6dSxsb2NhbENvbG9yU3BhY2VDYWNoZTpkfSkpO3JldHVybjtjYXNlIHIuT1BTLnNob3dUZXh0OmlmKCF4LnN0YXRlLmZvbnQpe2MuZW5zdXJlU3RhdGVGb250KHguc3RhdGUpO2NvbnRpbnVlfWVbMF09Yy5oYW5kbGVUZXh0KGVbMF0seC5zdGF0ZSk7YnJlYWs7Y2FzZSByLk9QUy5zaG93U3BhY2VkVGV4dDppZigheC5zdGF0ZS5mb250KXtjLmVuc3VyZVN0YXRlRm9udCh4LnN0YXRlKTtjb250aW51ZX12YXIgTD1bXSxqPXguc3RhdGU7Zm9yKGNvbnN0IHQgb2YgZVswXSkic3RyaW5nIj09dHlwZW9mIHQ/TC5wdXNoKC4uLmMuaGFuZGxlVGV4dCh0LGopKToibnVtYmVyIj09dHlwZW9mIHQmJkwucHVzaCh0KTtlWzBdPUw7cz1yLk9QUy5zaG93VGV4dDticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIXguc3RhdGUuZm9udCl7Yy5lbnN1cmVTdGF0ZUZvbnQoeC5zdGF0ZSk7Y29udGludWV9bi5hZGRPcChyLk9QUy5uZXh0TGluZSk7ZVswXT1jLmhhbmRsZVRleHQoZVswXSx4LnN0YXRlKTtzPXIuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2Ugci5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6aWYoIXguc3RhdGUuZm9udCl7Yy5lbnN1cmVTdGF0ZUZvbnQoeC5zdGF0ZSk7Y29udGludWV9bi5hZGRPcChyLk9QUy5uZXh0TGluZSk7bi5hZGRPcChyLk9QUy5zZXRXb3JkU3BhY2luZyxbZS5zaGlmdCgpXSk7bi5hZGRPcChyLk9QUy5zZXRDaGFyU3BhY2luZyxbZS5zaGlmdCgpXSk7ZVswXT1jLmhhbmRsZVRleHQoZVswXSx4LnN0YXRlKTtzPXIuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2Ugci5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6eC5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZT1lWzBdO2JyZWFrO2Nhc2Ugci5PUFMuc2V0RmlsbENvbG9yU3BhY2U6e2NvbnN0IHQ9Uy5Db2xvclNwYWNlLmdldENhY2hlZChlWzBdLGwsZCk7aWYodCl7eC5zdGF0ZS5maWxsQ29sb3JTcGFjZT10O2NvbnRpbnVlfW5leHQoYy5wYXJzZUNvbG9yU3BhY2Uoe2NzOmVbMF0scmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2UmJih4LnN0YXRlLmZpbGxDb2xvclNwYWNlPWUpfSkpKTtyZXR1cm59Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOntjb25zdCB0PVMuQ29sb3JTcGFjZS5nZXRDYWNoZWQoZVswXSxsLGQpO2lmKHQpe3guc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT10O2NvbnRpbnVlfW5leHQoYy5wYXJzZUNvbG9yU3BhY2Uoe2NzOmVbMF0scmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2UmJih4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9ZSl9KSkpO3JldHVybn1jYXNlIHIuT1BTLnNldEZpbGxDb2xvcjpUPXguc3RhdGUuZmlsbENvbG9yU3BhY2U7ZT1ULmdldFJnYihlLDApO3M9ci5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3I6VD14LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7ZT1ULmdldFJnYihlLDApO3M9ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsR3JheTp4LnN0YXRlLmZpbGxDb2xvclNwYWNlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7ZT1TLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihlLDApO3M9ci5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlR3JheTp4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Uy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldEZpbGxDTVlLQ29sb3I6eC5zdGF0ZS5maWxsQ29sb3JTcGFjZT1TLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO2U9Uy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoZSwwKTtzPXIuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjp4LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Uy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215aztlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldEZpbGxSR0JDb2xvcjp4LnN0YXRlLmZpbGxDb2xvclNwYWNlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoZSwwKTticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZVJHQkNvbG9yOnguc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT1TLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7ZT1TLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGUsMCk7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3JOOlQ9eC5zdGF0ZS5maWxsQ29sb3JTcGFjZTtpZigiUGF0dGVybiI9PT1ULm5hbWUpe25leHQoYy5oYW5kbGVDb2xvck4obixyLk9QUy5zZXRGaWxsQ29sb3JOLGUsVCx3LGEsdCxkLGcscCkpO3JldHVybn1lPVQuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRGaWxsUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvck46VD14LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7aWYoIlBhdHRlcm4iPT09VC5uYW1lKXtuZXh0KGMuaGFuZGxlQ29sb3JOKG4sci5PUFMuc2V0U3Ryb2tlQ29sb3JOLGUsVCx3LGEsdCxkLGcscCkpO3JldHVybn1lPVQuZ2V0UmdiKGUsMCk7cz1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNoYWRpbmdGaWxsOnZhciAkPWEuZ2V0KCJTaGFkaW5nIik7aWYoISQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgcmVzb3VyY2UgZm91bmQiKTt2YXIgXz0kLmdldChlWzBdLm5hbWUpO2lmKCFfKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJObyBzaGFkaW5nIG9iamVjdCBmb3VuZCIpO2U9W2MucGFyc2VTaGFkaW5nKHtzaGFkaW5nOl8scmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6ZCxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6cH0pXTtzPXIuT1BTLnNoYWRpbmdGaWxsO2JyZWFrO2Nhc2Ugci5PUFMuc2V0R1N0YXRlOkU9ZVswXWluc3RhbmNlb2YgaS5OYW1lO009ZVswXS5uYW1lO2lmKEUpe2NvbnN0IHQ9Zi5nZXRCeU5hbWUoTSk7aWYodCl7dC5sZW5ndGg+MCYmbi5hZGRPcChyLk9QUy5zZXRHU3RhdGUsW3RdKTtlPW51bGw7Y29udGludWV9fW5leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscyl7aWYoIUUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3Qgbz1hLmdldCgiRXh0R1N0YXRlIik7aWYoIShvIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3QgbD1vLmdldChNKTtpZighKGwgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjLnNldEdTdGF0ZSh7cmVzb3VyY2VzOmEsZ1N0YXRlOmwsb3BlcmF0b3JMaXN0Om4sY2FjaGVLZXk6TSx0YXNrOnQsc3RhdGVNYW5hZ2VyOngsbG9jYWxHU3RhdGVDYWNoZTpmLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmR9KS50aGVuKGUscyl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighYy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO2MuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6ci5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckV4dEdTdGF0ZX0pOygwLHIud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2Ugci5PUFMubW92ZVRvOmNhc2Ugci5PUFMubGluZVRvOmNhc2Ugci5PUFMuY3VydmVUbzpjYXNlIHIuT1BTLmN1cnZlVG8yOmNhc2Ugci5PUFMuY3VydmVUbzM6Y2FzZSByLk9QUy5jbG9zZVBhdGg6Y2FzZSByLk9QUy5yZWN0YW5nbGU6Yy5idWlsZFBhdGgobixzLGUsaCk7Y29udGludWU7Y2FzZSByLk9QUy5tYXJrUG9pbnQ6Y2FzZSByLk9QUy5tYXJrUG9pbnRQcm9wczpjYXNlIHIuT1BTLmJlZ2luQ29tcGF0OmNhc2Ugci5PUFMuZW5kQ29tcGF0OmNvbnRpbnVlO2Nhc2Ugci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6aWYoIShlWzBdaW5zdGFuY2VvZiBpLk5hbWUpKXsoMCxyLndhcm4pKGBFeHBlY3RlZCBuYW1lIGZvciBiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyBhcmcwPSR7ZVswXX1gKTtjb250aW51ZX1pZigiT0MiPT09ZVswXS5uYW1lKXtuZXh0KGMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZVsxXSxhKS50aGVuKChlPT57bi5hZGRPcChyLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixlXSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIWMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTtjLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JNYXJrZWRDb250ZW50fSk7KDAsci53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6ICIke2V9Ii5gKX19KSkpO3JldHVybn1lPVtlWzBdLm5hbWUsZVsxXWluc3RhbmNlb2YgaS5EaWN0P2VbMV0uZ2V0KCJNQ0lEIik6bnVsbF07YnJlYWs7Y2FzZSByLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Y2FzZSByLk9QUy5lbmRNYXJrZWRDb250ZW50OmRlZmF1bHQ6aWYobnVsbCE9PWUpe2ZvcihGPTAsTz1lLmxlbmd0aDtGPE8mJiEoZVtGXWluc3RhbmNlb2YgaS5EaWN0KTtGKyspO2lmKEY8Tyl7KDAsci53YXJuKSgiZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3Jpbmcgb3BlcmF0b3I6ICIrcyk7Y29udGludWV9fX1uLmFkZE9wKHMsZSl9aWYodiluZXh0KE4pO2Vsc2V7Y2xvc2VQZW5kaW5nUmVzdG9yZU9QUygpO2UoKX19KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt0aGlzLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JPcGVyYXRvckxpc3R9KTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCl9fSkpfWdldFRleHRDb250ZW50KHtzdHJlYW06ZSx0YXNrOnQscmVzb3VyY2VzOmEsc3RhdGVNYW5hZ2VyOm49bnVsbCxjb21iaW5lVGV4dEl0ZW1zOnM9ITEsaW5jbHVkZU1hcmtlZENvbnRlbnQ6bz0hMSxzaW5rOmMsc2VlblN0eWxlczpsPW5ldyBTZXQsdmlld0JveDp1LG1hcmtlZENvbnRlbnREYXRhOmQ9bnVsbH0pe2E9YXx8aS5EaWN0LmVtcHR5O249bnx8bmV3IFN0YXRlTWFuYWdlcihuZXcgVGV4dFN0YXRlKTtvJiYoZD1kfHx7bGV2ZWw6MH0pO2NvbnN0IGY9KDAsaC5nZXROb3JtYWxpemVkVW5pY29kZXMpKCksZz17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9LHA9e2luaXRpYWxpemVkOiExLHN0cjpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowLHZlcnRpY2FsOiExLHByZXZUcmFuc2Zvcm06bnVsbCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VJbkZsb3dNaW46MCxzcGFjZUluRmxvd01heDowLHRyYWNraW5nU3BhY2VNaW46MS8wLG5lZ2F0aXZlU3BhY2VNYXg6LTEvMCxub3RBU3BhY2U6LTEvMCx0cmFuc2Zvcm06bnVsbCxmb250TmFtZTpudWxsLGhhc0VPTDohMX0sYj1bIiAiLCIgIl07bGV0IFM9MDtmdW5jdGlvbiBzYXZlTGFzdENoYXIoZSl7Y29uc3QgdD0oUysxKSUyLGE9IiAiIT09YltTXSYmIiAiPT09Ylt0XTtiW1NdPWU7Uz10O3JldHVybiBhfWZ1bmN0aW9uIHJlc2V0TGFzdENoYXJzKCl7YlswXT1iWzFdPSIgIjtTPTB9Y29uc3QgeD10aGlzLGs9dGhpcy54cmVmLEM9W107bGV0IHY9bnVsbDtjb25zdCBGPW5ldyBtLkxvY2FsSW1hZ2VDYWNoZSxPPW5ldyBtLkxvY2FsR1N0YXRlQ2FjaGUsVD1uZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKGUsayxuKTtsZXQgTTtmdW5jdGlvbiBnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpe2NvbnN0IGU9TS5mb250LHQ9W00uZm9udFNpemUqTS50ZXh0SFNjYWxlLDAsMCxNLmZvbnRTaXplLDAsTS50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKE0uZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiEoMCxyLmlzQXJyYXlFcXVhbCkoTS5mb250TWF0cml4LHIuRk9OVF9JREVOVElUWV9NQVRSSVgpKXtjb25zdCBhPWUuYmJveFszXS1lLmJib3hbMV07YT4wJiYodFszXSo9YSpNLmZvbnRNYXRyaXhbM10pfXJldHVybiByLlV0aWwudHJhbnNmb3JtKE0uY3RtLHIuVXRpbC50cmFuc2Zvcm0oTS50ZXh0TWF0cml4LHQpKX1mdW5jdGlvbiBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKXtpZihwLmluaXRpYWxpemVkKXJldHVybiBwO2NvbnN0IGU9TS5mb250LHQ9ZS5sb2FkZWROYW1lO2lmKCFsLmhhcyh0KSl7bC5hZGQodCk7Zy5zdHlsZXNbdF09e2ZvbnRGYW1pbHk6ZS5mYWxsYmFja05hbWUsYXNjZW50OmUuYXNjZW50LGRlc2NlbnQ6ZS5kZXNjZW50LHZlcnRpY2FsOmUudmVydGljYWx9fXAuZm9udE5hbWU9dDtjb25zdCBhPXAudHJhbnNmb3JtPWdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7aWYoZS52ZXJ0aWNhbCl7cC53aWR0aD1wLnRvdGFsV2lkdGg9TWF0aC5oeXBvdChhWzBdLGFbMV0pO3AuaGVpZ2h0PXAudG90YWxIZWlnaHQ9MDtwLnZlcnRpY2FsPSEwfWVsc2V7cC53aWR0aD1wLnRvdGFsV2lkdGg9MDtwLmhlaWdodD1wLnRvdGFsSGVpZ2h0PU1hdGguaHlwb3QoYVsyXSxhWzNdKTtwLnZlcnRpY2FsPSExfWNvbnN0IHI9TWF0aC5oeXBvdChNLnRleHRMaW5lTWF0cml4WzBdLE0udGV4dExpbmVNYXRyaXhbMV0pLG49TWF0aC5oeXBvdChNLmN0bVswXSxNLmN0bVsxXSk7cC50ZXh0QWR2YW5jZVNjYWxlPW4qcjtwLnRyYWNraW5nU3BhY2VNaW49LjEqTS5mb250U2l6ZTtwLm5vdEFTcGFjZT0uMDMqTS5mb250U2l6ZTtwLm5lZ2F0aXZlU3BhY2VNYXg9LS4yKk0uZm9udFNpemU7cC5zcGFjZUluRmxvd01pbj0uMSpNLmZvbnRTaXplO3Auc3BhY2VJbkZsb3dNYXg9LjYqTS5mb250U2l6ZTtwLmhhc0VPTD0hMTtwLmluaXRpYWxpemVkPSEwO3JldHVybiBwfWZ1bmN0aW9uIHVwZGF0ZUFkdmFuY2VTY2FsZSgpe2lmKCFwLmluaXRpYWxpemVkKXJldHVybjtjb25zdCBlPU1hdGguaHlwb3QoTS50ZXh0TGluZU1hdHJpeFswXSxNLnRleHRMaW5lTWF0cml4WzFdKSx0PU1hdGguaHlwb3QoTS5jdG1bMF0sTS5jdG1bMV0pKmU7aWYodCE9PXAudGV4dEFkdmFuY2VTY2FsZSl7aWYocC52ZXJ0aWNhbCl7cC50b3RhbEhlaWdodCs9cC5oZWlnaHQqcC50ZXh0QWR2YW5jZVNjYWxlO3AuaGVpZ2h0PTB9ZWxzZXtwLnRvdGFsV2lkdGgrPXAud2lkdGgqcC50ZXh0QWR2YW5jZVNjYWxlO3Aud2lkdGg9MH1wLnRleHRBZHZhbmNlU2NhbGU9dH19ZnVuY3Rpb24gaGFuZGxlU2V0Rm9udChlLG4pe3JldHVybiB4LmxvYWRGb250KGUsbixhKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5mb250LmlzVHlwZTNGb250P2UubG9hZFR5cGUzRGF0YSh4LGEsdCkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSk6ZX0pKS50aGVuKChmdW5jdGlvbihlKXtNLmZvbnQ9ZS5mb250O00uZm9udE1hdHJpeD1lLmZvbnQuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWH0pKX1mdW5jdGlvbiBhcHBseUludmVyc2VSb3RhdGlvbihlLHQsYSl7Y29uc3Qgcj1NYXRoLmh5cG90KGFbMF0sYVsxXSk7cmV0dXJuWyhhWzBdKmUrYVsxXSp0KS9yLChhWzJdKmUrYVszXSp0KS9yXX1mdW5jdGlvbiBjb21wYXJlV2l0aExhc3RQb3NpdGlvbigpe2NvbnN0IGU9Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtsZXQgdD1lWzRdLGE9ZVs1XTtjb25zdCByPXQtdVswXSxuPWEtdVsxXTtpZihyPDB8fHI+dVsyXXx8bjwwfHxuPnVbM10pcmV0dXJuITE7aWYoIXN8fCFNLmZvbnR8fCFwLnByZXZUcmFuc2Zvcm0pcmV0dXJuITA7bGV0IGk9cC5wcmV2VHJhbnNmb3JtWzRdLG89cC5wcmV2VHJhbnNmb3JtWzVdO2lmKGk9PT10JiZvPT09YSlyZXR1cm4hMDtsZXQgYz0tMTtlWzBdJiYwPT09ZVsxXSYmMD09PWVbMl0/Yz1lWzBdPjA/MDoxODA6ZVsxXSYmMD09PWVbMF0mJjA9PT1lWzNdJiYoYz1lWzFdPjA/OTA6MjcwKTtzd2l0Y2goYyl7Y2FzZSAwOmJyZWFrO2Nhc2UgOTA6W3QsYV09W2EsdF07W2ksb109W28saV07YnJlYWs7Y2FzZSAxODA6W3QsYSxpLG9dPVstdCwtYSwtaSwtb107YnJlYWs7Y2FzZSAyNzA6W3QsYV09Wy1hLC10XTtbaSxvXT1bLW8sLWldO2JyZWFrO2RlZmF1bHQ6W3QsYV09YXBwbHlJbnZlcnNlUm90YXRpb24odCxhLGUpO1tpLG9dPWFwcGx5SW52ZXJzZVJvdGF0aW9uKGksbyxwLnByZXZUcmFuc2Zvcm0pfWlmKE0uZm9udC52ZXJ0aWNhbCl7Y29uc3QgZT0oby1hKS9wLnRleHRBZHZhbmNlU2NhbGUscj10LWksbj1NYXRoLnNpZ24ocC5oZWlnaHQpO2lmKGU8bipwLm5lZ2F0aXZlU3BhY2VNYXgpe2lmKE1hdGguYWJzKHIpPi41KnAud2lkdGgpe2FwcGVuZEVPTCgpO3JldHVybiEwfXJlc2V0TGFzdENoYXJzKCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1pZihNYXRoLmFicyhyKT5wLndpZHRoKXthcHBlbmRFT0woKTtyZXR1cm4hMH1lPD1uKnAubm90QVNwYWNlJiZyZXNldExhc3RDaGFycygpO2lmKGU8PW4qcC50cmFja2luZ1NwYWNlTWluKXAuaGVpZ2h0Kz1lO2Vsc2UgaWYoIWFkZEZha2VTcGFjZXMoZSxwLnByZXZUcmFuc2Zvcm0sbikpaWYoMD09PXAuc3RyLmxlbmd0aCl7cmVzZXRMYXN0Q2hhcnMoKTtnLml0ZW1zLnB1c2goe3N0cjoiICIsZGlyOiJsdHIiLHdpZHRoOjAsaGVpZ2h0Ok1hdGguYWJzKGUpLHRyYW5zZm9ybTpwLnByZXZUcmFuc2Zvcm0sZm9udE5hbWU6cC5mb250TmFtZSxoYXNFT0w6ITF9KX1lbHNlIHAuaGVpZ2h0Kz1lO3JldHVybiEwfWNvbnN0IGw9KHQtaSkvcC50ZXh0QWR2YW5jZVNjYWxlLGg9YS1vLGQ9TWF0aC5zaWduKHAud2lkdGgpO2lmKGw8ZCpwLm5lZ2F0aXZlU3BhY2VNYXgpe2lmKE1hdGguYWJzKGgpPi41KnAuaGVpZ2h0KXthcHBlbmRFT0woKTtyZXR1cm4hMH1yZXNldExhc3RDaGFycygpO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmV0dXJuITB9aWYoTWF0aC5hYnMoaCk+cC5oZWlnaHQpe2FwcGVuZEVPTCgpO3JldHVybiEwfWw8PWQqcC5ub3RBU3BhY2UmJnJlc2V0TGFzdENoYXJzKCk7aWYobDw9ZCpwLnRyYWNraW5nU3BhY2VNaW4pcC53aWR0aCs9bDtlbHNlIGlmKCFhZGRGYWtlU3BhY2VzKGwscC5wcmV2VHJhbnNmb3JtLGQpKWlmKDA9PT1wLnN0ci5sZW5ndGgpe3Jlc2V0TGFzdENoYXJzKCk7Zy5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDpNYXRoLmFicyhsKSxoZWlnaHQ6MCx0cmFuc2Zvcm06cC5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOnAuZm9udE5hbWUsaGFzRU9MOiExfSl9ZWxzZSBwLndpZHRoKz1sO3JldHVybiEwfWZ1bmN0aW9uIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczplLGV4dHJhU3BhY2luZzp0fSl7Y29uc3QgYT1NLmZvbnQ7aWYoIWUpe2NvbnN0IGU9TS5jaGFyU3BhY2luZyt0O2UmJihhLnZlcnRpY2FsP00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1lKTpNLnRyYW5zbGF0ZVRleHRNYXRyaXgoZSpNLnRleHRIU2NhbGUsMCkpO3JldHVybn1jb25zdCByPWEuY2hhcnNUb0dseXBocyhlKSxuPU0uZm9udE1hdHJpeFswXSpNLmZvbnRTaXplO2ZvcihsZXQgZT0wLGk9ci5sZW5ndGg7ZTxpO2UrKyl7Y29uc3Qgcz1yW2VdO2lmKHMuaXNJbnZpc2libGVGb3JtYXRNYXJrKWNvbnRpbnVlO2xldCBvPU0uY2hhclNwYWNpbmcrKGUrMT09PWk/dDowKSxjPXMud2lkdGg7YS52ZXJ0aWNhbCYmKGM9cy52bWV0cmljP3Mudm1ldHJpY1swXTotYyk7bGV0IGw9YypuO2lmKHMuaXNXaGl0ZXNwYWNlKXtpZihhLnZlcnRpY2FsKXtvKz0tbCtNLndvcmRTcGFjaW5nO00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1vKX1lbHNle28rPWwrTS53b3JkU3BhY2luZztNLnRyYW5zbGF0ZVRleHRNYXRyaXgobypNLnRleHRIU2NhbGUsMCl9c2F2ZUxhc3RDaGFyKCIgIik7Y29udGludWV9aWYoIWNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKCkpY29udGludWU7Y29uc3QgdT1lbnN1cmVUZXh0Q29udGVudEl0ZW0oKTtzLmlzWmVyb1dpZHRoRGlhY3JpdGljJiYobD0wKTtpZihhLnZlcnRpY2FsKXtNLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCxsKTtsPU1hdGguYWJzKGwpO3UuaGVpZ2h0Kz1sfWVsc2V7bCo9TS50ZXh0SFNjYWxlO00udHJhbnNsYXRlVGV4dE1hdHJpeChsLDApO3Uud2lkdGgrPWx9bCYmKHUucHJldlRyYW5zZm9ybT1nZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpKTtsZXQgZD1zLnVuaWNvZGU7ZD1mW2RdfHxkO2Q9KDAsaC5yZXZlcnNlSWZSdGwpKGQpO3NhdmVMYXN0Q2hhcihkKSYmdS5zdHIucHVzaCgiICIpO3Uuc3RyLnB1c2goZCk7byYmKGEudmVydGljYWw/TS50cmFuc2xhdGVUZXh0TWF0cml4KDAsLW8pOk0udHJhbnNsYXRlVGV4dE1hdHJpeChvKk0udGV4dEhTY2FsZSwwKSl9fWZ1bmN0aW9uIGFwcGVuZEVPTCgpe3Jlc2V0TGFzdENoYXJzKCk7aWYocC5pbml0aWFsaXplZCl7cC5oYXNFT0w9ITA7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKX1lbHNlIGcuaXRlbXMucHVzaCh7c3RyOiIiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDowLHRyYW5zZm9ybTpnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpLGZvbnROYW1lOk0uZm9udC5sb2FkZWROYW1lLGhhc0VPTDohMH0pfWZ1bmN0aW9uIGFkZEZha2VTcGFjZXMoZSx0LGEpe2lmKGEqcC5zcGFjZUluRmxvd01pbjw9ZSYmZTw9YSpwLnNwYWNlSW5GbG93TWF4KXtpZihwLmluaXRpYWxpemVkKXtyZXNldExhc3RDaGFycygpO3Auc3RyLnB1c2goIiAiKX1yZXR1cm4hMX1jb25zdCByPXAuZm9udE5hbWU7bGV0IG49MDtpZihwLnZlcnRpY2FsKXtuPWU7ZT0wfWZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmVzZXRMYXN0Q2hhcnMoKTtnLml0ZW1zLnB1c2goe3N0cjoiICIsZGlyOiJsdHIiLHdpZHRoOk1hdGguYWJzKGUpLGhlaWdodDpNYXRoLmFicyhuKSx0cmFuc2Zvcm06dHx8Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxmb250TmFtZTpyLGhhc0VPTDohMX0pO3JldHVybiEwfWZ1bmN0aW9uIGZsdXNoVGV4dENvbnRlbnRJdGVtKCl7aWYocC5pbml0aWFsaXplZCYmcC5zdHIpe3AudmVydGljYWw/cC50b3RhbEhlaWdodCs9cC5oZWlnaHQqcC50ZXh0QWR2YW5jZVNjYWxlOnAudG90YWxXaWR0aCs9cC53aWR0aCpwLnRleHRBZHZhbmNlU2NhbGU7Zy5pdGVtcy5wdXNoKGZ1bmN0aW9uIHJ1bkJpZGlUcmFuc2Zvcm0oZSl7Y29uc3QgdD1lLnN0ci5qb2luKCIiKSxhPSgwLHcuYmlkaSkodCwtMSxlLnZlcnRpY2FsKTtyZXR1cm57c3RyOmEuc3RyLGRpcjphLmRpcix3aWR0aDpNYXRoLmFicyhlLnRvdGFsV2lkdGgpLGhlaWdodDpNYXRoLmFicyhlLnRvdGFsSGVpZ2h0KSx0cmFuc2Zvcm06ZS50cmFuc2Zvcm0sZm9udE5hbWU6ZS5mb250TmFtZSxoYXNFT0w6ZS5oYXNFT0x9fShwKSk7cC5pbml0aWFsaXplZD0hMTtwLnN0ci5sZW5ndGg9MH19ZnVuY3Rpb24gZW5xdWV1ZUNodW5rKGU9ITEpe2NvbnN0IHQ9Zy5pdGVtcy5sZW5ndGg7aWYoMCE9PXQmJiEoZSYmdDwxMCkpe2MuZW5xdWV1ZShnLHQpO2cuaXRlbXM9W107Zy5zdHlsZXM9T2JqZWN0LmNyZWF0ZShudWxsKX19Y29uc3QgRT1uZXcgVGltZVNsb3RNYW5hZ2VyO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gcHJvbWlzZUJvZHkoZSxoKXtjb25zdCBuZXh0PWZ1bmN0aW9uKHQpe2VucXVldWVDaHVuayghMCk7UHJvbWlzZS5hbGwoW3QsYy5yZWFkeV0pLnRoZW4oKGZ1bmN0aW9uKCl7dHJ5e3Byb21pc2VCb2R5KGUsaCl9Y2F0Y2goZSl7aChlKX19KSxoKX07dC5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7RS5yZXNldCgpO2NvbnN0IGY9e307bGV0IHAsbT1bXTtmb3IoOyEocD1FLmNoZWNrKCkpOyl7bS5sZW5ndGg9MDtmLmFyZ3M9bTtpZighVC5yZWFkKGYpKWJyZWFrO009bi5zdGF0ZTtjb25zdCBlPWYuZm47bT1mLmFyZ3M7c3dpdGNoKDB8ZSl7Y2FzZSByLk9QUy5zZXRGb250OnZhciBiPW1bMF0ubmFtZSx3PW1bMV07aWYoTS5mb250JiZiPT09TS5mb250TmFtZSYmdz09PU0uZm9udFNpemUpYnJlYWs7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtNLmZvbnROYW1lPWI7TS5mb250U2l6ZT13O25leHQoaGFuZGxlU2V0Rm9udChiLG51bGwpKTtyZXR1cm47Y2FzZSByLk9QUy5zZXRUZXh0UmlzZTpNLnRleHRSaXNlPW1bMF07YnJlYWs7Y2FzZSByLk9QUy5zZXRIU2NhbGU6TS50ZXh0SFNjYWxlPW1bMF0vMTAwO2JyZWFrO2Nhc2Ugci5PUFMuc2V0TGVhZGluZzpNLmxlYWRpbmc9bVswXTticmVhaztjYXNlIHIuT1BTLm1vdmVUZXh0Ok0udHJhbnNsYXRlVGV4dExpbmVNYXRyaXgobVswXSxtWzFdKTtNLnRleHRNYXRyaXg9TS50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2JyZWFrO2Nhc2Ugci5PUFMuc2V0TGVhZGluZ01vdmVUZXh0Ok0ubGVhZGluZz0tbVsxXTtNLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KG1bMF0sbVsxXSk7TS50ZXh0TWF0cml4PU0udGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lOk0uY2FycmlhZ2VSZXR1cm4oKTticmVhaztjYXNlIHIuT1BTLnNldFRleHRNYXRyaXg6TS5zZXRUZXh0TWF0cml4KG1bMF0sbVsxXSxtWzJdLG1bM10sbVs0XSxtWzVdKTtNLnNldFRleHRMaW5lTWF0cml4KG1bMF0sbVsxXSxtWzJdLG1bM10sbVs0XSxtWzVdKTt1cGRhdGVBZHZhbmNlU2NhbGUoKTticmVhaztjYXNlIHIuT1BTLnNldENoYXJTcGFjaW5nOk0uY2hhclNwYWNpbmc9bVswXTticmVhaztjYXNlIHIuT1BTLnNldFdvcmRTcGFjaW5nOk0ud29yZFNwYWNpbmc9bVswXTticmVhaztjYXNlIHIuT1BTLmJlZ2luVGV4dDpNLnRleHRNYXRyaXg9ci5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtNLnRleHRMaW5lTWF0cml4PXIuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7YnJlYWs7Y2FzZSByLk9QUy5zaG93U3BhY2VkVGV4dDppZighbi5zdGF0ZS5mb250KXt4LmVuc3VyZVN0YXRlRm9udChuLnN0YXRlKTtjb250aW51ZX1jb25zdCBlPShNLmZvbnQudmVydGljYWw/MTotMSkqTS5mb250U2l6ZS8xZTMsaD1tWzBdO2ZvcihsZXQgdD0wLGE9aC5sZW5ndGg7dDxhLTE7dCsrKXtjb25zdCBhPWhbdF07aWYoInN0cmluZyI9PXR5cGVvZiBhKUMucHVzaChhKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgYSYmMCE9PWEpe2NvbnN0IHQ9Qy5qb2luKCIiKTtDLmxlbmd0aD0wO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczp0LGV4dHJhU3BhY2luZzphKmV9KX19Y29uc3QgZj1oLmF0KC0xKTsic3RyaW5nIj09dHlwZW9mIGYmJkMucHVzaChmKTtpZihDLmxlbmd0aD4wKXtjb25zdCBlPUMuam9pbigiIik7Qy5sZW5ndGg9MDtidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6ZSxleHRyYVNwYWNpbmc6MH0pfWJyZWFrO2Nhc2Ugci5PUFMuc2hvd1RleHQ6aWYoIW4uc3RhdGUuZm9udCl7eC5lbnN1cmVTdGF0ZUZvbnQobi5zdGF0ZSk7Y29udGludWV9YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOm1bMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIW4uc3RhdGUuZm9udCl7eC5lbnN1cmVTdGF0ZUZvbnQobi5zdGF0ZSk7Y29udGludWV9TS5jYXJyaWFnZVJldHVybigpO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczptWzBdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSByLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDppZighbi5zdGF0ZS5mb250KXt4LmVuc3VyZVN0YXRlRm9udChuLnN0YXRlKTtjb250aW51ZX1NLndvcmRTcGFjaW5nPW1bMF07TS5jaGFyU3BhY2luZz1tWzFdO00uY2FycmlhZ2VSZXR1cm4oKTtidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6bVsyXSxleHRyYVNwYWNpbmc6MH0pO2JyZWFrO2Nhc2Ugci5PUFMucGFpbnRYT2JqZWN0OmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7dnx8KHY9YS5nZXQoIlhPYmplY3QiKXx8aS5EaWN0LmVtcHR5KTt2YXIgUz1tWzBdaW5zdGFuY2VvZiBpLk5hbWUsRD1tWzBdLm5hbWU7aWYoUyYmRi5nZXRCeU5hbWUoRCkpYnJlYWs7bmV4dChuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxoKXtpZighUyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7bGV0IGY9di5nZXRSYXcoRCk7aWYoZiBpbnN0YW5jZW9mIGkuUmVmKXtpZihGLmdldEJ5UmVmKGYpKXtlKCk7cmV0dXJufWlmKHguZ2xvYmFsSW1hZ2VDYWNoZS5nZXREYXRhKGYseC5wYWdlSW5kZXgpKXtlKCk7cmV0dXJufWY9ay5mZXRjaChmKX1pZighKGYgaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO2NvbnN0IGc9Zi5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEoZyBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSIhPT1nLm5hbWUpe0Yuc2V0KEQsZi5kaWN0Lm9iaklkLCEwKTtlKCk7cmV0dXJufWNvbnN0IHA9bi5zdGF0ZS5jbG9uZSgpLG09bmV3IFN0YXRlTWFuYWdlcihwKSxiPWYuZGljdC5nZXRBcnJheSgiTWF0cml4Iik7QXJyYXkuaXNBcnJheShiKSYmNj09PWIubGVuZ3RoJiZtLnRyYW5zZm9ybShiKTtlbnF1ZXVlQ2h1bmsoKTtjb25zdCB3PXtlbnF1ZXVlSW52b2tlZDohMSxlbnF1ZXVlKGUsdCl7dGhpcy5lbnF1ZXVlSW52b2tlZD0hMDtjLmVucXVldWUoZSx0KX0sZ2V0IGRlc2lyZWRTaXplKCl7cmV0dXJuIGMuZGVzaXJlZFNpemV9LGdldCByZWFkeSgpe3JldHVybiBjLnJlYWR5fX07eC5nZXRUZXh0Q29udGVudCh7c3RyZWFtOmYsdGFzazp0LHJlc291cmNlczpmLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKXx8YSxzdGF0ZU1hbmFnZXI6bSxjb21iaW5lVGV4dEl0ZW1zOnMsaW5jbHVkZU1hcmtlZENvbnRlbnQ6byxzaW5rOncsc2VlblN0eWxlczpsLHZpZXdCb3g6dSxtYXJrZWRDb250ZW50RGF0YTpkfSkudGhlbigoZnVuY3Rpb24oKXt3LmVucXVldWVJbnZva2VkfHxGLnNldChELGYuZGljdC5vYmpJZCwhMCk7ZSgpfSksaCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZigheC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgWE9iamVjdDogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2Ugci5PUFMuc2V0R1N0YXRlOlM9bVswXWluc3RhbmNlb2YgaS5OYW1lO0Q9bVswXS5uYW1lO2lmKFMmJk8uZ2V0QnlOYW1lKEQpKWJyZWFrO25leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIVMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3Qgbj1hLmdldCgiRXh0R1N0YXRlIik7aWYoIShuIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3Qgcz1uLmdldChEKTtpZighKHMgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjb25zdCBvPXMuZ2V0KCJGb250Iik7aWYobyl7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtNLmZvbnROYW1lPW51bGw7TS5mb250U2l6ZT1vWzFdO2hhbmRsZVNldEZvbnQobnVsbCxvWzBdKS50aGVuKGUsdCl9ZWxzZXtPLnNldChELHMub2JqSWQsITApO2UoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZigheC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSByLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtpZihvKXtkLmxldmVsKys7Zy5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzptWzBdaW5zdGFuY2VvZiBpLk5hbWU/bVswXS5uYW1lOm51bGx9KX1icmVhaztjYXNlIHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzOmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7aWYobyl7ZC5sZXZlbCsrO2xldCBlPW51bGw7bVsxXWluc3RhbmNlb2YgaS5EaWN0JiYoZT1tWzFdLmdldCgiTUNJRCIpKTtnLml0ZW1zLnB1c2goe3R5cGU6ImJlZ2luTWFya2VkQ29udGVudFByb3BzIixpZDpOdW1iZXIuaXNJbnRlZ2VyKGUpP2Ake3guaWRGYWN0b3J5LmdldFBhZ2VPYmpJZCgpfV9tY2lkJHtlfWA6bnVsbCx0YWc6bVswXWluc3RhbmNlb2YgaS5OYW1lP21bMF0ubmFtZTpudWxsfSl9YnJlYWs7Y2FzZSByLk9QUy5lbmRNYXJrZWRDb250ZW50OmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7aWYobyl7aWYoMD09PWQubGV2ZWwpYnJlYWs7ZC5sZXZlbC0tO2cuaXRlbXMucHVzaCh7dHlwZToiZW5kTWFya2VkQ29udGVudCJ9KX19aWYoZy5pdGVtcy5sZW5ndGg+PWMuZGVzaXJlZFNpemUpe3A9ITA7YnJlYWt9fWlmKHApbmV4dChOKTtlbHNle2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7ZW5xdWV1ZUNodW5rKCk7ZSgpfX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJHt0Lm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtlbnF1ZXVlQ2h1bmsoKX19KSl9ZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGUsdCxhKXtjb25zdCBuPXRoaXMueHJlZjtsZXQgcztjb25zdCBsPXRoaXMucmVhZFRvVW5pY29kZShhLnRvVW5pY29kZXx8ZS5nZXQoIlRvVW5pY29kZSIpfHx0LmdldCgiVG9Vbmljb2RlIikpO2lmKGEuY29tcG9zaXRlKXtjb25zdCB0PWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmKGEuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6KDAsci5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOigwLHIuc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OnQuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7Y29uc3QgdD1lLmdldCgiQ0lEVG9HSURNYXAiKTt0IGluc3RhbmNlb2YgeS5CYXNlU3RyZWFtJiYocz10LmdldEJ5dGVzKCkpfWNhdGNoKGUpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgZXh0cmFjdERhdGFTdHJ1Y3R1cmVzIC0gaWdub3JpbmcgQ0lEVG9HSURNYXAgZGF0YTogIiR7ZX0iLmApfX1jb25zdCBoPVtdO2xldCB1LGQ9bnVsbDtpZihlLmhhcygiRW5jb2RpbmciKSl7dT1lLmdldCgiRW5jb2RpbmciKTtpZih1IGluc3RhbmNlb2YgaS5EaWN0KXtkPXUuZ2V0KCJCYXNlRW5jb2RpbmciKTtkPWQgaW5zdGFuY2VvZiBpLk5hbWU/ZC5uYW1lOm51bGw7aWYodS5oYXMoIkRpZmZlcmVuY2VzIikpe2NvbnN0IGU9dS5nZXQoIkRpZmZlcmVuY2VzIik7bGV0IHQ9MDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBlPW4uZmV0Y2hJZlJlZihhKTtpZigibnVtYmVyIj09dHlwZW9mIGUpdD1lO2Vsc2V7aWYoIShlIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBlbnRyeSBpbiAnRGlmZmVyZW5jZXMnIGFycmF5OiAke2V9YCk7aFt0KytdPWUubmFtZX19fX1lbHNlIGlmKHUgaW5zdGFuY2VvZiBpLk5hbWUpZD11Lm5hbWU7ZWxzZXtjb25zdCBlPSJFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3QiO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGUpOygwLHIud2FybikoZSl9Ik1hY1JvbWFuRW5jb2RpbmciIT09ZCYmIk1hY0V4cGVydEVuY29kaW5nIiE9PWQmJiJXaW5BbnNpRW5jb2RpbmciIT09ZCYmKGQ9bnVsbCl9aWYoZClhLmRlZmF1bHRFbmNvZGluZz0oMCxjLmdldEVuY29kaW5nKShkKTtlbHNle2NvbnN0IGU9ISEoYS5mbGFncyZvLkZvbnRGbGFncy5TeW1ib2xpYyksdD0hIShhLmZsYWdzJm8uRm9udEZsYWdzLk5vbnN5bWJvbGljKTt1PWMuU3RhbmRhcmRFbmNvZGluZzsiVHJ1ZVR5cGUiIT09YS50eXBlfHx0fHwodT1jLldpbkFuc2lFbmNvZGluZyk7aWYoZSl7dT1jLk1hY1JvbWFuRW5jb2Rpbmc7YS5maWxlJiYhYS5pc0ludGVybmFsRm9udHx8KC9TeW1ib2wvaS50ZXN0KGEubmFtZSk/dT1jLlN5bWJvbFNldEVuY29kaW5nOi9EaW5nYmF0c3xXaW5nZGluZ3MvaS50ZXN0KGEubmFtZSkmJih1PWMuWmFwZkRpbmdiYXRzRW5jb2RpbmcpKX1hLmRlZmF1bHRFbmNvZGluZz11fWEuZGlmZmVyZW5jZXM9aDthLmJhc2VFbmNvZGluZ05hbWU9ZDthLmhhc0VuY29kaW5nPSEhZHx8aC5sZW5ndGg+MDthLmRpY3Q9ZTtyZXR1cm4gbC50aGVuKChlPT57YS50b1VuaWNvZGU9ZTtyZXR1cm4gdGhpcy5idWlsZFRvVW5pY29kZShhKX0pKS50aGVuKChlPT57YS50b1VuaWNvZGU9ZTtzJiYoYS5jaWRUb0dpZE1hcD10aGlzLnJlYWRDaWRUb0dpZE1hcChzLGUpKTtyZXR1cm4gYX0pKX1fc2ltcGxlRm9udFRvVW5pY29kZShlLHQ9ITEpeygwLHIuYXNzZXJ0KSghZS5jb21wb3NpdGUsIk11c3QgYmUgYSBzaW1wbGUgZm9udC4iKTtjb25zdCBhPVtdLG49ZS5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKSxpPWUuYmFzZUVuY29kaW5nTmFtZSxzPWUuZGlmZmVyZW5jZXM7Zm9yKGNvbnN0IGUgaW4gcyl7Y29uc3QgdD1zW2VdOyIubm90ZGVmIiE9PXQmJihuW2VdPXQpfWNvbnN0IG89KDAsay5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcihjb25zdCByIGluIG4pe2xldCBzPW5bcl07aWYoIiI9PT1zKWNvbnRpbnVlO2xldCBsPW9bc107aWYodm9pZCAwIT09bCl7YVtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGwpO2NvbnRpbnVlfWxldCB1PTA7c3dpdGNoKHNbMF0pe2Nhc2UiRyI6Mz09PXMubGVuZ3RoJiYodT1wYXJzZUludChzLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiZyI6NT09PXMubGVuZ3RoJiYodT1wYXJzZUludChzLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiQyI6Y2FzZSJjIjppZihzLmxlbmd0aD49MyYmcy5sZW5ndGg8PTQpe2NvbnN0IGE9cy5zdWJzdHJpbmcoMSk7aWYodCl7dT1wYXJzZUludChhLDE2KTticmVha311PSthO2lmKE51bWJlci5pc05hTih1KSYmTnVtYmVyLmlzSW50ZWdlcihwYXJzZUludChhLDE2KSkpcmV0dXJuIHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSwhMCl9YnJlYWs7Y2FzZSJ1IjpsPSgwLGguZ2V0VW5pY29kZUZvckdseXBoKShzLG8pOy0xIT09bCYmKHU9bCl9aWYodT4wJiZ1PD0xMTE0MTExJiZOdW1iZXIuaXNJbnRlZ2VyKHUpKXtpZihpJiZ1PT09K3Ipe2NvbnN0IGU9KDAsYy5nZXRFbmNvZGluZykoaSk7aWYoZSYmKHM9ZVtyXSkpe2Fbcl09U3RyaW5nLmZyb21DaGFyQ29kZShvW3NdKTtjb250aW51ZX19YVtyXT1TdHJpbmcuZnJvbUNvZGVQb2ludCh1KX19cmV0dXJuIGF9YXN5bmMgYnVpbGRUb1VuaWNvZGUoZSl7ZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcD0hIWUudG9Vbmljb2RlJiZlLnRvVW5pY29kZS5sZW5ndGg+MDtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXshZS5jb21wb3NpdGUmJmUuaGFzRW5jb2RpbmcmJihlLmZhbGxiYWNrVG9Vbmljb2RlPXRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSkpO3JldHVybiBlLnRvVW5pY29kZX1pZighZS5jb21wb3NpdGUpcmV0dXJuIG5ldyBmLlRvVW5pY29kZU1hcCh0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKGUpKTtpZihlLmNvbXBvc2l0ZSYmKGUuY01hcC5idWlsdEluQ01hcCYmIShlLmNNYXAgaW5zdGFuY2VvZiBuLklkZW50aXR5Q01hcCl8fCJBZG9iZSI9PT1lLmNpZFN5c3RlbUluZm8ucmVnaXN0cnkmJigiR0IxIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IkNOUzEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiSmFwYW4xIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IktvcmVhMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcpKSl7Y29uc3R7cmVnaXN0cnk6dCxvcmRlcmluZzphfT1lLmNpZFN5c3RlbUluZm8scz1pLk5hbWUuZ2V0KGAke3R9LSR7YX0tVUNTMmApLG89YXdhaXQgbi5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOnMsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSksYz1bXTtlLmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjY1NTM1KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7Y29uc3QgYT1vLmxvb2t1cCh0KTthJiYoY1tlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChhLmNoYXJDb2RlQXQoMCk8PDgpK2EuY2hhckNvZGVBdCgxKSkpfSkpO3JldHVybiBuZXcgZi5Ub1VuaWNvZGVNYXAoYyl9cmV0dXJuIG5ldyBmLklkZW50aXR5VG9Vbmljb2RlTWFwKGUuZmlyc3RDaGFyLGUubGFzdENoYXIpfXJlYWRUb1VuaWNvZGUoZSl7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIGkuTmFtZT9uLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4uSWRlbnRpdHlDTWFwP25ldyBmLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBmLlRvVW5pY29kZU1hcChlLmdldE1hcCgpKX0pKTplIGluc3RhbmNlb2YgeS5CYXNlU3RyZWFtP24uQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBuLklkZW50aXR5Q01hcClyZXR1cm4gbmV3IGYuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk7Y29uc3QgdD1uZXcgQXJyYXkoZS5sZW5ndGgpO2UuZm9yRWFjaCgoZnVuY3Rpb24oZSxhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpe3RbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQoYSk7cmV0dXJufWNvbnN0IHI9W107Zm9yKGxldCBlPTA7ZTxhLmxlbmd0aDtlKz0yKXtjb25zdCB0PWEuY2hhckNvZGVBdChlKTw8OHxhLmNoYXJDb2RlQXQoZSsxKTtpZig1NTI5NiE9KDYzNDg4JnQpKXtyLnB1c2godCk7Y29udGludWV9ZSs9Mjtjb25zdCBuPWEuY2hhckNvZGVBdChlKTw8OHxhLmNoYXJDb2RlQXQoZSsxKTtyLnB1c2goKCgxMDIzJnQpPDwxMCkrKDEwMjMmbikrNjU1MzYpfXRbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4ucil9KSk7cmV0dXJuIG5ldyBmLlRvVW5pY29kZU1hcCh0KX0pLChlPT57aWYoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl7dGhpcy5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udFRvVW5pY29kZX0pOygwLHIud2FybikoYHJlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIiR7ZX0iLmApO3JldHVybiBudWxsfXRocm93IGV9KSk6UHJvbWlzZS5yZXNvbHZlKG51bGwpOlByb21pc2UucmVzb2x2ZShudWxsKX1yZWFkQ2lkVG9HaWRNYXAoZSx0KXtjb25zdCBhPVtdO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lW3IrK108PDh8ZVtyXSxpPXI+PjE7KDAhPT1ufHx0LmhhcyhpKSkmJihhW2ldPW4pfXJldHVybiBhfWV4dHJhY3RXaWR0aHMoZSx0LGEpe2NvbnN0IHI9dGhpcy54cmVmO2xldCBuPVtdLHM9MDtjb25zdCBjPVtdO2xldCBsLGgsdSxkLGYsZyxwLG07aWYoYS5jb21wb3NpdGUpe3M9ZS5oYXMoIkRXIik/ZS5nZXQoIkRXIik6MWUzO209ZS5nZXQoIlciKTtpZihtKWZvcihoPTAsdT1tLmxlbmd0aDtoPHU7aCsrKXtnPXIuZmV0Y2hJZlJlZihtW2grK10pO3A9ci5mZXRjaElmUmVmKG1baF0pO2lmKEFycmF5LmlzQXJyYXkocCkpZm9yKGQ9MCxmPXAubGVuZ3RoO2Q8ZjtkKyspbltnKytdPXIuZmV0Y2hJZlJlZihwW2RdKTtlbHNle2NvbnN0IGU9ci5mZXRjaElmUmVmKG1bKytoXSk7Zm9yKGQ9ZztkPD1wO2QrKyluW2RdPWV9fWlmKGEudmVydGljYWwpe2xldCB0PWUuZ2V0QXJyYXkoIkRXMiIpfHxbODgwLC0xZTNdO2w9W3RbMV0sLjUqcyx0WzBdXTt0PWUuZ2V0KCJXMiIpO2lmKHQpZm9yKGg9MCx1PXQubGVuZ3RoO2g8dTtoKyspe2c9ci5mZXRjaElmUmVmKHRbaCsrXSk7cD1yLmZldGNoSWZSZWYodFtoXSk7aWYoQXJyYXkuaXNBcnJheShwKSlmb3IoZD0wLGY9cC5sZW5ndGg7ZDxmO2QrKyljW2crK109W3IuZmV0Y2hJZlJlZihwW2QrK10pLHIuZmV0Y2hJZlJlZihwW2QrK10pLHIuZmV0Y2hJZlJlZihwW2RdKV07ZWxzZXtjb25zdCBlPVtyLmZldGNoSWZSZWYodFsrK2hdKSxyLmZldGNoSWZSZWYodFsrK2hdKSxyLmZldGNoSWZSZWYodFsrK2hdKV07Zm9yKGQ9ZztkPD1wO2QrKyljW2RdPWV9fX19ZWxzZXtjb25zdCBvPWEuZmlyc3RDaGFyO209ZS5nZXQoIldpZHRocyIpO2lmKG0pe2Q9bztmb3IoaD0wLHU9bS5sZW5ndGg7aDx1O2grKyluW2QrK109ci5mZXRjaElmUmVmKG1baF0pO3M9cGFyc2VGbG9hdCh0LmdldCgiTWlzc2luZ1dpZHRoIikpfHwwfWVsc2V7Y29uc3QgdD1lLmdldCgiQmFzZUZvbnQiKTtpZih0IGluc3RhbmNlb2YgaS5OYW1lKXtjb25zdCBlPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKHQubmFtZSk7bj10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUud2lkdGhzLGEpO3M9ZS5kZWZhdWx0V2lkdGh9fX1sZXQgYj0hMCx5PXM7Zm9yKGNvbnN0IGUgaW4gbil7Y29uc3QgdD1uW2VdO2lmKHQpaWYoeSl7aWYoeSE9PXQpe2I9ITE7YnJlYWt9fWVsc2UgeT10fWImJihhLmZsYWdzfD1vLkZvbnRGbGFncy5GaXhlZFBpdGNoKTthLmRlZmF1bHRXaWR0aD1zO2Eud2lkdGhzPW47YS5kZWZhdWx0Vk1ldHJpY3M9bDthLnZtZXRyaWNzPWN9aXNTZXJpZkZvbnQoZSl7Y29uc3QgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxsLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfWdldEJhc2VGb250TWV0cmljcyhlKXtsZXQgdD0wLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPSExO2xldCBuPSgwLGwuZ2V0U3RkRm9udE1hcCkoKVtlXXx8ZTtjb25zdCBpPSgwLHYuZ2V0TWV0cmljcykoKTtuIGluIGl8fChuPXRoaXMuaXNTZXJpZkZvbnQoZSk/IlRpbWVzLVJvbWFuIjoiSGVsdmV0aWNhIik7Y29uc3Qgcz1pW25dO2lmKCJudW1iZXIiPT10eXBlb2Ygcyl7dD1zO3I9ITB9ZWxzZSBhPXMoKTtyZXR1cm57ZGVmYXVsdFdpZHRoOnQsbW9ub3NwYWNlOnIsd2lkdGhzOmF9fWJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUsdCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9dC5kaWZmZXJlbmNlcyxuPXQuZGVmYXVsdEVuY29kaW5nO2ZvcihsZXQgdD0wO3Q8MjU2O3QrKyl0IGluIHImJmVbclt0XV0/YVt0XT1lW3JbdF1dOnQgaW4gbiYmZVtuW3RdXSYmKGFbdF09ZVtuW3RdXSk7cmV0dXJuIGF9cHJlRXZhbHVhdGVGb250KGUpe2NvbnN0IHQ9ZTtsZXQgYT1lLmdldCgiU3VidHlwZSIpO2lmKCEoYSBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7bGV0IG4scyxvPSExO2lmKCJUeXBlMCI9PT1hLm5hbWUpe2NvbnN0IHQ9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCF0KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KHQpP3RoaXMueHJlZi5mZXRjaElmUmVmKHRbMF0pOnQpaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTthPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShhIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTtvPSEwfWNvbnN0IGM9ZS5nZXQoIkZpcnN0Q2hhciIpfHwwLGw9ZS5nZXQoIkxhc3RDaGFyIil8fChvPzY1NTM1OjI1NSksaD1lLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZihoKXtuPW5ldyBGLk11cm11ckhhc2gzXzY0O2NvbnN0IGE9dC5nZXRSYXcoIkVuY29kaW5nIik7aWYoYSBpbnN0YW5jZW9mIGkuTmFtZSluLnVwZGF0ZShhLm5hbWUpO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIGkuUmVmKW4udXBkYXRlKGEudG9TdHJpbmcoKSk7ZWxzZSBpZihhIGluc3RhbmNlb2YgaS5EaWN0KWZvcihjb25zdCBlIG9mIGEuZ2V0UmF3VmFsdWVzKCkpaWYoZSBpbnN0YW5jZW9mIGkuTmFtZSluLnVwZGF0ZShlLm5hbWUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuUmVmKW4udXBkYXRlKGUudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCB0PWUubGVuZ3RoLGE9bmV3IEFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDtyKyspe2NvbnN0IHQ9ZVtyXTt0IGluc3RhbmNlb2YgaS5OYW1lP2Fbcl09dC5uYW1lOigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBpLlJlZikmJihhW3JdPXQudG9TdHJpbmcoKSl9bi51cGRhdGUoYS5qb2luKCkpfW4udXBkYXRlKGAke2N9LSR7bH1gKTtzPWUuZ2V0KCJUb1VuaWNvZGUiKXx8dC5nZXQoIlRvVW5pY29kZSIpO2lmKHMgaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0pe2NvbnN0IGU9cy5zdHJ8fHMsdD1lLmJ1ZmZlcj9uZXcgVWludDhBcnJheShlLmJ1ZmZlci5idWZmZXIsMCxlLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoZS5ieXRlcy5idWZmZXIsZS5zdGFydCxlLmVuZC1lLnN0YXJ0KTtuLnVwZGF0ZSh0KX1lbHNlIHMgaW5zdGFuY2VvZiBpLk5hbWUmJm4udXBkYXRlKHMubmFtZSk7Y29uc3Qgcj1lLmdldCgiV2lkdGhzIil8fHQuZ2V0KCJXaWR0aHMiKTtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHIpKCJudW1iZXIiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIGkuUmVmKSYmZS5wdXNoKHQudG9TdHJpbmcoKSk7bi51cGRhdGUoZS5qb2luKCkpfWlmKG8pe24udXBkYXRlKCJjb21wb3NpdGVGb250Iik7Y29uc3QgYT1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgYSlpZigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBpLlJlZillLnB1c2godC50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGE9W107Zm9yKGNvbnN0IGUgb2YgdCkoIm51bWJlciI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgaS5SZWYpJiZhLnB1c2goZS50b1N0cmluZygpKTtlLnB1c2goYFske2Euam9pbigpfV1gKX1uLnVwZGF0ZShlLmpvaW4oKSl9Y29uc3Qgcj1lLmdldFJhdygiQ0lEVG9HSURNYXAiKXx8dC5nZXRSYXcoIkNJRFRvR0lETWFwIik7ciBpbnN0YW5jZW9mIGkuTmFtZT9uLnVwZGF0ZShyLm5hbWUpOnIgaW5zdGFuY2VvZiBpLlJlZj9uLnVwZGF0ZShyLnRvU3RyaW5nKCkpOnIgaW5zdGFuY2VvZiB5LkJhc2VTdHJlYW0mJm4udXBkYXRlKHIucGVla0J5dGVzKCkpfX1yZXR1cm57ZGVzY3JpcHRvcjpoLGRpY3Q6ZSxiYXNlRGljdDp0LGNvbXBvc2l0ZTpvLHR5cGU6YS5uYW1lLGZpcnN0Q2hhcjpjLGxhc3RDaGFyOmwsdG9Vbmljb2RlOnMsaGFzaDpuP24uaGV4ZGlnZXN0KCk6IiJ9fWFzeW5jIHRyYW5zbGF0ZUZvbnQoe2Rlc2NyaXB0b3I6ZSxkaWN0OnQsYmFzZURpY3Q6YSxjb21wb3NpdGU6Yyx0eXBlOmgsZmlyc3RDaGFyOnUsbGFzdENoYXI6Zix0b1VuaWNvZGU6Zyxjc3NGb250SW5mbzpwfSl7Y29uc3QgbT0iVHlwZTMiPT09aDtsZXQgeTtpZighZSl7aWYoIW0pe2xldCBlPXQuZ2V0KCJCYXNlRm9udCIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkJhc2UgZm9udCBpcyBub3Qgc3BlY2lmaWVkIik7ZT1lLm5hbWUucmVwbGFjZSgvWyxfXS9nLCItIik7Y29uc3Qgbj10aGlzLmdldEJhc2VGb250TWV0cmljcyhlKSxjPWUuc3BsaXQoIi0iKVswXSxkPSh0aGlzLmlzU2VyaWZGb250KGMpP28uRm9udEZsYWdzLlNlcmlmOjApfChuLm1vbm9zcGFjZT9vLkZvbnRGbGFncy5GaXhlZFBpdGNoOjApfCgoMCxsLmdldFN5bWJvbHNGb250cykoKVtjXT9vLkZvbnRGbGFncy5TeW1ib2xpYzpvLkZvbnRGbGFncy5Ob25zeW1ib2xpYyk7eT17dHlwZTpoLG5hbWU6ZSxsb2FkZWROYW1lOmEubG9hZGVkTmFtZSx3aWR0aHM6bi53aWR0aHMsZGVmYXVsdFdpZHRoOm4uZGVmYXVsdFdpZHRoLGlzU2ltdWxhdGVkRmxhZ3M6ITAsZmxhZ3M6ZCxmaXJzdENoYXI6dSxsYXN0Q2hhcjpmLHRvVW5pY29kZTpnLHhIZWlnaHQ6MCxjYXBIZWlnaHQ6MCxpdGFsaWNBbmdsZTowLGlzVHlwZTNGb250Om19O2NvbnN0IHA9dC5nZXQoIldpZHRocyIpLGI9KDAsbC5nZXRTdGFuZGFyZEZvbnROYW1lKShlKTtsZXQgdz1udWxsO2lmKGIpe3kuaXNTdGFuZGFyZEZvbnQ9ITA7dz1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShiKTt5LmlzSW50ZXJuYWxGb250PSEhd31yZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXModCx0LHkpLnRoZW4oKHQ9PntpZihwKXtjb25zdCBlPVtdO2xldCBhPXU7Zm9yKGNvbnN0IHQgb2YgcCllW2ErK109dGhpcy54cmVmLmZldGNoSWZSZWYodCk7dC53aWR0aHM9ZX1lbHNlIHQud2lkdGhzPXRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgobi53aWR0aHMsdCk7cmV0dXJuIG5ldyBzLkZvbnQoZSx3LHQpfSkpfShlPW5ldyBpLkRpY3QobnVsbCkpLnNldCgiRm9udE5hbWUiLGkuTmFtZS5nZXQoaCkpO2Uuc2V0KCJGb250QkJveCIsdC5nZXRBcnJheSgiRm9udEJCb3giKXx8WzAsMCwwLDBdKX1sZXQgdyxTLHgsayxDLHY9ZS5nZXQoIkZvbnROYW1lIiksRj10LmdldCgiQmFzZUZvbnQiKTsic3RyaW5nIj09dHlwZW9mIHYmJih2PWkuTmFtZS5nZXQodikpOyJzdHJpbmciPT10eXBlb2YgRiYmKEY9aS5OYW1lLmdldChGKSk7aWYoIW0pe2NvbnN0IGU9diYmdi5uYW1lLHQ9RiYmRi5uYW1lO2lmKGUhPT10KXsoMCxyLmluZm8pKGBUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyAiJHtlfSIgYnV0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgRm9udCdzIEJhc2VGb250ICIke3R9Ii5gKTtlJiZ0JiZ0LnN0YXJ0c1dpdGgoZSkmJih2PUYpfX12PXZ8fEY7aWYoISh2IGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IG5hbWUiKTt0cnl7dz1lLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYHRyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyAiJHt2Lm5hbWV9IiBmb250IGZpbGU6ICIke2V9Ii5gKTt3PW5ldyBiLk51bGxTdHJlYW19bGV0IE89ITEsVD0hMSxNPW51bGw7aWYodyl7aWYody5kaWN0KXtjb25zdCBlPXcuZGljdC5nZXQoIlN1YnR5cGUiKTtlIGluc3RhbmNlb2YgaS5OYW1lJiYoUz1lLm5hbWUpO3g9dy5kaWN0LmdldCgiTGVuZ3RoMSIpO2s9dy5kaWN0LmdldCgiTGVuZ3RoMiIpO0M9dy5kaWN0LmdldCgiTGVuZ3RoMyIpfX1lbHNlIGlmKHApe2NvbnN0IGU9KDAsZC5nZXRYZmFGb250TmFtZSkodi5uYW1lKTtpZihlKXtwLmZvbnRGYW1pbHk9YCR7cC5mb250RmFtaWx5fS1QZGZKUy1YRkFgO3AubWV0cmljcz1lLm1ldHJpY3N8fG51bGw7TT1lLmZhY3RvcnN8fG51bGw7dz1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShlLm5hbWUpO1Q9ISF3O2E9dD0oMCxkLmdldFhmYUZvbnREaWN0KSh2Lm5hbWUpO2M9ITB9fWVsc2UgaWYoIW0pe2NvbnN0IGU9KDAsbC5nZXRTdGFuZGFyZEZvbnROYW1lKSh2Lm5hbWUpO2lmKGUpe089ITA7dz1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShlKTtUPSEhd319eT17dHlwZTpoLG5hbWU6di5uYW1lLHN1YnR5cGU6UyxmaWxlOncsbGVuZ3RoMTp4LGxlbmd0aDI6ayxsZW5ndGgzOkMsaXNTdGFuZGFyZEZvbnQ6Tyxpc0ludGVybmFsRm9udDpULGxvYWRlZE5hbWU6YS5sb2FkZWROYW1lLGNvbXBvc2l0ZTpjLGZpeGVkUGl0Y2g6ITEsZm9udE1hdHJpeDp0LmdldEFycmF5KCJGb250TWF0cml4Iil8fHIuRk9OVF9JREVOVElUWV9NQVRSSVgsZmlyc3RDaGFyOnUsbGFzdENoYXI6Zix0b1VuaWNvZGU6ZyxiYm94OmUuZ2V0QXJyYXkoIkZvbnRCQm94Iil8fHQuZ2V0QXJyYXkoIkZvbnRCQm94IiksYXNjZW50OmUuZ2V0KCJBc2NlbnQiKSxkZXNjZW50OmUuZ2V0KCJEZXNjZW50IikseEhlaWdodDplLmdldCgiWEhlaWdodCIpfHwwLGNhcEhlaWdodDplLmdldCgiQ2FwSGVpZ2h0Iil8fDAsZmxhZ3M6ZS5nZXQoIkZsYWdzIiksaXRhbGljQW5nbGU6ZS5nZXQoIkl0YWxpY0FuZ2xlIil8fDAsaXNUeXBlM0ZvbnQ6bSxjc3NGb250SW5mbzpwLHNjYWxlRmFjdG9yczpNfTtpZihjKXtjb25zdCBlPWEuZ2V0KCJFbmNvZGluZyIpO2UgaW5zdGFuY2VvZiBpLk5hbWUmJih5LmNpZEVuY29kaW5nPWUubmFtZSk7Y29uc3QgdD1hd2FpdCBuLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KTt5LmNNYXA9dDt5LnZlcnRpY2FsPXkuY01hcC52ZXJ0aWNhbH1yZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXModCxhLHkpLnRoZW4oKGE9Pnt0aGlzLmV4dHJhY3RXaWR0aHModCxlLGEpO3JldHVybiBuZXcgcy5Gb250KHYubmFtZSx3LGEpfSkpfXN0YXRpYyBidWlsZEZvbnRQYXRocyhlLHQsYSxuKXtmdW5jdGlvbiBidWlsZFBhdGgodCl7Y29uc3QgaT1gJHtlLmxvYWRlZE5hbWV9X3BhdGhfJHt0fWA7dHJ5e2lmKGUucmVuZGVyZXIuaGFzQnVpbHRQYXRoKHQpKXJldHVybjthLnNlbmQoImNvbW1vbm9iaiIsW2ksIkZvbnRQYXRoIixlLnJlbmRlcmVyLmdldFBhdGhKcyh0KV0pfWNhdGNoKGUpe2lmKG4uaWdub3JlRXJyb3JzKXthLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDpyLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udEJ1aWxkUGF0aH0pOygwLHIud2FybikoYGJ1aWxkRm9udFBhdGhzIC0gaWdub3JpbmcgJHtpfSBnbHlwaDogIiR7ZX0iLmApO3JldHVybn10aHJvdyBlfX1mb3IoY29uc3QgZSBvZiB0KXtidWlsZFBhdGgoZS5mb250Q2hhcik7Y29uc3QgdD1lLmFjY2VudDt0JiZ0LmZvbnRDaGFyJiZidWlsZFBhdGgodC5mb250Q2hhcil9fXN0YXRpYyBnZXQgZmFsbGJhY2tGb250RGljdCgpe2NvbnN0IGU9bmV3IGkuRGljdDtlLnNldCgiQmFzZUZvbnQiLGkuTmFtZS5nZXQoIlBERkpTLUZhbGxiYWNrRm9udCIpKTtlLnNldCgiVHlwZSIsaS5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJTdWJ0eXBlIixpLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixpLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImZhbGxiYWNrRm9udERpY3QiLGUpfX10LlBhcnRpYWxFdmFsdWF0b3I9UGFydGlhbEV2YWx1YXRvcjtjbGFzcyBUcmFuc2xhdGVkRm9udHtjb25zdHJ1Y3Rvcih7bG9hZGVkTmFtZTplLGZvbnQ6dCxkaWN0OmEsZXZhbHVhdG9yT3B0aW9uczpyfSl7dGhpcy5sb2FkZWROYW1lPWU7dGhpcy5mb250PXQ7dGhpcy5kaWN0PWE7dGhpcy5fZXZhbHVhdG9yT3B0aW9ucz1yfHxNO3RoaXMudHlwZTNMb2FkZWQ9bnVsbDt0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPXQuaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsO3RoaXMuc2VudD0hMX1zZW5kKGUpe2lmKCF0aGlzLnNlbnQpe3RoaXMuc2VudD0hMDtlLnNlbmQoImNvbW1vbm9iaiIsW3RoaXMubG9hZGVkTmFtZSwiRm9udCIsdGhpcy5mb250LmV4cG9ydERhdGEodGhpcy5fZXZhbHVhdG9yT3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzKV0pfX1mYWxsYmFjayhlKXtpZih0aGlzLmZvbnQuZGF0YSl7dGhpcy5mb250LmRpc2FibGVGb250RmFjZT0hMDtQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCx0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcyxlLHRoaXMuX2V2YWx1YXRvck9wdGlvbnMpfX1sb2FkVHlwZTNEYXRhKGUsdCxhKXtpZih0aGlzLnR5cGUzTG9hZGVkKXJldHVybiB0aGlzLnR5cGUzTG9hZGVkO2lmKCF0aGlzLmZvbnQuaXNUeXBlM0ZvbnQpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGEgVHlwZTMgZm9udC4iKTtjb25zdCBuPWUuY2xvbmUoe2lnbm9yZUVycm9yczohMX0pO24ucGFyc2luZ1R5cGUzRm9udD0hMDtjb25zdCBzPW5ldyBpLlJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXMuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnMucHV0KHRoaXMuZGljdC5vYmpJZCk7bi50eXBlM0ZvbnRSZWZzPXM7Y29uc3Qgbz10aGlzLmZvbnQsYz10aGlzLnR5cGUzRGVwZW5kZW5jaWVzO2xldCBsPVByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGg9dGhpcy5kaWN0LmdldCgiQ2hhclByb2NzIiksdT10aGlzLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKXx8dCxkPU9iamVjdC5jcmVhdGUobnVsbCksZj1yLlV0aWwubm9ybWFsaXplUmVjdChvLmJib3h8fFswLDAsMCwwXSksZz1mWzJdLWZbMF0scD1mWzNdLWZbMV0sbT1NYXRoLmh5cG90KGcscCk7Zm9yKGNvbnN0IGUgb2YgaC5nZXRLZXlzKCkpbD1sLnRoZW4oKCgpPT57Y29uc3QgdD1oLmdldChlKSxpPW5ldyBPLk9wZXJhdG9yTGlzdDtyZXR1cm4gbi5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp0LHRhc2s6YSxyZXNvdXJjZXM6dSxvcGVyYXRvckxpc3Q6aX0pLnRoZW4oKCgpPT57aS5mbkFycmF5WzBdPT09ci5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzJiZ0aGlzLl9yZW1vdmVUeXBlM0NvbG9yT3BlcmF0b3JzKGksbSk7ZFtlXT1pLmdldElSKCk7Zm9yKGNvbnN0IGUgb2YgaS5kZXBlbmRlbmNpZXMpYy5hZGQoZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpeygwLHIud2FybikoYFR5cGUzIGZvbnQgcmVzb3VyY2UgIiR7ZX0iIGlzIG5vdCBhdmFpbGFibGUuYCk7Y29uc3QgYT1uZXcgTy5PcGVyYXRvckxpc3Q7ZFtlXT1hLmdldElSKCl9KSl9KSk7dGhpcy50eXBlM0xvYWRlZD1sLnRoZW4oKCgpPT57by5jaGFyUHJvY09wZXJhdG9yTGlzdD1kO2lmKHRoaXMuX2Jib3gpe28uaXNDaGFyQkJveD0hMDtvLmJib3g9dGhpcy5fYmJveH19KSk7cmV0dXJuIHRoaXMudHlwZTNMb2FkZWR9X3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMoZSx0PU5hTil7Y29uc3QgYT1yLlV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksbj1hWzJdLWFbMF0saT1hWzNdLWFbMV0scz1NYXRoLmh5cG90KG4saSk7aWYoMD09PW58fDA9PT1pKXtlLmZuQXJyYXkuc3BsaWNlKDAsMSk7ZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSl9ZWxzZSBpZigwPT09dHx8TWF0aC5yb3VuZChzL3QpPj0xMCl7dGhpcy5fYmJveHx8KHRoaXMuX2Jib3g9WzEvMCwxLzAsLTEvMCwtMS8wXSk7dGhpcy5fYmJveFswXT1NYXRoLm1pbih0aGlzLl9iYm94WzBdLGFbMF0pO3RoaXMuX2Jib3hbMV09TWF0aC5taW4odGhpcy5fYmJveFsxXSxhWzFdKTt0aGlzLl9iYm94WzJdPU1hdGgubWF4KHRoaXMuX2Jib3hbMl0sYVsyXSk7dGhpcy5fYmJveFszXT1NYXRoLm1heCh0aGlzLl9iYm94WzNdLGFbM10pfWxldCBvPTAsYz1lLmxlbmd0aDtmb3IoO288Yzspe3N3aXRjaChlLmZuQXJyYXlbb10pe2Nhc2Ugci5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzOmJyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTpjYXNlIHIuT1BTLnNldEZpbGxDb2xvclNwYWNlOmNhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3I6Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvck46Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3I6Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3JOOmNhc2Ugci5PUFMuc2V0U3Ryb2tlR3JheTpjYXNlIHIuT1BTLnNldEZpbGxHcmF5OmNhc2Ugci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6Y2FzZSByLk9QUy5zZXRGaWxsUkdCQ29sb3I6Y2FzZSByLk9QUy5zZXRTdHJva2VDTVlLQ29sb3I6Y2FzZSByLk9QUy5zZXRGaWxsQ01ZS0NvbG9yOmNhc2Ugci5PUFMuc2hhZGluZ0ZpbGw6Y2FzZSByLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQ6ZS5mbkFycmF5LnNwbGljZShvLDEpO2UuYXJnc0FycmF5LnNwbGljZShvLDEpO2MtLTtjb250aW51ZTtjYXNlIHIuT1BTLnNldEdTdGF0ZTpjb25zdFt0XT1lLmFyZ3NBcnJheVtvXTtsZXQgYT0wLG49dC5sZW5ndGg7Zm9yKDthPG47KXtjb25zdFtlXT10W2FdO3N3aXRjaChlKXtjYXNlIlRSIjpjYXNlIlRSMiI6Y2FzZSJIVCI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOnQuc3BsaWNlKGEsMSk7bi0tO2NvbnRpbnVlfWErK319bysrfX19Y2xhc3MgU3RhdGVNYW5hZ2Vye2NvbnN0cnVjdG9yKGU9bmV3IEV2YWxTdGF0ZSl7dGhpcy5zdGF0ZT1lO3RoaXMuc3RhdGVTdGFjaz1bXX1zYXZlKCl7Y29uc3QgZT10aGlzLnN0YXRlO3RoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpO3RoaXMuc3RhdGU9ZS5jbG9uZSgpfXJlc3RvcmUoKXtjb25zdCBlPXRoaXMuc3RhdGVTdGFjay5wb3AoKTtlJiYodGhpcy5zdGF0ZT1lKX10cmFuc2Zvcm0oZSl7dGhpcy5zdGF0ZS5jdG09ci5VdGlsLnRyYW5zZm9ybSh0aGlzLnN0YXRlLmN0bSxlKX19Y2xhc3MgVGV4dFN0YXRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdG09bmV3IEZsb2F0MzJBcnJheShyLklERU5USVRZX01BVFJJWCk7dGhpcy5mb250TmFtZT1udWxsO3RoaXMuZm9udFNpemU9MDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmZvbnRNYXRyaXg9ci5GT05UX0lERU5USVRZX01BVFJJWDt0aGlzLnRleHRNYXRyaXg9ci5JREVOVElUWV9NQVRSSVguc2xpY2UoKTt0aGlzLnRleHRMaW5lTWF0cml4PXIuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7dGhpcy5jaGFyU3BhY2luZz0wO3RoaXMud29yZFNwYWNpbmc9MDt0aGlzLmxlYWRpbmc9MDt0aGlzLnRleHRIU2NhbGU9MTt0aGlzLnRleHRSaXNlPTB9c2V0VGV4dE1hdHJpeChlLHQsYSxyLG4saSl7Y29uc3Qgcz10aGlzLnRleHRNYXRyaXg7c1swXT1lO3NbMV09dDtzWzJdPWE7c1szXT1yO3NbNF09bjtzWzVdPWl9c2V0VGV4dExpbmVNYXRyaXgoZSx0LGEscixuLGkpe2NvbnN0IHM9dGhpcy50ZXh0TGluZU1hdHJpeDtzWzBdPWU7c1sxXT10O3NbMl09YTtzWzNdPXI7c1s0XT1uO3NbNV09aX10cmFuc2xhdGVUZXh0TWF0cml4KGUsdCl7Y29uc3QgYT10aGlzLnRleHRNYXRyaXg7YVs0XT1hWzBdKmUrYVsyXSp0K2FbNF07YVs1XT1hWzFdKmUrYVszXSp0K2FbNV19dHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoZSx0KXtjb25zdCBhPXRoaXMudGV4dExpbmVNYXRyaXg7YVs0XT1hWzBdKmUrYVsyXSp0K2FbNF07YVs1XT1hWzFdKmUrYVszXSp0K2FbNV19Y2FycmlhZ2VSZXR1cm4oKXt0aGlzLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KDAsLXRoaXMubGVhZGluZyk7dGhpcy50ZXh0TWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKX1jbG9uZSgpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZSh0aGlzKTtlLnRleHRNYXRyaXg9dGhpcy50ZXh0TWF0cml4LnNsaWNlKCk7ZS50ZXh0TGluZU1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7ZS5mb250TWF0cml4PXRoaXMuZm9udE1hdHJpeC5zbGljZSgpO3JldHVybiBlfX1jbGFzcyBFdmFsU3RhdGV7Y29uc3RydWN0b3IoKXt0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KHIuSURFTlRJVFlfTUFUUklYKTt0aGlzLmZvbnQ9bnVsbDt0aGlzLnRleHRSZW5kZXJpbmdNb2RlPXIuVGV4dFJlbmRlcmluZ01vZGUuRklMTDt0aGlzLmZpbGxDb2xvclNwYWNlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7dGhpcy5zdHJva2VDb2xvclNwYWNlPVMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXl9Y2xvbmUoKXtyZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKX19Y2xhc3MgRXZhbHVhdG9yUHJlcHJvY2Vzc29ye3N0YXRpYyBnZXQgb3BNYXAoKXtjb25zdCBlPSgwLEMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS53PXtpZDpyLk9QUy5zZXRMaW5lV2lkdGgsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5KPXtpZDpyLk9QUy5zZXRMaW5lQ2FwLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2Uuaj17aWQ6ci5PUFMuc2V0TGluZUpvaW4sbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5NPXtpZDpyLk9QUy5zZXRNaXRlckxpbWl0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuZD17aWQ6ci5PUFMuc2V0RGFzaCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfTtlLnJpPXtpZDpyLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5pPXtpZDpyLk9QUy5zZXRGbGF0bmVzcyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLmdzPXtpZDpyLk9QUy5zZXRHU3RhdGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5xPXtpZDpyLk9QUy5zYXZlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuUT17aWQ6ci5PUFMucmVzdG9yZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLmNtPXtpZDpyLk9QUy50cmFuc2Zvcm0sbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX07ZS5tPXtpZDpyLk9QUy5tb3ZlVG8sbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5sPXtpZDpyLk9QUy5saW5lVG8sbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5jPXtpZDpyLk9QUy5jdXJ2ZVRvLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9O2Uudj17aWQ6ci5PUFMuY3VydmVUbzIsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX07ZS55PXtpZDpyLk9QUy5jdXJ2ZVRvMyxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfTtlLmg9e2lkOnIuT1BTLmNsb3NlUGF0aCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLnJlPXtpZDpyLk9QUy5yZWN0YW5nbGUsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX07ZS5TPXtpZDpyLk9QUy5zdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5zPXtpZDpyLk9QUy5jbG9zZVN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLmY9e2lkOnIuT1BTLmZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5GPXtpZDpyLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2VbImYqIl09e2lkOnIuT1BTLmVvRmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLkI9e2lkOnIuT1BTLmZpbGxTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZVsiQioiXT17aWQ6ci5PUFMuZW9GaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuYj17aWQ6ci5PUFMuY2xvc2VGaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2VbImIqIl09e2lkOnIuT1BTLmNsb3NlRU9GaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2Uubj17aWQ6ci5PUFMuZW5kUGF0aCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLlc9e2lkOnIuT1BTLmNsaXAsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZVsiVyoiXT17aWQ6ci5PUFMuZW9DbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuQlQ9e2lkOnIuT1BTLmJlZ2luVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfTtlLkVUPXtpZDpyLk9QUy5lbmRUZXh0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuVGM9e2lkOnIuT1BTLnNldENoYXJTcGFjaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuVHc9e2lkOnIuT1BTLnNldFdvcmRTcGFjaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuVHo9e2lkOnIuT1BTLnNldEhTY2FsZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLlRMPXtpZDpyLk9QUy5zZXRMZWFkaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuVGY9e2lkOnIuT1BTLnNldEZvbnQsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5Ucj17aWQ6ci5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5Ucz17aWQ6ci5PUFMuc2V0VGV4dFJpc2UsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5UZD17aWQ6ci5PUFMubW92ZVRleHQsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5URD17aWQ6ci5PUFMuc2V0TGVhZGluZ01vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UuVG09e2lkOnIuT1BTLnNldFRleHRNYXRyaXgsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX07ZVsiVCoiXT17aWQ6ci5PUFMubmV4dExpbmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5Uaj17aWQ6ci5PUFMuc2hvd1RleHQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5USj17aWQ6ci5PUFMuc2hvd1NwYWNlZFRleHQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZVsiJyJdPXtpZDpyLk9QUy5uZXh0TGluZVNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2VbJyInXT17aWQ6ci5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX07ZS5kMD17aWQ6ci5PUFMuc2V0Q2hhcldpZHRoLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9O2UuZDE9e2lkOnIuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfTtlLkNTPXtpZDpyLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuY3M9e2lkOnIuT1BTLnNldEZpbGxDb2xvclNwYWNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuU0M9e2lkOnIuT1BTLnNldFN0cm9rZUNvbG9yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITB9O2UuU0NOPXtpZDpyLk9QUy5zZXRTdHJva2VDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9O2Uuc2M9e2lkOnIuT1BTLnNldEZpbGxDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfTtlLnNjbj17aWQ6ci5PUFMuc2V0RmlsbENvbG9yTixudW1BcmdzOjMzLHZhcmlhYmxlQXJnczohMH07ZS5HPXtpZDpyLk9QUy5zZXRTdHJva2VHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuZz17aWQ6ci5PUFMuc2V0RmlsbEdyYXksbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5SRz17aWQ6ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3IsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX07ZS5yZz17aWQ6ci5PUFMuc2V0RmlsbFJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9O2UuSz17aWQ6ci5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9O2Uuaz17aWQ6ci5PUFMuc2V0RmlsbENNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfTtlLnNoPXtpZDpyLk9QUy5zaGFkaW5nRmlsbCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLkJJPXtpZDpyLk9QUy5iZWdpbklubGluZUltYWdlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuSUQ9e2lkOnIuT1BTLmJlZ2luSW1hZ2VEYXRhLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuRUk9e2lkOnIuT1BTLmVuZElubGluZUltYWdlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9O2UuRG89e2lkOnIuT1BTLnBhaW50WE9iamVjdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLk1QPXtpZDpyLk9QUy5tYXJrUG9pbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX07ZS5EUD17aWQ6ci5PUFMubWFya1BvaW50UHJvcHMsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5CTUM9e2lkOnIuT1BTLmJlZ2luTWFya2VkQ29udGVudCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfTtlLkJEQz17aWQ6ci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX07ZS5FTUM9e2lkOnIuT1BTLmVuZE1hcmtlZENvbnRlbnQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5CWD17aWQ6ci5PUFMuYmVnaW5Db21wYXQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX07ZS5FWD17aWQ6ci5PUFMuZW5kQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9O2UuQk09bnVsbDtlLkJEPW51bGw7ZS50cnVlPW51bGw7ZS5mYT1udWxsO2UuZmFsPW51bGw7ZS5mYWxzPW51bGw7ZS5mYWxzZT1udWxsO2UubnU9bnVsbDtlLm51bD1udWxsO2UubnVsbD1udWxsfSkpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJvcE1hcCIsZSgpKX1zdGF0aWMgZ2V0IE1BWF9JTlZBTElEX1BBVEhfT1BTKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIk1BWF9JTlZBTElEX1BBVEhfT1BTIiwxMCl9Y29uc3RydWN0b3IoZSx0LGE9bmV3IFN0YXRlTWFuYWdlcil7dGhpcy5wYXJzZXI9bmV3IHAuUGFyc2VyKHtsZXhlcjpuZXcgcC5MZXhlcihlLEV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcCkseHJlZjp0fSk7dGhpcy5zdGF0ZU1hbmFnZXI9YTt0aGlzLm5vblByb2Nlc3NlZEFyZ3M9W107dGhpcy5faXNQYXRoT3A9ITE7dGhpcy5fbnVtSW52YWxpZFBhdGhPUFM9MH1nZXQgc2F2ZWRTdGF0ZXNEZXB0aCgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aH1yZWFkKGUpe2xldCB0PWUuYXJncztmb3IoOzspe2NvbnN0IGE9dGhpcy5wYXJzZXIuZ2V0T2JqKCk7aWYoYSBpbnN0YW5jZW9mIGkuQ21kKXtjb25zdCBuPWEuY21kLGk9RXZhbHVhdG9yUHJlcHJvY2Vzc29yLm9wTWFwW25dO2lmKCFpKXsoMCxyLndhcm4pKGBVbmtub3duIGNvbW1hbmQgIiR7bn0iLmApO2NvbnRpbnVlfWNvbnN0IHM9aS5pZCxvPWkubnVtQXJncztsZXQgYz1udWxsIT09dD90Lmxlbmd0aDowO3RoaXMuX2lzUGF0aE9wfHwodGhpcy5fbnVtSW52YWxpZFBhdGhPUFM9MCk7dGhpcy5faXNQYXRoT3A9cz49ci5PUFMubW92ZVRvJiZzPD1yLk9QUy5lbmRQYXRoO2lmKGkudmFyaWFibGVBcmdzKWM+byYmKDAsci5pbmZvKShgQ29tbWFuZCAke259OiBleHBlY3RlZCBbMCwgJHtvfV0gYXJncywgYnV0IHJlY2VpdmVkICR7Y30gYXJncy5gKTtlbHNle2lmKGMhPT1vKXtjb25zdCBlPXRoaXMubm9uUHJvY2Vzc2VkQXJncztmb3IoO2M+bzspe2UucHVzaCh0LnNoaWZ0KCkpO2MtLX1mb3IoO2M8byYmMCE9PWUubGVuZ3RoOyl7bnVsbD09PXQmJih0PVtdKTt0LnVuc2hpZnQoZS5wb3AoKSk7YysrfX1pZihjPG8pe2NvbnN0IGU9YGNvbW1hbmQgJHtufTogZXhwZWN0ZWQgJHtvfSBhcmdzLCBidXQgcmVjZWl2ZWQgJHtjfSBhcmdzLmA7aWYodGhpcy5faXNQYXRoT3AmJisrdGhpcy5fbnVtSW52YWxpZFBhdGhPUFM+RXZhbHVhdG9yUHJlcHJvY2Vzc29yLk1BWF9JTlZBTElEX1BBVEhfT1BTKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkICR7ZX1gKTsoMCxyLndhcm4pKGBTa2lwcGluZyAke2V9YCk7bnVsbCE9PXQmJih0Lmxlbmd0aD0wKTtjb250aW51ZX19dGhpcy5wcmVwcm9jZXNzQ29tbWFuZChzLHQpO2UuZm49cztlLmFyZ3M9dDtyZXR1cm4hMH1pZihhPT09aS5FT0YpcmV0dXJuITE7aWYobnVsbCE9PWEpe251bGw9PT10JiYodD1bXSk7dC5wdXNoKGEpO2lmKHQubGVuZ3RoPjMzKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJUb28gbWFueSBhcmd1bWVudHMiKX19fXByZXByb2Nlc3NDb21tYW5kKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSByLk9QUy5zYXZlOnRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTticmVhaztjYXNlIHIuT1BTLnJlc3RvcmU6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2Ugci5PUFMudHJhbnNmb3JtOnRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybSh0KX19fXQuRXZhbHVhdG9yUHJlcHJvY2Vzc29yPUV2YWx1YXRvclByZXByb2Nlc3Nvcn0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LklkZW50aXR5Q01hcD10LkNNYXBGYWN0b3J5PXQuQ01hcD12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDUpLHM9YSgxNSksbz1hKDQpLGM9YSg4KTtjb25zdCBsPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0saD0yKioyNC0xO2NsYXNzIENNYXB7Y29uc3RydWN0b3IoZT0hMSl7dGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXTt0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wO3RoaXMuX21hcD1bXTt0aGlzLm5hbWU9IiI7dGhpcy52ZXJ0aWNhbD0hMTt0aGlzLnVzZUNNYXA9bnVsbDt0aGlzLmJ1aWx0SW5DTWFwPWV9YWRkQ29kZXNwYWNlUmFuZ2UoZSx0LGEpe3RoaXMuY29kZXNwYWNlUmFuZ2VzW2UtMV0ucHVzaCh0LGEpO3RoaXMubnVtQ29kZXNwYWNlUmFuZ2VzKyt9bWFwQ2lkUmFuZ2UoZSx0LGEpe2lmKHQtZT5oKXRocm93IG5ldyBFcnJvcigibWFwQ2lkUmFuZ2UgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Zm9yKDtlPD10Oyl0aGlzLl9tYXBbZSsrXT1hKyt9bWFwQmZSYW5nZShlLHQsYSl7aWYodC1lPmgpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2NvbnN0IHI9YS5sZW5ndGgtMTtmb3IoO2U8PXQ7KXt0aGlzLl9tYXBbZSsrXT1hO2NvbnN0IHQ9YS5jaGFyQ29kZUF0KHIpKzE7dD4yNTU/YT1hLnN1YnN0cmluZygwLHItMSkrU3RyaW5nLmZyb21DaGFyQ29kZShhLmNoYXJDb2RlQXQoci0xKSsxKSsiXDAiOmE9YS5zdWJzdHJpbmcoMCxyKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfX1tYXBCZlJhbmdlVG9BcnJheShlLHQsYSl7aWYodC1lPmgpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlVG9BcnJheSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtjb25zdCByPWEubGVuZ3RoO2xldCBuPTA7Zm9yKDtlPD10JiZuPHI7KXt0aGlzLl9tYXBbZV09YVtuKytdOysrZX19bWFwT25lKGUsdCl7dGhpcy5fbWFwW2VdPXR9bG9va3VwKGUpe3JldHVybiB0aGlzLl9tYXBbZV19Y29udGFpbnMoZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX1mb3JFYWNoKGUpe2NvbnN0IHQ9dGhpcy5fbWFwLGE9dC5sZW5ndGg7aWYoYTw9NjU1MzYpZm9yKGxldCByPTA7cjxhO3IrKyl2b2lkIDAhPT10W3JdJiZlKHIsdFtyXSk7ZWxzZSBmb3IoY29uc3QgYSBpbiB0KWUoYSx0W2FdKX1jaGFyQ29kZU9mKGUpe2NvbnN0IHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcihjb25zdCBhIGluIHQpaWYodFthXT09PWUpcmV0dXJuIDB8YTtyZXR1cm4tMX1nZXRNYXAoKXtyZXR1cm4gdGhpcy5fbWFwfXJlYWRDaGFyQ29kZShlLHQsYSl7bGV0IHI9MDtjb25zdCBuPXRoaXMuY29kZXNwYWNlUmFuZ2VzO2ZvcihsZXQgaT0wLHM9bi5sZW5ndGg7aTxzO2krKyl7cj0ocjw8OHxlLmNoYXJDb2RlQXQodCtpKSk+Pj4wO2NvbnN0IHM9bltpXTtmb3IobGV0IGU9MCx0PXMubGVuZ3RoO2U8dDspe2NvbnN0IHQ9c1tlKytdLG49c1tlKytdO2lmKHI+PXQmJnI8PW4pe2EuY2hhcmNvZGU9cjthLmxlbmd0aD1pKzE7cmV0dXJufX19YS5jaGFyY29kZT0wO2EubGVuZ3RoPTF9Z2V0Q2hhckNvZGVMZW5ndGgoZSl7Y29uc3QgdD10aGlzLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IGE9MCxyPXQubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9dFthXTtmb3IobGV0IHQ9MCxuPXIubGVuZ3RoO3Q8bjspe2NvbnN0IG49clt0KytdLGk9clt0KytdO2lmKGU+PW4mJmU8PWkpcmV0dXJuIGErMX19cmV0dXJuIDF9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofWdldCBpc0lkZW50aXR5Q01hcCgpe2lmKCJJZGVudGl0eS1IIiE9PXRoaXMubmFtZSYmIklkZW50aXR5LVYiIT09dGhpcy5uYW1lKXJldHVybiExO2lmKDY1NTM2IT09dGhpcy5fbWFwLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPDY1NTM2O2UrKylpZih0aGlzLl9tYXBbZV0hPT1lKXJldHVybiExO3JldHVybiEwfX10LkNNYXA9Q01hcDtjbGFzcyBJZGVudGl0eUNNYXAgZXh0ZW5kcyBDTWFwe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKTt0aGlzLnZlcnRpY2FsPWU7dGhpcy5hZGRDb2Rlc3BhY2VSYW5nZSh0LDAsNjU1MzUpfW1hcENpZFJhbmdlKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZFJhbmdlIil9bWFwQmZSYW5nZShlLHQsYSl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlIil9bWFwQmZSYW5nZVRvQXJyYXkoZSx0LGEpeygwLHIudW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZVRvQXJyYXkiKX1tYXBPbmUoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZE9uZSIpfWxvb2t1cChlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTp2b2lkIDB9Y29udGFpbnMoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1fWZvckVhY2goZSl7Zm9yKGxldCB0PTA7dDw9NjU1MzU7dCsrKWUodCx0KX1jaGFyQ29kZU9mKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOi0xfWdldE1hcCgpe2NvbnN0IGU9bmV3IEFycmF5KDY1NTM2KTtmb3IobGV0IHQ9MDt0PD02NTUzNTt0KyspZVt0XT10O3JldHVybiBlfWdldCBsZW5ndGgoKXtyZXR1cm4gNjU1MzZ9Z2V0IGlzSWRlbnRpdHlDTWFwKCl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgYWNjZXNzIC5pc0lkZW50aXR5Q01hcCIpfX10LklkZW50aXR5Q01hcD1JZGVudGl0eUNNYXA7Y29uc3QgdT1mdW5jdGlvbiBCaW5hcnlDTWFwUmVhZGVyQ2xvc3VyZSgpe2Z1bmN0aW9uIGhleFRvSW50KGUsdCl7bGV0IGE9MDtmb3IobGV0IHI9MDtyPD10O3IrKylhPWE8PDh8ZVtyXTtyZXR1cm4gYT4+PjB9ZnVuY3Rpb24gaGV4VG9TdHIoZSx0KXtyZXR1cm4gMT09PXQ/U3RyaW5nLmZyb21DaGFyQ29kZShlWzBdLGVbMV0pOjM9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdLGVbMl0sZVszXSk6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkoMCx0KzEpKX1mdW5jdGlvbiBhZGRIZXgoZSx0LGEpe2xldCByPTA7Zm9yKGxldCBuPWE7bj49MDtuLS0pe3IrPWVbbl0rdFtuXTtlW25dPTI1NSZyO3I+Pj04fX1mdW5jdGlvbiBpbmNIZXgoZSx0KXtsZXQgYT0xO2ZvcihsZXQgcj10O3I+PTAmJmE+MDtyLS0pe2ErPWVbcl07ZVtyXT0yNTUmYTthPj49OH19Y29uc3QgZT0xNjtjbGFzcyBCaW5hcnlDTWFwU3RyZWFte2NvbnN0cnVjdG9yKGUpe3RoaXMuYnVmZmVyPWU7dGhpcy5wb3M9MDt0aGlzLmVuZD1lLmxlbmd0aDt0aGlzLnRtcEJ1Zj1uZXcgVWludDhBcnJheSgxOSl9cmVhZEJ5dGUoKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuZW5kPy0xOnRoaXMuYnVmZmVyW3RoaXMucG9zKytdfXJlYWROdW1iZXIoKXtsZXQgZSx0PTA7ZG97Y29uc3QgYT10aGlzLnJlYWRCeXRlKCk7aWYoYTwwKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO2U9ISgxMjgmYSk7dD10PDw3fDEyNyZhfXdoaWxlKCFlKTtyZXR1cm4gdH1yZWFkU2lnbmVkKCl7Y29uc3QgZT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gMSZlP34oZT4+PjEpOmU+Pj4xfXJlYWRIZXgoZSx0KXtlLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyx0aGlzLnBvcyt0KzEpKTt0aGlzLnBvcys9dCsxfXJlYWRIZXhOdW1iZXIoZSx0KXtsZXQgYTtjb25zdCBuPXRoaXMudG1wQnVmO2xldCBpPTA7ZG97Y29uc3QgZT10aGlzLnJlYWRCeXRlKCk7aWYoZTwwKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO2E9ISgxMjgmZSk7bltpKytdPTEyNyZlfXdoaWxlKCFhKTtsZXQgcz10LG89MCxjPTA7Zm9yKDtzPj0wOyl7Zm9yKDtjPDgmJm4ubGVuZ3RoPjA7KXtvfD1uWy0taV08PGM7Yys9N31lW3NdPTI1NSZvO3MtLTtvPj49ODtjLT04fX1yZWFkSGV4U2lnbmVkKGUsdCl7dGhpcy5yZWFkSGV4TnVtYmVyKGUsdCk7Y29uc3QgYT0xJmVbdF0/MjU1OjA7bGV0IHI9MDtmb3IobGV0IG49MDtuPD10O24rKyl7cj0oMSZyKTw8OHxlW25dO2Vbbl09cj4+MV5hfX1yZWFkU3RyaW5nKCl7Y29uc3QgZT10aGlzLnJlYWROdW1iZXIoKTtsZXQgdD0iIjtmb3IobGV0IGE9MDthPGU7YSsrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO3JldHVybiB0fX1yZXR1cm4gY2xhc3MgQmluYXJ5Q01hcFJlYWRlcnthc3luYyBwcm9jZXNzKHQsYSxyKXtjb25zdCBuPW5ldyBCaW5hcnlDTWFwU3RyZWFtKHQpLGk9bi5yZWFkQnl0ZSgpO2EudmVydGljYWw9ISEoMSZpKTtsZXQgcz1udWxsO2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkoZSksYz1uZXcgVWludDhBcnJheShlKSxsPW5ldyBVaW50OEFycmF5KGUpLGg9bmV3IFVpbnQ4QXJyYXkoZSksdT1uZXcgVWludDhBcnJheShlKTtsZXQgZCxmO2Zvcig7KGY9bi5yZWFkQnl0ZSgpKT49MDspe2NvbnN0IHQ9Zj4+NTtpZig3PT09dCl7c3dpdGNoKDMxJmYpe2Nhc2UgMDpuLnJlYWRTdHJpbmcoKTticmVhaztjYXNlIDE6cz1uLnJlYWRTdHJpbmcoKX1jb250aW51ZX1jb25zdCByPSEhKDE2JmYpLGk9MTUmZjtpZihpKzE+ZSl0aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjb25zdCBnPTEscD1uLnJlYWROdW1iZXIoKTtzd2l0Y2godCl7Y2FzZSAwOm4ucmVhZEhleChvLGkpO24ucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7YS5hZGRDb2Rlc3BhY2VSYW5nZShpKzEsaGV4VG9JbnQobyxpKSxoZXhUb0ludChjLGkpKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxpKTtuLnJlYWRIZXhOdW1iZXIobyxpKTthZGRIZXgobyxjLGkpO24ucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7YS5hZGRDb2Rlc3BhY2VSYW5nZShpKzEsaGV4VG9JbnQobyxpKSxoZXhUb0ludChjLGkpKX1icmVhaztjYXNlIDE6bi5yZWFkSGV4KG8saSk7bi5yZWFkSGV4TnVtYmVyKGMsaSk7YWRkSGV4KGMsbyxpKTtuLnJlYWROdW1iZXIoKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxpKTtuLnJlYWRIZXhOdW1iZXIobyxpKTthZGRIZXgobyxjLGkpO24ucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7bi5yZWFkTnVtYmVyKCl9YnJlYWs7Y2FzZSAyOm4ucmVhZEhleChsLGkpO2Q9bi5yZWFkTnVtYmVyKCk7YS5tYXBPbmUoaGV4VG9JbnQobCxpKSxkKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgobCxpKTtpZighcil7bi5yZWFkSGV4TnVtYmVyKHUsaSk7YWRkSGV4KGwsdSxpKX1kPW4ucmVhZFNpZ25lZCgpKyhkKzEpO2EubWFwT25lKGhleFRvSW50KGwsaSksZCl9YnJlYWs7Y2FzZSAzOm4ucmVhZEhleChvLGkpO24ucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7ZD1uLnJlYWROdW1iZXIoKTthLm1hcENpZFJhbmdlKGhleFRvSW50KG8saSksaGV4VG9JbnQoYyxpKSxkKTtmb3IobGV0IGU9MTtlPHA7ZSsrKXtpbmNIZXgoYyxpKTtpZihyKW8uc2V0KGMpO2Vsc2V7bi5yZWFkSGV4TnVtYmVyKG8saSk7YWRkSGV4KG8sYyxpKX1uLnJlYWRIZXhOdW1iZXIoYyxpKTthZGRIZXgoYyxvLGkpO2Q9bi5yZWFkTnVtYmVyKCk7YS5tYXBDaWRSYW5nZShoZXhUb0ludChvLGkpLGhleFRvSW50KGMsaSksZCl9YnJlYWs7Y2FzZSA0Om4ucmVhZEhleChsLGcpO24ucmVhZEhleChoLGkpO2EubWFwT25lKGhleFRvSW50KGwsZyksaGV4VG9TdHIoaCxpKSk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGwsZyk7aWYoIXIpe24ucmVhZEhleE51bWJlcih1LGcpO2FkZEhleChsLHUsZyl9aW5jSGV4KGgsaSk7bi5yZWFkSGV4U2lnbmVkKHUsaSk7YWRkSGV4KGgsdSxpKTthLm1hcE9uZShoZXhUb0ludChsLGcpLGhleFRvU3RyKGgsaSkpfWJyZWFrO2Nhc2UgNTpuLnJlYWRIZXgobyxnKTtuLnJlYWRIZXhOdW1iZXIoYyxnKTthZGRIZXgoYyxvLGcpO24ucmVhZEhleChoLGkpO2EubWFwQmZSYW5nZShoZXhUb0ludChvLGcpLGhleFRvSW50KGMsZyksaGV4VG9TdHIoaCxpKSk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGMsZyk7aWYocilvLnNldChjKTtlbHNle24ucmVhZEhleE51bWJlcihvLGcpO2FkZEhleChvLGMsZyl9bi5yZWFkSGV4TnVtYmVyKGMsZyk7YWRkSGV4KGMsbyxnKTtuLnJlYWRIZXgoaCxpKTthLm1hcEJmUmFuZ2UoaGV4VG9JbnQobyxnKSxoZXhUb0ludChjLGcpLGhleFRvU3RyKGgsaSkpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3MgLSB1bmtub3duIHR5cGU6ICR7dH1gKX19cmV0dXJuIHM/cihzKTphfX19KCksZD1mdW5jdGlvbiBDTWFwRmFjdG9yeUNsb3N1cmUoKXtmdW5jdGlvbiBzdHJUb0ludChlKXtsZXQgdD0wO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXQ9dDw8OHxlLmNoYXJDb2RlQXQoYSk7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIGV4cGVjdFN0cmluZyhlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBzdHJpbmcuIil9ZnVuY3Rpb24gZXhwZWN0SW50KGUpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgaW50LiIpfWZ1bmN0aW9uIHBhcnNlQmZDaGFyKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1uLkVPRilicmVhaztpZigoMCxuLmlzQ21kKShhLCJlbmRiZmNoYXIiKSlyZXR1cm47ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2V4cGVjdFN0cmluZyhhKTtjb25zdCBpPWE7ZS5tYXBPbmUocixpKX19ZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1uLkVPRilicmVhaztpZigoMCxuLmlzQ21kKShhLCJlbmRiZnJhbmdlIikpcmV0dXJuO2V4cGVjdFN0cmluZyhhKTtjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoYSk7Y29uc3QgaT1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihhKXx8InN0cmluZyI9PXR5cGVvZiBhKXtjb25zdCB0PU51bWJlci5pc0ludGVnZXIoYSk/U3RyaW5nLmZyb21DaGFyQ29kZShhKTphO2UubWFwQmZSYW5nZShyLGksdCl9ZWxzZXtpZighKDAsbi5pc0NtZCkoYSwiWyIpKWJyZWFrO3thPXQuZ2V0T2JqKCk7Y29uc3Qgcz1bXTtmb3IoOyEoMCxuLmlzQ21kKShhLCJdIikmJmEhPT1uLkVPRjspe3MucHVzaChhKTthPXQuZ2V0T2JqKCl9ZS5tYXBCZlJhbmdlVG9BcnJheShyLGkscyl9fX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBiZiByYW5nZS4iKX1mdW5jdGlvbiBwYXJzZUNpZENoYXIoZSx0KXtmb3IoOzspe2xldCBhPXQuZ2V0T2JqKCk7aWYoYT09PW4uRU9GKWJyZWFrO2lmKCgwLG4uaXNDbWQpKGEsImVuZGNpZGNoYXIiKSlyZXR1cm47ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2V4cGVjdEludChhKTtjb25zdCBpPWE7ZS5tYXBPbmUocixpKX19ZnVuY3Rpb24gcGFyc2VDaWRSYW5nZShlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09bi5FT0YpYnJlYWs7aWYoKDAsbi5pc0NtZCkoYSwiZW5kY2lkcmFuZ2UiKSlyZXR1cm47ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2V4cGVjdFN0cmluZyhhKTtjb25zdCBpPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtleHBlY3RJbnQoYSk7Y29uc3Qgcz1hO2UubWFwQ2lkUmFuZ2UocixpLHMpfX1mdW5jdGlvbiBwYXJzZUNvZGVzcGFjZVJhbmdlKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1uLkVPRilicmVhaztpZigoMCxuLmlzQ21kKShhLCJlbmRjb2Rlc3BhY2VyYW5nZSIpKXJldHVybjtpZigic3RyaW5nIiE9dHlwZW9mIGEpYnJlYWs7Y29uc3Qgcj1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7aWYoInN0cmluZyIhPXR5cGVvZiBhKWJyZWFrO2NvbnN0IGk9c3RyVG9JbnQoYSk7ZS5hZGRDb2Rlc3BhY2VSYW5nZShhLmxlbmd0aCxyLGkpfXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNvZGVzcGFjZSByYW5nZS4iKX1mdW5jdGlvbiBwYXJzZVdNb2RlKGUsdCl7Y29uc3QgYT10LmdldE9iaigpO051bWJlci5pc0ludGVnZXIoYSkmJihlLnZlcnRpY2FsPSEhYSl9ZnVuY3Rpb24gcGFyc2VDTWFwTmFtZShlLHQpe2NvbnN0IGE9dC5nZXRPYmooKTthIGluc3RhbmNlb2Ygbi5OYW1lJiYoZS5uYW1lPWEubmFtZSl9YXN5bmMgZnVuY3Rpb24gcGFyc2VDTWFwKGUsdCxhLGkpe2xldCBzLGM7ZTpmb3IoOzspdHJ5e2NvbnN0IGE9dC5nZXRPYmooKTtpZihhPT09bi5FT0YpYnJlYWs7aWYoYSBpbnN0YW5jZW9mIG4uTmFtZSl7IldNb2RlIj09PWEubmFtZT9wYXJzZVdNb2RlKGUsdCk6IkNNYXBOYW1lIj09PWEubmFtZSYmcGFyc2VDTWFwTmFtZShlLHQpO3M9YX1lbHNlIGlmKGEgaW5zdGFuY2VvZiBuLkNtZClzd2l0Y2goYS5jbWQpe2Nhc2UiZW5kY21hcCI6YnJlYWsgZTtjYXNlInVzZWNtYXAiOnMgaW5zdGFuY2VvZiBuLk5hbWUmJihjPXMubmFtZSk7YnJlYWs7Y2FzZSJiZWdpbmNvZGVzcGFjZXJhbmdlIjpwYXJzZUNvZGVzcGFjZVJhbmdlKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmY2hhciI6cGFyc2VCZkNoYXIoZSx0KTticmVhaztjYXNlImJlZ2luY2lkY2hhciI6cGFyc2VDaWRDaGFyKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmcmFuZ2UiOnBhcnNlQmZSYW5nZShlLHQpO2JyZWFrO2Nhc2UiYmVnaW5jaWRyYW5nZSI6cGFyc2VDaWRSYW5nZShlLHQpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoIkludmFsaWQgY01hcCBkYXRhOiAiK2UpO2NvbnRpbnVlfSFpJiZjJiYoaT1jKTtyZXR1cm4gaT9leHRlbmRDTWFwKGUsYSxpKTplfWFzeW5jIGZ1bmN0aW9uIGV4dGVuZENNYXAoZSx0LGEpe2UudXNlQ01hcD1hd2FpdCBjcmVhdGVCdWlsdEluQ01hcChhLHQpO2lmKDA9PT1lLm51bUNvZGVzcGFjZVJhbmdlcyl7Y29uc3QgdD1lLnVzZUNNYXAuY29kZXNwYWNlUmFuZ2VzO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKWUuY29kZXNwYWNlUmFuZ2VzW2FdPXRbYV0uc2xpY2UoKTtlLm51bUNvZGVzcGFjZVJhbmdlcz1lLnVzZUNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzfWUudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbih0LGEpe2UuY29udGFpbnModCl8fGUubWFwT25lKHQsZS51c2VDTWFwLmxvb2t1cCh0KSl9KSk7cmV0dXJuIGV9YXN5bmMgZnVuY3Rpb24gY3JlYXRlQnVpbHRJbkNNYXAoZSx0KXtpZigiSWRlbnRpdHktSCI9PT1lKXJldHVybiBuZXcgSWRlbnRpdHlDTWFwKCExLDIpO2lmKCJJZGVudGl0eS1WIj09PWUpcmV0dXJuIG5ldyBJZGVudGl0eUNNYXAoITAsMik7aWYoIWwuaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIENNYXAgbmFtZTogIitlKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkJ1aWx0LWluIENNYXAgcGFyYW1ldGVycyBhcmUgbm90IHByb3ZpZGVkLiIpO2NvbnN0e2NNYXBEYXRhOmEsY29tcHJlc3Npb25UeXBlOm59PWF3YWl0IHQoZSksaT1uZXcgQ01hcCghMCk7aWYobj09PXIuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpcmV0dXJuKG5ldyB1KS5wcm9jZXNzKGEsaSwoZT0+ZXh0ZW5kQ01hcChpLHQsZSkpKTtpZihuPT09ci5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpe2NvbnN0IGU9bmV3IHMuTGV4ZXIobmV3IGMuU3RyZWFtKGEpKTtyZXR1cm4gcGFyc2VDTWFwKGksZSx0LG51bGwpfXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDTWFwICJjb21wcmVzc2lvblR5cGUiIHZhbHVlOiAke259YCl9cmV0dXJue2FzeW5jIGNyZWF0ZShlKXtjb25zdCB0PWUuZW5jb2RpbmcsYT1lLmZldGNoQnVpbHRJbkNNYXAscj1lLnVzZUNNYXA7aWYodCBpbnN0YW5jZW9mIG4uTmFtZSlyZXR1cm4gY3JlYXRlQnVpbHRJbkNNYXAodC5uYW1lLGEpO2lmKHQgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2NvbnN0IGU9YXdhaXQgcGFyc2VDTWFwKG5ldyBDTWFwLG5ldyBzLkxleGVyKHQpLGEscik7cmV0dXJuIGUuaXNJZGVudGl0eUNNYXA/Y3JlYXRlQnVpbHRJbkNNYXAoZS5uYW1lLGEpOmV9dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyByZXF1aXJlZC4iKX19fSgpO3QuQ01hcEZhY3Rvcnk9ZH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBhcnNlcj10LkxpbmVhcml6YXRpb249dC5MZXhlcj12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDQpLHM9YSgxNiksbz1hKDE4KSxjPWEoMTkpLGw9YSgyMSksaD1hKDIyKSx1PWEoMjUpLGQ9YSgyNyksZj1hKDI5KSxnPWEoOCkscD1hKDMwKSxtPWEoMzEpO2Z1bmN0aW9uIGNvbXB1dGVBZGxlcjMyKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGE9MSxyPTA7Zm9yKGxldCBuPTA7bjx0Oysrbil7YSs9MjU1JmVbbl07cis9YX1yZXR1cm4gciU2NTUyMTw8MTZ8YSU2NTUyMX1jbGFzcyBQYXJzZXJ7Y29uc3RydWN0b3Ioe2xleGVyOmUseHJlZjp0LGFsbG93U3RyZWFtczphPSExLHJlY292ZXJ5TW9kZTpyPSExfSl7dGhpcy5sZXhlcj1lO3RoaXMueHJlZj10O3RoaXMuYWxsb3dTdHJlYW1zPWE7dGhpcy5yZWNvdmVyeU1vZGU9cjt0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLnJlZmlsbCgpfXJlZmlsbCgpe3RoaXMuYnVmMT10aGlzLmxleGVyLmdldE9iaigpO3RoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpfXNoaWZ0KCl7aWYodGhpcy5idWYyIGluc3RhbmNlb2Ygbi5DbWQmJiJJRCI9PT10aGlzLmJ1ZjIuY21kKXt0aGlzLmJ1ZjE9dGhpcy5idWYyO3RoaXMuYnVmMj1udWxsfWVsc2V7dGhpcy5idWYxPXRoaXMuYnVmMjt0aGlzLmJ1ZjI9dGhpcy5sZXhlci5nZXRPYmooKX19dHJ5U2hpZnQoKXt0cnl7dGhpcy5zaGlmdCgpO3JldHVybiEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fWdldE9iaihlPW51bGwpe2NvbnN0IHQ9dGhpcy5idWYxO3RoaXMuc2hpZnQoKTtpZih0IGluc3RhbmNlb2Ygbi5DbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpjb25zdCBhPVtdO2Zvcig7ISgwLG4uaXNDbWQpKHRoaXMuYnVmMSwiXSIpJiZ0aGlzLmJ1ZjEhPT1uLkVPRjspYS5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZih0aGlzLmJ1ZjE9PT1uLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIGE7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXkuIil9dGhpcy5zaGlmdCgpO3JldHVybiBhO2Nhc2UiPDwiOmNvbnN0IHM9bmV3IG4uRGljdCh0aGlzLnhyZWYpO2Zvcig7ISgwLG4uaXNDbWQpKHRoaXMuYnVmMSwiPj4iKSYmdGhpcy5idWYxIT09bi5FT0Y7KXtpZighKHRoaXMuYnVmMSBpbnN0YW5jZW9mIG4uTmFtZSkpeygwLHIuaW5mbykoIk1hbGZvcm1lZCBkaWN0aW9uYXJ5OiBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7dGhpcy5zaGlmdCgpO2NvbnRpbnVlfWNvbnN0IHQ9dGhpcy5idWYxLm5hbWU7dGhpcy5zaGlmdCgpO2lmKHRoaXMuYnVmMT09PW4uRU9GKWJyZWFrO3Muc2V0KHQsdGhpcy5nZXRPYmooZSkpfWlmKHRoaXMuYnVmMT09PW4uRU9GKXtpZih0aGlzLnJlY292ZXJ5TW9kZSlyZXR1cm4gczt0aHJvdyBuZXcgaS5QYXJzZXJFT0ZFeGNlcHRpb24oIkVuZCBvZiBmaWxlIGluc2lkZSBkaWN0aW9uYXJ5LiIpfWlmKCgwLG4uaXNDbWQpKHRoaXMuYnVmMiwic3RyZWFtIikpcmV0dXJuIHRoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShzLGUpOnM7dGhpcy5zaGlmdCgpO3JldHVybiBzO2RlZmF1bHQ6cmV0dXJuIHR9aWYoTnVtYmVyLmlzSW50ZWdlcih0KSl7aWYoTnVtYmVyLmlzSW50ZWdlcih0aGlzLmJ1ZjEpJiYoMCxuLmlzQ21kKSh0aGlzLmJ1ZjIsIlIiKSl7Y29uc3QgZT1uLlJlZi5nZXQodCx0aGlzLmJ1ZjEpO3RoaXMuc2hpZnQoKTt0aGlzLnNoaWZ0KCk7cmV0dXJuIGV9cmV0dXJuIHR9cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiZlP2UuZGVjcnlwdFN0cmluZyh0KTp0fWZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9dGhpcy5sZXhlcixhPWUucG9zO2xldCBzLG8sYz0wO2Zvcig7LTEhPT0ocz1lLmdldEJ5dGUoKSk7KWlmKDA9PT1jKWM9Njk9PT1zPzE6MDtlbHNlIGlmKDE9PT1jKWM9NzM9PT1zPzI6MDtlbHNleygwLHIuYXNzZXJ0KSgyPT09YywiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQgLSBpbnZhbGlkIHN0YXRlLiIpO2lmKDMyPT09c3x8MTA9PT1zfHwxMz09PXMpe289ZS5wb3M7Y29uc3QgYT1lLnBlZWtCeXRlcygxMCk7Zm9yKGxldCBlPTAsdD1hLmxlbmd0aDtlPHQ7ZSsrKXtzPWFbZV07aWYoKDAhPT1zfHwwPT09YVtlKzFdKSYmKDEwIT09cyYmMTMhPT1zJiYoczwzMnx8cz4xMjcpKSl7Yz0wO2JyZWFrfX1pZigyIT09Yyljb250aW51ZTtpZih0Lmtub3duQ29tbWFuZHMpe2NvbnN0IGU9dC5wZWVrT2JqKCk7ZSBpbnN0YW5jZW9mIG4uQ21kJiYhdC5rbm93bkNvbW1hbmRzW2UuY21kXSYmKGM9MCl9ZWxzZSgwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kIC0gYGxleGVyLmtub3duQ29tbWFuZHNgIGlzIHVuZGVmaW5lZC4iKTtpZigyPT09YylicmVha31lbHNlIGM9MH1pZigtMT09PXMpeygwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKTtpZihvKXsoMCxyLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpO2Uuc2tpcCgtKGUucG9zLW8pKX19bGV0IGw9NDtlLnNraXAoLWwpO3M9ZS5wZWVrQnl0ZSgpO2Uuc2tpcChsKTsoMCxpLmlzV2hpdGVTcGFjZSkocyl8fGwtLTtyZXR1cm4gZS5wb3MtbC1hfWZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoZSl7Y29uc3QgdD1lLnBvcztsZXQgYSxuLGk9ITE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09YSl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0Om49ZS5nZXRVaW50MTYoKTtuPjI/ZS5za2lwKG4tMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfWNvbnN0IHM9ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIik7ZS5za2lwKC1zKTtyZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKX10aGlzLmlubGluZVN0cmVhbVNraXBFSShlKTtyZXR1cm4gc31maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChlKXtjb25zdCB0PWUucG9zO2xldCBhO2Zvcig7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDEyNj09PWEpe2NvbnN0IHQ9ZS5wb3M7YT1lLnBlZWtCeXRlKCk7Zm9yKDsoMCxpLmlzV2hpdGVTcGFjZSkoYSk7KXtlLnNraXAoKTthPWUucGVla0J5dGUoKX1pZig2Mj09PWEpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPnQpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7aWYoNjk9PT10WzBdJiY3Mz09PXRbMV0pYnJlYWt9fWNvbnN0IG49ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtbik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIG59ZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IGE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKSYmNjIhPT1hOyk7Y29uc3Qgbj1lLnBvcy10O2lmKC0xPT09YSl7KDAsci53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtbik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIG59aW5saW5lU3RyZWFtU2tpcEVJKGUpe2xldCB0LGE9MDtmb3IoOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YSlhPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YSlhPTczPT09dD8yOjA7ZWxzZSBpZigyPT09YSlicmVha31tYWtlSW5saW5lSW1hZ2UoZSl7Y29uc3QgdD10aGlzLmxleGVyLGE9dC5zdHJlYW0saT1uZXcgbi5EaWN0KHRoaXMueHJlZik7bGV0IHM7Zm9yKDshKDAsbi5pc0NtZCkodGhpcy5idWYxLCJJRCIpJiZ0aGlzLmJ1ZjEhPT1uLkVPRjspe2lmKCEodGhpcy5idWYxIGluc3RhbmNlb2Ygbi5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7Y29uc3QgdD10aGlzLmJ1ZjEubmFtZTt0aGlzLnNoaWZ0KCk7aWYodGhpcy5idWYxPT09bi5FT0YpYnJlYWs7aS5zZXQodCx0aGlzLmdldE9iaihlKSl9LTEhPT10LmJlZ2luSW5saW5lSW1hZ2VQb3MmJihzPWEucG9zLXQuYmVnaW5JbmxpbmVJbWFnZVBvcyk7Y29uc3Qgbz1pLmdldCgiRiIsIkZpbHRlciIpO2xldCBjO2lmKG8gaW5zdGFuY2VvZiBuLk5hbWUpYz1vLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KG8pKXtjb25zdCBlPXRoaXMueHJlZi5mZXRjaElmUmVmKG9bMF0pO2UgaW5zdGFuY2VvZiBuLk5hbWUmJihjPWUubmFtZSl9Y29uc3QgbD1hLnBvcztsZXQgaDtzd2l0Y2goYyl7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpoPXRoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChhKTticmVhaztjYXNlIkE4NSI6Y2FzZSJBU0NJSTg1RGVjb2RlIjpoPXRoaXMuZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7Y2FzZSJBSHgiOmNhc2UiQVNDSUlIZXhEZWNvZGUiOmg9dGhpcy5maW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7ZGVmYXVsdDpoPXRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoYSl9bGV0IHUsZD1hLm1ha2VTdWJTdHJlYW0obCxoLGkpO2lmKGg8MWUzJiZzPDU1NTIpe2NvbnN0IGU9ZC5nZXRCeXRlcygpO2QucmVzZXQoKTtjb25zdCByPWEucG9zO2EucG9zPXQuYmVnaW5JbmxpbmVJbWFnZVBvcztjb25zdCBpPWEuZ2V0Qnl0ZXMocyk7YS5wb3M9cjt1PWNvbXB1dGVBZGxlcjMyKGUpKyJfIitjb21wdXRlQWRsZXIzMihpKTtjb25zdCBvPXRoaXMuaW1hZ2VDYWNoZVt1XTtpZih2b2lkIDAhPT1vKXt0aGlzLmJ1ZjI9bi5DbWQuZ2V0KCJFSSIpO3RoaXMuc2hpZnQoKTtvLnJlc2V0KCk7cmV0dXJuIG99fWUmJihkPWUuY3JlYXRlU3RyZWFtKGQsaCkpO2Q9dGhpcy5maWx0ZXIoZCxpLGgpO2QuZGljdD1pO2lmKHZvaWQgMCE9PXUpe2QuY2FjaGVLZXk9YGlubGluZV8ke2h9XyR7dX1gO3RoaXMuaW1hZ2VDYWNoZVt1XT1kfXRoaXMuYnVmMj1uLkNtZC5nZXQoIkVJIik7dGhpcy5zaGlmdCgpO3JldHVybiBkfV9maW5kU3RyZWFtTGVuZ3RoKGUsdCl7Y29uc3R7c3RyZWFtOmF9PXRoaXMubGV4ZXI7YS5wb3M9ZTtjb25zdCByPXQubGVuZ3RoO2Zvcig7YS5wb3M8YS5lbmQ7KXtjb25zdCBuPWEucGVla0J5dGVzKDIwNDgpLGk9bi5sZW5ndGgtcjtpZihpPD0wKWJyZWFrO2xldCBzPTA7Zm9yKDtzPGk7KXtsZXQgaT0wO2Zvcig7aTxyJiZuW3MraV09PT10W2ldOylpKys7aWYoaT49cil7YS5wb3MrPXM7cmV0dXJuIGEucG9zLWV9cysrfWEucG9zKz1pfXJldHVybi0xfW1ha2VTdHJlYW0oZSx0KXtjb25zdCBhPXRoaXMubGV4ZXI7bGV0IHM9YS5zdHJlYW07YS5za2lwVG9OZXh0TGluZSgpO2NvbnN0IG89cy5wb3MtMTtsZXQgYz1lLmdldCgiTGVuZ3RoIik7aWYoIU51bWJlci5pc0ludGVnZXIoYykpeygwLHIuaW5mbykoYEJhZCBsZW5ndGggIiR7YyYmYy50b1N0cmluZygpfSIgaW4gc3RyZWFtLmApO2M9MH1zLnBvcz1vK2M7YS5uZXh0Q2hhcigpO2lmKHRoaXMudHJ5U2hpZnQoKSYmKDAsbi5pc0NtZCkodGhpcy5idWYyLCJlbmRzdHJlYW0iKSl0aGlzLnNoaWZ0KCk7ZWxzZXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFsxMDEsMTEwLDEwMCwxMTUsMTE2LDExNCwxMDEsOTcsMTA5XSk7bGV0IHQ9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChvLGUpO2lmKHQ8MCl7Y29uc3QgYT0xO2ZvcihsZXQgbj0xO248PWE7bisrKXtjb25zdCBhPWUubGVuZ3RoLW4sYz1lLnNsaWNlKDAsYSksbD10aGlzLl9maW5kU3RyZWFtTGVuZ3RoKG8sYyk7aWYobD49MCl7Y29uc3QgZT1zLnBlZWtCeXRlcyhhKzEpW2FdO2lmKCEoMCxpLmlzV2hpdGVTcGFjZSkoZSkpYnJlYWs7KDAsci5pbmZvKShgRm91bmQgIiR7KDAsci5ieXRlc1RvU3RyaW5nKShjKX0iIHdoZW4gc2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC5gKTt0PWw7YnJlYWt9fWlmKHQ8MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWlzc2luZyBlbmRzdHJlYW0gY29tbWFuZC4iKX1jPXQ7YS5uZXh0Q2hhcigpO3RoaXMuc2hpZnQoKTt0aGlzLnNoaWZ0KCl9dGhpcy5zaGlmdCgpO3M9cy5tYWtlU3ViU3RyZWFtKG8sYyxlKTt0JiYocz10LmNyZWF0ZVN0cmVhbShzLGMpKTtzPXRoaXMuZmlsdGVyKHMsZSxjKTtzLmRpY3Q9ZTtyZXR1cm4gc31maWx0ZXIoZSx0LGEpe2xldCBpPXQuZ2V0KCJGIiwiRmlsdGVyIikscz10LmdldCgiRFAiLCJEZWNvZGVQYXJtcyIpO2lmKGkgaW5zdGFuY2VvZiBuLk5hbWUpe0FycmF5LmlzQXJyYXkocykmJigwLHIud2FybikoIi9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGJlIGFuIEFycmF5LCB3aGVuIC9GaWx0ZXIgaXMgYSBOYW1lLiIpO3JldHVybiB0aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUsYSxzKX1sZXQgbz1hO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IHQ9aSxhPXM7Zm9yKGxldCBjPTAsbD10Lmxlbmd0aDtjPGw7KytjKXtpPXRoaXMueHJlZi5mZXRjaElmUmVmKHRbY10pO2lmKCEoaSBpbnN0YW5jZW9mIG4uTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEJhZCBmaWx0ZXIgbmFtZSAiJHtpfSJgKTtzPW51bGw7QXJyYXkuaXNBcnJheShhKSYmYyBpbiBhJiYocz10aGlzLnhyZWYuZmV0Y2hJZlJlZihhW2NdKSk7ZT10aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUsbyxzKTtvPW51bGx9fXJldHVybiBlfW1ha2VGaWx0ZXIoZSx0LGEsbil7aWYoMD09PWEpeygwLHIud2FybikoYEVtcHR5ICIke3R9IiBzdHJlYW0uYCk7cmV0dXJuIG5ldyBnLk51bGxTdHJlYW19Y29uc3QgYj10aGlzLnhyZWYuc3RhdHM7dHJ5e3N3aXRjaCh0KXtjYXNlIkZsIjpjYXNlIkZsYXRlRGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkZMQVRFKTtyZXR1cm4gbj9uZXcgcC5QcmVkaWN0b3JTdHJlYW0obmV3IGwuRmxhdGVTdHJlYW0oZSxhKSxhLG4pOm5ldyBsLkZsYXRlU3RyZWFtKGUsYSk7Y2FzZSJMWlciOmNhc2UiTFpXRGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkxaVyk7bGV0IHQ9MTtpZihuKXtuLmhhcygiRWFybHlDaGFuZ2UiKSYmKHQ9bi5nZXQoIkVhcmx5Q2hhbmdlIikpO3JldHVybiBuZXcgcC5QcmVkaWN0b3JTdHJlYW0obmV3IGYuTFpXU3RyZWFtKGUsYSx0KSxhLG4pfXJldHVybiBuZXcgZi5MWldTdHJlYW0oZSxhLHQpO2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6Yi5hZGRTdHJlYW1UeXBlKHIuU3RyZWFtVHlwZS5EQ1QpO3JldHVybiBuZXcgdS5KcGVnU3RyZWFtKGUsYSxuKTtjYXNlIkpQWCI6Y2FzZSJKUFhEZWNvZGUiOmIuYWRkU3RyZWFtVHlwZShyLlN0cmVhbVR5cGUuSlBYKTtyZXR1cm4gbmV3IGQuSnB4U3RyZWFtKGUsYSxuKTtjYXNlIkE4NSI6Y2FzZSJBU0NJSTg1RGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkE4NSk7cmV0dXJuIG5ldyBzLkFzY2lpODVTdHJlYW0oZSxhKTtjYXNlIkFIeCI6Y2FzZSJBU0NJSUhleERlY29kZSI6Yi5hZGRTdHJlYW1UeXBlKHIuU3RyZWFtVHlwZS5BSFgpO3JldHVybiBuZXcgby5Bc2NpaUhleFN0cmVhbShlLGEpO2Nhc2UiQ0NGIjpjYXNlIkNDSVRURmF4RGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkNDRik7cmV0dXJuIG5ldyBjLkNDSVRURmF4U3RyZWFtKGUsYSxuKTtjYXNlIlJMIjpjYXNlIlJ1bkxlbmd0aERlY29kZSI6Yi5hZGRTdHJlYW1UeXBlKHIuU3RyZWFtVHlwZS5STFgpO3JldHVybiBuZXcgbS5SdW5MZW5ndGhTdHJlYW0oZSxhKTtjYXNlIkpCSUcyRGVjb2RlIjpiLmFkZFN0cmVhbVR5cGUoci5TdHJlYW1UeXBlLkpCSUcpO3JldHVybiBuZXcgaC5KYmlnMlN0cmVhbShlLGEsbil9KDAsci53YXJuKShgRmlsdGVyICIke3R9IiBpcyBub3Qgc3VwcG9ydGVkLmApO3JldHVybiBlfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKShgSW52YWxpZCBzdHJlYW06ICIke2V9ImApO3JldHVybiBuZXcgZy5OdWxsU3RyZWFtfX19dC5QYXJzZXI9UGFyc2VyO2NvbnN0IGI9WzEsMCwwLDAsMCwwLDAsMCwwLDEsMSwwLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMiwwLDAsMiwyLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdO2Z1bmN0aW9uIHRvSGV4RGlnaXQoZSl7cmV0dXJuIGU+PTQ4JiZlPD01Nz8xNSZlOmU+PTY1JiZlPD03MHx8ZT49OTcmJmU8PTEwMj85KygxNSZlKTotMX1jbGFzcyBMZXhlcntjb25zdHJ1Y3RvcihlLHQ9bnVsbCl7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCk7dGhpcy5zdHJCdWY9W107dGhpcy5rbm93bkNvbW1hbmRzPXQ7dGhpcy5faGV4U3RyaW5nTnVtV2Fybj0wO3RoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz0tMX1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1wZWVrQ2hhcigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfWdldE51bWJlcigpe2xldCBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxhPTAsbj0wO2lmKDQ1PT09ZSl7bj0tMTtlPXRoaXMubmV4dENoYXIoKTs0NT09PWUmJihlPXRoaXMubmV4dENoYXIoKSl9ZWxzZSBpZig0Mz09PWUpe249MTtlPXRoaXMubmV4dENoYXIoKX1pZigxMD09PWV8fDEzPT09ZSlkb3tlPXRoaXMubmV4dENoYXIoKX13aGlsZSgxMD09PWV8fDEzPT09ZSk7aWYoNDY9PT1lKXthPTEwO2U9dGhpcy5uZXh0Q2hhcigpfWlmKGU8NDh8fGU+NTcpe2NvbnN0IHQ9YEludmFsaWQgbnVtYmVyOiAke1N0cmluZy5mcm9tQ2hhckNvZGUoZSl9IChjaGFyQ29kZSAke2V9KWA7aWYoKDAsaS5pc1doaXRlU3BhY2UpKGUpfHwtMT09PWUpeygwLHIuaW5mbykoYExleGVyLmdldE51bWJlciAtICIke3R9Ii5gKTtyZXR1cm4gMH10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcih0KX1uPW58fDE7bGV0IHM9ZS00OCxvPTAsYz0xO2Zvcig7KGU9dGhpcy5uZXh0Q2hhcigpKT49MDspaWYoZT49NDgmJmU8PTU3KXtjb25zdCByPWUtNDg7aWYodClvPTEwKm8rcjtlbHNlezAhPT1hJiYoYSo9MTApO3M9MTAqcytyfX1lbHNlIGlmKDQ2PT09ZSl7aWYoMCE9PWEpYnJlYWs7YT0xfWVsc2UgaWYoNDU9PT1lKSgwLHIud2FybikoIkJhZGx5IGZvcm1hdHRlZCBudW1iZXI6IG1pbnVzIHNpZ24gaW4gdGhlIG1pZGRsZSIpO2Vsc2V7aWYoNjkhPT1lJiYxMDEhPT1lKWJyZWFrO2U9dGhpcy5wZWVrQ2hhcigpO2lmKDQzPT09ZXx8NDU9PT1lKXtjPTQ1PT09ZT8tMToxO3RoaXMubmV4dENoYXIoKX1lbHNlIGlmKGU8NDh8fGU+NTcpYnJlYWs7dD0hMH0wIT09YSYmKHMvPWEpO3QmJihzKj0xMCoqKGMqbykpO3JldHVybiBuKnN9Z2V0U3RyaW5nKCl7bGV0IGU9MSx0PSExO2NvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDtsZXQgbj10aGlzLm5leHRDaGFyKCk7Zm9yKDs7KXtsZXQgaT0hMTtzd2l0Y2goMHxuKXtjYXNlLTE6KDAsci53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpO3Q9ITA7YnJlYWs7Y2FzZSA0MDorK2U7YS5wdXNoKCIoIik7YnJlYWs7Y2FzZSA0MTppZigwPT0tLWUpe3RoaXMubmV4dENoYXIoKTt0PSEwfWVsc2UgYS5wdXNoKCIpIik7YnJlYWs7Y2FzZSA5MjpuPXRoaXMubmV4dENoYXIoKTtzd2l0Y2gobil7Y2FzZS0xOigwLHIud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKTt0PSEwO2JyZWFrO2Nhc2UgMTEwOmEucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDphLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6YS5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6YS5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOmEucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmxldCBlPTE1Jm47bj10aGlzLm5leHRDaGFyKCk7aT0hMDtpZihuPj00OCYmbjw9NTUpe2U9KGU8PDMpKygxNSZuKTtuPXRoaXMubmV4dENoYXIoKTtpZihuPj00OCYmbjw9NTUpe2k9ITE7ZT0oZTw8MykrKDE1Jm4pfX1hLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSl9YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSl9aWYodClicmVhaztpfHwobj10aGlzLm5leHRDaGFyKCkpfXJldHVybiBhLmpvaW4oIiIpfWdldE5hbWUoKXtsZXQgZSx0O2NvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDtmb3IoOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJiFiW2VdOylpZigzNT09PWUpe2U9dGhpcy5uZXh0Q2hhcigpO2lmKGJbZV0peygwLHIud2FybikoIkxleGVyX2dldE5hbWU6IE5VTUJFUiBTSUdOICgjKSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBudW1iZXIuIik7YS5wdXNoKCIjIik7YnJlYWt9Y29uc3Qgbj10b0hleERpZ2l0KGUpO2lmKC0xIT09bil7dD1lO2U9dGhpcy5uZXh0Q2hhcigpO2NvbnN0IGk9dG9IZXhEaWdpdChlKTtpZigtMT09PWkpeygwLHIud2FybikoYExleGVyX2dldE5hbWU6IElsbGVnYWwgZGlnaXQgKCR7U3RyaW5nLmZyb21DaGFyQ29kZShlKX0pIGluIGhleGFkZWNpbWFsIG51bWJlci5gKTthLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO2lmKGJbZV0pYnJlYWs7YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2NvbnRpbnVlfWEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG48PDR8aSkpfWVsc2UgYS5wdXNoKCIjIixTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1lbHNlIGEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTthLmxlbmd0aD4xMjcmJigwLHIud2FybikoYE5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogJHthLmxlbmd0aH1gKTtyZXR1cm4gbi5OYW1lLmdldChhLmpvaW4oIiIpKX1faGV4U3RyaW5nV2FybihlKXs1IT10aGlzLl9oZXhTdHJpbmdOdW1XYXJuKys/dGhpcy5faGV4U3RyaW5nTnVtV2Fybj41fHwoMCxyLndhcm4pKGBnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlcjogJHtlfWApOigwLHIud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGFkZGl0aW9uYWwgaW52YWxpZCBjaGFyYWN0ZXJzLiIpfWdldEhleFN0cmluZygpe2NvbnN0IGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDtsZXQgdCxhLG49dGhpcy5jdXJyZW50Q2hhcixpPSEwO3RoaXMuX2hleFN0cmluZ051bVdhcm49MDtmb3IoOzspe2lmKG48MCl7KDAsci53YXJuKSgiVW50ZXJtaW5hdGVkIGhleCBzdHJpbmciKTticmVha31pZig2Mj09PW4pe3RoaXMubmV4dENoYXIoKTticmVha31pZigxIT09YltuXSl7aWYoaSl7dD10b0hleERpZ2l0KG4pO2lmKC0xPT09dCl7dGhpcy5faGV4U3RyaW5nV2FybihuKTtuPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX19ZWxzZXthPXRvSGV4RGlnaXQobik7aWYoLTE9PT1hKXt0aGlzLl9oZXhTdHJpbmdXYXJuKG4pO249dGhpcy5uZXh0Q2hhcigpO2NvbnRpbnVlfWUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQ8PDR8YSkpfWk9IWk7bj10aGlzLm5leHRDaGFyKCl9ZWxzZSBuPXRoaXMubmV4dENoYXIoKX1yZXR1cm4gZS5qb2luKCIiKX1nZXRPYmooKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZih0PDApcmV0dXJuIG4uRU9GO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoMSE9PWJbdF0pYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gdGhpcy5nZXROdW1iZXIoKTtjYXNlIDQwOnJldHVybiB0aGlzLmdldFN0cmluZygpO2Nhc2UgNDc6cmV0dXJuIHRoaXMuZ2V0TmFtZSgpO2Nhc2UgOTE6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBuLkNtZC5nZXQoIlsiKTtjYXNlIDkzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KCJdIik7Y2FzZSA2MDp0PXRoaXMubmV4dENoYXIoKTtpZig2MD09PXQpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KCI8PCIpfXJldHVybiB0aGlzLmdldEhleFN0cmluZygpO2Nhc2UgNjI6dD10aGlzLm5leHRDaGFyKCk7aWYoNjI9PT10KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIG4uQ21kLmdldCgiPj4iKX1yZXR1cm4gbi5DbWQuZ2V0KCI+Iik7Y2FzZSAxMjM6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBuLkNtZC5nZXQoInsiKTtjYXNlIDEyNTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIG4uQ21kLmdldCgifSIpO2Nhc2UgNDE6dGhpcy5uZXh0Q2hhcigpO3Rocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbGxlZ2FsIGNoYXJhY3RlcjogJHt0fWApfWxldCBhPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7aWYodDwzMnx8dD4xMjcpe2NvbnN0IGU9dGhpcy5wZWVrQ2hhcigpO2lmKGU+PTMyJiZlPD0xMjcpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KGEpfX1jb25zdCBpPXRoaXMua25vd25Db21tYW5kcztsZXQgcz1pJiZ2b2lkIDAhPT1pW2FdO2Zvcig7KHQ9dGhpcy5uZXh0Q2hhcigpKT49MCYmIWJbdF07KXtjb25zdCBlPWErU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZihzJiZ2b2lkIDA9PT1pW2VdKWJyZWFrO2lmKDEyOD09PWEubGVuZ3RoKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBDb21tYW5kIHRva2VuIHRvbyBsb25nOiAke2EubGVuZ3RofWApO2E9ZTtzPWkmJnZvaWQgMCE9PWlbYV19aWYoInRydWUiPT09YSlyZXR1cm4hMDtpZigiZmFsc2UiPT09YSlyZXR1cm4hMTtpZigibnVsbCI9PT1hKXJldHVybiBudWxsOyJCSSI9PT1hJiYodGhpcy5iZWdpbklubGluZUltYWdlUG9zPXRoaXMuc3RyZWFtLnBvcyk7cmV0dXJuIG4uQ21kLmdldChhKX1wZWVrT2JqKCl7Y29uc3QgZT10aGlzLnN0cmVhbS5wb3MsdD10aGlzLmN1cnJlbnRDaGFyLGE9dGhpcy5iZWdpbklubGluZUltYWdlUG9zO2xldCBuO3RyeXtuPXRoaXMuZ2V0T2JqKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxyLndhcm4pKGBwZWVrT2JqOiAke2V9YCl9dGhpcy5zdHJlYW0ucG9zPWU7dGhpcy5jdXJyZW50Q2hhcj10O3RoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz1hO3JldHVybiBufXNraXBUb05leHRMaW5lKCl7bGV0IGU9dGhpcy5jdXJyZW50Q2hhcjtmb3IoO2U+PTA7KXtpZigxMz09PWUpe2U9dGhpcy5uZXh0Q2hhcigpOzEwPT09ZSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19dC5MZXhlcj1MZXhlcjt0LkxpbmVhcml6YXRpb249Y2xhc3MgTGluZWFyaXphdGlvbntzdGF0aWMgY3JlYXRlKGUpe2Z1bmN0aW9uIGdldEludChlLHQsYT0hMSl7Y29uc3Qgcj1lLmdldCh0KTtpZihOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoYT9yPj0wOnI+MCkpcmV0dXJuIHI7dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7dH0iIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuYCl9Y29uc3QgdD1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIoZSkseHJlZjpudWxsfSksYT10LmdldE9iaigpLHI9dC5nZXRPYmooKSxpPXQuZ2V0T2JqKCkscz10LmdldE9iaigpO2xldCBvLGM7aWYoIShOdW1iZXIuaXNJbnRlZ2VyKGEpJiZOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoMCxuLmlzQ21kKShpLCJvYmoiKSYmcyBpbnN0YW5jZW9mIG4uRGljdCYmIm51bWJlciI9PXR5cGVvZihvPXMuZ2V0KCJMaW5lYXJpemVkIikpJiZvPjApKXJldHVybiBudWxsO2lmKChjPWdldEludChzLCJMIikpIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXMgbm90IGVxdWFsIHRoZSBzdHJlYW0gbGVuZ3RoLicpO3JldHVybntsZW5ndGg6YyxoaW50czpmdW5jdGlvbiBnZXRIaW50cyhlKXtjb25zdCB0PWUuZ2V0KCJIIik7bGV0IGE7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT0oYT10Lmxlbmd0aCl8fDQ9PT1hKSl7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7Y29uc3QgYT10W2VdO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihhKSYmYT4wKSl0aHJvdyBuZXcgRXJyb3IoYEhpbnQgKCR7ZX0pIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5gKX1yZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoIkhpbnQgYXJyYXkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfShzKSxvYmplY3ROdW1iZXJGaXJzdDpnZXRJbnQocywiTyIpLGVuZEZpcnN0OmdldEludChzLCJFIiksbnVtUGFnZXM6Z2V0SW50KHMsIk4iKSxtYWluWFJlZkVudHJpZXNPZmZzZXQ6Z2V0SW50KHMsIlQiKSxwYWdlRmlyc3Q6cy5oYXMoIlAiKT9nZXRJbnQocywiUCIsITApOjB9fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Bc2NpaTg1U3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE3KSxuPWEoNCk7Y2xhc3MgQXNjaWk4NVN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7dCYmKHQqPS44KTtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5pbnB1dD1uZXcgVWludDhBcnJheSg1KX1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyO2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7KDAsbi5pc1doaXRlU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dHx8MTI2PT09dCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IGE9dGhpcy5idWZmZXJMZW5ndGg7bGV0IHIsaTtpZigxMjI9PT10KXtyPXRoaXMuZW5zdXJlQnVmZmVyKGErNCk7Zm9yKGk9MDtpPDQ7KytpKXJbYStpXT0wO3RoaXMuYnVmZmVyTGVuZ3RoKz00fWVsc2V7Y29uc3Qgcz10aGlzLmlucHV0O3NbMF09dDtmb3IoaT0xO2k8NTsrK2kpe3Q9ZS5nZXRCeXRlKCk7Zm9yKDsoMCxuLmlzV2hpdGVTcGFjZSkodCk7KXQ9ZS5nZXRCeXRlKCk7c1tpXT10O2lmKC0xPT09dHx8MTI2PT09dClicmVha31yPXRoaXMuZW5zdXJlQnVmZmVyKGEraS0xKTt0aGlzLmJ1ZmZlckxlbmd0aCs9aS0xO2lmKGk8NSl7Zm9yKDtpPDU7KytpKXNbaV09MTE3O3RoaXMuZW9mPSEwfWxldCBvPTA7Zm9yKGk9MDtpPDU7KytpKW89ODUqbysoc1tpXS0zMyk7Zm9yKGk9MztpPj0wOy0taSl7clthK2ldPTI1NSZvO28+Pj04fX19fXQuQXNjaWk4NVN0cmVhbT1Bc2NpaTg1U3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU3RyZWFtc1NlcXVlbmNlU3RyZWFtPXQuRGVjb2RlU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDUpLG49YSg4KTtjb25zdCBpPW5ldyBVaW50OEFycmF5KDApO2NsYXNzIERlY29kZVN0cmVhbSBleHRlbmRzIHIuQmFzZVN0cmVhbXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aD1lfHwwO3RoaXMucG9zPTA7dGhpcy5idWZmZXJMZW5ndGg9MDt0aGlzLmVvZj0hMTt0aGlzLmJ1ZmZlcj1pO3RoaXMubWluQnVmZmVyTGVuZ3RoPTUxMjtpZihlKWZvcig7dGhpcy5taW5CdWZmZXJMZW5ndGg8ZTspdGhpcy5taW5CdWZmZXJMZW5ndGgqPTJ9Z2V0IGlzRW1wdHkoKXtmb3IoOyF0aGlzLmVvZiYmMD09PXRoaXMuYnVmZmVyTGVuZ3RoOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiAwPT09dGhpcy5idWZmZXJMZW5ndGh9ZW5zdXJlQnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2xldCBhPXRoaXMubWluQnVmZmVyTGVuZ3RoO2Zvcig7YTxlOylhKj0yO2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoYSk7ci5zZXQodCk7cmV0dXJuIHRoaXMuYnVmZmVyPXJ9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5wb3M7bGV0IGE7aWYoZSl7dGhpcy5lbnN1cmVCdWZmZXIodCtlKTthPXQrZTtmb3IoOyF0aGlzLmVvZiYmdGhpcy5idWZmZXJMZW5ndGg8YTspdGhpcy5yZWFkQmxvY2soKTtjb25zdCByPXRoaXMuYnVmZmVyTGVuZ3RoO2E+ciYmKGE9cil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTthPXRoaXMuYnVmZmVyTGVuZ3RofXRoaXMucG9zPWE7cmV0dXJuIHRoaXMuYnVmZmVyLnN1YmFycmF5KHQsYSl9cmVzZXQoKXt0aGlzLnBvcz0wfW1ha2VTdWJTdHJlYW0oZSx0LGE9bnVsbCl7aWYodm9pZCAwPT09dClmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTtlbHNle2NvbnN0IGE9ZSt0O2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8PWEmJiF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKX1yZXR1cm4gbmV3IG4uU3RyZWFtKHRoaXMuYnVmZmVyLGUsdCxhKX1nZXRCYXNlU3RyZWFtcygpe3JldHVybiB0aGlzLnN0cj90aGlzLnN0ci5nZXRCYXNlU3RyZWFtcygpOm51bGx9fXQuRGVjb2RlU3RyZWFtPURlY29kZVN0cmVhbTt0LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbT1jbGFzcyBTdHJlYW1zU2VxdWVuY2VTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0PW51bGwpe2xldCBhPTA7Zm9yKGNvbnN0IHQgb2YgZSlhKz10IGluc3RhbmNlb2YgRGVjb2RlU3RyZWFtP3QuX3Jhd01pbkJ1ZmZlckxlbmd0aDp0Lmxlbmd0aDtzdXBlcihhKTt0aGlzLnN0cmVhbXM9ZTt0aGlzLl9vbkVycm9yPXR9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0cmVhbXM7aWYoMD09PWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgdD1lLnNoaWZ0KCk7bGV0IGE7dHJ5e2E9dC5nZXRCeXRlcygpfWNhdGNoKGUpe2lmKHRoaXMuX29uRXJyb3Ipe3RoaXMuX29uRXJyb3IoZSx0LmRpY3QmJnQuZGljdC5vYmpJZCk7cmV0dXJufXRocm93IGV9Y29uc3Qgcj10aGlzLmJ1ZmZlckxlbmd0aCxuPXIrYS5sZW5ndGg7dGhpcy5lbnN1cmVCdWZmZXIobikuc2V0KGEscik7dGhpcy5idWZmZXJMZW5ndGg9bn1nZXRCYXNlU3RyZWFtcygpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdHJlYW1zKXtjb25zdCBhPXQuZ2V0QmFzZVN0cmVhbXMoKTthJiZlLnB1c2goLi4uYSl9cmV0dXJuIGUubGVuZ3RoPjA/ZTpudWxsfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Bc2NpaUhleFN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyk7Y2xhc3MgQXNjaWlIZXhTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3QmJih0Kj0uNSk7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMuZmlyc3REaWdpdD0tMX1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGVzKDhlMyk7aWYoIWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgdD1lLmxlbmd0aCsxPj4xLGE9dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrdCk7bGV0IHI9dGhpcy5idWZmZXJMZW5ndGgsbj10aGlzLmZpcnN0RGlnaXQ7Zm9yKGNvbnN0IHQgb2YgZSl7bGV0IGU7aWYodD49NDgmJnQ8PTU3KWU9MTUmdDtlbHNle2lmKCEodD49NjUmJnQ8PTcwfHx0Pj05NyYmdDw9MTAyKSl7aWYoNjI9PT10KXt0aGlzLmVvZj0hMDticmVha31jb250aW51ZX1lPTkrKDE1JnQpfWlmKG48MCluPWU7ZWxzZXthW3IrK109bjw8NHxlO249LTF9fWlmKG4+PTAmJnRoaXMuZW9mKXthW3IrK109bjw8NDtuPS0xfXRoaXMuZmlyc3REaWdpdD1uO3RoaXMuYnVmZmVyTGVuZ3RoPXJ9fXQuQXNjaWlIZXhTdHJlYW09QXNjaWlIZXhTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DQ0lUVEZheFN0cmVhbT12b2lkIDA7dmFyIHI9YSgyMCksbj1hKDE3KSxpPWEoMyk7Y2xhc3MgQ0NJVFRGYXhTdHJlYW0gZXh0ZW5kcyBuLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O2EgaW5zdGFuY2VvZiBpLkRpY3R8fChhPWkuRGljdC5lbXB0eSk7Y29uc3Qgbj17bmV4dDooKT0+ZS5nZXRCeXRlKCl9O3RoaXMuY2NpdHRGYXhEZWNvZGVyPW5ldyByLkNDSVRURmF4RGVjb2RlcihuLHtLOmEuZ2V0KCJLIiksRW5kT2ZMaW5lOmEuZ2V0KCJFbmRPZkxpbmUiKSxFbmNvZGVkQnl0ZUFsaWduOmEuZ2V0KCJFbmNvZGVkQnl0ZUFsaWduIiksQ29sdW1uczphLmdldCgiQ29sdW1ucyIpLFJvd3M6YS5nZXQoIlJvd3MiKSxFbmRPZkJsb2NrOmEuZ2V0KCJFbmRPZkJsb2NrIiksQmxhY2tJczE6YS5nZXQoIkJsYWNrSXMxIil9KX1yZWFkQmxvY2soKXtmb3IoOyF0aGlzLmVvZjspe2NvbnN0IGU9dGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7aWYoLTE9PT1lKXt0aGlzLmVvZj0hMDtyZXR1cm59dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrMSk7dGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZX19fXQuQ0NJVFRGYXhTdHJlYW09Q0NJVFRGYXhTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DQ0lUVEZheERlY29kZXI9dm9pZCAwO3ZhciByPWEoMik7Y29uc3Qgbj0tMSxpPVtbLTEsLTFdLFstMSwtMV0sWzcsOF0sWzcsN10sWzYsNl0sWzYsNl0sWzYsNV0sWzYsNV0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl1dLHM9W1stMSwtMV0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI1NjBdXSxvPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs4LDI5XSxbOCwyOV0sWzgsMzBdLFs4LDMwXSxbOCw0NV0sWzgsNDVdLFs4LDQ2XSxbOCw0Nl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbOCw0N10sWzgsNDddLFs4LDQ4XSxbOCw0OF0sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzgsMzNdLFs4LDMzXSxbOCwzNF0sWzgsMzRdLFs4LDM1XSxbOCwzNV0sWzgsMzZdLFs4LDM2XSxbOCwzN10sWzgsMzddLFs4LDM4XSxbOCwzOF0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzcsMTldLFs4LDMxXSxbOCwzMV0sWzgsMzJdLFs4LDMyXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs4LDUzXSxbOCw1M10sWzgsNTRdLFs4LDU0XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzgsMzldLFs4LDM5XSxbOCw0MF0sWzgsNDBdLFs4LDQxXSxbOCw0MV0sWzgsNDJdLFs4LDQyXSxbOCw0M10sWzgsNDNdLFs4LDQ0XSxbOCw0NF0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbOCw2MV0sWzgsNjFdLFs4LDYyXSxbOCw2Ml0sWzgsNjNdLFs4LDYzXSxbOCwwXSxbOCwwXSxbOCwzMjBdLFs4LDMyMF0sWzgsMzg0XSxbOCwzODRdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzcsMjddLFs3LDI3XSxbNywyN10sWzcsMjddLFs4LDU5XSxbOCw1OV0sWzgsNjBdLFs4LDYwXSxbOSwxNDcyXSxbOSwxNTM2XSxbOSwxNjAwXSxbOSwxNzI4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs4LDQ5XSxbOCw0OV0sWzgsNTBdLFs4LDUwXSxbOCw1MV0sWzgsNTFdLFs4LDUyXSxbOCw1Ml0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs4LDU1XSxbOCw1NV0sWzgsNTZdLFs4LDU2XSxbOCw1N10sWzgsNTddLFs4LDU4XSxbOCw1OF0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs4LDQ0OF0sWzgsNDQ4XSxbOCw1MTJdLFs4LDUxMl0sWzksNzA0XSxbOSw3NjhdLFs4LDY0MF0sWzgsNjQwXSxbOCw1NzZdLFs4LDU3Nl0sWzksODMyXSxbOSw4OTZdLFs5LDk2MF0sWzksMTAyNF0sWzksMTA4OF0sWzksMTE1Ml0sWzksMTIxNl0sWzksMTI4MF0sWzksMTM0NF0sWzksMTQwOF0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddXSxjPVtbLTEsLTFdLFstMSwtMV0sWzEyLC0yXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMTk4NF0sWzEyLDIwNDhdLFsxMiwyMDQ4XSxbMTIsMjExMl0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjE3Nl0sWzEyLDIyNDBdLFsxMiwyMjQwXSxbMTIsMjMwNF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzEyLDIzNjhdLFsxMiwyMzY4XSxbMTIsMjQzMl0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjQ5Nl0sWzEyLDI1NjBdLFsxMiwyNTYwXSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEyLDUyXSxbMTIsNTJdLFsxMyw2NDBdLFsxMyw3MDRdLFsxMyw3NjhdLFsxMyw4MzJdLFsxMiw1NV0sWzEyLDU1XSxbMTIsNTZdLFsxMiw1Nl0sWzEzLDEyODBdLFsxMywxMzQ0XSxbMTMsMTQwOF0sWzEzLDE0NzJdLFsxMiw1OV0sWzEyLDU5XSxbMTIsNjBdLFsxMiw2MF0sWzEzLDE1MzZdLFsxMywxNjAwXSxbMTEsMjRdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNV0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzEzLDE2NjRdLFsxMywxNzI4XSxbMTIsMzIwXSxbMTIsMzIwXSxbMTIsMzg0XSxbMTIsMzg0XSxbMTIsNDQ4XSxbMTIsNDQ4XSxbMTMsNTEyXSxbMTMsNTc2XSxbMTIsNTNdLFsxMiw1M10sWzEyLDU0XSxbMTIsNTRdLFsxMyw4OTZdLFsxMyw5NjBdLFsxMywxMDI0XSxbMTMsMTA4OF0sWzEzLDExNTJdLFsxMywxMjE2XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF1dLGw9W1s4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbMTEsMjNdLFsxMSwyM10sWzEyLDUwXSxbMTIsNTFdLFsxMiw0NF0sWzEyLDQ1XSxbMTIsNDZdLFsxMiw0N10sWzEyLDU3XSxbMTIsNThdLFsxMiw2MV0sWzEyLDI1Nl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTddLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMiw0OF0sWzEyLDQ5XSxbMTIsNjJdLFsxMiw2M10sWzEyLDMwXSxbMTIsMzFdLFsxMiwzMl0sWzEyLDMzXSxbMTIsNDBdLFsxMiw0MV0sWzExLDIyXSxbMTEsMjJdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbMTIsMTI4XSxbMTIsMTkyXSxbMTIsMjZdLFsxMiwyN10sWzEyLDI4XSxbMTIsMjldLFsxMSwxOV0sWzExLDE5XSxbMTEsMjBdLFsxMSwyMF0sWzEyLDM0XSxbMTIsMzVdLFsxMiwzNl0sWzEyLDM3XSxbMTIsMzhdLFsxMiwzOV0sWzExLDIxXSxbMTEsMjFdLFsxMiw0Ml0sWzEyLDQzXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbMTAsMF0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXV0saD1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbNiw5XSxbNiw4XSxbNSw3XSxbNSw3XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXV07dC5DQ0lUVEZheERlY29kZXI9Y2xhc3MgQ0NJVFRGYXhEZWNvZGVye2NvbnN0cnVjdG9yKGUsdD17fSl7aWYoIWV8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLm5leHQpdGhyb3cgbmV3IEVycm9yKCdDQ0lUVEZheERlY29kZXIgLSBpbnZhbGlkICJzb3VyY2UiIHBhcmFtZXRlci4nKTt0aGlzLnNvdXJjZT1lO3RoaXMuZW9mPSExO3RoaXMuZW5jb2Rpbmc9dC5LfHwwO3RoaXMuZW9saW5lPXQuRW5kT2ZMaW5lfHwhMTt0aGlzLmJ5dGVBbGlnbj10LkVuY29kZWRCeXRlQWxpZ258fCExO3RoaXMuY29sdW1ucz10LkNvbHVtbnN8fDE3Mjg7dGhpcy5yb3dzPXQuUm93c3x8MDtsZXQgYSxyPXQuRW5kT2ZCbG9jaztudWxsPT1yJiYocj0hMCk7dGhpcy5lb2Jsb2NrPXI7dGhpcy5ibGFjaz10LkJsYWNrSXMxfHwhMTt0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKTt0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKTt0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zO3RoaXMuY29kaW5nUG9zPTA7dGhpcy5yb3c9MDt0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwO3RoaXMuaW5wdXRCaXRzPTA7dGhpcy5pbnB1dEJ1Zj0wO3RoaXMub3V0cHV0Qml0cz0wO3RoaXMucm93c0RvbmU9ITE7Zm9yKDswPT09KGE9dGhpcy5fbG9va0JpdHMoMTIpKTspdGhpcy5fZWF0Qml0cygxKTsxPT09YSYmdGhpcy5fZWF0Qml0cygxMik7aWYodGhpcy5lbmNvZGluZz4wKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXJlYWROZXh0Q2hhcigpe2lmKHRoaXMuZW9mKXJldHVybi0xO2NvbnN0IGU9dGhpcy5yZWZMaW5lLHQ9dGhpcy5jb2RpbmdMaW5lLGE9dGhpcy5jb2x1bW5zO2xldCBpLHMsbyxjLGw7aWYoMD09PXRoaXMub3V0cHV0Qml0cyl7dGhpcy5yb3dzRG9uZSYmKHRoaXMuZW9mPSEwKTtpZih0aGlzLmVvZilyZXR1cm4tMTt0aGlzLmVycj0hMTtsZXQgbyxsLGg7aWYodGhpcy5uZXh0TGluZTJEKXtmb3IoYz0wO3RbY108YTsrK2MpZVtjXT10W2NdO2VbYysrXT1hO2VbY109YTt0WzBdPTA7dGhpcy5jb2RpbmdQb3M9MDtpPTA7cz0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108YTspe289dGhpcy5fZ2V0VHdvRGltQ29kZSgpO3N3aXRjaChvKXtjYXNlIDA6dGhpcy5fYWRkUGl4ZWxzKGVbaSsxXSxzKTtlW2krMV08YSYmKGkrPTIpO2JyZWFrO2Nhc2UgMTpvPWw9MDtpZihzKXtkb3tvKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KX1lbHNle2Rve28rPWg9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoaD49NjQpO2Rve2wrPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpfXRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStvLHMpO3RbdGhpcy5jb2RpbmdQb3NdPGEmJnRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStsLDFecyk7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yO2JyZWFrO2Nhc2UgNzp0aGlzLl9hZGRQaXhlbHMoZVtpXSszLHMpO3NePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7KytpO2Zvcig7ZVtpXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbaV08YTspaSs9Mn1icmVhaztjYXNlIDU6dGhpcy5fYWRkUGl4ZWxzKGVbaV0rMixzKTtzXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSAzOnRoaXMuX2FkZFBpeGVscyhlW2ldKzEscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXsrK2k7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yfWJyZWFrO2Nhc2UgMjp0aGlzLl9hZGRQaXhlbHMoZVtpXSxzKTtzXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA4OnRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTMscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtpPjA/LS1pOisraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA2OnRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTIscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtpPjA/LS1pOisraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA0OnRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTEscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtpPjA/LS1pOisraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSBuOnRoaXMuX2FkZFBpeGVscyhhLDApO3RoaXMuZW9mPSEwO2JyZWFrO2RlZmF1bHQ6KDAsci5pbmZvKSgiYmFkIDJkIGNvZGUiKTt0aGlzLl9hZGRQaXhlbHMoYSwwKTt0aGlzLmVycj0hMH19fWVsc2V7dFswXT0wO3RoaXMuY29kaW5nUG9zPTA7cz0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108YTspe289MDtpZihzKWRve28rPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpO2Vsc2UgZG97bys9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCk7dGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK28scyk7c149MX19bGV0IHU9ITE7dGhpcy5ieXRlQWxpZ24mJih0aGlzLmlucHV0Qml0cyY9LTgpO2lmKHRoaXMuZW9ibG9ja3x8dGhpcy5yb3chPT10aGlzLnJvd3MtMSl7bz10aGlzLl9sb29rQml0cygxMik7aWYodGhpcy5lb2xpbmUpZm9yKDtvIT09biYmMSE9PW87KXt0aGlzLl9lYXRCaXRzKDEpO289dGhpcy5fbG9va0JpdHMoMTIpfWVsc2UgZm9yKDswPT09bzspe3RoaXMuX2VhdEJpdHMoMSk7bz10aGlzLl9sb29rQml0cygxMil9aWYoMT09PW8pe3RoaXMuX2VhdEJpdHMoMTIpO3U9ITB9ZWxzZSBvPT09biYmKHRoaXMuZW9mPSEwKX1lbHNlIHRoaXMucm93c0RvbmU9ITA7aWYoIXRoaXMuZW9mJiZ0aGlzLmVuY29kaW5nPjAmJiF0aGlzLnJvd3NEb25lKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9aWYodGhpcy5lb2Jsb2NrJiZ1JiZ0aGlzLmJ5dGVBbGlnbil7bz10aGlzLl9sb29rQml0cygxMik7aWYoMT09PW8pe3RoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX1pZih0aGlzLmVuY29kaW5nPj0wKWZvcihjPTA7Yzw0OysrYyl7bz10aGlzLl9sb29rQml0cygxMik7MSE9PW8mJigwLHIuaW5mbykoImJhZCBydGMgY29kZTogIitvKTt0aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXRoaXMuZW9mPSEwfX1lbHNlIGlmKHRoaXMuZXJyJiZ0aGlzLmVvbGluZSl7Zm9yKDs7KXtvPXRoaXMuX2xvb2tCaXRzKDEzKTtpZihvPT09bil7dGhpcy5lb2Y9ITA7cmV0dXJuLTF9aWYobz4+MT09MSlicmVhazt0aGlzLl9lYXRCaXRzKDEpfXRoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fZWF0Qml0cygxKTt0aGlzLm5leHRMaW5lMkQ9ISgxJm8pfX10WzBdPjA/dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3M9MF06dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3M9MV07dGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpe2w9MSZ0aGlzLmNvZGluZ1Bvcz8wOjI1NTt0aGlzLm91dHB1dEJpdHMtPTg7aWYoMD09PXRoaXMub3V0cHV0Qml0cyYmdFt0aGlzLmNvZGluZ1Bvc108YSl7dGhpcy5jb2RpbmdQb3MrKzt0aGlzLm91dHB1dEJpdHM9dFt0aGlzLmNvZGluZ1Bvc10tdFt0aGlzLmNvZGluZ1Bvcy0xXX19ZWxzZXtvPTg7bD0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTtpZih0aGlzLm91dHB1dEJpdHM+byl7bDw8PW87MSZ0aGlzLmNvZGluZ1Bvc3x8KGx8PTI1NT4+OC1vKTt0aGlzLm91dHB1dEJpdHMtPW87bz0wfWVsc2V7bDw8PXRoaXMub3V0cHV0Qml0czsxJnRoaXMuY29kaW5nUG9zfHwobHw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyk7by09dGhpcy5vdXRwdXRCaXRzO3RoaXMub3V0cHV0Qml0cz0wO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpe3RoaXMuY29kaW5nUG9zKys7dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3NdLXRbdGhpcy5jb2RpbmdQb3MtMV19ZWxzZSBpZihvPjApe2w8PD1vO289MH19fXdoaWxlKG8pfXRoaXMuYmxhY2smJihsXj0yNTUpO3JldHVybiBsfV9hZGRQaXhlbHMoZSx0KXtjb25zdCBhPXRoaXMuY29kaW5nTGluZTtsZXQgbj10aGlzLmNvZGluZ1BvcztpZihlPmFbbl0pe2lmKGU+dGhpcy5jb2x1bW5zKXsoMCxyLmluZm8pKCJyb3cgaXMgd3JvbmcgbGVuZ3RoIik7dGhpcy5lcnI9ITA7ZT10aGlzLmNvbHVtbnN9MSZuXnQmJisrbjthW25dPWV9dGhpcy5jb2RpbmdQb3M9bn1fYWRkUGl4ZWxzTmVnKGUsdCl7Y29uc3QgYT10aGlzLmNvZGluZ0xpbmU7bGV0IG49dGhpcy5jb2RpbmdQb3M7aWYoZT5hW25dKXtpZihlPnRoaXMuY29sdW1ucyl7KDAsci5pbmZvKSgicm93IGlzIHdyb25nIGxlbmd0aCIpO3RoaXMuZXJyPSEwO2U9dGhpcy5jb2x1bW5zfTEmbl50JiYrK247YVtuXT1lfWVsc2UgaWYoZTxhW25dKXtpZihlPDApeygwLHIuaW5mbykoImludmFsaWQgY29kZSIpO3RoaXMuZXJyPSEwO2U9MH1mb3IoO24+MCYmZTxhW24tMV07KS0tbjthW25dPWV9dGhpcy5jb2RpbmdQb3M9bn1fZmluZFRhYmxlQ29kZShlLHQsYSxyKXtjb25zdCBpPXJ8fDA7Zm9yKGxldCByPWU7cjw9dDsrK3Ipe2xldCBlPXRoaXMuX2xvb2tCaXRzKHIpO2lmKGU9PT1uKXJldHVyblshMCwxLCExXTtyPHQmJihlPDw9dC1yKTtpZighaXx8ZT49aSl7Y29uc3QgdD1hW2UtaV07aWYodFswXT09PXIpe3RoaXMuX2VhdEJpdHMocik7cmV0dXJuWyEwLHRbMV0sITBdfX19cmV0dXJuWyExLDAsITFdfV9nZXRUd29EaW1Db2RlKCl7bGV0IGUsdD0wO2lmKHRoaXMuZW9ibG9jayl7dD10aGlzLl9sb29rQml0cyg3KTtlPWlbdF07aWYoZSYmZVswXT4wKXt0aGlzLl9lYXRCaXRzKGVbMF0pO3JldHVybiBlWzFdfX1lbHNle2NvbnN0IGU9dGhpcy5fZmluZFRhYmxlQ29kZSgxLDcsaSk7aWYoZVswXSYmZVsyXSlyZXR1cm4gZVsxXX0oMCxyLmluZm8pKCJCYWQgdHdvIGRpbSBjb2RlIik7cmV0dXJuIG59X2dldFdoaXRlQ29kZSgpe2xldCBlLHQ9MDtpZih0aGlzLmVvYmxvY2spe3Q9dGhpcy5fbG9va0JpdHMoMTIpO2lmKHQ9PT1uKXJldHVybiAxO2U9dD4+NT09MD9zW3RdOm9bdD4+M107aWYoZVswXT4wKXt0aGlzLl9lYXRCaXRzKGVbMF0pO3JldHVybiBlWzFdfX1lbHNle2xldCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw5LG8pO2lmKGVbMF0pcmV0dXJuIGVbMV07ZT10aGlzLl9maW5kVGFibGVDb2RlKDExLDEyLHMpO2lmKGVbMF0pcmV0dXJuIGVbMV19KDAsci5pbmZvKSgiYmFkIHdoaXRlIGNvZGUiKTt0aGlzLl9lYXRCaXRzKDEpO3JldHVybiAxfV9nZXRCbGFja0NvZGUoKXtsZXQgZSx0O2lmKHRoaXMuZW9ibG9jayl7ZT10aGlzLl9sb29rQml0cygxMyk7aWYoZT09PW4pcmV0dXJuIDE7dD1lPj43PT0wP2NbZV06ZT4+OT09MCYmZT4+NyE9MD9sWyhlPj4xKS02NF06aFtlPj43XTtpZih0WzBdPjApe3RoaXMuX2VhdEJpdHModFswXSk7cmV0dXJuIHRbMV19fWVsc2V7bGV0IGU9dGhpcy5fZmluZFRhYmxlQ29kZSgyLDYsaCk7aWYoZVswXSlyZXR1cm4gZVsxXTtlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoNywxMixsLDY0KTtpZihlWzBdKXJldHVybiBlWzFdO2U9dGhpcy5fZmluZFRhYmxlQ29kZSgxMCwxMyxjKTtpZihlWzBdKXJldHVybiBlWzFdfSgwLHIuaW5mbykoImJhZCBibGFjayBjb2RlIik7dGhpcy5fZWF0Qml0cygxKTtyZXR1cm4gMX1fbG9va0JpdHMoZSl7bGV0IHQ7Zm9yKDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/bjp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0O3RoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfV9lYXRCaXRzKGUpeyh0aGlzLmlucHV0Qml0cy09ZSk8MCYmKHRoaXMuaW5wdXRCaXRzPTApfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5GbGF0ZVN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyksbj1hKDIpO2NvbnN0IGk9bmV3IEludDMyQXJyYXkoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxzPW5ldyBJbnQzMkFycmF5KFszLDQsNSw2LDcsOCw5LDEwLDY1NTQ3LDY1NTQ5LDY1NTUxLDY1NTUzLDEzMTA5MSwxMzEwOTUsMTMxMDk5LDEzMTEwMywxOTY2NDMsMTk2NjUxLDE5NjY1OSwxOTY2NjcsMjYyMjExLDI2MjIyNywyNjIyNDMsMjYyMjU5LDMyNzgxMSwzMjc4NDMsMzI3ODc1LDMyNzkwNywyNTgsMjU4LDI1OF0pLG89bmV3IEludDMyQXJyYXkoWzEsMiwzLDQsNjU1NDEsNjU1NDMsMTMxMDgxLDEzMTA4NSwxOTY2MjUsMTk2NjMzLDI2MjE3NywyNjIxOTMsMzI3NzQ1LDMyNzc3NywzOTMzNDUsMzkzNDA5LDQ1OTAwOSw0NTkxMzcsNTI0ODAxLDUyNTA1Nyw1OTA4NDksNTkxMzYxLDY1NzQwOSw2NTg0MzMsNzI0OTkzLDcyNzA0MSw3OTQ2MjUsNzk4NzIxLDg2ODM1Myw4NzY1NDVdKSxjPVtuZXcgSW50MzJBcnJheShbNDU5MDA4LDUyNDM2OCw1MjQzMDQsNTI0NTY4LDQ1OTAyNCw1MjQ0MDAsNTI0MzM2LDU5MDAxNiw0NTkwMTYsNTI0Mzg0LDUyNDMyMCw1ODk5ODQsNTI0Mjg4LDUyNDQxNiw1MjQzNTIsNTkwMDQ4LDQ1OTAxMiw1MjQzNzYsNTI0MzEyLDU4OTk2OCw0NTkwMjgsNTI0NDA4LDUyNDM0NCw1OTAwMzIsNDU5MDIwLDUyNDM5Miw1MjQzMjgsNTllNCw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjQsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNCw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTIsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU2LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Niw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDAsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA4LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Miw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIwLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OCw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTIsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTcyLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNiw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDQsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY4LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjgsNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk2LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MCw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODAsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ0LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMiw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzYsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOCw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODYsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUwLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MCw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzQsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAyLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Niw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI2LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NCw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTgsNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc4LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Miw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTAsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc0LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjIsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkwLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NCw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzQsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM4LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNiw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzAsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMCw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTgsNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYyLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Miw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDYsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE0LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OCw0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE3LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NSw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDksNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY5LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMyw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OTAwMDEsNTI0Mjk2LDUyNDQyNCw1MjQzNjAsNTkwMDY1LDQ1OTAxMCw1MjQzNzIsNTI0MzA4LDUyNDU3Miw0NTkwMjYsNTI0NDA0LDUyNDM0MCw1OTAwMjUsNDU5MDE4LDUyNDM4OCw1MjQzMjQsNTg5OTkzLDUyNDI5Miw1MjQ0MjAsNTI0MzU2LDU5MDA1Nyw0NTkwMTQsNTI0MzgwLDUyNDMxNiw1ODk5NzcsNDU5MDMwLDUyNDQxMiw1MjQzNDgsNTkwMDQxLDQ1OTAyMiw1MjQzOTYsNTI0MzMyLDU5MDAwOSw1MjQzMDAsNTI0NDI4LDUyNDM2NCw1OTAwNzMsNDU5MDA5LDUyNDM3MCw1MjQzMDYsNTI0NTcwLDQ1OTAyNSw1MjQ0MDIsNTI0MzM4LDU5MDAyMSw0NTkwMTcsNTI0Mzg2LDUyNDMyMiw1ODk5ODksNTI0MjkwLDUyNDQxOCw1MjQzNTQsNTkwMDUzLDQ1OTAxMyw1MjQzNzgsNTI0MzE0LDU4OTk3Myw0NTkwMjksNTI0NDEwLDUyNDM0Niw1OTAwMzcsNDU5MDIxLDUyNDM5NCw1MjQzMzAsNTkwMDA1LDUyNDI5OCw1MjQ0MjYsNTI0MzYyLDU5MDA2OSw0NTkwMTEsNTI0Mzc0LDUyNDMxMCw1MjQ1NzQsNDU5MDI3LDUyNDQwNiw1MjQzNDIsNTkwMDI5LDQ1OTAxOSw1MjQzOTAsNTI0MzI2LDU4OTk5Nyw1MjQyOTQsNTI0NDIyLDUyNDM1OCw1OTAwNjEsNDU5MDE1LDUyNDM4Miw1MjQzMTgsNTg5OTgxLDQ1OTAzMSw1MjQ0MTQsNTI0MzUwLDU5MDA0NSw0NTkwMjMsNTI0Mzk4LDUyNDMzNCw1OTAwMTMsNTI0MzAyLDUyNDQzMCw1MjQzNjYsNTkwMDc3LDQ1OTAwOCw1MjQzNjksNTI0MzA1LDUyNDU2OSw0NTkwMjQsNTI0NDAxLDUyNDMzNyw1OTAwMTksNDU5MDE2LDUyNDM4NSw1MjQzMjEsNTg5OTg3LDUyNDI4OSw1MjQ0MTcsNTI0MzUzLDU5MDA1MSw0NTkwMTIsNTI0Mzc3LDUyNDMxMyw1ODk5NzEsNDU5MDI4LDUyNDQwOSw1MjQzNDUsNTkwMDM1LDQ1OTAyMCw1MjQzOTMsNTI0MzI5LDU5MDAwMyw1MjQyOTcsNTI0NDI1LDUyNDM2MSw1OTAwNjcsNDU5MDEwLDUyNDM3Myw1MjQzMDksNTI0NTczLDQ1OTAyNiw1MjQ0MDUsNTI0MzQxLDU5MDAyNyw0NTkwMTgsNTI0Mzg5LDUyNDMyNSw1ODk5OTUsNTI0MjkzLDUyNDQyMSw1MjQzNTcsNTkwMDU5LDQ1OTAxNCw1MjQzODEsNTI0MzE3LDU4OTk3OSw0NTkwMzAsNTI0NDEzLDUyNDM0OSw1OTAwNDMsNDU5MDIyLDUyNDM5Nyw1MjQzMzMsNTkwMDExLDUyNDMwMSw1MjQ0MjksNTI0MzY1LDU5MDA3NSw0NTkwMDksNTI0MzcxLDUyNDMwNyw1MjQ1NzEsNDU5MDI1LDUyNDQwMyw1MjQzMzksNTkwMDIzLDQ1OTAxNyw1MjQzODcsNTI0MzIzLDU4OTk5MSw1MjQyOTEsNTI0NDE5LDUyNDM1NSw1OTAwNTUsNDU5MDEzLDUyNDM3OSw1MjQzMTUsNTg5OTc1LDQ1OTAyOSw1MjQ0MTEsNTI0MzQ3LDU5MDAzOSw0NTkwMjEsNTI0Mzk1LDUyNDMzMSw1OTAwMDcsNTI0Mjk5LDUyNDQyNyw1MjQzNjMsNTkwMDcxLDQ1OTAxMSw1MjQzNzUsNTI0MzExLDUyNDU3NSw0NTkwMjcsNTI0NDA3LDUyNDM0Myw1OTAwMzEsNDU5MDE5LDUyNDM5MSw1MjQzMjcsNTg5OTk5LDUyNDI5NSw1MjQ0MjMsNTI0MzU5LDU5MDA2Myw0NTkwMTUsNTI0MzgzLDUyNDMxOSw1ODk5ODMsNDU5MDMxLDUyNDQxNSw1MjQzNTEsNTkwMDQ3LDQ1OTAyMyw1MjQzOTksNTI0MzM1LDU5MDAxNSw1MjQzMDMsNTI0NDMxLDUyNDM2Nyw1OTAwNzldKSw5XSxsPVtuZXcgSW50MzJBcnJheShbMzI3NjgwLDMyNzY5NiwzMjc2ODgsMzI3NzA0LDMyNzY4NCwzMjc3MDAsMzI3NjkyLDMyNzcwOCwzMjc2ODIsMzI3Njk4LDMyNzY5MCwzMjc3MDYsMzI3Njg2LDMyNzcwMiwzMjc2OTQsMCwzMjc2ODEsMzI3Njk3LDMyNzY4OSwzMjc3MDUsMzI3Njg1LDMyNzcwMSwzMjc2OTMsMzI3NzA5LDMyNzY4MywzMjc2OTksMzI3NjkxLDMyNzcwNywzMjc2ODcsMzI3NzAzLDMyNzY5NSwwXSksNV07Y2xhc3MgRmxhdGVTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDtjb25zdCBhPWUuZ2V0Qnl0ZSgpLHI9ZS5nZXRCeXRlKCk7aWYoLTE9PT1hfHwtMT09PXIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYEludmFsaWQgaGVhZGVyIGluIGZsYXRlIHN0cmVhbTogJHthfSwgJHtyfWApO2lmKDghPSgxNSZhKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcihgVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7aWYoKChhPDw4KStyKSUzMSE9MCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcihgQmFkIEZDSEVDSyBpbiBmbGF0ZSBzdHJlYW06ICR7YX0sICR7cn1gKTtpZigzMiZyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBGRElDVCBiaXQgc2V0IGluIGZsYXRlIHN0cmVhbTogJHthfSwgJHtyfWApO3RoaXMuY29kZVNpemU9MDt0aGlzLmNvZGVCdWY9MH1nZXRCaXRzKGUpe2NvbnN0IHQ9dGhpcy5zdHI7bGV0IGEscj10aGlzLmNvZGVTaXplLGk9dGhpcy5jb2RlQnVmO2Zvcig7cjxlOyl7aWYoLTE9PT0oYT10LmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0iKTtpfD1hPDxyO3IrPTh9YT1pJigxPDxlKS0xO3RoaXMuY29kZUJ1Zj1pPj5lO3RoaXMuY29kZVNpemU9ci09ZTtyZXR1cm4gYX1nZXRDb2RlKGUpe2NvbnN0IHQ9dGhpcy5zdHIsYT1lWzBdLHI9ZVsxXTtsZXQgaSxzPXRoaXMuY29kZVNpemUsbz10aGlzLmNvZGVCdWY7Zm9yKDtzPHImJi0xIT09KGk9dC5nZXRCeXRlKCkpOyl7b3w9aTw8cztzKz04fWNvbnN0IGM9YVtvJigxPDxyKS0xXSxsPWM+PjE2LGg9NjU1MzUmYztpZihsPDF8fHM8bCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO3RoaXMuY29kZUJ1Zj1vPj5sO3RoaXMuY29kZVNpemU9cy1sO3JldHVybiBofWdlbmVyYXRlSHVmZm1hblRhYmxlKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGEscj0wO2ZvcihhPTA7YTx0OysrYSllW2FdPnImJihyPWVbYV0pO2NvbnN0IG49MTw8cixpPW5ldyBJbnQzMkFycmF5KG4pO2ZvcihsZXQgcz0xLG89MCxjPTI7czw9cjsrK3Msbzw8PTEsYzw8PTEpZm9yKGxldCByPTA7cjx0OysrcilpZihlW3JdPT09cyl7bGV0IGU9MCx0PW87Zm9yKGE9MDthPHM7KythKXtlPWU8PDF8MSZ0O3Q+Pj0xfWZvcihhPWU7YTxuO2ErPWMpaVthXT1zPDwxNnxyOysrb31yZXR1cm5baSxyXX1yZWFkQmxvY2soKXtsZXQgZSx0O2NvbnN0IGE9dGhpcy5zdHI7bGV0IHIsaCx1PXRoaXMuZ2V0Qml0cygzKTsxJnUmJih0aGlzLmVvZj0hMCk7dT4+PTE7aWYoMD09PXUpe2xldCB0O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2xldCByPXQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7cnw9dDw8ODtpZigtMT09PSh0PWEuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtsZXQgaT10O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2l8PXQ8PDg7aWYoaSE9PSg2NTUzNSZ+cikmJigwIT09cnx8MCE9PWkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW0iKTt0aGlzLmNvZGVCdWY9MDt0aGlzLmNvZGVTaXplPTA7Y29uc3Qgcz10aGlzLmJ1ZmZlckxlbmd0aCxvPXMrcjtlPXRoaXMuZW5zdXJlQnVmZmVyKG8pO3RoaXMuYnVmZmVyTGVuZ3RoPW87aWYoMD09PXIpLTE9PT1hLnBlZWtCeXRlKCkmJih0aGlzLmVvZj0hMCk7ZWxzZXtjb25zdCB0PWEuZ2V0Qnl0ZXMocik7ZS5zZXQodCxzKTt0Lmxlbmd0aDxyJiYodGhpcy5lb2Y9ITApfXJldHVybn1pZigxPT09dSl7cj1jO2g9bH1lbHNle2lmKDIhPT11KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtIik7e2NvbnN0IGU9dGhpcy5nZXRCaXRzKDUpKzI1NyxhPXRoaXMuZ2V0Qml0cyg1KSsxLG49dGhpcy5nZXRCaXRzKDQpKzQscz1uZXcgVWludDhBcnJheShpLmxlbmd0aCk7bGV0IG87Zm9yKG89MDtvPG47KytvKXNbaVtvXV09dGhpcy5nZXRCaXRzKDMpO2NvbnN0IGM9dGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShzKTt0PTA7bz0wO2NvbnN0IGw9ZSthLHU9bmV3IFVpbnQ4QXJyYXkobCk7bGV0IGQsZixnO2Zvcig7bzxsOyl7Y29uc3QgZT10aGlzLmdldENvZGUoYyk7aWYoMTY9PT1lKXtkPTI7Zj0zO2c9dH1lbHNlIGlmKDE3PT09ZSl7ZD0zO2Y9MztnPXQ9MH1lbHNle2lmKDE4IT09ZSl7dVtvKytdPXQ9ZTtjb250aW51ZX1kPTc7Zj0xMTtnPXQ9MH1sZXQgYT10aGlzLmdldEJpdHMoZCkrZjtmb3IoO2EtLSA+MDspdVtvKytdPWd9cj10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHUuc3ViYXJyYXkoMCxlKSk7aD10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHUuc3ViYXJyYXkoZSxsKSl9fWU9dGhpcy5idWZmZXI7bGV0IGQ9ZT9lLmxlbmd0aDowLGY9dGhpcy5idWZmZXJMZW5ndGg7Zm9yKDs7KXtsZXQgYT10aGlzLmdldENvZGUocik7aWYoYTwyNTYpe2lmKGYrMT49ZCl7ZT10aGlzLmVuc3VyZUJ1ZmZlcihmKzEpO2Q9ZS5sZW5ndGh9ZVtmKytdPWE7Y29udGludWV9aWYoMjU2PT09YSl7dGhpcy5idWZmZXJMZW5ndGg9ZjtyZXR1cm59YS09MjU3O2E9c1thXTtsZXQgbj1hPj4xNjtuPjAmJihuPXRoaXMuZ2V0Qml0cyhuKSk7dD0oNjU1MzUmYSkrbjthPXRoaXMuZ2V0Q29kZShoKTthPW9bYV07bj1hPj4xNjtuPjAmJihuPXRoaXMuZ2V0Qml0cyhuKSk7Y29uc3QgaT0oNjU1MzUmYSkrbjtpZihmK3Q+PWQpe2U9dGhpcy5lbnN1cmVCdWZmZXIoZit0KTtkPWUubGVuZ3RofWZvcihsZXQgYT0wO2E8dDsrK2EsKytmKWVbZl09ZVtmLWldfX19dC5GbGF0ZVN0cmVhbT1GbGF0ZVN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpiaWcyU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDUpLG49YSgxNyksaT1hKDMpLHM9YSgyMyksbz1hKDIpO2NsYXNzIEpiaWcyU3RyZWFtIGV4dGVuZHMgbi5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLm1heWJlTGVuZ3RoPXQ7dGhpcy5wYXJhbXM9YX1nZXQgYnl0ZXMoKXtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBlPW5ldyBzLkpiaWcySW1hZ2UsdD1bXTtpZih0aGlzLnBhcmFtcyBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgZT10aGlzLnBhcmFtcy5nZXQoIkpCSUcyR2xvYmFscyIpO2lmKGUgaW5zdGFuY2VvZiByLkJhc2VTdHJlYW0pe2NvbnN0IGE9ZS5nZXRCeXRlcygpO3QucHVzaCh7ZGF0YTphLHN0YXJ0OjAsZW5kOmEubGVuZ3RofSl9fXQucHVzaCh7ZGF0YTp0aGlzLmJ5dGVzLHN0YXJ0OjAsZW5kOnRoaXMuYnl0ZXMubGVuZ3RofSk7Y29uc3QgYT1lLnBhcnNlQ2h1bmtzKHQpLG49YS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxuO2UrKylhW2VdXj0yNTU7dGhpcy5idWZmZXI9YTt0aGlzLmJ1ZmZlckxlbmd0aD1uO3RoaXMuZW9mPSEwfX10LkpiaWcyU3RyZWFtPUpiaWcyU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSmJpZzJJbWFnZT12b2lkIDA7dmFyIHI9YSgyKSxuPWEoNCksaT1hKDI0KSxzPWEoMjApO2NsYXNzIEpiaWcyRXJyb3IgZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoYEpCSUcyIGVycm9yOiAke2V9YCwiSmJpZzJFcnJvciIpfX1jbGFzcyBDb250ZXh0Q2FjaGV7Z2V0Q29udGV4dHMoZSl7cmV0dXJuIGUgaW4gdGhpcz90aGlzW2VdOnRoaXNbZV09bmV3IEludDhBcnJheSg2NTUzNil9fWNsYXNzIERlY29kaW5nQ29udGV4dHtjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5kYXRhPWU7dGhpcy5zdGFydD10O3RoaXMuZW5kPWF9Z2V0IGRlY29kZXIoKXtjb25zdCBlPW5ldyBpLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZGVjb2RlciIsZSl9Z2V0IGNvbnRleHRDYWNoZSgpe2NvbnN0IGU9bmV3IENvbnRleHRDYWNoZTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiY29udGV4dENhY2hlIixlKX19ZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihlLHQsYSl7Y29uc3Qgcj1lLmdldENvbnRleHRzKHQpO2xldCBuPTE7ZnVuY3Rpb24gcmVhZEJpdHMoZSl7bGV0IHQ9MDtmb3IobGV0IGk9MDtpPGU7aSsrKXtjb25zdCBlPWEucmVhZEJpdChyLG4pO249bjwyNTY/bjw8MXxlOjUxMSYobjw8MXxlKXwyNTY7dD10PDwxfGV9cmV0dXJuIHQ+Pj4wfWNvbnN0IGk9cmVhZEJpdHMoMSkscz1yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygzMikrNDQzNjpyZWFkQml0cygxMikrMzQwOnJlYWRCaXRzKDgpKzg0OnJlYWRCaXRzKDYpKzIwOnJlYWRCaXRzKDQpKzQ6cmVhZEJpdHMoMik7cmV0dXJuIDA9PT1pP3M6cz4wPy1zOm51bGx9ZnVuY3Rpb24gZGVjb2RlSUFJRChlLHQsYSl7Y29uc3Qgcj1lLmdldENvbnRleHRzKCJJQUlEIik7bGV0IG49MTtmb3IobGV0IGU9MDtlPGE7ZSsrKXtuPW48PDF8dC5yZWFkQml0KHIsbil9cmV0dXJuIGE8MzE/biYoMTw8YSktMToyMTQ3NDgzNjQ3Jm59Y29uc3Qgbz1bIlN5bWJvbERpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uIixudWxsLCJJbW1lZGlhdGVUZXh0UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIlBhdHRlcm5EaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb24iLG51bGwsIkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24iLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLCJQYWdlSW5mb3JtYXRpb24iLCJFbmRPZlBhZ2UiLCJFbmRPZlN0cmlwZSIsIkVuZE9mRmlsZSIsIlByb2ZpbGVzIiwiVGFibGVzIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIkV4dGVuc2lvbiJdLGM9W1t7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMyx5Oi0xfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV1dLGw9W3tjb2Rpbmc6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6LTEseToxfSx7eDowLHk6MX0se3g6MSx5OjF9XX0se2NvZGluZzpbe3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6MCx5OjF9LHt4OjEseToxfV19XSxoPVszOTcxNywxOTQxLDIyOSw0MDVdLHU9WzMyLDhdO2Z1bmN0aW9uIGRlY29kZUJpdG1hcChlLHQsYSxyLG4saSxzLG8pe2lmKGUpe3JldHVybiBkZWNvZGVNTVJCaXRtYXAobmV3IFJlYWRlcihvLmRhdGEsby5zdGFydCxvLmVuZCksdCxhLCExKX1pZigwPT09ciYmIWkmJiFuJiY0PT09cy5sZW5ndGgmJjM9PT1zWzBdLngmJi0xPT09c1swXS55JiYtMz09PXNbMV0ueCYmLTE9PT1zWzFdLnkmJjI9PT1zWzJdLngmJi0yPT09c1syXS55JiYtMj09PXNbM10ueCYmLTI9PT1zWzNdLnkpcmV0dXJuIGZ1bmN0aW9uIGRlY29kZUJpdG1hcFRlbXBsYXRlMChlLHQsYSl7Y29uc3Qgcj1hLmRlY29kZXIsbj1hLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKSxpPVtdO2xldCBzLG8sYyxsLGgsdSxkO2ZvcihvPTA7bzx0O28rKyl7aD1pW29dPW5ldyBVaW50OEFycmF5KGUpO3U9bzwxP2g6aVtvLTFdO2Q9bzwyP2g6aVtvLTJdO3M9ZFswXTw8MTN8ZFsxXTw8MTJ8ZFsyXTw8MTF8dVswXTw8N3x1WzFdPDw2fHVbMl08PDV8dVszXTw8NDtmb3IoYz0wO2M8ZTtjKyspe2hbY109bD1yLnJlYWRCaXQobixzKTtzPSgzMTczNSZzKTw8MXwoYyszPGU/ZFtjKzNdPDwxMTowKXwoYys0PGU/dVtjKzRdPDw0OjApfGx9fXJldHVybiBpfSh0LGEsbyk7Y29uc3QgbD0hIWksdT1jW3JdLmNvbmNhdChzKTt1LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9KSk7Y29uc3QgZD11Lmxlbmd0aCxmPW5ldyBJbnQ4QXJyYXkoZCksZz1uZXcgSW50OEFycmF5KGQpLHA9W107bGV0IG0sYix5PTAsdz0wLFM9MCx4PTA7Zm9yKGI9MDtiPGQ7YisrKXtmW2JdPXVbYl0ueDtnW2JdPXVbYl0ueTt3PU1hdGgubWluKHcsdVtiXS54KTtTPU1hdGgubWF4KFMsdVtiXS54KTt4PU1hdGgubWluKHgsdVtiXS55KTtiPGQtMSYmdVtiXS55PT09dVtiKzFdLnkmJnVbYl0ueD09PXVbYisxXS54LTE/eXw9MTw8ZC0xLWI6cC5wdXNoKGIpfWNvbnN0IGs9cC5sZW5ndGgsQz1uZXcgSW50OEFycmF5KGspLHY9bmV3IEludDhBcnJheShrKSxGPW5ldyBVaW50MTZBcnJheShrKTtmb3IobT0wO208azttKyspe2I9cFttXTtDW21dPXVbYl0ueDt2W21dPXVbYl0ueTtGW21dPTE8PGQtMS1ifWNvbnN0IE89LXcsVD0teCxNPXQtUyxFPWhbcl07bGV0IEQ9bmV3IFVpbnQ4QXJyYXkodCk7Y29uc3QgTj1bXSxSPW8uZGVjb2RlcixMPW8uY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpO2xldCBqLCQsXyxVLFgsSD0wLHE9MDtmb3IobGV0IGU9MDtlPGE7ZSsrKXtpZihuKXtIXj1SLnJlYWRCaXQoTCxFKTtpZihIKXtOLnB1c2goRCk7Y29udGludWV9fUQ9bmV3IFVpbnQ4QXJyYXkoRCk7Ti5wdXNoKEQpO2ZvcihqPTA7ajx0O2orKyl7aWYobCYmaVtlXVtqXSl7RFtqXT0wO2NvbnRpbnVlfWlmKGo+PU8mJmo8TSYmZT49VCl7cT1xPDwxJnk7Zm9yKGI9MDtiPGs7YisrKXskPWUrdltiXTtfPWorQ1tiXTtVPU5bJF1bX107aWYoVSl7VT1GW2JdO3F8PVV9fX1lbHNle3E9MDtYPWQtMTtmb3IoYj0wO2I8ZDtiKyssWC0tKXtfPWorZltiXTtpZihfPj0wJiZfPHQpeyQ9ZStnW2JdO2lmKCQ+PTApe1U9TlskXVtfXTtVJiYocXw9VTw8WCl9fX19Y29uc3QgYT1SLnJlYWRCaXQoTCxxKTtEW2pdPWF9fXJldHVybiBOfWZ1bmN0aW9uIGRlY29kZVJlZmluZW1lbnQoZSx0LGEscixuLGkscyxvLGMpe2xldCBoPWxbYV0uY29kaW5nOzA9PT1hJiYoaD1oLmNvbmNhdChbb1swXV0pKTtjb25zdCBkPWgubGVuZ3RoLGY9bmV3IEludDMyQXJyYXkoZCksZz1uZXcgSW50MzJBcnJheShkKTtsZXQgcDtmb3IocD0wO3A8ZDtwKyspe2ZbcF09aFtwXS54O2dbcF09aFtwXS55fWxldCBtPWxbYV0ucmVmZXJlbmNlOzA9PT1hJiYobT1tLmNvbmNhdChbb1sxXV0pKTtjb25zdCBiPW0ubGVuZ3RoLHk9bmV3IEludDMyQXJyYXkoYiksdz1uZXcgSW50MzJBcnJheShiKTtmb3IocD0wO3A8YjtwKyspe3lbcF09bVtwXS54O3dbcF09bVtwXS55fWNvbnN0IFM9clswXS5sZW5ndGgseD1yLmxlbmd0aCxrPXVbYV0sQz1bXSx2PWMuZGVjb2RlcixGPWMuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpO2xldCBPPTA7Zm9yKGxldCBhPTA7YTx0O2ErKyl7aWYocyl7T149di5yZWFkQml0KEYsayk7aWYoTyl0aHJvdyBuZXcgSmJpZzJFcnJvcigicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkIil9Y29uc3QgdD1uZXcgVWludDhBcnJheShlKTtDLnB1c2godCk7Zm9yKGxldCBzPTA7czxlO3MrKyl7bGV0IG8sYyxsPTA7Zm9yKHA9MDtwPGQ7cCsrKXtvPWErZ1twXTtjPXMrZltwXTtvPDB8fGM8MHx8Yz49ZT9sPDw9MTpsPWw8PDF8Q1tvXVtjXX1mb3IocD0wO3A8YjtwKyspe289YSt3W3BdLWk7Yz1zK3lbcF0tbjtvPDB8fG8+PXh8fGM8MHx8Yz49Uz9sPDw9MTpsPWw8PDF8cltvXVtjXX1jb25zdCBoPXYucmVhZEJpdChGLGwpO3Rbc109aH19cmV0dXJuIEN9ZnVuY3Rpb24gZGVjb2RlVGV4dFJlZ2lvbihlLHQsYSxyLG4saSxzLG8sYyxsLGgsdSxkLGYsZyxwLG0sYix5KXtpZihlJiZ0KXRocm93IG5ldyBKYmlnMkVycm9yKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7Y29uc3Qgdz1bXTtsZXQgUyx4O2ZvcihTPTA7UzxyO1MrKyl7eD1uZXcgVWludDhBcnJheShhKTtpZihuKWZvcihsZXQgZT0wO2U8YTtlKyspeFtlXT1uO3cucHVzaCh4KX1jb25zdCBrPW0uZGVjb2RlcixDPW0uY29udGV4dENhY2hlO2xldCB2PWU/LWYudGFibGVEZWx0YVQuZGVjb2RlKHkpOi1kZWNvZGVJbnRlZ2VyKEMsIklBRFQiLGspLEY9MDtTPTA7Zm9yKDtTPGk7KXt2Kz1lP2YudGFibGVEZWx0YVQuZGVjb2RlKHkpOmRlY29kZUludGVnZXIoQywiSUFEVCIsayk7Ris9ZT9mLnRhYmxlRmlyc3RTLmRlY29kZSh5KTpkZWNvZGVJbnRlZ2VyKEMsIklBRlMiLGspO2xldCByPUY7Zm9yKDs7KXtsZXQgbj0wO3M+MSYmKG49ZT95LnJlYWRCaXRzKGIpOmRlY29kZUludGVnZXIoQywiSUFJVCIsaykpO2NvbnN0IGk9cyp2K24sRj1lP2Yuc3ltYm9sSURUYWJsZS5kZWNvZGUoeSk6ZGVjb2RlSUFJRChDLGssYyksTz10JiYoZT95LnJlYWRCaXQoKTpkZWNvZGVJbnRlZ2VyKEMsIklBUkkiLGspKTtsZXQgVD1vW0ZdLE09VFswXS5sZW5ndGgsRT1ULmxlbmd0aDtpZihPKXtjb25zdCBlPWRlY29kZUludGVnZXIoQywiSUFSRFciLGspLHQ9ZGVjb2RlSW50ZWdlcihDLCJJQVJESCIsayksYT1kZWNvZGVJbnRlZ2VyKEMsIklBUkRYIixrKSxyPWRlY29kZUludGVnZXIoQywiSUFSRFkiLGspO00rPWU7RSs9dDtUPWRlY29kZVJlZmluZW1lbnQoTSxFLGcsVCwoZT4+MSkrYSwodD4+MSkrciwhMSxwLG0pfWNvbnN0IEQ9aS0oMSZ1PzA6RS0xKSxOPXItKDImdT9NLTE6MCk7bGV0IFIsTCxqO2lmKGwpe2ZvcihSPTA7UjxFO1IrKyl7eD13W04rUl07aWYoIXgpY29udGludWU7aj1UW1JdO2NvbnN0IGU9TWF0aC5taW4oYS1ELE0pO3N3aXRjaChkKXtjYXNlIDA6Zm9yKEw9MDtMPGU7TCsrKXhbRCtMXXw9altMXTticmVhaztjYXNlIDI6Zm9yKEw9MDtMPGU7TCsrKXhbRCtMXV49altMXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke2R9IGlzIG5vdCBzdXBwb3J0ZWRgKX19cis9RS0xfWVsc2V7Zm9yKEw9MDtMPEU7TCsrKXt4PXdbRCtMXTtpZih4KXtqPVRbTF07c3dpdGNoKGQpe2Nhc2UgMDpmb3IoUj0wO1I8TTtSKyspeFtOK1JdfD1qW1JdO2JyZWFrO2Nhc2UgMjpmb3IoUj0wO1I8TTtSKyspeFtOK1JdXj1qW1JdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7ZH0gaXMgbm90IHN1cHBvcnRlZGApfX19cis9TS0xfVMrKztjb25zdCAkPWU/Zi50YWJsZURlbHRhUy5kZWNvZGUoeSk6ZGVjb2RlSW50ZWdlcihDLCJJQURTIixrKTtpZihudWxsPT09JClicmVhaztyKz0kK2h9fXJldHVybiB3fWZ1bmN0aW9uIHJlYWRTZWdtZW50SGVhZGVyKGUsdCl7Y29uc3QgYT17fTthLm51bWJlcj0oMCxuLnJlYWRVaW50MzIpKGUsdCk7Y29uc3Qgcj1lW3QrNF0saT02MyZyO2lmKCFvW2ldKXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIHNlZ21lbnQgdHlwZTogIitpKTthLnR5cGU9aTthLnR5cGVOYW1lPW9baV07YS5kZWZlcnJlZE5vblJldGFpbj0hISgxMjgmcik7Y29uc3Qgcz0hISg2NCZyKSxjPWVbdCs1XTtsZXQgbD1jPj41Jjc7Y29uc3QgaD1bMzEmY107bGV0IHU9dCs2O2lmKDc9PT1jKXtsPTUzNjg3MDkxMSYoMCxuLnJlYWRVaW50MzIpKGUsdS0xKTt1Kz0zO2xldCB0PWwrNz4+MztoWzBdPWVbdSsrXTtmb3IoOy0tdD4wOyloLnB1c2goZVt1KytdKX1lbHNlIGlmKDU9PT1jfHw2PT09Yyl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO2EucmV0YWluQml0cz1oO2xldCBmPTQ7YS5udW1iZXI8PTI1Nj9mPTE6YS5udW1iZXI8PTY1NTM2JiYoZj0yKTtjb25zdCBnPVtdO2xldCBwLG07Zm9yKHA9MDtwPGw7cCsrKXtsZXQgdDt0PTE9PT1mP2VbdV06Mj09PWY/KDAsbi5yZWFkVWludDE2KShlLHUpOigwLG4ucmVhZFVpbnQzMikoZSx1KTtnLnB1c2godCk7dSs9Zn1hLnJlZmVycmVkVG89ZztpZihzKXthLnBhZ2VBc3NvY2lhdGlvbj0oMCxuLnJlYWRVaW50MzIpKGUsdSk7dSs9NH1lbHNlIGEucGFnZUFzc29jaWF0aW9uPWVbdSsrXTthLmxlbmd0aD0oMCxuLnJlYWRVaW50MzIpKGUsdSk7dSs9NDtpZig0Mjk0OTY3Mjk1PT09YS5sZW5ndGgpe2lmKDM4IT09aSl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCB1bmtub3duIHNlZ21lbnQgbGVuZ3RoIik7e2NvbnN0IHQ9cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihlLHUpLHI9ISEoMSZlW3UrZF0pLG49NixpPW5ldyBVaW50OEFycmF5KG4pO2lmKCFyKXtpWzBdPTI1NTtpWzFdPTE3Mn1pWzJdPXQuaGVpZ2h0Pj4+MjQmMjU1O2lbM109dC5oZWlnaHQ+PjE2JjI1NTtpWzRdPXQuaGVpZ2h0Pj44JjI1NTtpWzVdPTI1NSZ0LmhlaWdodDtmb3IocD11LG09ZS5sZW5ndGg7cDxtO3ArKyl7bGV0IHQ9MDtmb3IoO3Q8biYmaVt0XT09PWVbcCt0XTspdCsrO2lmKHQ9PT1uKXthLmxlbmd0aD1wK247YnJlYWt9fWlmKDQyOTQ5NjcyOTU9PT1hLmxlbmd0aCl0aHJvdyBuZXcgSmJpZzJFcnJvcigic2VnbWVudCBlbmQgd2FzIG5vdCBmb3VuZCIpfX1hLmhlYWRlckVuZD11O3JldHVybiBhfWZ1bmN0aW9uIHJlYWRTZWdtZW50cyhlLHQsYSxyKXtjb25zdCBuPVtdO2xldCBpPWE7Zm9yKDtpPHI7KXtjb25zdCBhPXJlYWRTZWdtZW50SGVhZGVyKHQsaSk7aT1hLmhlYWRlckVuZDtjb25zdCByPXtoZWFkZXI6YSxkYXRhOnR9O2lmKCFlLnJhbmRvbUFjY2Vzcyl7ci5zdGFydD1pO2krPWEubGVuZ3RoO3IuZW5kPWl9bi5wdXNoKHIpO2lmKDUxPT09YS50eXBlKWJyZWFrfWlmKGUucmFuZG9tQWNjZXNzKWZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7bltlXS5zdGFydD1pO2krPW5bZV0uaGVhZGVyLmxlbmd0aDtuW2VdLmVuZD1pfXJldHVybiBufWZ1bmN0aW9uIHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZSx0KXtyZXR1cm57d2lkdGg6KDAsbi5yZWFkVWludDMyKShlLHQpLGhlaWdodDooMCxuLnJlYWRVaW50MzIpKGUsdCs0KSx4OigwLG4ucmVhZFVpbnQzMikoZSx0KzgpLHk6KDAsbi5yZWFkVWludDMyKShlLHQrMTIpLGNvbWJpbmF0aW9uT3BlcmF0b3I6NyZlW3QrMTZdfX1jb25zdCBkPTE3O2Z1bmN0aW9uIHByb2Nlc3NTZWdtZW50KGUsdCl7Y29uc3QgYT1lLmhlYWRlcixyPWUuZGF0YSxpPWUuZW5kO2xldCBzLG8sYyxsLGg9ZS5zdGFydDtzd2l0Y2goYS50eXBlKXtjYXNlIDA6Y29uc3QgZT17fSx0PSgwLG4ucmVhZFVpbnQxNikocixoKTtlLmh1ZmZtYW49ISEoMSZ0KTtlLnJlZmluZW1lbnQ9ISEoMiZ0KTtlLmh1ZmZtYW5ESFNlbGVjdG9yPXQ+PjImMztlLmh1ZmZtYW5EV1NlbGVjdG9yPXQ+PjQmMztlLmJpdG1hcFNpemVTZWxlY3Rvcj10Pj42JjE7ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yPXQ+PjcmMTtlLmJpdG1hcENvZGluZ0NvbnRleHRVc2VkPSEhKDI1NiZ0KTtlLmJpdG1hcENvZGluZ0NvbnRleHRSZXRhaW5lZD0hISg1MTImdCk7ZS50ZW1wbGF0ZT10Pj4xMCYzO2UucmVmaW5lbWVudFRlbXBsYXRlPXQ+PjEyJjE7aCs9MjtpZighZS5odWZmbWFuKXtsPTA9PT1lLnRlbXBsYXRlPzQ6MTtvPVtdO2ZvcihjPTA7YzxsO2MrKyl7by5wdXNoKHt4OigwLG4ucmVhZEludDgpKHIsaCkseTooMCxuLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfWUuYXQ9b31pZihlLnJlZmluZW1lbnQmJiFlLnJlZmluZW1lbnRUZW1wbGF0ZSl7bz1bXTtmb3IoYz0wO2M8MjtjKyspe28ucHVzaCh7eDooMCxuLnJlYWRJbnQ4KShyLGgpLHk6KDAsbi5yZWFkSW50OCkocixoKzEpfSk7aCs9Mn1lLnJlZmluZW1lbnRBdD1vfWUubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHM9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7ZS5udW1iZXJPZk5ld1N5bWJvbHM9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7cz1bZSxhLm51bWJlcixhLnJlZmVycmVkVG8scixoLGldO2JyZWFrO2Nhc2UgNjpjYXNlIDc6Y29uc3QgdT17fTt1LmluZm89cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihyLGgpO2grPWQ7Y29uc3QgZj0oMCxuLnJlYWRVaW50MTYpKHIsaCk7aCs9Mjt1Lmh1ZmZtYW49ISEoMSZmKTt1LnJlZmluZW1lbnQ9ISEoMiZmKTt1LmxvZ1N0cmlwU2l6ZT1mPj4yJjM7dS5zdHJpcFNpemU9MTw8dS5sb2dTdHJpcFNpemU7dS5yZWZlcmVuY2VDb3JuZXI9Zj4+NCYzO3UudHJhbnNwb3NlZD0hISg2NCZmKTt1LmNvbWJpbmF0aW9uT3BlcmF0b3I9Zj4+NyYzO3UuZGVmYXVsdFBpeGVsVmFsdWU9Zj4+OSYxO3UuZHNPZmZzZXQ9Zjw8MTc+PjI3O3UucmVmaW5lbWVudFRlbXBsYXRlPWY+PjE1JjE7aWYodS5odWZmbWFuKXtjb25zdCBlPSgwLG4ucmVhZFVpbnQxNikocixoKTtoKz0yO3UuaHVmZm1hbkZTPTMmZTt1Lmh1ZmZtYW5EUz1lPj4yJjM7dS5odWZmbWFuRFQ9ZT4+NCYzO3UuaHVmZm1hblJlZmluZW1lbnREVz1lPj42JjM7dS5odWZmbWFuUmVmaW5lbWVudERIPWU+PjgmMzt1Lmh1ZmZtYW5SZWZpbmVtZW50RFg9ZT4+MTAmMzt1Lmh1ZmZtYW5SZWZpbmVtZW50RFk9ZT4+MTImMzt1Lmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmUpfWlmKHUucmVmaW5lbWVudCYmIXUucmVmaW5lbWVudFRlbXBsYXRlKXtvPVtdO2ZvcihjPTA7YzwyO2MrKyl7by5wdXNoKHt4OigwLG4ucmVhZEludDgpKHIsaCkseTooMCxuLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfXUucmVmaW5lbWVudEF0PW99dS5udW1iZXJPZlN5bWJvbEluc3RhbmNlcz0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDtzPVt1LGEucmVmZXJyZWRUbyxyLGgsaV07YnJlYWs7Y2FzZSAxNjpjb25zdCBnPXt9LHA9cltoKytdO2cubW1yPSEhKDEmcCk7Zy50ZW1wbGF0ZT1wPj4xJjM7Zy5wYXR0ZXJuV2lkdGg9cltoKytdO2cucGF0dGVybkhlaWdodD1yW2grK107Zy5tYXhQYXR0ZXJuSW5kZXg9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7cz1bZyxhLm51bWJlcixyLGgsaV07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOmNvbnN0IG09e307bS5pbmZvPXJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24ocixoKTtoKz1kO2NvbnN0IGI9cltoKytdO20ubW1yPSEhKDEmYik7bS50ZW1wbGF0ZT1iPj4xJjM7bS5lbmFibGVTa2lwPSEhKDgmYik7bS5jb21iaW5hdGlvbk9wZXJhdG9yPWI+PjQmNzttLmRlZmF1bHRQaXhlbFZhbHVlPWI+PjcmMTttLmdyaWRXaWR0aD0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDttLmdyaWRIZWlnaHQ9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7bS5ncmlkT2Zmc2V0WD00Mjk0OTY3Mjk1JigwLG4ucmVhZFVpbnQzMikocixoKTtoKz00O20uZ3JpZE9mZnNldFk9NDI5NDk2NzI5NSYoMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDttLmdyaWRWZWN0b3JYPSgwLG4ucmVhZFVpbnQxNikocixoKTtoKz0yO20uZ3JpZFZlY3Rvclk9KDAsbi5yZWFkVWludDE2KShyLGgpO2grPTI7cz1bbSxhLnJlZmVycmVkVG8scixoLGldO2JyZWFrO2Nhc2UgMzg6Y2FzZSAzOTpjb25zdCB5PXt9O3kuaW5mbz1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKHIsaCk7aCs9ZDtjb25zdCB3PXJbaCsrXTt5Lm1tcj0hISgxJncpO3kudGVtcGxhdGU9dz4+MSYzO3kucHJlZGljdGlvbj0hISg4JncpO2lmKCF5Lm1tcil7bD0wPT09eS50ZW1wbGF0ZT80OjE7bz1bXTtmb3IoYz0wO2M8bDtjKyspe28ucHVzaCh7eDooMCxuLnJlYWRJbnQ4KShyLGgpLHk6KDAsbi5yZWFkSW50OCkocixoKzEpfSk7aCs9Mn15LmF0PW99cz1beSxyLGgsaV07YnJlYWs7Y2FzZSA0ODpjb25zdCBTPXt3aWR0aDooMCxuLnJlYWRVaW50MzIpKHIsaCksaGVpZ2h0OigwLG4ucmVhZFVpbnQzMikocixoKzQpLHJlc29sdXRpb25YOigwLG4ucmVhZFVpbnQzMikocixoKzgpLHJlc29sdXRpb25ZOigwLG4ucmVhZFVpbnQzMikocixoKzEyKX07NDI5NDk2NzI5NT09PVMuaGVpZ2h0JiZkZWxldGUgUy5oZWlnaHQ7Y29uc3QgeD1yW2grMTZdOygwLG4ucmVhZFVpbnQxNikocixoKzE3KTtTLmxvc3NsZXNzPSEhKDEmeCk7Uy5yZWZpbmVtZW50PSEhKDImeCk7Uy5kZWZhdWx0UGl4ZWxWYWx1ZT14Pj4yJjE7Uy5jb21iaW5hdGlvbk9wZXJhdG9yPXg+PjMmMztTLnJlcXVpcmVzQnVmZmVyPSEhKDMyJngpO1MuY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlPSEhKDY0JngpO3M9W1NdO2JyZWFrO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNjI6YnJlYWs7Y2FzZSA1MzpzPVthLm51bWJlcixyLGgsaV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgc2VnbWVudCB0eXBlICR7YS50eXBlTmFtZX0oJHthLnR5cGV9KSBpcyBub3QgaW1wbGVtZW50ZWRgKX1jb25zdCB1PSJvbiIrYS50eXBlTmFtZTt1IGluIHQmJnRbdV0uYXBwbHkodCxzKX1mdW5jdGlvbiBwcm9jZXNzU2VnbWVudHMoZSx0KXtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspcHJvY2Vzc1NlZ21lbnQoZVthXSx0KX1jbGFzcyBTaW1wbGVTZWdtZW50VmlzaXRvcntvblBhZ2VJbmZvcm1hdGlvbihlKXt0aGlzLmN1cnJlbnRQYWdlSW5mbz1lO2NvbnN0IHQ9ZS53aWR0aCs3Pj4zLGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2UuZGVmYXVsdFBpeGVsVmFsdWUmJmEuZmlsbCgyNTUpO3RoaXMuYnVmZmVyPWF9ZHJhd0JpdG1hcChlLHQpe2NvbnN0IGE9dGhpcy5jdXJyZW50UGFnZUluZm8scj1lLndpZHRoLG49ZS5oZWlnaHQsaT1hLndpZHRoKzc+PjMscz1hLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT9lLmNvbWJpbmF0aW9uT3BlcmF0b3I6YS5jb21iaW5hdGlvbk9wZXJhdG9yLG89dGhpcy5idWZmZXIsYz0xMjg+Pig3JmUueCk7bGV0IGwsaCx1LGQsZj1lLnkqaSsoZS54Pj4zKTtzd2l0Y2gocyl7Y2FzZSAwOmZvcihsPTA7bDxuO2wrKyl7dT1jO2Q9Zjtmb3IoaD0wO2g8cjtoKyspe3RbbF1baF0mJihvW2RdfD11KTt1Pj49MTtpZighdSl7dT0xMjg7ZCsrfX1mKz1pfWJyZWFrO2Nhc2UgMjpmb3IobD0wO2w8bjtsKyspe3U9YztkPWY7Zm9yKGg9MDtoPHI7aCsrKXt0W2xdW2hdJiYob1tkXV49dSk7dT4+PTE7aWYoIXUpe3U9MTI4O2QrK319Zis9aX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke3N9IGlzIG5vdCBzdXBwb3J0ZWRgKX19b25JbW1lZGlhdGVHZW5lcmljUmVnaW9uKGUsdCxhLHIpe2NvbnN0IG49ZS5pbmZvLGk9bmV3IERlY29kaW5nQ29udGV4dCh0LGEscikscz1kZWNvZGVCaXRtYXAoZS5tbXIsbi53aWR0aCxuLmhlaWdodCxlLnRlbXBsYXRlLGUucHJlZGljdGlvbixudWxsLGUuYXQsaSk7dGhpcy5kcmF3Qml0bWFwKG4scyl9b25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbiguLi5hcmd1bWVudHMpfW9uU3ltYm9sRGljdGlvbmFyeShlLHQsYSxyLGkscyl7bGV0IG8sYztpZihlLmh1ZmZtYW4pe289ZnVuY3Rpb24gZ2V0U3ltYm9sRGljdGlvbmFyeUh1ZmZtYW5UYWJsZXMoZSx0LGEpe2xldCByLG4saSxzLG89MDtzd2l0Y2goZS5odWZmbWFuREhTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTpyPWdldFN0YW5kYXJkVGFibGUoZS5odWZmbWFuREhTZWxlY3Rvcis0KTticmVhaztjYXNlIDM6cj1nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpO28rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTpuPWdldFN0YW5kYXJkVGFibGUoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6bj1nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpO28rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFcgc2VsZWN0b3IiKX1pZihlLmJpdG1hcFNpemVTZWxlY3Rvcil7aT1nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpO28rK31lbHNlIGk9Z2V0U3RhbmRhcmRUYWJsZSgxKTtzPWUuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3Rvcj9nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpOmdldFN0YW5kYXJkVGFibGUoMSk7cmV0dXJue3RhYmxlRGVsdGFIZWlnaHQ6cix0YWJsZURlbHRhV2lkdGg6bix0YWJsZUJpdG1hcFNpemU6aSx0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlczpzfX0oZSxhLHRoaXMuY3VzdG9tVGFibGVzKTtjPW5ldyBSZWFkZXIocixpLHMpfWxldCBsPXRoaXMuc3ltYm9scztsfHwodGhpcy5zeW1ib2xzPWw9e30pO2NvbnN0IGg9W107Zm9yKGNvbnN0IGUgb2YgYSl7Y29uc3QgdD1sW2VdO3QmJmgucHVzaCguLi50KX1jb25zdCB1PW5ldyBEZWNvZGluZ0NvbnRleHQocixpLHMpO2xbdF09ZnVuY3Rpb24gZGVjb2RlU3ltYm9sRGljdGlvbmFyeShlLHQsYSxyLGkscyxvLGMsbCxoLHUsZCl7aWYoZSYmdCl0aHJvdyBuZXcgSmJpZzJFcnJvcigic3ltYm9sIHJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtjb25zdCBmPVtdO2xldCBnPTAscD0oMCxuLmxvZzIpKGEubGVuZ3RoK3IpO2NvbnN0IG09dS5kZWNvZGVyLGI9dS5jb250ZXh0Q2FjaGU7bGV0IHksdztpZihlKXt5PWdldFN0YW5kYXJkVGFibGUoMSk7dz1bXTtwPU1hdGgubWF4KHAsMSl9Zm9yKDtmLmxlbmd0aDxyOyl7Zys9ZT9zLnRhYmxlRGVsdGFIZWlnaHQuZGVjb2RlKGQpOmRlY29kZUludGVnZXIoYiwiSUFESCIsbSk7bGV0IHI9MCxuPTA7Y29uc3QgaT1lP3cubGVuZ3RoOjA7Zm9yKDs7KXtjb25zdCBpPWU/cy50YWJsZURlbHRhV2lkdGguZGVjb2RlKGQpOmRlY29kZUludGVnZXIoYiwiSUFEVyIsbSk7aWYobnVsbD09PWkpYnJlYWs7cis9aTtuKz1yO2xldCB5O2lmKHQpe2NvbnN0IG49ZGVjb2RlSW50ZWdlcihiLCJJQUFJIixtKTtpZihuPjEpeT1kZWNvZGVUZXh0UmVnaW9uKGUsdCxyLGcsMCxuLDEsYS5jb25jYXQoZikscCwwLDAsMSwwLHMsbCxoLHUsMCxkKTtlbHNle2NvbnN0IGU9ZGVjb2RlSUFJRChiLG0scCksdD1kZWNvZGVJbnRlZ2VyKGIsIklBUkRYIixtKSxuPWRlY29kZUludGVnZXIoYiwiSUFSRFkiLG0pO3k9ZGVjb2RlUmVmaW5lbWVudChyLGcsbCxlPGEubGVuZ3RoP2FbZV06ZltlLWEubGVuZ3RoXSx0LG4sITEsaCx1KX1mLnB1c2goeSl9ZWxzZSBpZihlKXcucHVzaChyKTtlbHNle3k9ZGVjb2RlQml0bWFwKCExLHIsZyxvLCExLG51bGwsYyx1KTtmLnB1c2goeSl9fWlmKGUmJiF0KXtjb25zdCBlPXMudGFibGVCaXRtYXBTaXplLmRlY29kZShkKTtkLmJ5dGVBbGlnbigpO2xldCB0O2lmKDA9PT1lKXQ9cmVhZFVuY29tcHJlc3NlZEJpdG1hcChkLG4sZyk7ZWxzZXtjb25zdCBhPWQuZW5kLHI9ZC5wb3NpdGlvbitlO2QuZW5kPXI7dD1kZWNvZGVNTVJCaXRtYXAoZCxuLGcsITEpO2QuZW5kPWE7ZC5wb3NpdGlvbj1yfWNvbnN0IGE9dy5sZW5ndGg7aWYoaT09PWEtMSlmLnB1c2godCk7ZWxzZXtsZXQgZSxyLG4scyxvLGM9MDtmb3IoZT1pO2U8YTtlKyspe3M9d1tlXTtuPWMrcztvPVtdO2ZvcihyPTA7cjxnO3IrKylvLnB1c2godFtyXS5zdWJhcnJheShjLG4pKTtmLnB1c2gobyk7Yz1ufX19fWNvbnN0IFM9W10seD1bXTtsZXQgayxDLHY9ITE7Y29uc3QgRj1hLmxlbmd0aCtyO2Zvcig7eC5sZW5ndGg8Rjspe2xldCB0PWU/eS5kZWNvZGUoZCk6ZGVjb2RlSW50ZWdlcihiLCJJQUVYIixtKTtmb3IoO3QtLTspeC5wdXNoKHYpO3Y9IXZ9Zm9yKGs9MCxDPWEubGVuZ3RoO2s8QztrKyspeFtrXSYmUy5wdXNoKGFba10pO2ZvcihsZXQgZT0wO2U8cjtrKyssZSsrKXhba10mJlMucHVzaChmW2VdKTtyZXR1cm4gU30oZS5odWZmbWFuLGUucmVmaW5lbWVudCxoLGUubnVtYmVyT2ZOZXdTeW1ib2xzLGUubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMsbyxlLnRlbXBsYXRlLGUuYXQsZS5yZWZpbmVtZW50VGVtcGxhdGUsZS5yZWZpbmVtZW50QXQsdSxjKX1vbkltbWVkaWF0ZVRleHRSZWdpb24oZSx0LGEscixpKXtjb25zdCBzPWUuaW5mbztsZXQgbyxjO2NvbnN0IGw9dGhpcy5zeW1ib2xzLGg9W107Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1sW2VdO3QmJmgucHVzaCguLi50KX1jb25zdCB1PSgwLG4ubG9nMikoaC5sZW5ndGgpO2lmKGUuaHVmZm1hbil7Yz1uZXcgUmVhZGVyKGEscixpKTtvPWZ1bmN0aW9uIGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKGUsdCxhLHIsbil7Y29uc3QgaT1bXTtmb3IobGV0IGU9MDtlPD0zNDtlKyspe2NvbnN0IHQ9bi5yZWFkQml0cyg0KTtpLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLHQsMCwwXSkpfWNvbnN0IHM9bmV3IEh1ZmZtYW5UYWJsZShpLCExKTtpLmxlbmd0aD0wO2ZvcihsZXQgZT0wO2U8cjspe2NvbnN0IHQ9cy5kZWNvZGUobik7aWYodD49MzIpe2xldCBhLHIscztzd2l0Y2godCl7Y2FzZSAzMjppZigwPT09ZSl0aHJvdyBuZXcgSmJpZzJFcnJvcigibm8gcHJldmlvdXMgdmFsdWUgaW4gc3ltYm9sIElEIHRhYmxlIik7cj1uLnJlYWRCaXRzKDIpKzM7YT1pW2UtMV0ucHJlZml4TGVuZ3RoO2JyZWFrO2Nhc2UgMzM6cj1uLnJlYWRCaXRzKDMpKzM7YT0wO2JyZWFrO2Nhc2UgMzQ6cj1uLnJlYWRCaXRzKDcpKzExO2E9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIGNvZGUgbGVuZ3RoIGluIHN5bWJvbCBJRCB0YWJsZSIpfWZvcihzPTA7czxyO3MrKyl7aS5wdXNoKG5ldyBIdWZmbWFuTGluZShbZSxhLDAsMF0pKTtlKyt9fWVsc2V7aS5wdXNoKG5ldyBIdWZmbWFuTGluZShbZSx0LDAsMF0pKTtlKyt9fW4uYnl0ZUFsaWduKCk7Y29uc3Qgbz1uZXcgSHVmZm1hblRhYmxlKGksITEpO2xldCBjLGwsaCx1PTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOmM9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6Yz1nZXRDdXN0b21IdWZmbWFuVGFibGUodSx0LGEpO3UrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRlMgc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFMpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmw9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EUys4KTticmVhaztjYXNlIDM6bD1nZXRDdXN0b21IdWZmbWFuVGFibGUodSx0LGEpO3UrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFMgc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFQpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmg9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EVCsxMSk7YnJlYWs7Y2FzZSAzOmg9Z2V0Q3VzdG9tSHVmZm1hblRhYmxlKHUsdCxhKTt1Kys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyBKYmlnMkVycm9yKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6byx0YWJsZUZpcnN0UzpjLHRhYmxlRGVsdGFTOmwsdGFibGVEZWx0YVQ6aH19KGUsdCx0aGlzLmN1c3RvbVRhYmxlcyxoLmxlbmd0aCxjKX1jb25zdCBkPW5ldyBEZWNvZGluZ0NvbnRleHQoYSxyLGkpLGY9ZGVjb2RlVGV4dFJlZ2lvbihlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LHMud2lkdGgscy5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGgsdSxlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbyxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxkLGUubG9nU3RyaXBTaXplLGMpO3RoaXMuZHJhd0JpdG1hcChzLGYpfW9uSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uKCl7dGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24oLi4uYXJndW1lbnRzKX1vblBhdHRlcm5EaWN0aW9uYXJ5KGUsdCxhLHIsbil7bGV0IGk9dGhpcy5wYXR0ZXJucztpfHwodGhpcy5wYXR0ZXJucz1pPXt9KTtjb25zdCBzPW5ldyBEZWNvZGluZ0NvbnRleHQoYSxyLG4pO2lbdF09ZnVuY3Rpb24gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkoZSx0LGEscixuLGkpe2NvbnN0IHM9W107aWYoIWUpe3MucHVzaCh7eDotdCx5OjB9KTswPT09biYmcy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pfWNvbnN0IG89ZGVjb2RlQml0bWFwKGUsKHIrMSkqdCxhLG4sITEsbnVsbCxzLGkpLGM9W107Zm9yKGxldCBlPTA7ZTw9cjtlKyspe2NvbnN0IHI9W10sbj10KmUsaT1uK3Q7Zm9yKGxldCBlPTA7ZTxhO2UrKylyLnB1c2gob1tlXS5zdWJhcnJheShuLGkpKTtjLnB1c2gocil9cmV0dXJuIGN9KGUubW1yLGUucGF0dGVybldpZHRoLGUucGF0dGVybkhlaWdodCxlLm1heFBhdHRlcm5JbmRleCxlLnRlbXBsYXRlLHMpfW9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24oZSx0LGEscixpKXtjb25zdCBzPXRoaXMucGF0dGVybnNbdFswXV0sbz1lLmluZm8sYz1uZXcgRGVjb2RpbmdDb250ZXh0KGEscixpKSxsPWZ1bmN0aW9uIGRlY29kZUhhbGZ0b25lUmVnaW9uKGUsdCxhLHIsaSxzLG8sYyxsLGgsdSxkLGYsZyxwKXtpZihvKXRocm93IG5ldyBKYmlnMkVycm9yKCJza2lwIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZigwIT09Yyl0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgIiR7Y30iIGlzIG5vdCBzdXBwb3J0ZWQgaW4gaGFsZnRvbmUgcmVnaW9uYCk7Y29uc3QgbT1bXTtsZXQgYix5LHc7Zm9yKGI9MDtiPGk7YisrKXt3PW5ldyBVaW50OEFycmF5KHIpO2lmKHMpZm9yKHk9MDt5PHI7eSsrKXdbeV09czttLnB1c2godyl9Y29uc3QgUz10Lmxlbmd0aCx4PXRbMF0saz14WzBdLmxlbmd0aCxDPXgubGVuZ3RoLHY9KDAsbi5sb2cyKShTKSxGPVtdO2lmKCFlKXtGLnB1c2goe3g6YTw9MT8zOjIseTotMX0pOzA9PT1hJiZGLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSl9Y29uc3QgTz1bXTtsZXQgVCxNLEUsRCxOLFIsTCxqLCQsXyxVO2UmJihUPW5ldyBSZWFkZXIocC5kYXRhLHAuc3RhcnQscC5lbmQpKTtmb3IoYj12LTE7Yj49MDtiLS0pe009ZT9kZWNvZGVNTVJCaXRtYXAoVCxsLGgsITApOmRlY29kZUJpdG1hcCghMSxsLGgsYSwhMSxudWxsLEYscCk7T1tiXT1NfWZvcihFPTA7RTxoO0UrKylmb3IoRD0wO0Q8bDtEKyspe049MDtSPTA7Zm9yKHk9di0xO3k+PTA7eS0tKXtOXj1PW3ldW0VdW0RdO1J8PU48PHl9TD10W1JdO2o9dStFKmcrRCpmPj44OyQ9ZCtFKmYtRCpnPj44O2lmKGo+PTAmJmorazw9ciYmJD49MCYmJCtDPD1pKWZvcihiPTA7YjxDO2IrKyl7VT1tWyQrYl07Xz1MW2JdO2Zvcih5PTA7eTxrO3krKylVW2oreV18PV9beV19ZWxzZXtsZXQgZSx0O2ZvcihiPTA7YjxDO2IrKyl7dD0kK2I7aWYoISh0PDB8fHQ+PWkpKXtVPW1bdF07Xz1MW2JdO2Zvcih5PTA7eTxrO3krKyl7ZT1qK3k7ZT49MCYmZTxyJiYoVVtlXXw9X1t5XSl9fX19fXJldHVybiBtfShlLm1tcixzLGUudGVtcGxhdGUsby53aWR0aCxvLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUuZW5hYmxlU2tpcCxlLmNvbWJpbmF0aW9uT3BlcmF0b3IsZS5ncmlkV2lkdGgsZS5ncmlkSGVpZ2h0LGUuZ3JpZE9mZnNldFgsZS5ncmlkT2Zmc2V0WSxlLmdyaWRWZWN0b3JYLGUuZ3JpZFZlY3RvclksYyk7dGhpcy5kcmF3Qml0bWFwKG8sbCl9b25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uKCl7dGhpcy5vbkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uKC4uLmFyZ3VtZW50cyl9b25UYWJsZXMoZSx0LGEscil7bGV0IGk9dGhpcy5jdXN0b21UYWJsZXM7aXx8KHRoaXMuY3VzdG9tVGFibGVzPWk9e30pO2lbZV09ZnVuY3Rpb24gZGVjb2RlVGFibGVzU2VnbWVudChlLHQsYSl7Y29uc3Qgcj1lW3RdLGk9NDI5NDk2NzI5NSYoMCxuLnJlYWRVaW50MzIpKGUsdCsxKSxzPTQyOTQ5NjcyOTUmKDAsbi5yZWFkVWludDMyKShlLHQrNSksbz1uZXcgUmVhZGVyKGUsdCs5LGEpLGM9MSsocj4+MSY3KSxsPTErKHI+PjQmNyksaD1bXTtsZXQgdSxkLGY9aTtkb3t1PW8ucmVhZEJpdHMoYyk7ZD1vLnJlYWRCaXRzKGwpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW2YsdSxkLDBdKSk7Zis9MTw8ZH13aGlsZShmPHMpO3U9by5yZWFkQml0cyhjKTtoLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLTEsdSwzMiwwLCJsb3dlciJdKSk7dT1vLnJlYWRCaXRzKGMpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW3MsdSwzMiwwXSkpO2lmKDEmcil7dT1vLnJlYWRCaXRzKGMpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW3UsMF0pKX1yZXR1cm4gbmV3IEh1ZmZtYW5UYWJsZShoLCExKX0odCxhLHIpfX1jbGFzcyBIdWZmbWFuTGluZXtjb25zdHJ1Y3RvcihlKXtpZigyPT09ZS5sZW5ndGgpe3RoaXMuaXNPT0I9ITA7dGhpcy5yYW5nZUxvdz0wO3RoaXMucHJlZml4TGVuZ3RoPWVbMF07dGhpcy5yYW5nZUxlbmd0aD0wO3RoaXMucHJlZml4Q29kZT1lWzFdO3RoaXMuaXNMb3dlclJhbmdlPSExfWVsc2V7dGhpcy5pc09PQj0hMTt0aGlzLnJhbmdlTG93PWVbMF07dGhpcy5wcmVmaXhMZW5ndGg9ZVsxXTt0aGlzLnJhbmdlTGVuZ3RoPWVbMl07dGhpcy5wcmVmaXhDb2RlPWVbM107dGhpcy5pc0xvd2VyUmFuZ2U9Imxvd2VyIj09PWVbNF19fX1jbGFzcyBIdWZmbWFuVHJlZU5vZGV7Y29uc3RydWN0b3IoZSl7dGhpcy5jaGlsZHJlbj1bXTtpZihlKXt0aGlzLmlzTGVhZj0hMDt0aGlzLnJhbmdlTGVuZ3RoPWUucmFuZ2VMZW5ndGg7dGhpcy5yYW5nZUxvdz1lLnJhbmdlTG93O3RoaXMuaXNMb3dlclJhbmdlPWUuaXNMb3dlclJhbmdlO3RoaXMuaXNPT0I9ZS5pc09PQn1lbHNlIHRoaXMuaXNMZWFmPSExfWJ1aWxkVHJlZShlLHQpe2NvbnN0IGE9ZS5wcmVmaXhDb2RlPj50JjE7aWYodDw9MCl0aGlzLmNoaWxkcmVuW2FdPW5ldyBIdWZmbWFuVHJlZU5vZGUoZSk7ZWxzZXtsZXQgcj10aGlzLmNoaWxkcmVuW2FdO3J8fCh0aGlzLmNoaWxkcmVuW2FdPXI9bmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKSk7ci5idWlsZFRyZWUoZSx0LTEpfX1kZWNvZGVOb2RlKGUpe2lmKHRoaXMuaXNMZWFmKXtpZih0aGlzLmlzT09CKXJldHVybiBudWxsO2NvbnN0IHQ9ZS5yZWFkQml0cyh0aGlzLnJhbmdlTGVuZ3RoKTtyZXR1cm4gdGhpcy5yYW5nZUxvdysodGhpcy5pc0xvd2VyUmFuZ2U/LXQ6dCl9Y29uc3QgdD10aGlzLmNoaWxkcmVuW2UucmVhZEJpdCgpXTtpZighdCl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTtyZXR1cm4gdC5kZWNvZGVOb2RlKGUpfX1jbGFzcyBIdWZmbWFuVGFibGV7Y29uc3RydWN0b3IoZSx0KXt0fHx0aGlzLmFzc2lnblByZWZpeENvZGVzKGUpO3RoaXMucm9vdE5vZGU9bmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0Kyspe2NvbnN0IGE9ZVt0XTthLnByZWZpeExlbmd0aD4wJiZ0aGlzLnJvb3ROb2RlLmJ1aWxkVHJlZShhLGEucHJlZml4TGVuZ3RoLTEpfX1kZWNvZGUoZSl7cmV0dXJuIHRoaXMucm9vdE5vZGUuZGVjb2RlTm9kZShlKX1hc3NpZ25QcmVmaXhDb2RlcyhlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBhPTA7Zm9yKGxldCByPTA7cjx0O3IrKylhPU1hdGgubWF4KGEsZVtyXS5wcmVmaXhMZW5ndGgpO2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KGErMSk7Zm9yKGxldCBhPTA7YTx0O2ErKylyW2VbYV0ucHJlZml4TGVuZ3RoXSsrO2xldCBuLGkscyxvPTEsYz0wO3JbMF09MDtmb3IoO288PWE7KXtjPWMrcltvLTFdPDwxO249YztpPTA7Zm9yKDtpPHQ7KXtzPWVbaV07aWYocy5wcmVmaXhMZW5ndGg9PT1vKXtzLnByZWZpeENvZGU9bjtuKyt9aSsrfW8rK319fWNvbnN0IGY9e307ZnVuY3Rpb24gZ2V0U3RhbmRhcmRUYWJsZShlKXtsZXQgdCxhPWZbZV07aWYoYSlyZXR1cm4gYTtzd2l0Y2goZSl7Y2FzZSAxOnQ9W1swLDEsNCwwXSxbMTYsMiw4LDJdLFsyNzIsMywxNiw2XSxbNjU4MDgsMywzMiw3XV07YnJlYWs7Y2FzZSAyOnQ9W1swLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWzc1LDYsMzIsNjJdLFs2LDYzXV07YnJlYWs7Y2FzZSAzOnQ9W1stMjU2LDgsOCwyNTRdLFswLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWy0yNTcsOCwzMiwyNTUsImxvd2VyIl0sWzc1LDcsMzIsMTI2XSxbNiw2Ml1dO2JyZWFrO2Nhc2UgNDp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFs3Niw1LDMyLDMxXV07YnJlYWs7Y2FzZSA1OnQ9W1stMjU1LDcsOCwxMjZdLFsxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWy0yNTYsNywzMiwxMjcsImxvd2VyIl0sWzc2LDYsMzIsNjJdXTticmVhaztjYXNlIDY6dD1bWy0yMDQ4LDUsMTAsMjhdLFstMTAyNCw0LDksOF0sWy01MTIsNCw4LDldLFstMjU2LDQsNywxMF0sWy0xMjgsNSw2LDI5XSxbLTY0LDUsNSwzMF0sWy0zMiw0LDUsMTFdLFswLDIsNywwXSxbMTI4LDMsNywyXSxbMjU2LDMsOCwzXSxbNTEyLDQsOSwxMl0sWzEwMjQsNCwxMCwxM10sWy0yMDQ5LDYsMzIsNjIsImxvd2VyIl0sWzIwNDgsNiwzMiw2M11dO2JyZWFrO2Nhc2UgNzp0PVtbLTEwMjQsNCw5LDhdLFstNTEyLDMsOCwwXSxbLTI1Niw0LDcsOV0sWy0xMjgsNSw2LDI2XSxbLTY0LDUsNSwyN10sWy0zMiw0LDUsMTBdLFswLDQsNSwxMV0sWzMyLDUsNSwyOF0sWzY0LDUsNiwyOV0sWzEyOCw0LDcsMTJdLFsyNTYsMyw4LDFdLFs1MTIsMyw5LDJdLFsxMDI0LDMsMTAsM10sWy0xMDI1LDUsMzIsMzAsImxvd2VyIl0sWzIwNDgsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgODp0PVtbLTE1LDgsMywyNTJdLFstNyw5LDEsNTA4XSxbLTUsOCwxLDI1M10sWy0zLDksMCw1MDldLFstMiw3LDAsMTI0XSxbLTEsNCwwLDEwXSxbMCwyLDEsMF0sWzIsNSwwLDI2XSxbMyw2LDAsNThdLFs0LDMsNCw0XSxbMjAsNiwxLDU5XSxbMjIsNCw0LDExXSxbMzgsNCw1LDEyXSxbNzAsNSw2LDI3XSxbMTM0LDUsNywyOF0sWzI2Miw2LDcsNjBdLFszOTAsNyw4LDEyNV0sWzY0Niw2LDEwLDYxXSxbLTE2LDksMzIsNTEwLCJsb3dlciJdLFsxNjcwLDksMzIsNTExXSxbMiwxXV07YnJlYWs7Y2FzZSA5OnQ9W1stMzEsOCw0LDI1Ml0sWy0xNSw5LDIsNTA4XSxbLTExLDgsMiwyNTNdLFstNyw5LDEsNTA5XSxbLTUsNywxLDEyNF0sWy0zLDQsMSwxMF0sWy0xLDMsMSwyXSxbMSwzLDEsM10sWzMsNSwxLDI2XSxbNSw2LDEsNThdLFs3LDMsNSw0XSxbMzksNiwyLDU5XSxbNDMsNCw1LDExXSxbNzUsNCw2LDEyXSxbMTM5LDUsNywyN10sWzI2Nyw1LDgsMjhdLFs1MjMsNiw4LDYwXSxbNzc5LDcsOSwxMjVdLFsxMjkxLDYsMTEsNjFdLFstMzIsOSwzMiw1MTAsImxvd2VyIl0sWzMzMzksOSwzMiw1MTFdLFsyLDBdXTticmVhaztjYXNlIDEwOnQ9W1stMjEsNyw0LDEyMl0sWy01LDgsMCwyNTJdLFstNCw3LDAsMTIzXSxbLTMsNSwwLDI0XSxbLTIsMiwyLDBdLFsyLDUsMCwyNV0sWzMsNiwwLDU0XSxbNCw3LDAsMTI0XSxbNSw4LDAsMjUzXSxbNiwyLDYsMV0sWzcwLDUsNSwyNl0sWzEwMiw2LDUsNTVdLFsxMzQsNiw2LDU2XSxbMTk4LDYsNyw1N10sWzMyNiw2LDgsNThdLFs1ODIsNiw5LDU5XSxbMTA5NCw2LDEwLDYwXSxbMjExOCw3LDExLDEyNV0sWy0yMiw4LDMyLDI1NCwibG93ZXIiXSxbNDE2Niw4LDMyLDI1NV0sWzIsMl1dO2JyZWFrO2Nhc2UgMTE6dD1bWzEsMSwwLDBdLFsyLDIsMSwyXSxbNCw0LDAsMTJdLFs1LDQsMSwxM10sWzcsNSwxLDI4XSxbOSw1LDIsMjldLFsxMyw2LDIsNjBdLFsxNyw3LDIsMTIyXSxbMjEsNywzLDEyM10sWzI5LDcsNCwxMjRdLFs0NSw3LDUsMTI1XSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTI6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDEsNl0sWzUsNSwwLDI4XSxbNiw1LDEsMjldLFs4LDYsMSw2MF0sWzEwLDcsMCwxMjJdLFsxMSw3LDEsMTIzXSxbMTMsNywyLDEyNF0sWzE3LDcsMywxMjVdLFsyNSw3LDQsMTI2XSxbNDEsOCw1LDI1NF0sWzczLDgsMzIsMjU1XV07YnJlYWs7Y2FzZSAxMzp0PVtbMSwxLDAsMF0sWzIsMywwLDRdLFszLDQsMCwxMl0sWzQsNSwwLDI4XSxbNSw0LDEsMTNdLFs3LDMsMyw1XSxbMTUsNiwxLDU4XSxbMTcsNiwyLDU5XSxbMjEsNiwzLDYwXSxbMjksNiw0LDYxXSxbNDUsNiw1LDYyXSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTQ6dD1bWy0yLDMsMCw0XSxbLTEsMywwLDVdLFswLDEsMCwwXSxbMSwzLDAsNl0sWzIsMywwLDddXTticmVhaztjYXNlIDE1OnQ9W1stMjQsNyw0LDEyNF0sWy04LDYsMiw2MF0sWy00LDUsMSwyOF0sWy0yLDQsMCwxMl0sWy0xLDMsMCw0XSxbMCwxLDAsMF0sWzEsMywwLDVdLFsyLDQsMCwxM10sWzMsNSwxLDI5XSxbNSw2LDIsNjFdLFs5LDcsNCwxMjVdLFstMjUsNywzMiwxMjYsImxvd2VyIl0sWzI1LDcsMzIsMTI3XV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgc3RhbmRhcmQgdGFibGUgQi4ke2V9IGRvZXMgbm90IGV4aXN0YCl9Zm9yKGxldCBlPTAsYT10Lmxlbmd0aDtlPGE7ZSsrKXRbZV09bmV3IEh1ZmZtYW5MaW5lKHRbZV0pO2E9bmV3IEh1ZmZtYW5UYWJsZSh0LCEwKTtmW2VdPWE7cmV0dXJuIGF9Y2xhc3MgUmVhZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRhdGE9ZTt0aGlzLnN0YXJ0PXQ7dGhpcy5lbmQ9YTt0aGlzLnBvc2l0aW9uPXQ7dGhpcy5zaGlmdD0tMTt0aGlzLmN1cnJlbnRCeXRlPTB9cmVhZEJpdCgpe2lmKHRoaXMuc2hpZnQ8MCl7aWYodGhpcy5wb3NpdGlvbj49dGhpcy5lbmQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoImVuZCBvZiBkYXRhIHdoaWxlIHJlYWRpbmcgYml0Iik7dGhpcy5jdXJyZW50Qnl0ZT10aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXTt0aGlzLnNoaWZ0PTd9Y29uc3QgZT10aGlzLmN1cnJlbnRCeXRlPj50aGlzLnNoaWZ0JjE7dGhpcy5zaGlmdC0tO3JldHVybiBlfXJlYWRCaXRzKGUpe2xldCB0LGE9MDtmb3IodD1lLTE7dD49MDt0LS0pYXw9dGhpcy5yZWFkQml0KCk8PHQ7cmV0dXJuIGF9Ynl0ZUFsaWduKCl7dGhpcy5zaGlmdD0tMX1uZXh0KCl7cmV0dXJuIHRoaXMucG9zaXRpb24+PXRoaXMuZW5kPy0xOnRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdfX1mdW5jdGlvbiBnZXRDdXN0b21IdWZmbWFuVGFibGUoZSx0LGEpe2xldCByPTA7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPWFbdFtuXV07aWYoaSl7aWYoZT09PXIpcmV0dXJuIGk7cisrfX10aHJvdyBuZXcgSmJpZzJFcnJvcigiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIHJlYWRVbmNvbXByZXNzZWRCaXRtYXAoZSx0LGEpe2NvbnN0IHI9W107Zm9yKGxldCBuPTA7bjxhO24rKyl7Y29uc3QgYT1uZXcgVWludDhBcnJheSh0KTtyLnB1c2goYSk7Zm9yKGxldCByPTA7cjx0O3IrKylhW3JdPWUucmVhZEJpdCgpO2UuYnl0ZUFsaWduKCl9cmV0dXJuIHJ9ZnVuY3Rpb24gZGVjb2RlTU1SQml0bWFwKGUsdCxhLHIpe2NvbnN0IG49e0s6LTEsQ29sdW1uczp0LFJvd3M6YSxCbGFja0lzMTohMCxFbmRPZkJsb2NrOnJ9LGk9bmV3IHMuQ0NJVFRGYXhEZWNvZGVyKGUsbiksbz1bXTtsZXQgYyxsPSExO2ZvcihsZXQgZT0wO2U8YTtlKyspe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkodCk7by5wdXNoKGUpO2xldCBhPS0xO2ZvcihsZXQgcj0wO3I8dDtyKyspe2lmKGE8MCl7Yz1pLnJlYWROZXh0Q2hhcigpO2lmKC0xPT09Yyl7Yz0wO2w9ITB9YT03fWVbcl09Yz4+YSYxO2EtLX19aWYociYmIWwpe2NvbnN0IGU9NTtmb3IobGV0IHQ9MDt0PGUmJi0xIT09aS5yZWFkTmV4dENoYXIoKTt0KyspO31yZXR1cm4gb310LkpiaWcySW1hZ2U9Y2xhc3MgSmJpZzJJbWFnZXtwYXJzZUNodW5rcyhlKXtyZXR1cm4gZnVuY3Rpb24gcGFyc2VKYmlnMkNodW5rcyhlKXtjb25zdCB0PW5ldyBTaW1wbGVTZWdtZW50VmlzaXRvcjtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZVthXTtwcm9jZXNzU2VnbWVudHMocmVhZFNlZ21lbnRzKHt9LHIuZGF0YSxyLnN0YXJ0LHIuZW5kKSx0KX1yZXR1cm4gdC5idWZmZXJ9KGUpfXBhcnNlKGUpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkOiBKYmlnMkltYWdlLnBhcnNlIil9fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Bcml0aG1ldGljRGVjb2Rlcj12b2lkIDA7Y29uc3QgYT1be3FlOjIyMDE3LG5tcHM6MSxubHBzOjEsc3dpdGNoRmxhZzoxfSx7cWU6MTMzMTMsbm1wczoyLG5scHM6Nixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MyxubHBzOjksc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjQsbmxwczoxMixzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6NSxubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM4LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo3LG5scHM6Nixzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjgsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjksbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjEwLG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoxMSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoxMixubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoxMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyOSxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6MTUsbmxwczoxNCxzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjE2LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MjA3Mzcsbm1wczoxNyxubHBzOjE1LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6MTgsbmxwczoxNixzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjE5LG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6MTMzMTMsbm1wczoyMCxubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MjEsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZToxMDI0MSxubXBzOjIyLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjIzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6ODcwNSxubXBzOjI0LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjI1LG5scHM6MjIsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjI2LG5scHM6MjMsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI3LG5scHM6MjQsc3dpdGNoRmxhZzowfSx7cWU6NTEyMSxubXBzOjI4LG5scHM6MjUsc3dpdGNoRmxhZzowfSx7cWU6NDYwOSxubXBzOjI5LG5scHM6MjYsc3dpdGNoRmxhZzowfSx7cWU6NDM1MyxubXBzOjMwLG5scHM6Mjcsc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjMxLG5scHM6Mjgsc3dpdGNoRmxhZzowfSx7cWU6MjQ5NyxubXBzOjMyLG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6MjIwOSxubXBzOjMzLG5scHM6MzAsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjM0LG5scHM6MzEsc3dpdGNoRmxhZzowfSx7cWU6MTA4OSxubXBzOjM1LG5scHM6MzIsc3dpdGNoRmxhZzowfSx7cWU6NjczLG5tcHM6MzYsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozNyxubHBzOjM0LHN3aXRjaEZsYWc6MH0se3FlOjMyMSxubXBzOjM4LG5scHM6MzUsc3dpdGNoRmxhZzowfSx7cWU6MjczLG5tcHM6MzksbmxwczozNixzd2l0Y2hGbGFnOjB9LHtxZToxMzMsbm1wczo0MCxubHBzOjM3LHN3aXRjaEZsYWc6MH0se3FlOjczLG5tcHM6NDEsbmxwczozOCxzd2l0Y2hGbGFnOjB9LHtxZTozNyxubXBzOjQyLG5scHM6Mzksc3dpdGNoRmxhZzowfSx7cWU6MjEsbm1wczo0MyxubHBzOjQwLHN3aXRjaEZsYWc6MH0se3FlOjksbm1wczo0NCxubHBzOjQxLHN3aXRjaEZsYWc6MH0se3FlOjUsbm1wczo0NSxubHBzOjQyLHN3aXRjaEZsYWc6MH0se3FlOjEsbm1wczo0NSxubHBzOjQzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NDYsbmxwczo0Nixzd2l0Y2hGbGFnOjB9XTt0LkFyaXRobWV0aWNEZWNvZGVyPWNsYXNzIEFyaXRobWV0aWNEZWNvZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRhdGE9ZTt0aGlzLmJwPXQ7dGhpcy5kYXRhRW5kPWE7dGhpcy5jaGlnaD1lW3RdO3RoaXMuY2xvdz0wO3RoaXMuYnl0ZUluKCk7dGhpcy5jaGlnaD10aGlzLmNoaWdoPDw3JjY1NTM1fHRoaXMuY2xvdz4+OSYxMjc7dGhpcy5jbG93PXRoaXMuY2xvdzw8NyY2NTUzNTt0aGlzLmN0LT03O3RoaXMuYT0zMjc2OH1ieXRlSW4oKXtjb25zdCBlPXRoaXMuZGF0YTtsZXQgdD10aGlzLmJwO2lmKDI1NT09PWVbdF0paWYoZVt0KzFdPjE0Myl7dGhpcy5jbG93Kz02NTI4MDt0aGlzLmN0PTh9ZWxzZXt0Kys7dGhpcy5jbG93Kz1lW3RdPDw5O3RoaXMuY3Q9Nzt0aGlzLmJwPXR9ZWxzZXt0Kys7dGhpcy5jbG93Kz10PHRoaXMuZGF0YUVuZD9lW3RdPDw4OjY1MjgwO3RoaXMuY3Q9ODt0aGlzLmJwPXR9aWYodGhpcy5jbG93PjY1NTM1KXt0aGlzLmNoaWdoKz10aGlzLmNsb3c+PjE2O3RoaXMuY2xvdyY9NjU1MzV9fXJlYWRCaXQoZSx0KXtsZXQgcj1lW3RdPj4xLG49MSZlW3RdO2NvbnN0IGk9YVtyXSxzPWkucWU7bGV0IG8sYz10aGlzLmEtcztpZih0aGlzLmNoaWdoPHMpaWYoYzxzKXtjPXM7bz1uO3I9aS5ubXBzfWVsc2V7Yz1zO289MV5uOzE9PT1pLnN3aXRjaEZsYWcmJihuPW8pO3I9aS5ubHBzfWVsc2V7dGhpcy5jaGlnaC09cztpZigwIT0oMzI3NjgmYykpe3RoaXMuYT1jO3JldHVybiBufWlmKGM8cyl7bz0xXm47MT09PWkuc3dpdGNoRmxhZyYmKG49byk7cj1pLm5scHN9ZWxzZXtvPW47cj1pLm5tcHN9fWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpO2M8PD0xO3RoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjE7dGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNTt0aGlzLmN0LS19d2hpbGUoMD09KDMyNzY4JmMpKTt0aGlzLmE9YztlW3RdPXI8PDF8bjtyZXR1cm4gb319fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSnBlZ1N0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyksbj1hKDMpLGk9YSgyNikscz1hKDIpO2NsYXNzIEpwZWdTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7bGV0IHI7Zm9yKDstMSE9PShyPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09cil7ZS5za2lwKC0xKTticmVha31zdXBlcih0KTt0aGlzLnN0cmVhbT1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5tYXliZUxlbmd0aD10O3RoaXMucGFyYW1zPWF9Z2V0IGJ5dGVzKCl7cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9ZW5zdXJlQnVmZmVyKGUpe31yZWFkQmxvY2soKXtpZih0aGlzLmVvZilyZXR1cm47Y29uc3QgZT17ZGVjb2RlVHJhbnNmb3JtOnZvaWQgMCxjb2xvclRyYW5zZm9ybTp2b2lkIDB9LHQ9dGhpcy5kaWN0LmdldEFycmF5KCJEIiwiRGVjb2RlIik7aWYodGhpcy5mb3JjZVJHQiYmQXJyYXkuaXNBcnJheSh0KSl7Y29uc3QgYT10aGlzLmRpY3QuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgscj10Lmxlbmd0aCxuPW5ldyBJbnQzMkFycmF5KHIpO2xldCBpPSExO2NvbnN0IHM9KDE8PGEpLTE7Zm9yKGxldCBlPTA7ZTxyO2UrPTIpe25bZV09MjU2Kih0W2UrMV0tdFtlXSl8MDtuW2UrMV09dFtlXSpzfDA7MjU2PT09bltlXSYmMD09PW5bZSsxXXx8KGk9ITApfWkmJihlLmRlY29kZVRyYW5zZm9ybT1uKX1pZih0aGlzLnBhcmFtcyBpbnN0YW5jZW9mIG4uRGljdCl7Y29uc3QgdD10aGlzLnBhcmFtcy5nZXQoIkNvbG9yVHJhbnNmb3JtIik7TnVtYmVyLmlzSW50ZWdlcih0KSYmKGUuY29sb3JUcmFuc2Zvcm09dCl9Y29uc3QgYT1uZXcgaS5KcGVnSW1hZ2UoZSk7YS5wYXJzZSh0aGlzLmJ5dGVzKTtjb25zdCByPWEuZ2V0RGF0YSh7d2lkdGg6dGhpcy5kcmF3V2lkdGgsaGVpZ2h0OnRoaXMuZHJhd0hlaWdodCxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9cjt0aGlzLmJ1ZmZlckxlbmd0aD1yLmxlbmd0aDt0aGlzLmVvZj0hMH19dC5KcGVnU3RyZWFtPUpwZWdTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KcGVnSW1hZ2U9dm9pZCAwO3ZhciByPWEoMiksbj1hKDQpO2NsYXNzIEpwZWdFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihgSlBFRyBlcnJvcjogJHtlfWAsIkpwZWdFcnJvciIpfX1jbGFzcyBETkxNYXJrZXJFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIkROTE1hcmtlckVycm9yIik7dGhpcy5zY2FuTGluZXM9dH19Y2xhc3MgRU9JTWFya2VyRXJyb3IgZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiRU9JTWFya2VyRXJyb3IiKX19Y29uc3QgaT1uZXcgVWludDhBcnJheShbMCwxLDgsMTYsOSwyLDMsMTAsMTcsMjQsMzIsMjUsMTgsMTEsNCw1LDEyLDE5LDI2LDMzLDQwLDQ4LDQxLDM0LDI3LDIwLDEzLDYsNywxNCwyMSwyOCwzNSw0Miw0OSw1Niw1Nyw1MCw0MywzNiwyOSwyMiwxNSwyMywzMCwzNyw0NCw1MSw1OCw1OSw1Miw0NSwzOCwzMSwzOSw0Niw1Myw2MCw2MSw1NCw0Nyw1NSw2Miw2M10pLHM9NDAxNyxvPTc5OSxjPTM0MDYsbD0yMjc2LGg9MTU2Nyx1PTM3ODQsZD01NzkzLGY9Mjg5NjtmdW5jdGlvbiBidWlsZEh1ZmZtYW5UYWJsZShlLHQpe2xldCBhLHIsbj0wLGk9MTY7Zm9yKDtpPjAmJiFlW2ktMV07KWktLTtjb25zdCBzPVt7Y2hpbGRyZW46W10saW5kZXg6MH1dO2xldCBvLGM9c1swXTtmb3IoYT0wO2E8aTthKyspe2ZvcihyPTA7cjxlW2FdO3IrKyl7Yz1zLnBvcCgpO2MuY2hpbGRyZW5bYy5pbmRleF09dFtuXTtmb3IoO2MuaW5kZXg+MDspYz1zLnBvcCgpO2MuaW5kZXgrKztzLnB1c2goYyk7Zm9yKDtzLmxlbmd0aDw9YTspe3MucHVzaChvPXtjaGlsZHJlbjpbXSxpbmRleDowfSk7Yy5jaGlsZHJlbltjLmluZGV4XT1vLmNoaWxkcmVuO2M9b31uKyt9aWYoYSsxPGkpe3MucHVzaChvPXtjaGlsZHJlbjpbXSxpbmRleDowfSk7Yy5jaGlsZHJlbltjLmluZGV4XT1vLmNoaWxkcmVuO2M9b319cmV0dXJuIHNbMF0uY2hpbGRyZW59ZnVuY3Rpb24gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSx0LGEpe3JldHVybiA2NCooKGUuYmxvY2tzUGVyTGluZSsxKSp0K2EpfWZ1bmN0aW9uIGRlY29kZVNjYW4oZSx0LGEscyxvLGMsbCxoLHUsZD0hMSl7Y29uc3QgZj1hLm1jdXNQZXJMaW5lLGc9YS5wcm9ncmVzc2l2ZSxwPXQ7bGV0IG09MCxiPTA7ZnVuY3Rpb24gcmVhZEJpdCgpe2lmKGI+MCl7Yi0tO3JldHVybiBtPj5iJjF9bT1lW3QrK107aWYoMjU1PT09bSl7Y29uc3Qgcj1lW3QrK107aWYocil7aWYoMjIwPT09ciYmZCl7dCs9Mjtjb25zdCByPSgwLG4ucmVhZFVpbnQxNikoZSx0KTt0Kz0yO2lmKHI+MCYmciE9PWEuc2NhbkxpbmVzKXRocm93IG5ldyBETkxNYXJrZXJFcnJvcigiRm91bmQgRE5MIG1hcmtlciAoMHhGRkRDKSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSIscil9ZWxzZSBpZigyMTc9PT1yKXtpZihkKXtjb25zdCBlPXgqKDg9PT1hLnByZWNpc2lvbj84OjApO2lmKGU+MCYmTWF0aC5yb3VuZChhLnNjYW5MaW5lcy9lKT49NSl0aHJvdyBuZXcgRE5MTWFya2VyRXJyb3IoIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEsIHBvc3NpYmx5IGNhdXNlZCBieSBpbmNvcnJlY3QgYHNjYW5MaW5lc2AgcGFyYW1ldGVyIixlKX10aHJvdyBuZXcgRU9JTWFya2VyRXJyb3IoIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEiKX10aHJvdyBuZXcgSnBlZ0Vycm9yKGB1bmV4cGVjdGVkIG1hcmtlciAkeyhtPDw4fHIpLnRvU3RyaW5nKDE2KX1gKX19Yj03O3JldHVybiBtPj4+N31mdW5jdGlvbiBkZWNvZGVIdWZmbWFuKGUpe2xldCB0PWU7Zm9yKDs7KXt0PXRbcmVhZEJpdCgpXTtzd2l0Y2godHlwZW9mIHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gdDtjYXNlIm9iamVjdCI6Y29udGludWV9dGhyb3cgbmV3IEpwZWdFcnJvcigiaW52YWxpZCBodWZmbWFuIHNlcXVlbmNlIil9fWZ1bmN0aW9uIHJlY2VpdmUoZSl7bGV0IHQ9MDtmb3IoO2U+MDspe3Q9dDw8MXxyZWFkQml0KCk7ZS0tfXJldHVybiB0fWZ1bmN0aW9uIHJlY2VpdmVBbmRFeHRlbmQoZSl7aWYoMT09PWUpcmV0dXJuIDE9PT1yZWFkQml0KCk/MTotMTtjb25zdCB0PXJlY2VpdmUoZSk7cmV0dXJuIHQ+PTE8PGUtMT90OnQrKC0xPDxlKSsxfWxldCB5PTA7bGV0IHcsUz0wO2xldCB4PTA7ZnVuY3Rpb24gZGVjb2RlTWN1KGUsdCxhLHIsbil7Y29uc3QgaT1hJWY7eD0oYS9mfDApKmUudityO2NvbnN0IHM9aSplLmgrbjt0KGUsZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSx4LHMpKX1mdW5jdGlvbiBkZWNvZGVCbG9jayhlLHQsYSl7eD1hL2UuYmxvY2tzUGVyTGluZXwwO2NvbnN0IHI9YSVlLmJsb2Nrc1BlckxpbmU7dChlLGdldEJsb2NrQnVmZmVyT2Zmc2V0KGUseCxyKSl9Y29uc3Qgaz1zLmxlbmd0aDtsZXQgQyx2LEYsTyxULE07TT1nPzA9PT1jPzA9PT1oP2Z1bmN0aW9uIGRlY29kZURDRmlyc3QoZSx0KXtjb25zdCBhPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVEQykscj0wPT09YT8wOnJlY2VpdmVBbmRFeHRlbmQoYSk8PHU7ZS5ibG9ja0RhdGFbdF09ZS5wcmVkKz1yfTpmdW5jdGlvbiBkZWNvZGVEQ1N1Y2Nlc3NpdmUoZSx0KXtlLmJsb2NrRGF0YVt0XXw9cmVhZEJpdCgpPDx1fTowPT09aD9mdW5jdGlvbiBkZWNvZGVBQ0ZpcnN0KGUsdCl7aWYoeT4wKXt5LS07cmV0dXJufWxldCBhPWM7Y29uc3Qgcj1sO2Zvcig7YTw9cjspe2NvbnN0IHI9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZUFDKSxuPTE1JnIscz1yPj40O2lmKDA9PT1uKXtpZihzPDE1KXt5PXJlY2VpdmUocykrKDE8PHMpLTE7YnJlYWt9YSs9MTY7Y29udGludWV9YSs9cztjb25zdCBvPWlbYV07ZS5ibG9ja0RhdGFbdCtvXT1yZWNlaXZlQW5kRXh0ZW5kKG4pKigxPDx1KTthKyt9fTpmdW5jdGlvbiBkZWNvZGVBQ1N1Y2Nlc3NpdmUoZSx0KXtsZXQgYT1jO2NvbnN0IHI9bDtsZXQgbixzLG89MDtmb3IoO2E8PXI7KXtjb25zdCByPXQraVthXSxjPWUuYmxvY2tEYXRhW3JdPDA/LTE6MTtzd2l0Y2goUyl7Y2FzZSAwOnM9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZUFDKTtuPTE1JnM7bz1zPj40O2lmKDA9PT1uKWlmKG88MTUpe3k9cmVjZWl2ZShvKSsoMTw8byk7Uz00fWVsc2V7bz0xNjtTPTF9ZWxzZXtpZigxIT09bil0aHJvdyBuZXcgSnBlZ0Vycm9yKCJpbnZhbGlkIEFDbiBlbmNvZGluZyIpO3c9cmVjZWl2ZUFuZEV4dGVuZChuKTtTPW8/MjozfWNvbnRpbnVlO2Nhc2UgMTpjYXNlIDI6aWYoZS5ibG9ja0RhdGFbcl0pZS5ibG9ja0RhdGFbcl0rPWMqKHJlYWRCaXQoKTw8dSk7ZWxzZXtvLS07MD09PW8mJihTPTI9PT1TPzM6MCl9YnJlYWs7Y2FzZSAzOmlmKGUuYmxvY2tEYXRhW3JdKWUuYmxvY2tEYXRhW3JdKz1jKihyZWFkQml0KCk8PHUpO2Vsc2V7ZS5ibG9ja0RhdGFbcl09dzw8dTtTPTB9YnJlYWs7Y2FzZSA0OmUuYmxvY2tEYXRhW3JdJiYoZS5ibG9ja0RhdGFbcl0rPWMqKHJlYWRCaXQoKTw8dSkpfWErK31pZig0PT09Uyl7eS0tOzA9PT15JiYoUz0wKX19OmZ1bmN0aW9uIGRlY29kZUJhc2VsaW5lKGUsdCl7Y29uc3QgYT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlREMpLHI9MD09PWE/MDpyZWNlaXZlQW5kRXh0ZW5kKGEpO2UuYmxvY2tEYXRhW3RdPWUucHJlZCs9cjtsZXQgbj0xO2Zvcig7bjw2NDspe2NvbnN0IGE9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZUFDKSxyPTE1JmEscz1hPj40O2lmKDA9PT1yKXtpZihzPDE1KWJyZWFrO24rPTE2O2NvbnRpbnVlfW4rPXM7Y29uc3Qgbz1pW25dO2UuYmxvY2tEYXRhW3Qrb109cmVjZWl2ZUFuZEV4dGVuZChyKTtuKyt9fTtsZXQgRSxELE4sUixMPTA7RD0xPT09az9zWzBdLmJsb2Nrc1BlckxpbmUqc1swXS5ibG9ja3NQZXJDb2x1bW46ZiphLm1jdXNQZXJDb2x1bW47Zm9yKDtMPD1EOyl7Y29uc3QgYT1vP01hdGgubWluKEQtTCxvKTpEO2lmKGE+MCl7Zm9yKHY9MDt2PGs7disrKXNbdl0ucHJlZD0wO3k9MDtpZigxPT09ayl7Qz1zWzBdO2ZvcihUPTA7VDxhO1QrKyl7ZGVjb2RlQmxvY2soQyxNLEwpO0wrK319ZWxzZSBmb3IoVD0wO1Q8YTtUKyspe2Zvcih2PTA7djxrO3YrKyl7Qz1zW3ZdO049Qy5oO1I9Qy52O2ZvcihGPTA7RjxSO0YrKylmb3IoTz0wO088TjtPKyspZGVjb2RlTWN1KEMsTSxMLEYsTyl9TCsrfX1iPTA7RT1maW5kTmV4dEZpbGVNYXJrZXIoZSx0KTtpZighRSlicmVhaztpZihFLmludmFsaWQpe2NvbnN0IGU9YT4wPyJ1bmV4cGVjdGVkIjoiZXhjZXNzaXZlIjsoMCxyLndhcm4pKGBkZWNvZGVTY2FuIC0gJHtlfSBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICR7RS5pbnZhbGlkfWApO3Q9RS5vZmZzZXR9aWYoIShFLm1hcmtlcj49NjU0ODgmJkUubWFya2VyPD02NTQ5NSkpYnJlYWs7dCs9Mn1yZXR1cm4gdC1wfWZ1bmN0aW9uIHF1YW50aXplQW5kSW52ZXJzZShlLHQsYSl7Y29uc3Qgcj1lLnF1YW50aXphdGlvblRhYmxlLG49ZS5ibG9ja0RhdGE7bGV0IGksZyxwLG0sYix5LHcsUyx4LGssQyx2LEYsTyxULE0sRTtpZighcil0aHJvdyBuZXcgSnBlZ0Vycm9yKCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4iKTtmb3IobGV0IGU9MDtlPDY0O2UrPTgpe3g9blt0K2VdO2s9blt0K2UrMV07Qz1uW3QrZSsyXTt2PW5bdCtlKzNdO0Y9blt0K2UrNF07Tz1uW3QrZSs1XTtUPW5bdCtlKzZdO009blt0K2UrN107eCo9cltlXTtpZigwIT0oa3xDfHZ8RnxPfFR8TSkpe2sqPXJbZSsxXTtDKj1yW2UrMl07dio9cltlKzNdO0YqPXJbZSs0XTtPKj1yW2UrNV07VCo9cltlKzZdO00qPXJbZSs3XTtpPWQqeCsxMjg+Pjg7Zz1kKkYrMTI4Pj44O3A9QzttPVQ7Yj1mKihrLU0pKzEyOD4+ODtTPWYqKGsrTSkrMTI4Pj44O3k9djw8NDt3PU88PDQ7aT1pK2crMT4+MTtnPWktZztFPXAqdSttKmgrMTI4Pj44O3A9cCpoLW0qdSsxMjg+Pjg7bT1FO2I9Yit3KzE+PjE7dz1iLXc7Uz1TK3krMT4+MTt5PVMteTtpPWkrbSsxPj4xO209aS1tO2c9ZytwKzE+PjE7cD1nLXA7RT1iKmwrUypjKzIwNDg+PjEyO2I9YipjLVMqbCsyMDQ4Pj4xMjtTPUU7RT15Km8rdypzKzIwNDg+PjEyO3k9eSpzLXcqbysyMDQ4Pj4xMjt3PUU7YVtlXT1pK1M7YVtlKzddPWktUzthW2UrMV09Zyt3O2FbZSs2XT1nLXc7YVtlKzJdPXAreTthW2UrNV09cC15O2FbZSszXT1tK2I7YVtlKzRdPW0tYn1lbHNle0U9ZCp4KzUxMj4+MTA7YVtlXT1FO2FbZSsxXT1FO2FbZSsyXT1FO2FbZSszXT1FO2FbZSs0XT1FO2FbZSs1XT1FO2FbZSs2XT1FO2FbZSs3XT1FfX1mb3IobGV0IGU9MDtlPDg7KytlKXt4PWFbZV07az1hW2UrOF07Qz1hW2UrMTZdO3Y9YVtlKzI0XTtGPWFbZSszMl07Tz1hW2UrNDBdO1Q9YVtlKzQ4XTtNPWFbZSs1Nl07aWYoMCE9KGt8Q3x2fEZ8T3xUfE0pKXtpPWQqeCsyMDQ4Pj4xMjtnPWQqRisyMDQ4Pj4xMjtwPUM7bT1UO2I9Ziooay1NKSsyMDQ4Pj4xMjtTPWYqKGsrTSkrMjA0OD4+MTI7eT12O3c9TztpPTQxMTIrKGkrZysxPj4xKTtnPWktZztFPXAqdSttKmgrMjA0OD4+MTI7cD1wKmgtbSp1KzIwNDg+PjEyO209RTtiPWIrdysxPj4xO3c9Yi13O1M9Uyt5KzE+PjE7eT1TLXk7aT1pK20rMT4+MTttPWktbTtnPWcrcCsxPj4xO3A9Zy1wO0U9YipsK1MqYysyMDQ4Pj4xMjtiPWIqYy1TKmwrMjA0OD4+MTI7Uz1FO0U9eSpvK3cqcysyMDQ4Pj4xMjt5PXkqcy13Km8rMjA0OD4+MTI7dz1FO3g9aStTO009aS1TO2s9Zyt3O1Q9Zy13O0M9cCt5O089cC15O3Y9bStiO0Y9bS1iO3g8MTY/eD0wOng+PTQwODA/eD0yNTU6eD4+PTQ7azwxNj9rPTA6az49NDA4MD9rPTI1NTprPj49NDtDPDE2P0M9MDpDPj00MDgwP0M9MjU1OkM+Pj00O3Y8MTY/dj0wOnY+PTQwODA/dj0yNTU6dj4+PTQ7RjwxNj9GPTA6Rj49NDA4MD9GPTI1NTpGPj49NDtPPDE2P089MDpPPj00MDgwP089MjU1Ok8+Pj00O1Q8MTY/VD0wOlQ+PTQwODA/VD0yNTU6VD4+PTQ7TTwxNj9NPTA6TT49NDA4MD9NPTI1NTpNPj49NDtuW3QrZV09eDtuW3QrZSs4XT1rO25bdCtlKzE2XT1DO25bdCtlKzI0XT12O25bdCtlKzMyXT1GO25bdCtlKzQwXT1PO25bdCtlKzQ4XT1UO25bdCtlKzU2XT1NfWVsc2V7RT1kKngrODE5Mj4+MTQ7RT1FPC0yMDQwPzA6RT49MjAyND8yNTU6RSsyMDU2Pj40O25bdCtlXT1FO25bdCtlKzhdPUU7blt0K2UrMTZdPUU7blt0K2UrMjRdPUU7blt0K2UrMzJdPUU7blt0K2UrNDBdPUU7blt0K2UrNDhdPUU7blt0K2UrNTZdPUV9fX1mdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoZSx0KXtjb25zdCBhPXQuYmxvY2tzUGVyTGluZSxyPXQuYmxvY2tzUGVyQ29sdW1uLG49bmV3IEludDE2QXJyYXkoNjQpO2ZvcihsZXQgZT0wO2U8cjtlKyspZm9yKGxldCByPTA7cjxhO3IrKyl7cXVhbnRpemVBbmRJbnZlcnNlKHQsZ2V0QmxvY2tCdWZmZXJPZmZzZXQodCxlLHIpLG4pfXJldHVybiB0LmJsb2NrRGF0YX1mdW5jdGlvbiBmaW5kTmV4dEZpbGVNYXJrZXIoZSx0LGE9dCl7Y29uc3Qgcj1lLmxlbmd0aC0xO2xldCBpPWE8dD9hOnQ7aWYodD49cilyZXR1cm4gbnVsbDtjb25zdCBzPSgwLG4ucmVhZFVpbnQxNikoZSx0KTtpZihzPj02NTQ3MiYmczw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6cyxvZmZzZXQ6dH07bGV0IG89KDAsbi5yZWFkVWludDE2KShlLGkpO2Zvcig7IShvPj02NTQ3MiYmbzw9NjU1MzQpOyl7aWYoKytpPj1yKXJldHVybiBudWxsO289KDAsbi5yZWFkVWludDE2KShlLGkpfXJldHVybntpbnZhbGlkOnMudG9TdHJpbmcoMTYpLG1hcmtlcjpvLG9mZnNldDppfX10LkpwZWdJbWFnZT1jbGFzcyBKcGVnSW1hZ2V7Y29uc3RydWN0b3Ioe2RlY29kZVRyYW5zZm9ybTplPW51bGwsY29sb3JUcmFuc2Zvcm06dD0tMX09e30pe3RoaXMuX2RlY29kZVRyYW5zZm9ybT1lO3RoaXMuX2NvbG9yVHJhbnNmb3JtPXR9cGFyc2UoZSx7ZG5sU2NhbkxpbmVzOnQ9bnVsbH09e30pe2Z1bmN0aW9uIHJlYWREYXRhQmxvY2soKXtjb25zdCB0PSgwLG4ucmVhZFVpbnQxNikoZSxvKTtvKz0yO2xldCBhPW8rdC0yO2NvbnN0IGk9ZmluZE5leHRGaWxlTWFya2VyKGUsYSxvKTtpZihpJiZpLmludmFsaWQpeygwLHIud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIitpLmludmFsaWQpO2E9aS5vZmZzZXR9Y29uc3Qgcz1lLnN1YmFycmF5KG8sYSk7bys9cy5sZW5ndGg7cmV0dXJuIHN9ZnVuY3Rpb24gcHJlcGFyZUNvbXBvbmVudHMoZSl7Y29uc3QgdD1NYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84L2UubWF4SCksYT1NYXRoLmNlaWwoZS5zY2FuTGluZXMvOC9lLm1heFYpO2Zvcihjb25zdCByIG9mIGUuY29tcG9uZW50cyl7Y29uc3Qgbj1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqci5oL2UubWF4SCksaT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKnIudi9lLm1heFYpLHM9dCpyLmgsbz02NCooYSpyLnYpKihzKzEpO3IuYmxvY2tEYXRhPW5ldyBJbnQxNkFycmF5KG8pO3IuYmxvY2tzUGVyTGluZT1uO3IuYmxvY2tzUGVyQ29sdW1uPWl9ZS5tY3VzUGVyTGluZT10O2UubWN1c1BlckNvbHVtbj1hfWxldCBhLHMsbz0wLGM9bnVsbCxsPW51bGwsaD0wO2NvbnN0IHU9W10sZD1bXSxmPVtdO2xldCBnPSgwLG4ucmVhZFVpbnQxNikoZSxvKTtvKz0yO2lmKDY1NDk2IT09Zyl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJTT0kgbm90IGZvdW5kIik7Zz0oMCxuLnJlYWRVaW50MTYpKGUsbyk7bys9MjtlOmZvcig7NjU0OTchPT1nOyl7bGV0IHAsbSxiO3N3aXRjaChnKXtjYXNlIDY1NTA0OmNhc2UgNjU1MDU6Y2FzZSA2NTUwNjpjYXNlIDY1NTA3OmNhc2UgNjU1MDg6Y2FzZSA2NTUwOTpjYXNlIDY1NTEwOmNhc2UgNjU1MTE6Y2FzZSA2NTUxMjpjYXNlIDY1NTEzOmNhc2UgNjU1MTQ6Y2FzZSA2NTUxNTpjYXNlIDY1NTE2OmNhc2UgNjU1MTc6Y2FzZSA2NTUxODpjYXNlIDY1NTE5OmNhc2UgNjU1MzQ6Y29uc3QgeT1yZWFkRGF0YUJsb2NrKCk7NjU1MDQ9PT1nJiY3ND09PXlbMF0mJjcwPT09eVsxXSYmNzM9PT15WzJdJiY3MD09PXlbM10mJjA9PT15WzRdJiYoYz17dmVyc2lvbjp7bWFqb3I6eVs1XSxtaW5vcjp5WzZdfSxkZW5zaXR5VW5pdHM6eVs3XSx4RGVuc2l0eTp5WzhdPDw4fHlbOV0seURlbnNpdHk6eVsxMF08PDh8eVsxMV0sdGh1bWJXaWR0aDp5WzEyXSx0aHVtYkhlaWdodDp5WzEzXSx0aHVtYkRhdGE6eS5zdWJhcnJheSgxNCwxNCszKnlbMTJdKnlbMTNdKX0pOzY1NTE4PT09ZyYmNjU9PT15WzBdJiYxMDA9PT15WzFdJiYxMTE9PT15WzJdJiY5OD09PXlbM10mJjEwMT09PXlbNF0mJihsPXt2ZXJzaW9uOnlbNV08PDh8eVs2XSxmbGFnczA6eVs3XTw8OHx5WzhdLGZsYWdzMTp5WzldPDw4fHlbMTBdLHRyYW5zZm9ybUNvZGU6eVsxMV19KTticmVhaztjYXNlIDY1NDk5OmNvbnN0IHc9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7Y29uc3QgUz13K28tMjtsZXQgeDtmb3IoO288Uzspe2NvbnN0IHQ9ZVtvKytdLGE9bmV3IFVpbnQxNkFycmF5KDY0KTtpZih0Pj40PT0wKWZvcihtPTA7bTw2NDttKyspe3g9aVttXTthW3hdPWVbbysrXX1lbHNle2lmKHQ+PjQhPTEpdGhyb3cgbmV3IEpwZWdFcnJvcigiRFFUIC0gaW52YWxpZCB0YWJsZSBzcGVjIik7Zm9yKG09MDttPDY0O20rKyl7eD1pW21dO2FbeF09KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTJ9fXVbMTUmdF09YX1icmVhaztjYXNlIDY1NDcyOmNhc2UgNjU0NzM6Y2FzZSA2NTQ3NDppZihhKXRocm93IG5ldyBKcGVnRXJyb3IoIk9ubHkgc2luZ2xlIGZyYW1lIEpQRUdzIHN1cHBvcnRlZCIpO28rPTI7YT17fTthLmV4dGVuZGVkPTY1NDczPT09ZzthLnByb2dyZXNzaXZlPTY1NDc0PT09ZzthLnByZWNpc2lvbj1lW28rK107Y29uc3Qgaz0oMCxuLnJlYWRVaW50MTYpKGUsbyk7bys9MjthLnNjYW5MaW5lcz10fHxrO2Euc2FtcGxlc1BlckxpbmU9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7YS5jb21wb25lbnRzPVtdO2EuY29tcG9uZW50SWRzPXt9O2NvbnN0IEM9ZVtvKytdO2xldCB2PTAsRj0wO2ZvcihwPTA7cDxDO3ArKyl7Y29uc3QgdD1lW29dLHI9ZVtvKzFdPj40LG49MTUmZVtvKzFdO3Y8ciYmKHY9cik7RjxuJiYoRj1uKTtjb25zdCBpPWVbbysyXTtiPWEuY29tcG9uZW50cy5wdXNoKHtoOnIsdjpuLHF1YW50aXphdGlvbklkOmkscXVhbnRpemF0aW9uVGFibGU6bnVsbH0pO2EuY29tcG9uZW50SWRzW3RdPWItMTtvKz0zfWEubWF4SD12O2EubWF4Vj1GO3ByZXBhcmVDb21wb25lbnRzKGEpO2JyZWFrO2Nhc2UgNjU0NzY6Y29uc3QgTz0oMCxuLnJlYWRVaW50MTYpKGUsbyk7bys9Mjtmb3IocD0yO3A8Tzspe2NvbnN0IHQ9ZVtvKytdLGE9bmV3IFVpbnQ4QXJyYXkoMTYpO2xldCByPTA7Zm9yKG09MDttPDE2O20rKyxvKyspcis9YVttXT1lW29dO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkocik7Zm9yKG09MDttPHI7bSsrLG8rKyluW21dPWVbb107cCs9MTcrcjsodD4+ND09MD9mOmQpWzE1JnRdPWJ1aWxkSHVmZm1hblRhYmxlKGEsbil9YnJlYWs7Y2FzZSA2NTUwMTpvKz0yO3M9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7YnJlYWs7Y2FzZSA2NTQ5ODpjb25zdCBUPTE9PSsraCYmIXQ7bys9Mjtjb25zdCBNPWVbbysrXSxFPVtdO2ZvcihwPTA7cDxNO3ArKyl7Y29uc3QgdD1lW28rK10scj1hLmNvbXBvbmVudElkc1t0XSxuPWEuY29tcG9uZW50c1tyXTtuLmluZGV4PXQ7Y29uc3QgaT1lW28rK107bi5odWZmbWFuVGFibGVEQz1mW2k+PjRdO24uaHVmZm1hblRhYmxlQUM9ZFsxNSZpXTtFLnB1c2gobil9Y29uc3QgRD1lW28rK10sTj1lW28rK10sUj1lW28rK107dHJ5e2NvbnN0IHQ9ZGVjb2RlU2NhbihlLG8sYSxFLHMsRCxOLFI+PjQsMTUmUixUKTtvKz10fWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcil7KDAsci53YXJuKShgJHt0Lm1lc3NhZ2V9IC0tIGF0dGVtcHRpbmcgdG8gcmUtcGFyc2UgdGhlIEpQRUcgaW1hZ2UuYCk7cmV0dXJuIHRoaXMucGFyc2UoZSx7ZG5sU2NhbkxpbmVzOnQuc2NhbkxpbmVzfSl9aWYodCBpbnN0YW5jZW9mIEVPSU1hcmtlckVycm9yKXsoMCxyLndhcm4pKGAke3QubWVzc2FnZX0gLS0gaWdub3JpbmcgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEuYCk7YnJlYWsgZX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6bys9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbb10mJm8tLTticmVhaztkZWZhdWx0OmNvbnN0IEw9ZmluZE5leHRGaWxlTWFya2VyKGUsby0yLG8tMyk7aWYoTCYmTC5pbnZhbGlkKXsoMCxyLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSB1bmV4cGVjdGVkIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiAiK0wuaW52YWxpZCk7bz1MLm9mZnNldDticmVha31pZighTHx8bz49ZS5sZW5ndGgtMSl7KDAsci53YXJuKSgiSnBlZ0ltYWdlLnBhcnNlIC0gcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbWFnZSBkYXRhIHdpdGhvdXQgZmluZGluZyBhbiBFT0kgbWFya2VyICgweEZGRDkpLiIpO2JyZWFrIGV9dGhyb3cgbmV3IEpwZWdFcnJvcigiSnBlZ0ltYWdlLnBhcnNlIC0gdW5rbm93biBtYXJrZXI6ICIrZy50b1N0cmluZygxNikpfWc9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTJ9dGhpcy53aWR0aD1hLnNhbXBsZXNQZXJMaW5lO3RoaXMuaGVpZ2h0PWEuc2NhbkxpbmVzO3RoaXMuamZpZj1jO3RoaXMuYWRvYmU9bDt0aGlzLmNvbXBvbmVudHM9W107Zm9yKGNvbnN0IGUgb2YgYS5jb21wb25lbnRzKXtjb25zdCB0PXVbZS5xdWFudGl6YXRpb25JZF07dCYmKGUucXVhbnRpemF0aW9uVGFibGU9dCk7dGhpcy5jb21wb25lbnRzLnB1c2goe2luZGV4OmUuaW5kZXgsb3V0cHV0OmJ1aWxkQ29tcG9uZW50RGF0YSgwLGUpLHNjYWxlWDplLmgvYS5tYXhILHNjYWxlWTplLnYvYS5tYXhWLGJsb2Nrc1BlckxpbmU6ZS5ibG9ja3NQZXJMaW5lLGJsb2Nrc1BlckNvbHVtbjplLmJsb2Nrc1BlckNvbHVtbn0pfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofV9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKGUsdCxhPSExKXtjb25zdCByPXRoaXMud2lkdGgvZSxuPXRoaXMuaGVpZ2h0L3Q7bGV0IGkscyxvLGMsbCxoLHUsZCxmLGcscCxtPTA7Y29uc3QgYj10aGlzLmNvbXBvbmVudHMubGVuZ3RoLHk9ZSp0KmIsdz1uZXcgVWludDhDbGFtcGVkQXJyYXkoeSksUz1uZXcgVWludDMyQXJyYXkoZSkseD00Mjk0OTY3Mjg4O2xldCBrO2Zvcih1PTA7dTxiO3UrKyl7aT10aGlzLmNvbXBvbmVudHNbdV07cz1pLnNjYWxlWCpyO289aS5zY2FsZVkqbjttPXU7cD1pLm91dHB1dDtjPWkuYmxvY2tzUGVyTGluZSsxPDwzO2lmKHMhPT1rKXtmb3IobD0wO2w8ZTtsKyspe2Q9MHxsKnM7U1tsXT0oZCZ4KTw8M3w3JmR9az1zfWZvcihoPTA7aDx0O2grKyl7ZD0wfGgqbztnPWMqKGQmeCl8KDcmZCk8PDM7Zm9yKGw9MDtsPGU7bCsrKXt3W21dPXBbZytTW2xdXTttKz1ifX19bGV0IEM9dGhpcy5fZGVjb2RlVHJhbnNmb3JtO2F8fDQhPT1ifHxDfHwoQz1uZXcgSW50MzJBcnJheShbLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTVdKSk7aWYoQylmb3IodT0wO3U8eTspZm9yKGQ9MCxmPTA7ZDxiO2QrKyx1KyssZis9Mil3W3VdPSh3W3VdKkNbZl0+PjgpK0NbZisxXTtyZXR1cm4gd31nZXQgX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKCl7cmV0dXJuIHRoaXMuYWRvYmU/ISF0aGlzLmFkb2JlLnRyYW5zZm9ybUNvZGU6Mz09PXRoaXMubnVtQ29tcG9uZW50cz8wIT09dGhpcy5fY29sb3JUcmFuc2Zvcm0mJig4MiE9PXRoaXMuY29tcG9uZW50c1swXS5pbmRleHx8NzEhPT10aGlzLmNvbXBvbmVudHNbMV0uaW5kZXh8fDY2IT09dGhpcy5jb21wb25lbnRzWzJdLmluZGV4KToxPT09dGhpcy5fY29sb3JUcmFuc2Zvcm19X2NvbnZlcnRZY2NUb1JnYihlKXtsZXQgdCxhLHI7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bis9Myl7dD1lW25dO2E9ZVtuKzFdO3I9ZVtuKzJdO2Vbbl09dC0xNzkuNDU2KzEuNDAyKnI7ZVtuKzFdPXQrMTM1LjQ1OS0uMzQ0KmEtLjcxNCpyO2VbbisyXT10LTIyNi44MTYrMS43NzIqYX1yZXR1cm4gZX1fY29udmVydFljY2tUb1JnYihlKXtsZXQgdCxhLHIsbixpPTA7Zm9yKGxldCBzPTAsbz1lLmxlbmd0aDtzPG87cys9NCl7dD1lW3NdO2E9ZVtzKzFdO3I9ZVtzKzJdO249ZVtzKzNdO2VbaSsrXT1hKigtNjYwNjM1NjY5NDIwMzY0ZS0xOSphKy4wMDA0MzcxMzA0NzU5MjYyMzIqci01NDA4MDYxMDA2NDU5OWUtMTgqdCsuMDAwNDg0NDk3OTcxMjAyODEqbi0uMTU0MzYyMTUxODcxMTI2KS0xMjIuNjcxOTU0MDY4OTQrciooLS4wMDA5NTc5NjQzNzg0NDU3NzMqcisuMDAwODE3MDc2OTExMzQ2NjI1KnQtLjAwNDc3MjcxNDA1NDA4NzQ3Km4rMS41MzM4MDI1MzIyMTczNCkrdCooLjAwMDk2MTI1MDE4NDEzMDY4OCp0LS4wMDI2NjI1NzMzMjI4MzkzMypuKy40ODM1NzA4ODQ1MTI2NSkrbiooLS4wMDAzMzYxOTcxNzc2MTgzOTQqbisuNDg0NzkxNTYxNDkwNzc2KTtlW2krK109MTA3LjI2ODAzOTM5NzcyNCthKigyMTk5MjcxMDQ1MjU3NDFlLTE5KmEtLjAwMDY0MDk5MjAxODI5Nzk0NSpyKy4wMDA2NTkzOTcwMDEyNDU1NzcqdCsuMDAwNDI2MTA1NjUyOTM4ODM3Km4tLjE3NjQ5MTc5MjQ2Mjg3NSkrciooLS4wMDA3NzgyNjk5NDE1MTM2ODMqcisuMDAxMzA4NzIyNjE0MDgyNzUqdCsuMDAwNzcwNDgyNjMxODAxMTMyKm4tLjE1MTA1MTQ5Mjc3NTU2MikrdCooLjAwMTI2OTM1MzY4MTE0ODQzKnQtLjAwMjY1MDkwMTg5MDEwODk4Km4rLjI1ODAyOTEwMjA2ODQ1KStuKigtLjAwMDMxODkxMzExNzU4ODMyOCpuLS4yMTM3NDI0MDAzMjM2NjUpO2VbaSsrXT1hKigtLjAwMDU3MDExNTE5Njk3MzY3NyphLTI2MzQwOTA1MTAwNDU4OWUtMTkqcisuMDAyMDc0MTA4ODExNTAxMip0LS4wMDI4ODI2MDIzNjg1MzQ0MipuKy44MTQyNzI5NjgzNTkyOTUpLTIwLjgxMDAxMjU0Njk0NytyKigtMTUzNDk2MDU3NDQwOTc1ZS0xOSpyLS4wMDAxMzI2ODkwNDM5NjE0NDYqdCsuMDAwNTYwODMzNjkxMjQyODEyKm4tLjE5NTE1MjAyNzUzNDA0OSkrdCooLjAwMTc0NDE4MTMyOTI3NTgyKnQtLjAwMjU1MjQzMzIxNDM5MzQ3Km4rLjExNjkzNTAyMDQ2NTE0NSkrbiooLS4wMDAzNDM1MzE5OTY1MTA1NTUqbisuMjQxNjUyNjAyMzI0MDcpfXJldHVybiBlLnN1YmFycmF5KDAsaSl9X2NvbnZlcnRZY2NrVG9DbXlrKGUpe2xldCB0LGEscjtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKz00KXt0PWVbbl07YT1lW24rMV07cj1lW24rMl07ZVtuXT00MzQuNDU2LXQtMS40MDIqcjtlW24rMV09MTE5LjU0MS10Ky4zNDQqYSsuNzE0KnI7ZVtuKzJdPTQ4MS44MTYtdC0xLjc3MiphfXJldHVybiBlfV9jb252ZXJ0Q215a1RvUmdiKGUpe2xldCB0LGEscixuLGk9MDtmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKz00KXt0PWVbc107YT1lW3MrMV07cj1lW3MrMl07bj1lW3MrM107ZVtpKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNyphKy4wMDAyODk0NzE4MTg4NjQzMjk0KnIrLjAwMzI2NDIzMTA1NzUzNzgwNipuLTEuMTE4NTYxMTg2NzIwMzkzNykrYSooMjYzNzQxMDc2MTYwODk0MDVlLTIxKmEtODYyNjk0OTE1ODYzODU3MmUtMjAqci0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSpuLS4wMjE1NTY4ODc5NDk3ODk2NykrciooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKnItLjAwMDMyNjc4MDgyNzk0ODUyODYqbisuMDY4Njc0MjIzODU5NTM0NSktbiooLjAwMDMzNjE5NzE3NzYxODM5MzcqbisuNzQzMDY1OTE1MTM0MjI1NCk7ZVtpKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KmErLjAwMDEwNTY3MzU5NjE4NjgzNTkzKnIrLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqbi0uMzEwOTY4OTU4NzUxNTg3NSkrYSooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCphKy4wMDAyNzAyODQ1MjUzNTM0NzE0KnIrLjAwMjAyMDAzMDg5NzczMDcxNTYqbi0uNzQ4ODA1MjE2NzAxNTQ5NCkrciooNjgzNDgxNTk5ODIzNTY2MmUtMjAqcisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqbi0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLW4qKC4wMDAzMTg5MTMxMTc1ODgzMjgxKm4rLjczNjQ4ODM4MDc3MzMxNjgpO2VbaSsrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKmErLjAwMDQ3NTE5ODUwOTc1ODM1ODkqci0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqbi0uMDU1NjIxODY5ODAyNjQwMzQpK2EqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NiphKy4wMDA5NjkyMjM5MTMwNzI1MTg2KnIrLjAwMDc3ODI2OTI0NTAwMzYyNTMqbi0uNDQwMTUyMzIzNjc1MjY0NjMpK3IqKDUuMDY4ODgyOTE0MDY4NzY5ZS03KnIrLjAwMTc3NzgzNjkwMTEzNzUwNzEqbi0uNzU5MTQ1NDY0OTc0OTYwOSktbiooLjAwMDM0MzUzMTk5NjUxMDU1NTMqbisuNzA2Mzc3MDE4NjE2MDE0NCl9cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX1nZXREYXRhKHt3aWR0aDplLGhlaWdodDp0LGZvcmNlUkdCOmE9ITEsaXNTb3VyY2VQREY6cj0hMX0pe2lmKHRoaXMubnVtQ29tcG9uZW50cz40KXRocm93IG5ldyBKcGVnRXJyb3IoIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGUiKTtjb25zdCBuPXRoaXMuX2dldExpbmVhcml6ZWRCbG9ja0RhdGEoZSx0LHIpO2lmKDE9PT10aGlzLm51bUNvbXBvbmVudHMmJmEpe2NvbnN0IGU9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqbi5sZW5ndGgpO2xldCB0PTA7Zm9yKGNvbnN0IGEgb2Ygbil7ZVt0KytdPWE7ZVt0KytdPWE7ZVt0KytdPWF9cmV0dXJuIGV9aWYoMz09PXRoaXMubnVtQ29tcG9uZW50cyYmdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihuKTtpZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gYT90aGlzLl9jb252ZXJ0WWNja1RvUmdiKG4pOnRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKG4pO2lmKGEpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2Iobil9cmV0dXJuIG59fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpweFN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyksbj1hKDI4KSxpPWEoMik7Y2xhc3MgSnB4U3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLm1heWJlTGVuZ3RoPXQ7dGhpcy5wYXJhbXM9YX1nZXQgYnl0ZXMoKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBlPW5ldyBuLkpweEltYWdlO2UucGFyc2UodGhpcy5ieXRlcyk7Y29uc3QgdD1lLndpZHRoLGE9ZS5oZWlnaHQscj1lLmNvbXBvbmVudHNDb3VudCxpPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1pKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtjb25zdCBuPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEqcik7Zm9yKGxldCBhPTA7YTxpO2ErKyl7Y29uc3QgaT1lLnRpbGVzW2FdLHM9aS53aWR0aCxvPWkuaGVpZ2h0LGM9aS5sZWZ0LGw9aS50b3AsaD1pLml0ZW1zO2xldCB1PTAsZD0odCpsK2MpKnI7Y29uc3QgZj10KnIsZz1zKnI7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3QgZT1oLnN1YmFycmF5KHUsdStnKTtuLnNldChlLGQpO3UrPWc7ZCs9Zn19dGhpcy5idWZmZXI9bn10aGlzLmJ1ZmZlckxlbmd0aD10aGlzLmJ1ZmZlci5sZW5ndGg7dGhpcy5lb2Y9ITB9fXQuSnB4U3RyZWFtPUpweFN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpweEltYWdlPXZvaWQgMDt2YXIgcj1hKDIpLG49YSg0KSxpPWEoMjQpO2NsYXNzIEpweEVycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBKUFggZXJyb3I6ICR7ZX1gLCJKcHhFcnJvciIpfX1jb25zdCBzPXtMTDowLExIOjEsSEw6MSxISDoyfTt0LkpweEltYWdlPWNsYXNzIEpweEltYWdle2NvbnN0cnVjdG9yKCl7dGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZT0hMX1wYXJzZShlKXtpZig2NTM1OT09PSgwLG4ucmVhZFVpbnQxNikoZSwwKSl7dGhpcy5wYXJzZUNvZGVzdHJlYW0oZSwwLGUubGVuZ3RoKTtyZXR1cm59Y29uc3QgdD1lLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTx0Oyl7bGV0IGk9OCxzPSgwLG4ucmVhZFVpbnQzMikoZSxhKTtjb25zdCBvPSgwLG4ucmVhZFVpbnQzMikoZSxhKzQpO2ErPWk7aWYoMT09PXMpe3M9NDI5NDk2NzI5NiooMCxuLnJlYWRVaW50MzIpKGUsYSkrKDAsbi5yZWFkVWludDMyKShlLGErNCk7YSs9ODtpKz04fTA9PT1zJiYocz10LWEraSk7aWYoczxpKXRocm93IG5ldyBKcHhFcnJvcigiSW52YWxpZCBib3ggZmllbGQgc2l6ZSIpO2NvbnN0IGM9cy1pO2xldCBsPSEwO3N3aXRjaChvKXtjYXNlIDE3ODU3Mzc4MzI6bD0hMTticmVhaztjYXNlIDE2NjgyNDY2NDI6Y29uc3QgdD1lW2FdO2lmKDE9PT10KXtjb25zdCB0PSgwLG4ucmVhZFVpbnQzMikoZSxhKzMpO3N3aXRjaCh0KXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLHIud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK3QpfX1lbHNlIDI9PT10JiYoMCxyLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUsYSxhK2MpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLG4ucmVhZFVpbnQzMikoZSxhKSYmKDAsci53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OmNvbnN0IGk9U3RyaW5nLmZyb21DaGFyQ29kZShvPj4yNCYyNTUsbz4+MTYmMjU1LG8+PjgmMjU1LDI1NSZvKTsoMCxyLndhcm4pKGBVbnN1cHBvcnRlZCBoZWFkZXIgdHlwZSAke299ICgke2l9KS5gKX1sJiYoYSs9Yyl9fXBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGUpe2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7dD49MDspe2NvbnN0IGE9dDt0PWUuZ2V0Qnl0ZSgpO2lmKDY1MzYxPT09KGE8PDh8dCkpe2Uuc2tpcCg0KTtjb25zdCB0PWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjA7ZS5za2lwKDE2KTtjb25zdCBpPWUuZ2V0VWludDE2KCk7dGhpcy53aWR0aD10LXI7dGhpcy5oZWlnaHQ9YS1uO3RoaXMuY29tcG9uZW50c0NvdW50PWk7dGhpcy5iaXRzUGVyQ29tcG9uZW50PTg7cmV0dXJufX10aHJvdyBuZXcgSnB4RXJyb3IoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX1wYXJzZUNvZGVzdHJlYW0oZSx0LGEpe2NvbnN0IGk9e307bGV0IHM9ITE7dHJ5e2xldCBvPXQ7Zm9yKDtvKzE8YTspe2NvbnN0IHQ9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7bGV0IGEsYyxsLGgsdSxkLGY9MDtzd2l0Y2godCl7Y2FzZSA2NTM1OTppLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IGc9e307Zy5Yc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzQpO2cuWXNpej0oMCxuLnJlYWRVaW50MzIpKGUsbys4KTtnLlhPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzEyKTtnLllPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzE2KTtnLlhUc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzIwKTtnLllUc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzI0KTtnLlhUT3Npej0oMCxuLnJlYWRVaW50MzIpKGUsbysyOCk7Zy5ZVE9zaXo9KDAsbi5yZWFkVWludDMyKShlLG8rMzIpO2NvbnN0IHA9KDAsbi5yZWFkVWludDE2KShlLG8rMzYpO2cuQ3Npej1wO2NvbnN0IG09W107YT1vKzM4O2ZvcihsZXQgdD0wO3Q8cDt0Kyspe2NvbnN0IHQ9e3ByZWNpc2lvbjoxKygxMjcmZVthXSksaXNTaWduZWQ6ISEoMTI4JmVbYV0pLFhSc2l6OmVbYSsxXSxZUnNpejplW2ErMl19O2ErPTM7Y2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyh0LGcpO20ucHVzaCh0KX1pLlNJWj1nO2kuY29tcG9uZW50cz1tO2NhbGN1bGF0ZVRpbGVHcmlkcyhpLG0pO2kuUUNDPVtdO2kuQ09DPVtdO2JyZWFrO2Nhc2UgNjUzNzI6Zj0oMCxuLnJlYWRVaW50MTYpKGUsbyk7Y29uc3QgYj17fTthPW8rMjtjPWVbYSsrXTtzd2l0Y2goMzEmYyl7Y2FzZSAwOmg9ODt1PSEwO2JyZWFrO2Nhc2UgMTpoPTE2O3U9ITE7YnJlYWs7Y2FzZSAyOmg9MTY7dT0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrYyl9Yi5ub1F1YW50aXphdGlvbj04PT09aDtiLnNjYWxhckV4cG91bmRlZD11O2IuZ3VhcmRCaXRzPWM+PjU7bD1bXTtmb3IoO2E8ZitvOyl7Y29uc3QgdD17fTtpZig4PT09aCl7dC5lcHNpbG9uPWVbYSsrXT4+Mzt0Lm11PTB9ZWxzZXt0LmVwc2lsb249ZVthXT4+Mzt0Lm11PSg3JmVbYV0pPDw4fGVbYSsxXTthKz0yfWwucHVzaCh0KX1iLlNQcWNkcz1sO2lmKGkubWFpbkhlYWRlcilpLlFDRD1iO2Vsc2V7aS5jdXJyZW50VGlsZS5RQ0Q9YjtpLmN1cnJlbnRUaWxlLlFDQz1bXX1icmVhaztjYXNlIDY1MzczOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IHk9e307YT1vKzI7bGV0IHc7aWYoaS5TSVouQ3NpejwyNTcpdz1lW2ErK107ZWxzZXt3PSgwLG4ucmVhZFVpbnQxNikoZSxhKTthKz0yfWM9ZVthKytdO3N3aXRjaCgzMSZjKXtjYXNlIDA6aD04O3U9ITA7YnJlYWs7Y2FzZSAxOmg9MTY7dT0hMTticmVhaztjYXNlIDI6aD0xNjt1PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitjKX15Lm5vUXVhbnRpemF0aW9uPTg9PT1oO3kuc2NhbGFyRXhwb3VuZGVkPXU7eS5ndWFyZEJpdHM9Yz4+NTtsPVtdO2Zvcig7YTxmK287KXtjb25zdCB0PXt9O2lmKDg9PT1oKXt0LmVwc2lsb249ZVthKytdPj4zO3QubXU9MH1lbHNle3QuZXBzaWxvbj1lW2FdPj4zO3QubXU9KDcmZVthXSk8PDh8ZVthKzFdO2ErPTJ9bC5wdXNoKHQpfXkuU1BxY2RzPWw7aS5tYWluSGVhZGVyP2kuUUNDW3ddPXk6aS5jdXJyZW50VGlsZS5RQ0Nbd109eTticmVhaztjYXNlIDY1MzYyOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IFM9e307YT1vKzI7Y29uc3QgeD1lW2ErK107Uy5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmeCk7Uy5zb3BNYXJrZXJVc2VkPSEhKDImeCk7Uy5lcGhNYXJrZXJVc2VkPSEhKDQmeCk7Uy5wcm9ncmVzc2lvbk9yZGVyPWVbYSsrXTtTLmxheWVyc0NvdW50PSgwLG4ucmVhZFVpbnQxNikoZSxhKTthKz0yO1MubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVthKytdO1MuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbYSsrXTtTLnhjYj0yKygxNSZlW2ErK10pO1MueWNiPTIrKDE1JmVbYSsrXSk7Y29uc3Qgaz1lW2ErK107Uy5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzPSEhKDEmayk7Uy5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzPSEhKDImayk7Uy50ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3M9ISEoNCZrKTtTLnZlcnRpY2FsbHlTdHJpcGU9ISEoOCZrKTtTLnByZWRpY3RhYmxlVGVybWluYXRpb249ISEoMTYmayk7Uy5zZWdtZW50YXRpb25TeW1ib2xVc2VkPSEhKDMyJmspO1MucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uPWVbYSsrXTtpZihTLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMpe2NvbnN0IHQ9W107Zm9yKDthPGYrbzspe2NvbnN0IHI9ZVthKytdO3QucHVzaCh7UFB4OjE1JnIsUFB5OnI+PjR9KX1TLnByZWNpbmN0c1NpemVzPXR9Y29uc3QgQz1bXTtTLnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJkMucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpO1MudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZDLnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpO1MudmVydGljYWxseVN0cmlwZSYmQy5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIik7Uy5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZDLnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKTtpZihDLmxlbmd0aD4wKXtzPSEwOygwLHIud2FybikoYEpQWDogVW5zdXBwb3J0ZWQgQ09EIG9wdGlvbnMgKCR7Qy5qb2luKCIsICIpfSkuYCl9aWYoaS5tYWluSGVhZGVyKWkuQ09EPVM7ZWxzZXtpLmN1cnJlbnRUaWxlLkNPRD1TO2kuY3VycmVudFRpbGUuQ09DPVtdfWJyZWFrO2Nhc2UgNjU0MjQ6Zj0oMCxuLnJlYWRVaW50MTYpKGUsbyk7ZD17fTtkLmluZGV4PSgwLG4ucmVhZFVpbnQxNikoZSxvKzIpO2QubGVuZ3RoPSgwLG4ucmVhZFVpbnQzMikoZSxvKzQpO2QuZGF0YUVuZD1kLmxlbmd0aCtvLTI7ZC5wYXJ0SW5kZXg9ZVtvKzhdO2QucGFydHNDb3VudD1lW28rOV07aS5tYWluSGVhZGVyPSExO2lmKDA9PT1kLnBhcnRJbmRleCl7ZC5DT0Q9aS5DT0Q7ZC5DT0M9aS5DT0Muc2xpY2UoMCk7ZC5RQ0Q9aS5RQ0Q7ZC5RQ0M9aS5RQ0Muc2xpY2UoMCl9aS5jdXJyZW50VGlsZT1kO2JyZWFrO2Nhc2UgNjU0Mjc6ZD1pLmN1cnJlbnRUaWxlO2lmKDA9PT1kLnBhcnRJbmRleCl7aW5pdGlhbGl6ZVRpbGUoaSxkLmluZGV4KTtidWlsZFBhY2tldHMoaSl9Zj1kLmRhdGFFbmQtbztwYXJzZVRpbGVQYWNrZXRzKGksZSxvLGYpO2JyZWFrO2Nhc2UgNjUzNjM6KDAsci53YXJuKSgiSlBYOiBDb2Rlc3RyZWFtIGNvZGUgMHhGRjUzIChDT0MpIGlzIG5vdCBpbXBsZW1lbnRlZC4iKTtjYXNlIDY1MzY1OmNhc2UgNjUzNjc6Y2FzZSA2NTM2ODpjYXNlIDY1MzgwOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvZGVzdHJlYW0gY29kZTogIit0LnRvU3RyaW5nKDE2KSl9bys9Zn19Y2F0Y2goZSl7aWYoc3x8dGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZSl0aHJvdyBuZXcgSnB4RXJyb3IoZS5tZXNzYWdlKTsoMCxyLndhcm4pKGBKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICIke2UubWVzc2FnZX0iLmApfXRoaXMudGlsZXM9ZnVuY3Rpb24gdHJhbnNmb3JtQ29tcG9uZW50cyhlKXtjb25zdCB0PWUuU0laLGE9ZS5jb21wb25lbnRzLHI9dC5Dc2l6LG49W107Zm9yKGxldCB0PTAsaT1lLnRpbGVzLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPWUudGlsZXNbdF0scz1bXTtmb3IobGV0IHQ9MDt0PHI7dCsrKXNbdF09dHJhbnNmb3JtVGlsZShlLGksdCk7Y29uc3Qgbz1zWzBdLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KG8uaXRlbXMubGVuZ3RoKnIpLGw9e2xlZnQ6by5sZWZ0LHRvcDpvLnRvcCx3aWR0aDpvLndpZHRoLGhlaWdodDpvLmhlaWdodCxpdGVtczpjfTtsZXQgaCx1LGQsZixnLHAsbSxiPTA7aWYoaS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKXtjb25zdCBlPTQ9PT1yLHQ9c1swXS5pdGVtcyxuPXNbMV0uaXRlbXMsbz1zWzJdLml0ZW1zLGw9ZT9zWzNdLml0ZW1zOm51bGw7aD1hWzBdLnByZWNpc2lvbi04O3U9LjUrKDEyODw8aCk7Y29uc3QgeT1pLmNvbXBvbmVudHNbMF0sdz1yLTM7Zj10Lmxlbmd0aDtpZih5LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24pZm9yKGQ9MDtkPGY7ZCsrLGIrPXcpe2c9dFtkXSt1O3A9bltkXTttPW9bZF07Y29uc3QgZT1nLShtK3A+PjIpO2NbYisrXT1lK20+Pmg7Y1tiKytdPWU+Pmg7Y1tiKytdPWUrcD4+aH1lbHNlIGZvcihkPTA7ZDxmO2QrKyxiKz13KXtnPXRbZF0rdTtwPW5bZF07bT1vW2RdO2NbYisrXT1nKzEuNDAyKm0+Pmg7Y1tiKytdPWctLjM0NDEzKnAtLjcxNDE0Km0+Pmg7Y1tiKytdPWcrMS43NzIqcD4+aH1pZihlKWZvcihkPTAsYj0zO2Q8ZjtkKyssYis9NCljW2JdPWxbZF0rdT4+aH1lbHNlIGZvcihsZXQgZT0wO2U8cjtlKyspe2NvbnN0IHQ9c1tlXS5pdGVtcztoPWFbZV0ucHJlY2lzaW9uLTg7dT0uNSsoMTI4PDxoKTtmb3IoYj1lLGQ9MCxmPXQubGVuZ3RoO2Q8ZjtkKyspe2NbYl09dFtkXSt1Pj5oO2IrPXJ9fW4ucHVzaChsKX1yZXR1cm4gbn0oaSk7dGhpcy53aWR0aD1pLlNJWi5Yc2l6LWkuU0laLlhPc2l6O3RoaXMuaGVpZ2h0PWkuU0laLllzaXotaS5TSVouWU9zaXo7dGhpcy5jb21wb25lbnRzQ291bnQ9aS5TSVouQ3Npen19O2Z1bmN0aW9uIGNhbGN1bGF0ZUNvbXBvbmVudERpbWVuc2lvbnMoZSx0KXtlLngwPU1hdGguY2VpbCh0LlhPc2l6L2UuWFJzaXopO2UueDE9TWF0aC5jZWlsKHQuWHNpei9lLlhSc2l6KTtlLnkwPU1hdGguY2VpbCh0LllPc2l6L2UuWVJzaXopO2UueTE9TWF0aC5jZWlsKHQuWXNpei9lLllSc2l6KTtlLndpZHRoPWUueDEtZS54MDtlLmhlaWdodD1lLnkxLWUueTB9ZnVuY3Rpb24gY2FsY3VsYXRlVGlsZUdyaWRzKGUsdCl7Y29uc3QgYT1lLlNJWixyPVtdO2xldCBuO2NvbnN0IGk9TWF0aC5jZWlsKChhLlhzaXotYS5YVE9zaXopL2EuWFRzaXopLHM9TWF0aC5jZWlsKChhLllzaXotYS5ZVE9zaXopL2EuWVRzaXopO2ZvcihsZXQgZT0wO2U8cztlKyspZm9yKGxldCB0PTA7dDxpO3QrKyl7bj17fTtuLnR4MD1NYXRoLm1heChhLlhUT3Npeit0KmEuWFRzaXosYS5YT3Npeik7bi50eTA9TWF0aC5tYXgoYS5ZVE9zaXorZSphLllUc2l6LGEuWU9zaXopO24udHgxPU1hdGgubWluKGEuWFRPc2l6Kyh0KzEpKmEuWFRzaXosYS5Yc2l6KTtuLnR5MT1NYXRoLm1pbihhLllUT3NpeisoZSsxKSphLllUc2l6LGEuWXNpeik7bi53aWR0aD1uLnR4MS1uLnR4MDtuLmhlaWdodD1uLnR5MS1uLnR5MDtuLmNvbXBvbmVudHM9W107ci5wdXNoKG4pfWUudGlsZXM9cjtmb3IobGV0IGU9MCxpPWEuQ3NpejtlPGk7ZSsrKXtjb25zdCBhPXRbZV07Zm9yKGxldCB0PTAsaT1yLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPXt9O249clt0XTtpLnRjeDA9TWF0aC5jZWlsKG4udHgwL2EuWFJzaXopO2kudGN5MD1NYXRoLmNlaWwobi50eTAvYS5ZUnNpeik7aS50Y3gxPU1hdGguY2VpbChuLnR4MS9hLlhSc2l6KTtpLnRjeTE9TWF0aC5jZWlsKG4udHkxL2EuWVJzaXopO2kud2lkdGg9aS50Y3gxLWkudGN4MDtpLmhlaWdodD1pLnRjeTEtaS50Y3kwO24uY29tcG9uZW50c1tlXT1pfX19ZnVuY3Rpb24gZ2V0QmxvY2tzRGltZW5zaW9ucyhlLHQsYSl7Y29uc3Qgcj10LmNvZGluZ1N0eWxlUGFyYW1ldGVycyxuPXt9O2lmKHIuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cyl7bi5QUHg9ci5wcmVjaW5jdHNTaXplc1thXS5QUHg7bi5QUHk9ci5wcmVjaW5jdHNTaXplc1thXS5QUHl9ZWxzZXtuLlBQeD0xNTtuLlBQeT0xNX1uLnhjYl89YT4wP01hdGgubWluKHIueGNiLG4uUFB4LTEpOk1hdGgubWluKHIueGNiLG4uUFB4KTtuLnljYl89YT4wP01hdGgubWluKHIueWNiLG4uUFB5LTEpOk1hdGgubWluKHIueWNiLG4uUFB5KTtyZXR1cm4gbn1mdW5jdGlvbiBidWlsZFByZWNpbmN0cyhlLHQsYSl7Y29uc3Qgcj0xPDxhLlBQeCxuPTE8PGEuUFB5LGk9MD09PXQucmVzTGV2ZWwscz0xPDxhLlBQeCsoaT8wOi0xKSxvPTE8PGEuUFB5KyhpPzA6LTEpLGM9dC50cngxPnQudHJ4MD9NYXRoLmNlaWwodC50cngxL3IpLU1hdGguZmxvb3IodC50cngwL3IpOjAsbD10LnRyeTE+dC50cnkwP01hdGguY2VpbCh0LnRyeTEvbiktTWF0aC5mbG9vcih0LnRyeTAvbik6MCxoPWMqbDt0LnByZWNpbmN0UGFyYW1ldGVycz17cHJlY2luY3RXaWR0aDpyLHByZWNpbmN0SGVpZ2h0Om4sbnVtcHJlY2luY3Rzd2lkZTpjLG51bXByZWNpbmN0c2hpZ2g6bCxudW1wcmVjaW5jdHM6aCxwcmVjaW5jdFdpZHRoSW5TdWJiYW5kOnMscHJlY2luY3RIZWlnaHRJblN1YmJhbmQ6b319ZnVuY3Rpb24gYnVpbGRDb2RlYmxvY2tzKGUsdCxhKXtjb25zdCByPWEueGNiXyxuPWEueWNiXyxpPTE8PHIscz0xPDxuLG89dC50YngwPj5yLGM9dC50YnkwPj5uLGw9dC50YngxK2ktMT4+cixoPXQudGJ5MStzLTE+Pm4sdT10LnJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLGQ9W10sZj1bXTtsZXQgZyxwLG0sYjtmb3IocD1jO3A8aDtwKyspZm9yKGc9bztnPGw7ZysrKXttPXtjYng6ZyxjYnk6cCx0YngwOmkqZyx0YnkwOnMqcCx0YngxOmkqKGcrMSksdGJ5MTpzKihwKzEpfTttLnRieDBfPU1hdGgubWF4KHQudGJ4MCxtLnRieDApO20udGJ5MF89TWF0aC5tYXgodC50YnkwLG0udGJ5MCk7bS50YngxXz1NYXRoLm1pbih0LnRieDEsbS50YngxKTttLnRieTFfPU1hdGgubWluKHQudGJ5MSxtLnRieTEpO2I9TWF0aC5mbG9vcigobS50YngwXy10LnRieDApL3UucHJlY2luY3RXaWR0aEluU3ViYmFuZCkrTWF0aC5mbG9vcigobS50YnkwXy10LnRieTApL3UucHJlY2luY3RIZWlnaHRJblN1YmJhbmQpKnUubnVtcHJlY2luY3Rzd2lkZTttLnByZWNpbmN0TnVtYmVyPWI7bS5zdWJiYW5kVHlwZT10LnR5cGU7bS5MYmxvY2s9MztpZihtLnRieDFfPD1tLnRieDBffHxtLnRieTFfPD1tLnRieTBfKWNvbnRpbnVlO2QucHVzaChtKTtsZXQgZT1mW2JdO2lmKHZvaWQgMCE9PWUpe2c8ZS5jYnhNaW4/ZS5jYnhNaW49ZzpnPmUuY2J4TWF4JiYoZS5jYnhNYXg9Zyk7cDxlLmNieU1pbj9lLmNieE1pbj1wOnA+ZS5jYnlNYXgmJihlLmNieU1heD1wKX1lbHNlIGZbYl09ZT17Y2J4TWluOmcsY2J5TWluOnAsY2J4TWF4OmcsY2J5TWF4OnB9O20ucHJlY2luY3Q9ZX10LmNvZGVibG9ja1BhcmFtZXRlcnM9e2NvZGVibG9ja1dpZHRoOnIsY29kZWJsb2NrSGVpZ2h0Om4sbnVtY29kZWJsb2Nrd2lkZTpsLW8rMSxudW1jb2RlYmxvY2toaWdoOmgtYysxfTt0LmNvZGVibG9ja3M9ZDt0LnByZWNpbmN0cz1mfWZ1bmN0aW9uIGNyZWF0ZVBhY2tldChlLHQsYSl7Y29uc3Qgcj1bXSxuPWUuc3ViYmFuZHM7Zm9yKGxldCBlPTAsYT1uLmxlbmd0aDtlPGE7ZSsrKXtjb25zdCBhPW5bZV0uY29kZWJsb2Nrcztmb3IobGV0IGU9MCxuPWEubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49YVtlXTtuLnByZWNpbmN0TnVtYmVyPT09dCYmci5wdXNoKG4pfX1yZXR1cm57bGF5ZXJOdW1iZXI6YSxjb2RlYmxvY2tzOnJ9fWZ1bmN0aW9uIExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylzPU1hdGgubWF4KHMsci5jb21wb25lbnRzW2VdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO2xldCBvPTAsYz0wLGw9MCxoPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO288bjtvKyspe2Zvcig7Yzw9cztjKyspe2Zvcig7bDxpO2wrKyl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF07aWYoYz5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW2NdLGE9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Zvcig7aDxhOyl7Y29uc3QgZT1jcmVhdGVQYWNrZXQodCxoLG8pO2grKztyZXR1cm4gZX1oPTB9bD0wfWM9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylzPU1hdGgubWF4KHMsci5jb21wb25lbnRzW2VdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO2xldCBvPTAsYz0wLGw9MCxoPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO288PXM7bysrKXtmb3IoO2M8bjtjKyspe2Zvcig7bDxpO2wrKyl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF07aWYobz5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW29dLGE9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Zvcig7aDxhOyl7Y29uc3QgZT1jcmVhdGVQYWNrZXQodCxoLGMpO2grKztyZXR1cm4gZX1oPTB9bD0wfWM9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzLG8sYyxsLGg9MDtmb3IoYz0wO2M8aTtjKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2NdO2g9TWF0aC5tYXgoaCxlLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpfWNvbnN0IHU9bmV3IEludDMyQXJyYXkoaCsxKTtmb3Iobz0wO288PWg7KytvKXtsZXQgZT0wO2ZvcihjPTA7YzxpOysrYyl7Y29uc3QgdD1yLmNvbXBvbmVudHNbY10ucmVzb2x1dGlvbnM7bzx0Lmxlbmd0aCYmKGU9TWF0aC5tYXgoZSx0W29dLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpKX11W29dPWV9cz0wO289MDtjPTA7bD0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCl7Zm9yKDtvPD1oO28rKyl7Zm9yKDtsPHVbb107bCsrKXtmb3IoO2M8aTtjKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2NdO2lmKG8+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KWNvbnRpbnVlO2NvbnN0IHQ9ZS5yZXNvbHV0aW9uc1tvXSxhPXQucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztpZighKGw+PWEpKXtmb3IoO3M8bjspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQsbCxzKTtzKys7cmV0dXJuIGV9cz0wfX1jPTB9bD0wfXRocm93IG5ldyBKcHhFcnJvcigiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gUG9zaXRpb25Db21wb25lbnRSZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihlKXtjb25zdCB0PWUuU0laLGE9ZS5jdXJyZW50VGlsZS5pbmRleCxyPWUudGlsZXNbYV0sbj1yLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsaT10LkNzaXoscz1nZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKHIpLG89cztsZXQgYz0wLGw9MCxoPTAsdT0wLGQ9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpe2Zvcig7ZDxvLm1heE51bUhpZ2g7ZCsrKXtmb3IoO3U8by5tYXhOdW1XaWRlO3UrKyl7Zm9yKDtoPGk7aCsrKXtjb25zdCBlPXIuY29tcG9uZW50c1toXSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmb3IoO2w8PXQ7bCsrKXtjb25zdCB0PWUucmVzb2x1dGlvbnNbbF0sYT1zLmNvbXBvbmVudHNbaF0ucmVzb2x1dGlvbnNbbF0scj1nZXRQcmVjaW5jdEluZGV4SWZFeGlzdCh1LGQsYSxvLHQpO2lmKG51bGwhPT1yKXtmb3IoO2M8bjspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQscixjKTtjKys7cmV0dXJuIGV9Yz0wfX1sPTB9aD0wfXU9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LHM9Z2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZShyKTtsZXQgbz0wLGM9MCxsPTAsaD0wLHU9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpe2Zvcig7bDxpOysrbCl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF0sdD1zLmNvbXBvbmVudHNbbF0sYT1lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7Zm9yKDt1PHQubWF4TnVtSGlnaDt1Kyspe2Zvcig7aDx0Lm1heE51bVdpZGU7aCsrKXtmb3IoO2M8PWE7YysrKXtjb25zdCBhPWUucmVzb2x1dGlvbnNbY10scj10LnJlc29sdXRpb25zW2NdLGk9Z2V0UHJlY2luY3RJbmRleElmRXhpc3QoaCx1LHIsdCxhKTtpZihudWxsIT09aSl7Zm9yKDtvPG47KXtjb25zdCBlPWNyZWF0ZVBhY2tldChhLGksbyk7bysrO3JldHVybiBlfW89MH19Yz0wfWg9MH11PTB9dGhyb3cgbmV3IEpweEVycm9yKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBnZXRQcmVjaW5jdEluZGV4SWZFeGlzdChlLHQsYSxyLG4pe2NvbnN0IGk9ZSpyLm1pbldpZHRoLHM9dCpyLm1pbkhlaWdodDtpZihpJWEud2lkdGghPTB8fHMlYS5oZWlnaHQhPTApcmV0dXJuIG51bGw7Y29uc3Qgbz1zL2Eud2lkdGgqbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZTtyZXR1cm4gaS9hLmhlaWdodCtvfWZ1bmN0aW9uIGdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUoZSl7Y29uc3QgdD1lLmNvbXBvbmVudHMubGVuZ3RoO2xldCBhPU51bWJlci5NQVhfVkFMVUUscj1OdW1iZXIuTUFYX1ZBTFVFLG49MCxpPTA7Y29uc3Qgcz1uZXcgQXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0O28rKyl7Y29uc3QgdD1lLmNvbXBvbmVudHNbb10sYz10LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbD1uZXcgQXJyYXkoYysxKTtsZXQgaD1OdW1iZXIuTUFYX1ZBTFVFLHU9TnVtYmVyLk1BWF9WQUxVRSxkPTAsZj0wLGc9MTtmb3IobGV0IGU9YztlPj0wOy0tZSl7Y29uc3QgYT10LnJlc29sdXRpb25zW2VdLHI9ZyphLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoLG49ZyphLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdEhlaWdodDtoPU1hdGgubWluKGgscik7dT1NYXRoLm1pbih1LG4pO2Q9TWF0aC5tYXgoZCxhLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKTtmPU1hdGgubWF4KGYsYS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaCk7bFtlXT17d2lkdGg6cixoZWlnaHQ6bn07Zzw8PTF9YT1NYXRoLm1pbihhLGgpO3I9TWF0aC5taW4ocix1KTtuPU1hdGgubWF4KG4sZCk7aT1NYXRoLm1heChpLGYpO3Nbb109e3Jlc29sdXRpb25zOmwsbWluV2lkdGg6aCxtaW5IZWlnaHQ6dSxtYXhOdW1XaWRlOmQsbWF4TnVtSGlnaDpmfX1yZXR1cm57Y29tcG9uZW50czpzLG1pbldpZHRoOmEsbWluSGVpZ2h0OnIsbWF4TnVtV2lkZTpuLG1heE51bUhpZ2g6aX19ZnVuY3Rpb24gYnVpbGRQYWNrZXRzKGUpe2NvbnN0IHQ9ZS5TSVosYT1lLmN1cnJlbnRUaWxlLmluZGV4LHI9ZS50aWxlc1thXSxuPXQuQ3Npejtmb3IobGV0IGU9MDtlPG47ZSsrKXtjb25zdCB0PXIuY29tcG9uZW50c1tlXSxhPXQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxuPVtdLGk9W107Zm9yKGxldCBlPTA7ZTw9YTtlKyspe2NvbnN0IHI9Z2V0QmxvY2tzRGltZW5zaW9ucygwLHQsZSkscz17fSxvPTE8PGEtZTtzLnRyeDA9TWF0aC5jZWlsKHQudGN4MC9vKTtzLnRyeTA9TWF0aC5jZWlsKHQudGN5MC9vKTtzLnRyeDE9TWF0aC5jZWlsKHQudGN4MS9vKTtzLnRyeTE9TWF0aC5jZWlsKHQudGN5MS9vKTtzLnJlc0xldmVsPWU7YnVpbGRQcmVjaW5jdHMoMCxzLHIpO24ucHVzaChzKTtsZXQgYztpZigwPT09ZSl7Yz17fTtjLnR5cGU9IkxMIjtjLnRieDA9TWF0aC5jZWlsKHQudGN4MC9vKTtjLnRieTA9TWF0aC5jZWlsKHQudGN5MC9vKTtjLnRieDE9TWF0aC5jZWlsKHQudGN4MS9vKTtjLnRieTE9TWF0aC5jZWlsKHQudGN5MS9vKTtjLnJlc29sdXRpb249cztidWlsZENvZGVibG9ja3MoMCxjLHIpO2kucHVzaChjKTtzLnN1YmJhbmRzPVtjXX1lbHNle2NvbnN0IG49MTw8YS1lKzEsbz1bXTtjPXt9O2MudHlwZT0iSEwiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24tLjUpO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24pO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24tLjUpO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24pO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtjPXt9O2MudHlwZT0iTEgiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24pO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24tLjUpO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24pO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24tLjUpO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtjPXt9O2MudHlwZT0iSEgiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24tLjUpO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24tLjUpO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24tLjUpO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24tLjUpO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtzLnN1YmJhbmRzPW99fXQucmVzb2x1dGlvbnM9bjt0LnN1YmJhbmRzPWl9Y29uc3QgaT1yLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMucHJvZ3Jlc3Npb25PcmRlcjtzd2l0Y2goaSl7Y2FzZSAwOnIucGFja2V0c0l0ZXJhdG9yPW5ldyBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGUpO2JyZWFrO2Nhc2UgMTpyLnBhY2tldHNJdGVyYXRvcj1uZXcgUmVzb2x1dGlvbkxheWVyQ29tcG9uZW50UG9zaXRpb25JdGVyYXRvcihlKTticmVhaztjYXNlIDI6ci5wYWNrZXRzSXRlcmF0b3I9bmV3IFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoZSk7YnJlYWs7Y2FzZSAzOnIucGFja2V0c0l0ZXJhdG9yPW5ldyBQb3NpdGlvbkNvbXBvbmVudFJlc29sdXRpb25MYXllckl0ZXJhdG9yKGUpO2JyZWFrO2Nhc2UgNDpyLnBhY2tldHNJdGVyYXRvcj1uZXcgQ29tcG9uZW50UG9zaXRpb25SZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKcHhFcnJvcihgVW5zdXBwb3J0ZWQgcHJvZ3Jlc3Npb24gb3JkZXIgJHtpfWApfX1mdW5jdGlvbiBwYXJzZVRpbGVQYWNrZXRzKGUsdCxhLHIpe2xldCBpLHM9MCxvPTAsYz0hMTtmdW5jdGlvbiByZWFkQml0cyhlKXtmb3IoO288ZTspe2NvbnN0IGU9dFthK3NdO3MrKztpZihjKXtpPWk8PDd8ZTtvKz03O2M9ITF9ZWxzZXtpPWk8PDh8ZTtvKz04fTI1NT09PWUmJihjPSEwKX1vLT1lO3JldHVybiBpPj4+byYoMTw8ZSktMX1mdW5jdGlvbiBza2lwTWFya2VySWZFcXVhbChlKXtpZigyNTU9PT10W2Ercy0xXSYmdFthK3NdPT09ZSl7c2tpcEJ5dGVzKDEpO3JldHVybiEwfWlmKDI1NT09PXRbYStzXSYmdFthK3MrMV09PT1lKXtza2lwQnl0ZXMoMik7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gc2tpcEJ5dGVzKGUpe3MrPWV9ZnVuY3Rpb24gYWxpZ25Ub0J5dGUoKXtvPTA7aWYoYyl7cysrO2M9ITF9fWZ1bmN0aW9uIHJlYWRDb2RpbmdwYXNzZXMoKXtpZigwPT09cmVhZEJpdHMoMSkpcmV0dXJuIDE7aWYoMD09PXJlYWRCaXRzKDEpKXJldHVybiAyO2xldCBlPXJlYWRCaXRzKDIpO2lmKGU8MylyZXR1cm4gZSszO2U9cmVhZEJpdHMoNSk7aWYoZTwzMSlyZXR1cm4gZSs2O2U9cmVhZEJpdHMoNyk7cmV0dXJuIGUrMzd9Y29uc3QgbD1lLmN1cnJlbnRUaWxlLmluZGV4LGg9ZS50aWxlc1tsXSx1PWUuQ09ELnNvcE1hcmtlclVzZWQsZD1lLkNPRC5lcGhNYXJrZXJVc2VkLGY9aC5wYWNrZXRzSXRlcmF0b3I7Zm9yKDtzPHI7KXthbGlnblRvQnl0ZSgpO3UmJnNraXBNYXJrZXJJZkVxdWFsKDE0NSkmJnNraXBCeXRlcyg0KTtjb25zdCBlPWYubmV4dFBhY2tldCgpO2lmKCFyZWFkQml0cygxKSljb250aW51ZTtjb25zdCByPWUubGF5ZXJOdW1iZXIsaT1bXTtsZXQgbztmb3IobGV0IHQ9MCxhPWUuY29kZWJsb2Nrcy5sZW5ndGg7dDxhO3QrKyl7bz1lLmNvZGVibG9ja3NbdF07bGV0IGE9by5wcmVjaW5jdDtjb25zdCBzPW8uY2J4LWEuY2J4TWluLGM9by5jYnktYS5jYnlNaW47bGV0IGwsaCx1PSExLGQ9ITE7aWYodm9pZCAwIT09by5pbmNsdWRlZCl1PSEhcmVhZEJpdHMoMSk7ZWxzZXthPW8ucHJlY2luY3Q7bGV0IGU7aWYodm9pZCAwIT09YS5pbmNsdXNpb25UcmVlKWU9YS5pbmNsdXNpb25UcmVlO2Vsc2V7Y29uc3QgdD1hLmNieE1heC1hLmNieE1pbisxLG49YS5jYnlNYXgtYS5jYnlNaW4rMTtlPW5ldyBJbmNsdXNpb25UcmVlKHQsbixyKTtoPW5ldyBUYWdUcmVlKHQsbik7YS5pbmNsdXNpb25UcmVlPWU7YS56ZXJvQml0UGxhbmVzVHJlZT1oO2ZvcihsZXQgZT0wO2U8cjtlKyspaWYoMCE9PXJlYWRCaXRzKDEpKXRocm93IG5ldyBKcHhFcnJvcigiSW52YWxpZCB0YWcgdHJlZSIpfWlmKGUucmVzZXQocyxjLHIpKWZvcig7Oyl7aWYoIXJlYWRCaXRzKDEpKXtlLmluY3JlbWVudFZhbHVlKHIpO2JyZWFrfWw9IWUubmV4dExldmVsKCk7aWYobCl7by5pbmNsdWRlZD0hMDt1PWQ9ITA7YnJlYWt9fX1pZighdSljb250aW51ZTtpZihkKXtoPWEuemVyb0JpdFBsYW5lc1RyZWU7aC5yZXNldChzLGMpO2Zvcig7OylpZihyZWFkQml0cygxKSl7bD0haC5uZXh0TGV2ZWwoKTtpZihsKWJyZWFrfWVsc2UgaC5pbmNyZW1lbnRWYWx1ZSgpO28uemVyb0JpdFBsYW5lcz1oLnZhbHVlfWNvbnN0IGY9cmVhZENvZGluZ3Bhc3NlcygpO2Zvcig7cmVhZEJpdHMoMSk7KW8uTGJsb2NrKys7Y29uc3QgZz0oMCxuLmxvZzIpKGYpLHA9cmVhZEJpdHMoKGY8MTw8Zz9nLTE6Zykrby5MYmxvY2spO2kucHVzaCh7Y29kZWJsb2NrOm8sY29kaW5ncGFzc2VzOmYsZGF0YUxlbmd0aDpwfSl9YWxpZ25Ub0J5dGUoKTtkJiZza2lwTWFya2VySWZFcXVhbCgxNDYpO2Zvcig7aS5sZW5ndGg+MDspe2NvbnN0IGU9aS5zaGlmdCgpO289ZS5jb2RlYmxvY2s7dm9pZCAwPT09by5kYXRhJiYoby5kYXRhPVtdKTtvLmRhdGEucHVzaCh7ZGF0YTp0LHN0YXJ0OmErcyxlbmQ6YStzK2UuZGF0YUxlbmd0aCxjb2RpbmdwYXNzZXM6ZS5jb2RpbmdwYXNzZXN9KTtzKz1lLmRhdGFMZW5ndGh9fXJldHVybiBzfWZ1bmN0aW9uIGNvcHlDb2VmZmljaWVudHMoZSx0LGEscixuLHMsYyxsLGgpe2NvbnN0IHU9ci50YngwLGQ9ci50YnkwLGY9ci50YngxLXIudGJ4MCxnPXIuY29kZWJsb2NrcyxwPSJIIj09PXIudHlwZS5jaGFyQXQoMCk/MTowLG09IkgiPT09ci50eXBlLmNoYXJBdCgxKT90OjA7Zm9yKGxldCBhPTAsYj1nLmxlbmd0aDthPGI7KythKXtjb25zdCBiPWdbYV0seT1iLnRieDFfLWIudGJ4MF8sdz1iLnRieTFfLWIudGJ5MF87aWYoMD09PXl8fDA9PT13KWNvbnRpbnVlO2lmKHZvaWQgMD09PWIuZGF0YSljb250aW51ZTtjb25zdCBTPW5ldyBvKHksdyxiLnN1YmJhbmRUeXBlLGIuemVyb0JpdFBsYW5lcyxzKTtsZXQgeD0yO2NvbnN0IGs9Yi5kYXRhO2xldCBDLHYsRixPPTAsVD0wO2ZvcihDPTAsdj1rLmxlbmd0aDtDPHY7QysrKXtGPWtbQ107Tys9Ri5lbmQtRi5zdGFydDtUKz1GLmNvZGluZ3Bhc3Nlc31jb25zdCBNPW5ldyBVaW50OEFycmF5KE8pO2xldCBFPTA7Zm9yKEM9MCx2PWsubGVuZ3RoO0M8djtDKyspe0Y9a1tDXTtjb25zdCBlPUYuZGF0YS5zdWJhcnJheShGLnN0YXJ0LEYuZW5kKTtNLnNldChlLEUpO0UrPWUubGVuZ3RofWNvbnN0IEQ9bmV3IGkuQXJpdGhtZXRpY0RlY29kZXIoTSwwLE8pO1Muc2V0RGVjb2RlcihEKTtmb3IoQz0wO0M8VDtDKyspe3N3aXRjaCh4KXtjYXNlIDA6Uy5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTticmVhaztjYXNlIDE6Uy5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO2JyZWFrO2Nhc2UgMjpTLnJ1bkNsZWFudXBQYXNzKCk7bCYmUy5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpfWgmJlMucmVzZXQoKTt4PSh4KzEpJTN9bGV0IE49Yi50YngwXy11KyhiLnRieTBfLWQpKmY7Y29uc3QgUj1TLmNvZWZmaWNlbnRzU2lnbixMPVMuY29lZmZpY2VudHNNYWduaXR1ZGUsaj1TLmJpdHNEZWNvZGVkLCQ9Yz8wOi41O2xldCBfLFUsWDtFPTA7Y29uc3QgSD0iTEwiIT09ci50eXBlO2ZvcihDPTA7Qzx3O0MrKyl7Y29uc3QgYT0yKihOL2Z8MCkqKHQtZikrcCttO2ZvcihfPTA7Xzx5O18rKyl7VT1MW0VdO2lmKDAhPT1VKXtVPShVKyQpKm47MCE9PVJbRV0mJihVPS1VKTtYPWpbRV07Y29uc3QgdD1IP2ErKE48PDEpOk47ZVt0XT1jJiZYPj1zP1U6VSooMTw8cy1YKX1OKys7RSsrfU4rPWYteX19fWZ1bmN0aW9uIHRyYW5zZm9ybVRpbGUoZSx0LGEpe2NvbnN0IHI9dC5jb21wb25lbnRzW2FdLG49ci5jb2RpbmdTdHlsZVBhcmFtZXRlcnMsaT1yLnF1YW50aXphdGlvblBhcmFtZXRlcnMsbz1uLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxjPWkuU1BxY2RzLGw9aS5zY2FsYXJFeHBvdW5kZWQsaD1pLmd1YXJkQml0cyx1PW4uc2VnbWVudGF0aW9uU3ltYm9sVXNlZCxkPW4ucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcyxmPWUuY29tcG9uZW50c1thXS5wcmVjaXNpb24sZz1uLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbixwPWc/bmV3IFJldmVyc2libGVUcmFuc2Zvcm06bmV3IElycmV2ZXJzaWJsZVRyYW5zZm9ybSxtPVtdO2xldCBiPTA7Zm9yKGxldCBlPTA7ZTw9bztlKyspe2NvbnN0IHQ9ci5yZXNvbHV0aW9uc1tlXSxhPXQudHJ4MS10LnRyeDAsbj10LnRyeTEtdC50cnkwLGk9bmV3IEZsb2F0MzJBcnJheShhKm4pO2ZvcihsZXQgcj0wLG49dC5zdWJiYW5kcy5sZW5ndGg7cjxuO3IrKyl7bGV0IG4sbztpZihsKXtuPWNbYl0ubXU7bz1jW2JdLmVwc2lsb247YisrfWVsc2V7bj1jWzBdLm11O289Y1swXS5lcHNpbG9uKyhlPjA/MS1lOjApfWNvbnN0IHA9dC5zdWJiYW5kc1tyXSxtPXNbcC50eXBlXTtjb3B5Q29lZmZpY2llbnRzKGksYSwwLHAsZz8xOjIqKihmK20tbykqKDErbi8yMDQ4KSxoK28tMSxnLHUsZCl9bS5wdXNoKHt3aWR0aDphLGhlaWdodDpuLGl0ZW1zOml9KX1jb25zdCB5PXAuY2FsY3VsYXRlKG0sci50Y3gwLHIudGN5MCk7cmV0dXJue2xlZnQ6ci50Y3gwLHRvcDpyLnRjeTAsd2lkdGg6eS53aWR0aCxoZWlnaHQ6eS5oZWlnaHQsaXRlbXM6eS5pdGVtc319ZnVuY3Rpb24gaW5pdGlhbGl6ZVRpbGUoZSx0KXtjb25zdCBhPWUuU0laLkNzaXoscj1lLnRpbGVzW3RdO2ZvcihsZXQgdD0wO3Q8YTt0Kyspe2NvbnN0IGE9ci5jb21wb25lbnRzW3RdLG49dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbdF0/ZS5jdXJyZW50VGlsZS5RQ0NbdF06ZS5jdXJyZW50VGlsZS5RQ0Q7YS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW47Y29uc3QgaT12b2lkIDAhPT1lLmN1cnJlbnRUaWxlLkNPQ1t0XT9lLmN1cnJlbnRUaWxlLkNPQ1t0XTplLmN1cnJlbnRUaWxlLkNPRDthLmNvZGluZ1N0eWxlUGFyYW1ldGVycz1pfXIuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycz1lLmN1cnJlbnRUaWxlLkNPRH1jbGFzcyBUYWdUcmVle2NvbnN0cnVjdG9yKGUsdCl7Y29uc3QgYT0oMCxuLmxvZzIpKE1hdGgubWF4KGUsdCkpKzE7dGhpcy5sZXZlbHM9W107Zm9yKGxldCByPTA7cjxhO3IrKyl7Y29uc3QgYT17d2lkdGg6ZSxoZWlnaHQ6dCxpdGVtczpbXX07dGhpcy5sZXZlbHMucHVzaChhKTtlPU1hdGguY2VpbChlLzIpO3Q9TWF0aC5jZWlsKHQvMil9fXJlc2V0KGUsdCl7bGV0IGEscj0wLG49MDtmb3IoO3I8dGhpcy5sZXZlbHMubGVuZ3RoOyl7YT10aGlzLmxldmVsc1tyXTtjb25zdCBpPWUrdCphLndpZHRoO2lmKHZvaWQgMCE9PWEuaXRlbXNbaV0pe249YS5pdGVtc1tpXTticmVha31hLmluZGV4PWk7ZT4+PTE7dD4+PTE7cisrfXItLTthPXRoaXMubGV2ZWxzW3JdO2EuaXRlbXNbYS5pbmRleF09bjt0aGlzLmN1cnJlbnRMZXZlbD1yO2RlbGV0ZSB0aGlzLnZhbHVlfWluY3JlbWVudFZhbHVlKCl7Y29uc3QgZT10aGlzLmxldmVsc1t0aGlzLmN1cnJlbnRMZXZlbF07ZS5pdGVtc1tlLmluZGV4XSsrfW5leHRMZXZlbCgpe2xldCBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV07Y29uc3QgYT10Lml0ZW1zW3QuaW5kZXhdO2UtLTtpZihlPDApe3RoaXMudmFsdWU9YTtyZXR1cm4hMX10aGlzLmN1cnJlbnRMZXZlbD1lO3Q9dGhpcy5sZXZlbHNbZV07dC5pdGVtc1t0LmluZGV4XT1hO3JldHVybiEwfX1jbGFzcyBJbmNsdXNpb25UcmVle2NvbnN0cnVjdG9yKGUsdCxhKXtjb25zdCByPSgwLG4ubG9nMikoTWF0aC5tYXgoZSx0KSkrMTt0aGlzLmxldmVscz1bXTtmb3IobGV0IG49MDtuPHI7bisrKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXJbZV09YTtjb25zdCBuPXt3aWR0aDplLGhlaWdodDp0LGl0ZW1zOnJ9O3RoaXMubGV2ZWxzLnB1c2gobik7ZT1NYXRoLmNlaWwoZS8yKTt0PU1hdGguY2VpbCh0LzIpfX1yZXNldChlLHQsYSl7bGV0IHI9MDtmb3IoO3I8dGhpcy5sZXZlbHMubGVuZ3RoOyl7Y29uc3Qgbj10aGlzLmxldmVsc1tyXSxpPWUrdCpuLndpZHRoO24uaW5kZXg9aTtjb25zdCBzPW4uaXRlbXNbaV07aWYoMjU1PT09cylicmVhaztpZihzPmEpe3RoaXMuY3VycmVudExldmVsPXI7dGhpcy5wcm9wYWdhdGVWYWx1ZXMoKTtyZXR1cm4hMX1lPj49MTt0Pj49MTtyKyt9dGhpcy5jdXJyZW50TGV2ZWw9ci0xO3JldHVybiEwfWluY3JlbWVudFZhbHVlKGUpe2NvbnN0IHQ9dGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO3QuaXRlbXNbdC5pbmRleF09ZSsxO3RoaXMucHJvcGFnYXRlVmFsdWVzKCl9cHJvcGFnYXRlVmFsdWVzKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCBhPXQuaXRlbXNbdC5pbmRleF07Zm9yKDstLWU+PTA7KXt0PXRoaXMubGV2ZWxzW2VdO3QuaXRlbXNbdC5pbmRleF09YX19bmV4dExldmVsKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCBhPXQuaXRlbXNbdC5pbmRleF07dC5pdGVtc1t0LmluZGV4XT0yNTU7ZS0tO2lmKGU8MClyZXR1cm4hMTt0aGlzLmN1cnJlbnRMZXZlbD1lO3Q9dGhpcy5sZXZlbHNbZV07dC5pdGVtc1t0LmluZGV4XT1hO3JldHVybiEwfX1jb25zdCBvPWZ1bmN0aW9uIEJpdE1vZGVsQ2xvc3VyZSgpe2NvbnN0IGU9MTcsdD1uZXcgVWludDhBcnJheShbMCw1LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwxLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDhdKSxhPW5ldyBVaW50OEFycmF5KFswLDMsNCwwLDUsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDEsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOF0pLHI9bmV3IFVpbnQ4QXJyYXkoWzAsMSwyLDAsMSwyLDIsMCwyLDIsMiwwLDAsMCwwLDAsMyw0LDUsMCw0LDUsNSwwLDUsNSw1LDAsMCwwLDAsMCw2LDcsNywwLDcsNyw3LDAsNyw3LDcsMCwwLDAsMCwwLDgsOCw4LDAsOCw4LDgsMCw4LDgsOCwwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4XSk7cmV0dXJuIGNsYXNzIEJpdE1vZGVse2NvbnN0cnVjdG9yKGUsbixpLHMsbyl7dGhpcy53aWR0aD1lO3RoaXMuaGVpZ2h0PW47bGV0IGM7Yz0iSEgiPT09aT9yOiJITCI9PT1pP2E6dDt0aGlzLmNvbnRleHRMYWJlbFRhYmxlPWM7Y29uc3QgbD1lKm47dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkobCk7dGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkobCk7bGV0IGg7aD1vPjE0P25ldyBVaW50MzJBcnJheShsKTpvPjY/bmV3IFVpbnQxNkFycmF5KGwpOm5ldyBVaW50OEFycmF5KGwpO3RoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU9aDt0aGlzLnByb2Nlc3NpbmdGbGFncz1uZXcgVWludDhBcnJheShsKTtjb25zdCB1PW5ldyBVaW50OEFycmF5KGwpO2lmKDAhPT1zKWZvcihsZXQgZT0wO2U8bDtlKyspdVtlXT1zO3RoaXMuYml0c0RlY29kZWQ9dTt0aGlzLnJlc2V0KCl9c2V0RGVjb2RlcihlKXt0aGlzLmRlY29kZXI9ZX1yZXNldCgpe3RoaXMuY29udGV4dHM9bmV3IEludDhBcnJheSgxOSk7dGhpcy5jb250ZXh0c1swXT04O3RoaXMuY29udGV4dHNbMTddPTkyO3RoaXMuY29udGV4dHNbMThdPTZ9c2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGUsdCxhKXtjb25zdCByPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG49dGhpcy53aWR0aCxpPXRoaXMuaGVpZ2h0LHM9dD4wLG89dCsxPG47bGV0IGM7aWYoZT4wKXtjPWEtbjtzJiYocltjLTFdKz0xNik7byYmKHJbYysxXSs9MTYpO3JbY10rPTR9aWYoZSsxPGkpe2M9YStuO3MmJihyW2MtMV0rPTE2KTtvJiYocltjKzFdKz0xNik7cltjXSs9NH1zJiYoclthLTFdKz0xKTtvJiYoclthKzFdKz0xKTtyW2FdfD0xMjh9cnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCl7Y29uc3QgZT10aGlzLmRlY29kZXIsdD10aGlzLndpZHRoLGE9dGhpcy5oZWlnaHQscj10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLG49dGhpcy5jb2VmZmljZW50c1NpZ24saT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxzPXRoaXMucHJvY2Vzc2luZ0ZsYWdzLG89dGhpcy5jb250ZXh0cyxjPXRoaXMuY29udGV4dExhYmVsVGFibGUsbD10aGlzLmJpdHNEZWNvZGVkO2ZvcihsZXQgaD0wO2g8YTtoKz00KWZvcihsZXQgdT0wO3U8dDt1Kyspe2xldCBkPWgqdCt1O2ZvcihsZXQgZj0wO2Y8NDtmKyssZCs9dCl7Y29uc3QgdD1oK2Y7aWYodD49YSlicmVhaztzW2RdJj0tMjtpZihyW2RdfHwhaVtkXSljb250aW51ZTtjb25zdCBnPWNbaVtkXV07aWYoZS5yZWFkQml0KG8sZykpe2NvbnN0IGU9dGhpcy5kZWNvZGVTaWduQml0KHQsdSxkKTtuW2RdPWU7cltkXT0xO3RoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKHQsdSxkKTtzW2RdfD0yfWxbZF0rKztzW2RdfD0xfX19ZGVjb2RlU2lnbkJpdChlLHQsYSl7Y29uc3Qgcj10aGlzLndpZHRoLG49dGhpcy5oZWlnaHQsaT10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLHM9dGhpcy5jb2VmZmljZW50c1NpZ247bGV0IG8sYyxsLGgsdSxkO2g9dD4wJiYwIT09aVthLTFdO2lmKHQrMTxyJiYwIT09aVthKzFdKXtsPXNbYSsxXTtpZihoKXtjPXNbYS0xXTtvPTEtbC1jfWVsc2Ugbz0xLWwtbH1lbHNlIGlmKGgpe2M9c1thLTFdO289MS1jLWN9ZWxzZSBvPTA7Y29uc3QgZj0zKm87aD1lPjAmJjAhPT1pW2Etcl07aWYoZSsxPG4mJjAhPT1pW2Ercl0pe2w9c1thK3JdO2lmKGgpe2M9c1thLXJdO289MS1sLWMrZn1lbHNlIG89MS1sLWwrZn1lbHNlIGlmKGgpe2M9c1thLXJdO289MS1jLWMrZn1lbHNlIG89ZjtpZihvPj0wKXt1PTkrbztkPXRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMsdSl9ZWxzZXt1PTktbztkPTFedGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyx1KX1yZXR1cm4gZH1ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpe2NvbnN0IGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LHI9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxuPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb250ZXh0cyxzPXRoaXMuYml0c0RlY29kZWQsbz10aGlzLnByb2Nlc3NpbmdGbGFncyxjPXQqYSxsPTQqdDtmb3IobGV0IGEsaD0wO2g8YztoPWEpe2E9TWF0aC5taW4oYyxoK2wpO2ZvcihsZXQgYz0wO2M8dDtjKyspZm9yKGxldCBsPWgrYztsPGE7bCs9dCl7aWYoIXJbbF18fDAhPSgxJm9bbF0pKWNvbnRpbnVlO2xldCB0PTE2O2lmKDAhPSgyJm9bbF0pKXtvW2xdXj0yO3Q9MD09PSgxMjcmbltsXSk/MTU6MTR9Y29uc3QgYT1lLnJlYWRCaXQoaSx0KTtyW2xdPXJbbF08PDF8YTtzW2xdKys7b1tsXXw9MX19fXJ1bkNsZWFudXBQYXNzKCl7Y29uc3QgdD10aGlzLmRlY29kZXIsYT10aGlzLndpZHRoLHI9dGhpcy5oZWlnaHQsbj10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxpPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUscz10aGlzLmNvZWZmaWNlbnRzU2lnbixvPXRoaXMuY29udGV4dHMsYz10aGlzLmNvbnRleHRMYWJlbFRhYmxlLGw9dGhpcy5iaXRzRGVjb2RlZCxoPXRoaXMucHJvY2Vzc2luZ0ZsYWdzLHU9YSxkPTIqYSxmPTMqYTtsZXQgZztmb3IobGV0IHA9MDtwPHI7cD1nKXtnPU1hdGgubWluKHArNCxyKTtjb25zdCBtPXAqYSxiPXArMzxyO2ZvcihsZXQgcj0wO3I8YTtyKyspe2NvbnN0IHk9bStyO2xldCB3LFM9MCx4PXksaz1wO2lmKGImJjA9PT1oW3ldJiYwPT09aFt5K3VdJiYwPT09aFt5K2RdJiYwPT09aFt5K2ZdJiYwPT09blt5XSYmMD09PW5beSt1XSYmMD09PW5beStkXSYmMD09PW5beStmXSl7aWYoIXQucmVhZEJpdChvLDE4KSl7bFt5XSsrO2xbeSt1XSsrO2xbeStkXSsrO2xbeStmXSsrO2NvbnRpbnVlfVM9dC5yZWFkQml0KG8sZSk8PDF8dC5yZWFkQml0KG8sZSk7aWYoMCE9PVMpe2s9cCtTO3grPVMqYX13PXRoaXMuZGVjb2RlU2lnbkJpdChrLHIseCk7c1t4XT13O2lbeF09MTt0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShrLHIseCk7aFt4XXw9Mjt4PXk7Zm9yKGxldCBlPXA7ZTw9aztlKysseCs9YSlsW3hdKys7UysrfWZvcihrPXArUztrPGc7aysrLHgrPWEpe2lmKGlbeF18fDAhPSgxJmhbeF0pKWNvbnRpbnVlO2NvbnN0IGU9Y1tuW3hdXTtpZigxPT09dC5yZWFkQml0KG8sZSkpe3c9dGhpcy5kZWNvZGVTaWduQml0KGsscix4KTtzW3hdPXc7aVt4XT0xO3RoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGsscix4KTtoW3hdfD0yfWxbeF0rK319fX1jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpe2NvbnN0IHQ9dGhpcy5kZWNvZGVyLGE9dGhpcy5jb250ZXh0cztpZigxMCE9PSh0LnJlYWRCaXQoYSxlKTw8M3x0LnJlYWRCaXQoYSxlKTw8Mnx0LnJlYWRCaXQoYSxlKTw8MXx0LnJlYWRCaXQoYSxlKSkpdGhyb3cgbmV3IEpweEVycm9yKCJJbnZhbGlkIHNlZ21lbnRhdGlvbiBzeW1ib2wiKX19fSgpO2NsYXNzIFRyYW5zZm9ybXtjb25zdHJ1Y3Rvcigpe3RoaXMuY29uc3RydWN0b3I9PT1UcmFuc2Zvcm0mJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBUcmFuc2Zvcm0uIil9Y2FsY3VsYXRlKGUsdCxhKXtsZXQgcj1lWzBdO2ZvcihsZXQgbj0xLGk9ZS5sZW5ndGg7bjxpO24rKylyPXRoaXMuaXRlcmF0ZShyLGVbbl0sdCxhKTtyZXR1cm4gcn1leHRlbmQoZSx0LGEpe2xldCByPXQtMSxuPXQrMSxpPXQrYS0yLHM9dCthO2Vbci0tXT1lW24rK107ZVtzKytdPWVbaS0tXTtlW3ItLV09ZVtuKytdO2VbcysrXT1lW2ktLV07ZVtyLS1dPWVbbisrXTtlW3MrK109ZVtpLS1dO2Vbcl09ZVtuXTtlW3NdPWVbaV19ZmlsdGVyKGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBmaWx0ZXJgIGNhbGxlZCIpfWl0ZXJhdGUoZSx0LGEscil7Y29uc3Qgbj1lLndpZHRoLGk9ZS5oZWlnaHQ7bGV0IHM9ZS5pdGVtcztjb25zdCBvPXQud2lkdGgsYz10LmhlaWdodCxsPXQuaXRlbXM7bGV0IGgsdSxkLGYsZyxwO2ZvcihkPTAsaD0wO2g8aTtoKyspe2Y9MipoKm87Zm9yKHU9MDt1PG47dSsrLGQrKyxmKz0yKWxbZl09c1tkXX1zPWUuaXRlbXM9bnVsbDtjb25zdCBtPW5ldyBGbG9hdDMyQXJyYXkobys4KTtpZigxPT09byl7aWYoMCE9KDEmYSkpZm9yKHA9MCxkPTA7cDxjO3ArKyxkKz1vKWxbZF0qPS41fWVsc2UgZm9yKHA9MCxkPTA7cDxjO3ArKyxkKz1vKXttLnNldChsLnN1YmFycmF5KGQsZCtvKSw0KTt0aGlzLmV4dGVuZChtLDQsbyk7dGhpcy5maWx0ZXIobSw0LG8pO2wuc2V0KG0uc3ViYXJyYXkoNCw0K28pLGQpfWxldCBiPTE2O2NvbnN0IHk9W107Zm9yKGg9MDtoPGI7aCsrKXkucHVzaChuZXcgRmxvYXQzMkFycmF5KGMrOCkpO2xldCB3LFM9MDtlPTQrYztpZigxPT09Yyl7aWYoMCE9KDEmcikpZm9yKGc9MDtnPG87ZysrKWxbZ10qPS41fWVsc2UgZm9yKGc9MDtnPG87ZysrKXtpZigwPT09Uyl7Yj1NYXRoLm1pbihvLWcsYik7Zm9yKGQ9ZyxmPTQ7ZjxlO2QrPW8sZisrKWZvcih3PTA7dzxiO3crKyl5W3ddW2ZdPWxbZCt3XTtTPWJ9Uy0tO2NvbnN0IHQ9eVtTXTt0aGlzLmV4dGVuZCh0LDQsYyk7dGhpcy5maWx0ZXIodCw0LGMpO2lmKDA9PT1TKXtkPWctYisxO2ZvcihmPTQ7ZjxlO2QrPW8sZisrKWZvcih3PTA7dzxiO3crKylsW2Qrd109eVt3XVtmXX19cmV0dXJue3dpZHRoOm8saGVpZ2h0OmMsaXRlbXM6bH19fWNsYXNzIElycmV2ZXJzaWJsZVRyYW5zZm9ybSBleHRlbmRzIFRyYW5zZm9ybXtmaWx0ZXIoZSx0LGEpe2NvbnN0IHI9YT4+MTtsZXQgbixpLHMsbztjb25zdCBjPS0xLjU4NjEzNDM0MjA1OTkyNCxsPS0uMDUyOTgwMTE4NTcyOTYxLGg9Ljg4MjkxMTA3NTUzMDkzNCx1PS40NDM1MDY4NTIwNDM5NzEsZD0xLjIzMDE3NDEwNDkxNDAwMTtuPSh0fD0wKS0zO2ZvcihpPXIrNDtpLS07bis9MillW25dKj0uODEyODkzMDY2MTE1OTYwOTtuPXQtMjtzPXUqZVtuLTFdO2ZvcihpPXIrMztpLS07bis9Mil7bz11KmVbbisxXTtlW25dPWQqZVtuXS1zLW87aWYoIWktLSlicmVhaztuKz0yO3M9dSplW24rMV07ZVtuXT1kKmVbbl0tcy1vfW49dC0xO3M9aCplW24tMV07Zm9yKGk9cisyO2ktLTtuKz0yKXtvPWgqZVtuKzFdO2Vbbl0tPXMrbztpZighaS0tKWJyZWFrO24rPTI7cz1oKmVbbisxXTtlW25dLT1zK299bj10O3M9bCplW24tMV07Zm9yKGk9cisxO2ktLTtuKz0yKXtvPWwqZVtuKzFdO2Vbbl0tPXMrbztpZighaS0tKWJyZWFrO24rPTI7cz1sKmVbbisxXTtlW25dLT1zK299aWYoMCE9PXIpe249dCsxO3M9YyplW24tMV07Zm9yKGk9cjtpLS07bis9Mil7bz1jKmVbbisxXTtlW25dLT1zK287aWYoIWktLSlicmVhaztuKz0yO3M9YyplW24rMV07ZVtuXS09cytvfX19fWNsYXNzIFJldmVyc2libGVUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm17ZmlsdGVyKGUsdCxhKXtjb25zdCByPWE+PjE7bGV0IG4saTtmb3Iobj10fD0wLGk9cisxO2ktLTtuKz0yKWVbbl0tPWVbbi0xXStlW24rMV0rMj4+Mjtmb3Iobj10KzEsaT1yO2ktLTtuKz0yKWVbbl0rPWVbbi0xXStlW24rMV0+PjF9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkxaV1N0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyk7Y2xhc3MgTFpXU3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmNhY2hlZERhdGE9MDt0aGlzLmJpdHNDYWNoZWQ9MDtjb25zdCByPTQwOTYsbj17ZWFybHlDaGFuZ2U6YSxjb2RlTGVuZ3RoOjksbmV4dENvZGU6MjU4LGRpY3Rpb25hcnlWYWx1ZXM6bmV3IFVpbnQ4QXJyYXkociksZGljdGlvbmFyeUxlbmd0aHM6bmV3IFVpbnQxNkFycmF5KHIpLGRpY3Rpb25hcnlQcmV2Q29kZXM6bmV3IFVpbnQxNkFycmF5KHIpLGN1cnJlbnRTZXF1ZW5jZTpuZXcgVWludDhBcnJheShyKSxjdXJyZW50U2VxdWVuY2VMZW5ndGg6MH07Zm9yKGxldCBlPTA7ZTwyNTY7KytlKXtuLmRpY3Rpb25hcnlWYWx1ZXNbZV09ZTtuLmRpY3Rpb25hcnlMZW5ndGhzW2VdPTF9dGhpcy5sendTdGF0ZT1ufXJlYWRCaXRzKGUpe2xldCB0PXRoaXMuYml0c0NhY2hlZCxhPXRoaXMuY2FjaGVkRGF0YTtmb3IoO3Q8ZTspe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09ZSl7dGhpcy5lb2Y9ITA7cmV0dXJuIG51bGx9YT1hPDw4fGU7dCs9OH10aGlzLmJpdHNDYWNoZWQ9dC09ZTt0aGlzLmNhY2hlZERhdGE9YTt0aGlzLmxhc3RDb2RlPW51bGw7cmV0dXJuIGE+Pj50JigxPDxlKS0xfXJlYWRCbG9jaygpe2xldCBlLHQsYSxyPTEwMjQ7Y29uc3Qgbj10aGlzLmx6d1N0YXRlO2lmKCFuKXJldHVybjtjb25zdCBpPW4uZWFybHlDaGFuZ2U7bGV0IHM9bi5uZXh0Q29kZTtjb25zdCBvPW4uZGljdGlvbmFyeVZhbHVlcyxjPW4uZGljdGlvbmFyeUxlbmd0aHMsbD1uLmRpY3Rpb25hcnlQcmV2Q29kZXM7bGV0IGg9bi5jb2RlTGVuZ3RoLHU9bi5wcmV2Q29kZTtjb25zdCBkPW4uY3VycmVudFNlcXVlbmNlO2xldCBmPW4uY3VycmVudFNlcXVlbmNlTGVuZ3RoLGc9MCxwPXRoaXMuYnVmZmVyTGVuZ3RoLG09dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrcik7Zm9yKGU9MDtlPDUxMjtlKyspe2NvbnN0IGU9dGhpcy5yZWFkQml0cyhoKSxuPWY+MDtpZihlPDI1Nil7ZFswXT1lO2Y9MX1lbHNle2lmKCEoZT49MjU4KSl7aWYoMjU2PT09ZSl7aD05O3M9MjU4O2Y9MDtjb250aW51ZX10aGlzLmVvZj0hMDtkZWxldGUgdGhpcy5sendTdGF0ZTticmVha31pZihlPHMpe2Y9Y1tlXTtmb3IodD1mLTEsYT1lO3Q+PTA7dC0tKXtkW3RdPW9bYV07YT1sW2FdfX1lbHNlIGRbZisrXT1kWzBdfWlmKG4pe2xbc109dTtjW3NdPWNbdV0rMTtvW3NdPWRbMF07cysrO2g9cytpJnMraS0xP2g6MHxNYXRoLm1pbihNYXRoLmxvZyhzK2kpLy42OTMxNDcxODA1NTk5NDUzKzEsMTIpfXU9ZTtnKz1mO2lmKHI8Zyl7ZG97cis9NTEyfXdoaWxlKHI8Zyk7bT10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtyKX1mb3IodD0wO3Q8Zjt0KyspbVtwKytdPWRbdF19bi5uZXh0Q29kZT1zO24uY29kZUxlbmd0aD1oO24ucHJldkNvZGU9dTtuLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aD1mO3RoaXMuYnVmZmVyTGVuZ3RoPXB9fXQuTFpXU3RyZWFtPUxaV1N0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlByZWRpY3RvclN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNyksbj1hKDMpLGk9YSgyKTtjbGFzcyBQcmVkaWN0b3JTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7aWYoIShhIGluc3RhbmNlb2Ygbi5EaWN0KSlyZXR1cm4gZTtjb25zdCByPXRoaXMucHJlZGljdG9yPWEuZ2V0KCJQcmVkaWN0b3IiKXx8MTtpZihyPD0xKXJldHVybiBlO2lmKDIhPT1yJiYocjwxMHx8cj4xNSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHtyfWApO3RoaXMucmVhZEJsb2NrPTI9PT1yP3RoaXMucmVhZEJsb2NrVGlmZjp0aGlzLnJlYWRCbG9ja1BuZzt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7Y29uc3Qgcz10aGlzLmNvbG9ycz1hLmdldCgiQ29sb3JzIil8fDEsbz10aGlzLmJpdHM9YS5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxjPXRoaXMuY29sdW1ucz1hLmdldCgiQ29sdW1ucyIpfHwxO3RoaXMucGl4Qnl0ZXM9cypvKzc+PjM7dGhpcy5yb3dCeXRlcz1jKnMqbys3Pj4zO3JldHVybiB0aGlzfXJlYWRCbG9ja1RpZmYoKXtjb25zdCBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLmJ1ZmZlckxlbmd0aCxhPXRoaXMuZW5zdXJlQnVmZmVyKHQrZSkscj10aGlzLmJpdHMsbj10aGlzLmNvbG9ycyxpPXRoaXMuc3RyLmdldEJ5dGVzKGUpO3RoaXMuZW9mPSFpLmxlbmd0aDtpZih0aGlzLmVvZilyZXR1cm47bGV0IHMsbz0wLGM9MCxsPTAsaD0wLHU9dDtpZigxPT09ciYmMT09PW4pZm9yKHM9MDtzPGU7KytzKXtsZXQgZT1pW3NdXm87ZV49ZT4+MTtlXj1lPj4yO2VePWU+PjQ7bz0oMSZlKTw8NzthW3UrK109ZX1lbHNlIGlmKDg9PT1yKXtmb3Iocz0wO3M8bjsrK3MpYVt1KytdPWlbc107Zm9yKDtzPGU7KytzKXthW3VdPWFbdS1uXStpW3NdO3UrK319ZWxzZSBpZigxNj09PXIpe2NvbnN0IHQ9MipuO2ZvcihzPTA7czx0OysrcylhW3UrK109aVtzXTtmb3IoO3M8ZTtzKz0yKXtjb25zdCBlPSgoMjU1Jmlbc10pPDw4KSsoMjU1JmlbcysxXSkrKCgyNTUmYVt1LXRdKTw8OCkrKDI1NSZhW3UtdCsxXSk7YVt1KytdPWU+PjgmMjU1O2FbdSsrXT0yNTUmZX19ZWxzZXtjb25zdCBlPW5ldyBVaW50OEFycmF5KG4rMSksdT0oMTw8ciktMTtsZXQgZD0wLGY9dDtjb25zdCBnPXRoaXMuY29sdW1ucztmb3Iocz0wO3M8ZzsrK3MpZm9yKGxldCB0PTA7dDxuOysrdCl7aWYobDxyKXtvPW88PDh8MjU1JmlbZCsrXTtsKz04fWVbdF09ZVt0XSsobz4+bC1yKSZ1O2wtPXI7Yz1jPDxyfGVbdF07aCs9cjtpZihoPj04KXthW2YrK109Yz4+aC04JjI1NTtoLT04fX1oPjAmJihhW2YrK109KGM8PDgtaCkrKG8mKDE8PDgtaCktMSkpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfXJlYWRCbG9ja1BuZygpe2NvbnN0IGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMucGl4Qnl0ZXMsYT10aGlzLnN0ci5nZXRCeXRlKCkscj10aGlzLnN0ci5nZXRCeXRlcyhlKTt0aGlzLmVvZj0hci5sZW5ndGg7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IG49dGhpcy5idWZmZXJMZW5ndGgscz10aGlzLmVuc3VyZUJ1ZmZlcihuK2UpO2xldCBvPXMuc3ViYXJyYXkobi1lLG4pOzA9PT1vLmxlbmd0aCYmKG89bmV3IFVpbnQ4QXJyYXkoZSkpO2xldCBjLGwsaCx1PW47c3dpdGNoKGEpe2Nhc2UgMDpmb3IoYz0wO2M8ZTsrK2Mpc1t1KytdPXJbY107YnJlYWs7Y2FzZSAxOmZvcihjPTA7Yzx0OysrYylzW3UrK109cltjXTtmb3IoO2M8ZTsrK2Mpe3NbdV09c1t1LXRdK3JbY10mMjU1O3UrK31icmVhaztjYXNlIDI6Zm9yKGM9MDtjPGU7KytjKXNbdSsrXT1vW2NdK3JbY10mMjU1O2JyZWFrO2Nhc2UgMzpmb3IoYz0wO2M8dDsrK2Mpc1t1KytdPShvW2NdPj4xKStyW2NdO2Zvcig7YzxlOysrYyl7c1t1XT0ob1tjXStzW3UtdF0+PjEpK3JbY10mMjU1O3UrK31icmVhaztjYXNlIDQ6Zm9yKGM9MDtjPHQ7KytjKXtsPW9bY107aD1yW2NdO3NbdSsrXT1sK2h9Zm9yKDtjPGU7KytjKXtsPW9bY107Y29uc3QgZT1vW2MtdF0sYT1zW3UtdF0sbj1hK2wtZTtsZXQgaT1uLWE7aTwwJiYoaT0taSk7bGV0IGQ9bi1sO2Q8MCYmKGQ9LWQpO2xldCBmPW4tZTtmPDAmJihmPS1mKTtoPXJbY107c1t1KytdPWk8PWQmJmk8PWY/YStoOmQ8PWY/bCtoOmUraH1icmVhaztkZWZhdWx0OnRocm93IG5ldyBpLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7YX1gKX10aGlzLmJ1ZmZlckxlbmd0aCs9ZX19dC5QcmVkaWN0b3JTdHJlYW09UHJlZGljdG9yU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUnVuTGVuZ3RoU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE3KTtjbGFzcyBSdW5MZW5ndGhTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdH1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGVzKDIpO2lmKCFlfHxlLmxlbmd0aDwyfHwxMjg9PT1lWzBdKXt0aGlzLmVvZj0hMDtyZXR1cm59bGV0IHQsYT10aGlzLmJ1ZmZlckxlbmd0aCxyPWVbMF07aWYocjwxMjgpe3Q9dGhpcy5lbnN1cmVCdWZmZXIoYStyKzEpO3RbYSsrXT1lWzFdO2lmKHI+MCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcyhyKTt0LnNldChlLGEpO2ErPXJ9fWVsc2V7cj0yNTctcjtjb25zdCBuPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihhK3IrMSk7Zm9yKGxldCBlPTA7ZTxyO2UrKyl0W2ErK109bn10aGlzLmJ1ZmZlckxlbmd0aD1hfX10LlJ1bkxlbmd0aFN0cmVhbT1SdW5MZW5ndGhTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Gb250PXQuRXJyb3JGb250PXZvaWQgMDt2YXIgcj1hKDIpLG49YSgzMyksaT1hKDM2KSxzPWEoMzgpLG89YSgzNyksYz1hKDM1KSxsPWEoMzkpLGg9YSg0MCksdT1hKDQxKSxkPWEoNDIpLGY9YSg0MyksZz1hKDQ0KSxwPWEoMTQpLG09YSg0NSksYj1hKDQpLHk9YSg4KSx3PWEoNDYpO2NvbnN0IFM9W1s1NzM0NCw2Mzc0M10sWzEwNDg1NzYsMTExNDEwOV1dLHg9MWUzLGs9WyJhc2NlbnQiLCJiYm94IiwiYmxhY2siLCJib2xkIiwiY2hhclByb2NPcGVyYXRvckxpc3QiLCJjb21wb3NpdGUiLCJjc3NGb250SW5mbyIsImRhdGEiLCJkZWZhdWx0Vk1ldHJpY3MiLCJkZWZhdWx0V2lkdGgiLCJkZXNjZW50IiwiZmFsbGJhY2tOYW1lIiwiZm9udE1hdHJpeCIsImZvbnRUeXBlIiwiaXNUeXBlM0ZvbnQiLCJpdGFsaWMiLCJsb2FkZWROYW1lIiwibWltZXR5cGUiLCJtaXNzaW5nRmlsZSIsIm5hbWUiLCJyZW1lYXN1cmUiLCJzdWJ0eXBlIiwidHlwZSIsInZlcnRpY2FsIl0sQz1bImNNYXAiLCJkZWZhdWx0RW5jb2RpbmciLCJkaWZmZXJlbmNlcyIsImlzTW9ub3NwYWNlIiwiaXNTZXJpZkZvbnQiLCJpc1N5bWJvbGljRm9udCIsInNlYWNNYXAiLCJ0b0ZvbnRDaGFyIiwidG9Vbmljb2RlIiwidm1ldHJpY3MiLCJ3aWR0aHMiXTtmdW5jdGlvbiBhZGp1c3RXaWR0aHMoZSl7aWYoIWUuZm9udE1hdHJpeClyZXR1cm47aWYoZS5mb250TWF0cml4WzBdPT09ci5GT05UX0lERU5USVRZX01BVFJJWFswXSlyZXR1cm47Y29uc3QgdD0uMDAxL2UuZm9udE1hdHJpeFswXSxhPWUud2lkdGhzO2Zvcihjb25zdCBlIGluIGEpYVtlXSo9dDtlLmRlZmF1bHRXaWR0aCo9dH1mdW5jdGlvbiBhbWVuZEZhbGxiYWNrVG9Vbmljb2RlKGUpe2lmKCFlLmZhbGxiYWNrVG9Vbmljb2RlKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgaW4gZS5mYWxsYmFja1RvVW5pY29kZSllLnRvVW5pY29kZS5oYXMoYSl8fCh0W2FdPWUuZmFsbGJhY2tUb1VuaWNvZGVbYV0pO3QubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHQpfWNsYXNzIEdseXBoe2NvbnN0cnVjdG9yKGUsdCxhLHIsbixpLG8sYyxsKXt0aGlzLm9yaWdpbmFsQ2hhckNvZGU9ZTt0aGlzLmZvbnRDaGFyPXQ7dGhpcy51bmljb2RlPWE7dGhpcy5hY2NlbnQ9cjt0aGlzLndpZHRoPW47dGhpcy52bWV0cmljPWk7dGhpcy5vcGVyYXRvckxpc3RJZD1vO3RoaXMuaXNTcGFjZT1jO3RoaXMuaXNJbkZvbnQ9bDtjb25zdCBoPSgwLHMuZ2V0Q2hhclVuaWNvZGVDYXRlZ29yeSkoYSk7dGhpcy5pc1doaXRlc3BhY2U9aC5pc1doaXRlc3BhY2U7dGhpcy5pc1plcm9XaWR0aERpYWNyaXRpYz1oLmlzWmVyb1dpZHRoRGlhY3JpdGljO3RoaXMuaXNJbnZpc2libGVGb3JtYXRNYXJrPWguaXNJbnZpc2libGVGb3JtYXRNYXJrfX1mdW5jdGlvbiBpbnQxNihlLHQpe3JldHVybihlPDw4KSt0fWZ1bmN0aW9uIHdyaXRlU2lnbmVkSW50MTYoZSx0LGEpe2VbdCsxXT1hO2VbdF09YT4+Pjh9ZnVuY3Rpb24gc2lnbmVkSW50MTYoZSx0KXtjb25zdCBhPShlPDw4KSt0O3JldHVybiAzMjc2OCZhP2EtNjU1MzY6YX1mdW5jdGlvbiBzdHJpbmcxNihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gc2FmZVN0cmluZzE2KGUpe2U+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuInR0Y2YiPT09KDAsci5ieXRlc1RvU3RyaW5nKSh0KX1mdW5jdGlvbiBnZXRGb250RmlsZVR5cGUoZSx7dHlwZTp0LHN1YnR5cGU6YSxjb21wb3NpdGU6bn0pe2xldCBpLHM7aWYoZnVuY3Rpb24gaXNUcnVlVHlwZUZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4gNjU1MzY9PT0oMCxiLnJlYWRVaW50MzIpKHQsMCl8fCJ0cnVlIj09PSgwLHIuYnl0ZXNUb1N0cmluZykodCl9KGUpfHxpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZSkpaT1uPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI7ZWxzZSBpZihmdW5jdGlvbiBpc09wZW5UeXBlRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiJPVFRPIj09PSgwLHIuYnl0ZXNUb1N0cmluZykodCl9KGUpKWk9bj8iQ0lERm9udFR5cGUyIjoiT3BlblR5cGUiO2Vsc2UgaWYoZnVuY3Rpb24gaXNUeXBlMUZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcygyKTtyZXR1cm4gMzc9PT10WzBdJiYzMz09PXRbMV18fDEyOD09PXRbMF0mJjE9PT10WzFdfShlKSlpPW4/IkNJREZvbnRUeXBlMCI6Ik1NVHlwZTEiPT09dD8iTU1UeXBlMSI6IlR5cGUxIjtlbHNlIGlmKGZ1bmN0aW9uIGlzQ0ZGRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiB0WzBdPj0xJiZ0WzNdPj0xJiZ0WzNdPD00fShlKSlpZihuKXtpPSJDSURGb250VHlwZTAiO3M9IkNJREZvbnRUeXBlMEMifWVsc2V7aT0iTU1UeXBlMSI9PT10PyJNTVR5cGUxIjoiVHlwZTEiO3M9IlR5cGUxQyJ9ZWxzZXsoMCxyLndhcm4pKCJnZXRGb250RmlsZVR5cGU6IFVuYWJsZSB0byBkZXRlY3QgY29ycmVjdCBmb250IGZpbGUgVHlwZS9TdWJ0eXBlLiIpO2k9dDtzPWF9cmV0dXJuW2ksc119ZnVuY3Rpb24gYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChlLHQpe2Zvcihjb25zdCBhIGluIHQpZVsrYV09dFthXX1mdW5jdGlvbiBidWlsZFRvRm9udENoYXIoZSx0LGEpe2NvbnN0IHI9W107bGV0IG47Zm9yKGxldCBhPTAsaT1lLmxlbmd0aDthPGk7YSsrKXtuPSgwLHMuZ2V0VW5pY29kZUZvckdseXBoKShlW2FdLHQpOy0xIT09biYmKHJbYV09bil9Zm9yKGNvbnN0IGUgaW4gYSl7bj0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkoYVtlXSx0KTstMSE9PW4mJihyWytlXT1uKX1yZXR1cm4gcn1mdW5jdGlvbiBjb252ZXJ0Q2lkU3RyaW5nKGUsdCxhPSExKXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gdC5jaGFyQ29kZUF0KDApO2Nhc2UgMjpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPDw4fHQuY2hhckNvZGVBdCgxKX1jb25zdCBuPWBVbnN1cHBvcnRlZCBDSUQgc3RyaW5nIChjaGFyQ29kZSAke2V9KTogIiR7dH0iLmA7aWYoYSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihuKTsoMCxyLndhcm4pKG4pO3JldHVybiB0fWZ1bmN0aW9uIGFkanVzdE1hcHBpbmcoZSx0LGEsbil7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLHM9bmV3IE1hcCxvPVtdLGM9bmV3IFNldDtsZXQgbD0wO2NvbnN0IGg9U1tsXVswXTtsZXQgdT1oLGQ9U1tsXVsxXTtmb3IobGV0IGYgaW4gZSl7Znw9MDtsZXQgZz1lW2ZdO2lmKCF0KGcpKWNvbnRpbnVlO2lmKHU+ZCl7bCsrO2lmKGw+PVMubGVuZ3RoKXsoMCxyLndhcm4pKCJSYW4gb3V0IG9mIHNwYWNlIGluIGZvbnQgcHJpdmF0ZSB1c2UgYXJlYS4iKTticmVha311PVNbbF1bMF07ZD1TW2xdWzFdfWNvbnN0IHA9dSsrOzA9PT1nJiYoZz1hKTtsZXQgbT1uLmdldChmKTsic3RyaW5nIj09dHlwZW9mIG0mJihtPW0uY29kZVBvaW50QXQoMCkpO2lmKG0mJm08aCYmIWMuaGFzKGcpKXtzLnNldChtLGcpO2MuYWRkKGcpfWlbcF09ZztvW2ZdPXB9cmV0dXJue3RvRm9udENoYXI6byxjaGFyQ29kZVRvR2x5cGhJZDppLHRvVW5pY29kZUV4dHJhTWFwOnMsbmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZTp1fX1mdW5jdGlvbiBjcmVhdGVDbWFwVGFibGUoZSx0LGEpe2NvbnN0IG49ZnVuY3Rpb24gZ2V0UmFuZ2VzKGUsdCxhKXtjb25zdCByPVtdO2Zvcihjb25zdCB0IGluIGUpZVt0XT49YXx8ci5wdXNoKHtmb250Q2hhckNvZGU6MHx0LGdseXBoSWQ6ZVt0XX0pO2lmKHQpZm9yKGNvbnN0W2Usbl1vZiB0KW4+PWF8fHIucHVzaCh7Zm9udENoYXJDb2RlOmUsZ2x5cGhJZDpufSk7MD09PXIubGVuZ3RoJiZyLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pO3Iuc29ydCgoZnVuY3Rpb24gZm9udEdldFJhbmdlc1NvcnQoZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Y29uc3Qgbj1bXSxpPXIubGVuZ3RoO2ZvcihsZXQgZT0wO2U8aTspe2NvbnN0IHQ9cltlXS5mb250Q2hhckNvZGUsYT1bcltlXS5nbHlwaElkXTsrK2U7bGV0IHM9dDtmb3IoO2U8aSYmcysxPT09cltlXS5mb250Q2hhckNvZGU7KXthLnB1c2gocltlXS5nbHlwaElkKTsrK3M7KytlO2lmKDY1NTM1PT09cylicmVha31uLnB1c2goW3QscyxhXSl9cmV0dXJuIG59KGUsdCxhKSxpPW4uYXQoLTEpWzFdPjY1NTM1PzI6MTtsZXQgcyxvLGMsbCxoPSJcMFwwIitzdHJpbmcxNihpKSsiXDADXDABIisoMCxyLnN0cmluZzMyKSg0KzgqaSk7Zm9yKHM9bi5sZW5ndGgtMTtzPj0wJiYhKG5bc11bMF08PTY1NTM1KTstLXMpO2NvbnN0IHU9cysxO25bc11bMF08NjU1MzUmJjY1NTM1PT09bltzXVsxXSYmKG5bc11bMV09NjU1MzQpO2NvbnN0IGQ9bltzXVsxXTw2NTUzNT8xOjAsZj11K2QsZz1tLk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKGYsMik7bGV0IHAsYix5LHcsUz0iIix4PSIiLGs9IiIsQz0iIix2PSIiLEY9MDtmb3Iocz0wLG89dTtzPG87cysrKXtwPW5bc107Yj1wWzBdO3k9cFsxXTtTKz1zdHJpbmcxNihiKTt4Kz1zdHJpbmcxNih5KTt3PXBbMl07bGV0IGU9ITA7Zm9yKGM9MSxsPXcubGVuZ3RoO2M8bDsrK2MpaWYod1tjXSE9PXdbYy0xXSsxKXtlPSExO2JyZWFrfWlmKGUpe2srPXN0cmluZzE2KHdbMF0tYiY2NTUzNSk7Qys9c3RyaW5nMTYoMCl9ZWxzZXtjb25zdCBlPTIqKGYtcykrMipGO0YrPXktYisxO2srPXN0cmluZzE2KDApO0MrPXN0cmluZzE2KGUpO2ZvcihjPTAsbD13Lmxlbmd0aDtjPGw7KytjKXYrPXN0cmluZzE2KHdbY10pfX1pZihkPjApe3grPSLDv8O/IjtTKz0iw7/DvyI7ays9IlwwASI7Qys9IlwwXDAifWNvbnN0IE89IlwwXDAiK3N0cmluZzE2KDIqZikrc3RyaW5nMTYoZy5yYW5nZSkrc3RyaW5nMTYoZy5lbnRyeSkrc3RyaW5nMTYoZy5yYW5nZVNoaWZ0KSt4KyJcMFwwIitTK2srQyt2O2xldCBUPSIiLE09IiI7aWYoaT4xKXtoKz0iXDADXDBcbiIrKDAsci5zdHJpbmczMikoNCs4KmkrNCtPLmxlbmd0aCk7VD0iIjtmb3Iocz0wLG89bi5sZW5ndGg7czxvO3MrKyl7cD1uW3NdO2I9cFswXTt3PXBbMl07bGV0IGU9d1swXTtmb3IoYz0xLGw9dy5sZW5ndGg7YzxsOysrYylpZih3W2NdIT09d1tjLTFdKzEpe3k9cFswXStjLTE7VCs9KDAsci5zdHJpbmczMikoYikrKDAsci5zdHJpbmczMikoeSkrKDAsci5zdHJpbmczMikoZSk7Yj15KzE7ZT13W2NdfVQrPSgwLHIuc3RyaW5nMzIpKGIpKygwLHIuc3RyaW5nMzIpKHBbMV0pKygwLHIuc3RyaW5nMzIpKGUpfU09IlwwXGZcMFwwIisoMCxyLnN0cmluZzMyKShULmxlbmd0aCsxNikrIlwwXDBcMFwwIisoMCxyLnN0cmluZzMyKShULmxlbmd0aC8xMil9cmV0dXJuIGgrIlwwBCIrc3RyaW5nMTYoTy5sZW5ndGgrNCkrTytNK1R9ZnVuY3Rpb24gY3JlYXRlT1MyVGFibGUoZSx0LGEpe2E9YXx8e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH07bGV0IG49MCxpPTAsbz0wLGM9MCxsPW51bGwsaD0wO2lmKHQpe2ZvcihsZXQgZSBpbiB0KXtlfD0wOyhsPmV8fCFsKSYmKGw9ZSk7aDxlJiYoaD1lKTtjb25zdCB0PSgwLHMuZ2V0VW5pY29kZVJhbmdlRm9yKShlKTtpZih0PDMyKW58PTE8PHQ7ZWxzZSBpZih0PDY0KWl8PTE8PHQtMzI7ZWxzZSBpZih0PDk2KW98PTE8PHQtNjQ7ZWxzZXtpZighKHQ8MTIzKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5pY29kZSByYW5nZXMgQml0cyA+IDEyMyBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlIik7Y3w9MTw8dC05Nn19aD42NTUzNSYmKGg9NjU1MzUpfWVsc2V7bD0wO2g9MjU1fWNvbnN0IHU9ZS5iYm94fHxbMCwwLDAsMF0sZD1hLnVuaXRzUGVyRW18fDEvKGUuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWClbMF0sZj1lLmFzY2VudFNjYWxlZD8xOmQveCxnPWEuYXNjZW50fHxNYXRoLnJvdW5kKGYqKGUuYXNjZW50fHx1WzNdKSk7bGV0IHA9YS5kZXNjZW50fHxNYXRoLnJvdW5kKGYqKGUuZGVzY2VudHx8dVsxXSkpO3A+MCYmZS5kZXNjZW50PjAmJnVbMV08MCYmKHA9LXApO2NvbnN0IG09YS55TWF4fHxnLGI9LWEueU1pbnx8LXA7cmV0dXJuIlwwAwIkAcO0XDAFXDBcMALCigLCu1wwXDBcMMKMAsKKAsK7XDBcMAHDn1x4MDAxAQJcMFwwXDBcMAYiK1N0cmluZy5mcm9tQ2hhckNvZGUoZS5maXhlZFBpdGNoPzk6MCkrIlwwXDBcMFwwXDBcMCIrKDAsci5zdHJpbmczMikobikrKDAsci5zdHJpbmczMikoaSkrKDAsci5zdHJpbmczMikobykrKDAsci5zdHJpbmczMikoYykrIioyMSoiK3N0cmluZzE2KGUuaXRhbGljQW5nbGU/MTowKStzdHJpbmcxNihsfHxlLmZpcnN0Q2hhcikrc3RyaW5nMTYoaHx8ZS5sYXN0Q2hhcikrc3RyaW5nMTYoZykrc3RyaW5nMTYocCkrIlwwZCIrc3RyaW5nMTYobSkrc3RyaW5nMTYoYikrIlwwXDBcMFwwXDBcMFwwXDAiK3N0cmluZzE2KGUueEhlaWdodCkrc3RyaW5nMTYoZS5jYXBIZWlnaHQpK3N0cmluZzE2KDApK3N0cmluZzE2KGx8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBjcmVhdGVQb3N0VGFibGUoZSl7Y29uc3QgdD1NYXRoLmZsb29yKDY1NTM2KmUuaXRhbGljQW5nbGUpO3JldHVybiJcMANcMFwwIisoMCxyLnN0cmluZzMyKSh0KSsiXDBcMFwwXDAiKygwLHIuc3RyaW5nMzIpKGUuZml4ZWRQaXRjaD8xOjApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCJ9ZnVuY3Rpb24gY3JlYXRlUG9zdHNjcmlwdE5hbWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvW15ceDIxLVx4N0VdfFtbXF0oKXt9PD4vJV0vZywiIikuc2xpY2UoMCw2Myl9ZnVuY3Rpb24gY3JlYXRlTmFtZVRhYmxlKGUsdCl7dHx8KHQ9W1tdLFtdXSk7Y29uc3QgYT1bdFswXVswXXx8Ik9yaWdpbmFsIGxpY2VuY2UiLHRbMF1bMV18fGUsdFswXVsyXXx8IlVua25vd24iLHRbMF1bM118fCJ1bmlxdWVJRCIsdFswXVs0XXx8ZSx0WzBdWzVdfHwiVmVyc2lvbiAwLjExIix0WzBdWzZdfHxjcmVhdGVQb3N0c2NyaXB0TmFtZShlKSx0WzBdWzddfHwiVW5rbm93biIsdFswXVs4XXx8IlVua25vd24iLHRbMF1bOV18fCJVbmtub3duIl0scj1bXTtsZXQgbixpLHMsbyxjO2ZvcihuPTAsaT1hLmxlbmd0aDtuPGk7bisrKXtjPXRbMV1bbl18fGFbbl07Y29uc3QgZT1bXTtmb3Iocz0wLG89Yy5sZW5ndGg7czxvO3MrKyllLnB1c2goc3RyaW5nMTYoYy5jaGFyQ29kZUF0KHMpKSk7ci5wdXNoKGUuam9pbigiIikpfWNvbnN0IGw9W2Escl0saD1bIlwwASIsIlwwAyJdLHU9WyJcMFwwIiwiXDABIl0sZD1bIlwwXDAiLCIEXHQiXSxmPWEubGVuZ3RoKmgubGVuZ3RoO2xldCBnPSJcMFwwIitzdHJpbmcxNihmKStzdHJpbmcxNigxMipmKzYpLHA9MDtmb3Iobj0wLGk9aC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgZT1sW25dO2ZvcihzPTAsbz1lLmxlbmd0aDtzPG87cysrKXtjPWVbc107Zys9aFtuXSt1W25dK2Rbbl0rc3RyaW5nMTYocykrc3RyaW5nMTYoYy5sZW5ndGgpK3N0cmluZzE2KHApO3ArPWMubGVuZ3RofX1nKz1hLmpvaW4oIiIpK3Iuam9pbigiIik7cmV0dXJuIGd9dC5Gb250PWNsYXNzIEZvbnR7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMubmFtZT1lO3RoaXMucHNOYW1lPW51bGw7dGhpcy5taW1ldHlwZT1udWxsO3RoaXMuZGlzYWJsZUZvbnRGYWNlPSExO3RoaXMubG9hZGVkTmFtZT1hLmxvYWRlZE5hbWU7dGhpcy5pc1R5cGUzRm9udD1hLmlzVHlwZTNGb250O3RoaXMubWlzc2luZ0ZpbGU9ITE7dGhpcy5jc3NGb250SW5mbz1hLmNzc0ZvbnRJbmZvO3RoaXMuX2NoYXJzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9nbHlwaENhY2hlPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG49ISEoYS5mbGFncyZpLkZvbnRGbGFncy5TZXJpZik7aWYoIW4mJiFhLmlzU2ltdWxhdGVkRmxhZ3Mpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLF9dL2csIi0iKS5zcGxpdCgiLSIpWzBdLGE9KDAsbC5nZXRTZXJpZkZvbnRzKSgpO2Zvcihjb25zdCBlIG9mIHQuc3BsaXQoIisiKSlpZihhW2VdKXtuPSEwO2JyZWFrfX10aGlzLmlzU2VyaWZGb250PW47dGhpcy5pc1N5bWJvbGljRm9udD0hIShhLmZsYWdzJmkuRm9udEZsYWdzLlN5bWJvbGljKTt0aGlzLmlzTW9ub3NwYWNlPSEhKGEuZmxhZ3MmaS5Gb250RmxhZ3MuRml4ZWRQaXRjaCk7bGV0IHM9YS50eXBlLG89YS5zdWJ0eXBlO3RoaXMudHlwZT1zO3RoaXMuc3VidHlwZT1vO2xldCBjLGg9InNhbnMtc2VyaWYiO3RoaXMuaXNNb25vc3BhY2U/aD0ibW9ub3NwYWNlIjp0aGlzLmlzU2VyaWZGb250JiYoaD0ic2VyaWYiKTt0aGlzLmZhbGxiYWNrTmFtZT1oO3RoaXMuZGlmZmVyZW5jZXM9YS5kaWZmZXJlbmNlczt0aGlzLndpZHRocz1hLndpZHRoczt0aGlzLmRlZmF1bHRXaWR0aD1hLmRlZmF1bHRXaWR0aDt0aGlzLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZTt0aGlzLmNNYXA9YS5jTWFwO3RoaXMuY2FwSGVpZ2h0PWEuY2FwSGVpZ2h0L3g7dGhpcy5hc2NlbnQ9YS5hc2NlbnQveDt0aGlzLmRlc2NlbnQ9YS5kZXNjZW50L3g7dGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudDt0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4O3RoaXMuYmJveD1hLmJib3g7dGhpcy5kZWZhdWx0RW5jb2Rpbmc9YS5kZWZhdWx0RW5jb2Rpbmc7dGhpcy50b1VuaWNvZGU9YS50b1VuaWNvZGU7dGhpcy50b0ZvbnRDaGFyPVtdO2lmKCJUeXBlMyIhPT1hLnR5cGUpe3RoaXMuY2lkRW5jb2Rpbmc9YS5jaWRFbmNvZGluZ3x8IiI7dGhpcy52ZXJ0aWNhbD0hIWEudmVydGljYWw7aWYodGhpcy52ZXJ0aWNhbCl7dGhpcy52bWV0cmljcz1hLnZtZXRyaWNzO3RoaXMuZGVmYXVsdFZNZXRyaWNzPWEuZGVmYXVsdFZNZXRyaWNzfWlmKHQmJiF0LmlzRW1wdHkpe1tzLG9dPWdldEZvbnRGaWxlVHlwZSh0LGEpO3M9PT10aGlzLnR5cGUmJm89PT10aGlzLnN1YnR5cGV8fCgwLHIuaW5mbykoYEluY29uc2lzdGVudCBmb250IGZpbGUgVHlwZS9TdWJUeXBlLCBleHBlY3RlZDogJHt0aGlzLnR5cGV9LyR7dGhpcy5zdWJ0eXBlfSBidXQgZm91bmQ6ICR7c30vJHtvfS5gKTt0cnl7c3dpdGNoKHMpe2Nhc2UiTU1UeXBlMSI6KDAsci5pbmZvKSgiTU1UeXBlMSBmb250ICgiK2UrIiksIGZhbGxpbmcgYmFjayB0byBUeXBlMS4iKTtjYXNlIlR5cGUxIjpjYXNlIkNJREZvbnRUeXBlMCI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSI7Y29uc3Qgbj0iVHlwZTFDIj09PW98fCJDSURGb250VHlwZTBDIj09PW8/bmV3IHUuQ0ZGRm9udCh0LGEpOm5ldyB3LlR5cGUxRm9udChlLHQsYSk7YWRqdXN0V2lkdGhzKGEpO2M9dGhpcy5jb252ZXJ0KGUsbixhKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSI7Yz10aGlzLmNoZWNrQW5kUmVwYWlyKGUsdCxhKTtpZih0aGlzLmlzT3BlblR5cGUpe2FkanVzdFdpZHRocyhhKTtzPSJPcGVuVHlwZSJ9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgRm9udCAke3N9IGlzIG5vdCBzdXBwb3J0ZWRgKX19Y2F0Y2goZSl7KDAsci53YXJuKShlKTt0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KGEpO3JldHVybn1hbWVuZEZhbGxiYWNrVG9Vbmljb2RlKGEpO3RoaXMuZGF0YT1jO3RoaXMuZm9udFR5cGU9KDAsaS5nZXRGb250VHlwZSkocyxvLGEuaXNTdGFuZGFyZEZvbnQpO3RoaXMuZm9udE1hdHJpeD1hLmZvbnRNYXRyaXg7dGhpcy53aWR0aHM9YS53aWR0aHM7dGhpcy5kZWZhdWx0V2lkdGg9YS5kZWZhdWx0V2lkdGg7dGhpcy50b1VuaWNvZGU9YS50b1VuaWNvZGU7dGhpcy5zZWFjTWFwPWEuc2VhY01hcH1lbHNle3QmJigwLHIud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJytlKyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpO3RoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSl9fWVsc2V7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXRoaXMudG9Gb250Q2hhcltlXT10aGlzLmRpZmZlcmVuY2VzW2VdfHxhLmRlZmF1bHRFbmNvZGluZ1tlXTt0aGlzLmZvbnRUeXBlPXIuRm9udFR5cGUuVFlQRTN9fWdldCByZW5kZXJlcigpe2NvbnN0IGU9ZC5Gb250UmVuZGVyZXJGYWN0b3J5LmNyZWF0ZSh0aGlzLGkuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywicmVuZGVyZXIiLGUpfWV4cG9ydERhdGEoZT0hMSl7Y29uc3QgdD1lP1suLi5rLC4uLkNdOmssYT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCByLG47Zm9yKHIgb2YgdCl7bj10aGlzW3JdO3ZvaWQgMCE9PW4mJihhW3JdPW4pfXJldHVybiBhfWZhbGxiYWNrVG9TeXN0ZW1Gb250KGUpe3RoaXMubWlzc2luZ0ZpbGU9ITA7Y29uc3QgdD10aGlzLm5hbWUsYT10aGlzLnR5cGUsbj10aGlzLnN1YnR5cGU7bGV0IHU9KDAsaS5ub3JtYWxpemVGb250TmFtZSkodCk7Y29uc3QgZD0oMCxsLmdldFN0ZEZvbnRNYXApKCksZz0oMCxsLmdldE5vblN0ZEZvbnRNYXApKCkscD0hIWRbdV0sbT0hKCFnW3VdfHwhZFtnW3VdXSk7dT1kW3VdfHxnW3VdfHx1O2NvbnN0IGI9KDAsZi5nZXRGb250QmFzaWNNZXRyaWNzKSgpW3VdO2lmKGIpe2lzTmFOKHRoaXMuYXNjZW50KSYmKHRoaXMuYXNjZW50PWIuYXNjZW50L3gpO2lzTmFOKHRoaXMuZGVzY2VudCkmJih0aGlzLmRlc2NlbnQ9Yi5kZXNjZW50L3gpO2lzTmFOKHRoaXMuY2FwSGVpZ2h0KSYmKHRoaXMuY2FwSGVpZ2h0PWIuY2FwSGVpZ2h0L3gpfXRoaXMuYm9sZD0vYm9sZC9naS50ZXN0KHUpO3RoaXMuaXRhbGljPS9vYmxpcXVlfGl0YWxpYy9naS50ZXN0KHUpO3RoaXMuYmxhY2s9L0JsYWNrL2cudGVzdCh0KTtjb25zdCB5PS9OYXJyb3cvZy50ZXN0KHQpO3RoaXMucmVtZWFzdXJlPSghcHx8eSkmJk9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGg+MDtpZigocHx8bSkmJiJDSURGb250VHlwZTIiPT09YSYmdGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKSl7Y29uc3QgYT1lLmNpZFRvR2lkTWFwLHI9W107YXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChyLCgwLGwuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpKTsvQXJpYWwtP0JsYWNrL2kudGVzdCh0KT9hcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKHIsKDAsbC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2spKCkpOi9DYWxpYnJpL2kudGVzdCh0KSYmYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChyLCgwLGwuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpKSgpKTtpZihhKXtmb3IoY29uc3QgZSBpbiByKXtjb25zdCB0PXJbZV07dm9pZCAwIT09YVt0XSYmKHJbK2VdPWFbdF0pfWEubGVuZ3RoIT09dGhpcy50b1VuaWNvZGUubGVuZ3RoJiZlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1yW2VdO3ZvaWQgMD09PWFbbl0mJihyWytlXT10KX0pKX10aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXB8fHRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7clsrZV09dH0pKTt0aGlzLnRvRm9udENoYXI9cjt0aGlzLnRvVW5pY29kZT1uZXcgaC5Ub1VuaWNvZGVNYXAocil9ZWxzZSBpZigvU3ltYm9sL2kudGVzdCh1KSl0aGlzLnRvRm9udENoYXI9YnVpbGRUb0ZvbnRDaGFyKGMuU3ltYm9sU2V0RW5jb2RpbmcsKDAsby5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpO2Vsc2UgaWYoL0RpbmdiYXRzL2kudGVzdCh1KSl7L1dpbmdkaW5ncy9pLnRlc3QodCkmJigwLHIud2FybikoIk5vbi1lbWJlZGRlZCBXaW5nZGluZ3MgZm9udCwgZmFsbGluZyBiYWNrIHRvIFphcGZEaW5nYmF0cy4iKTt0aGlzLnRvRm9udENoYXI9YnVpbGRUb0ZvbnRDaGFyKGMuWmFwZkRpbmdiYXRzRW5jb2RpbmcsKDAsby5nZXREaW5nYmF0c0dseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyl9ZWxzZSBpZihwKXtjb25zdCBlPWJ1aWxkVG9Gb250Q2hhcih0aGlzLmRlZmF1bHRFbmNvZGluZywoMCxvLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7IkNJREZvbnRUeXBlMiIhPT1hfHx0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpfHx0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXB8fHRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7ZVsrdF09YX0pKTt0aGlzLnRvRm9udENoYXI9ZX1lbHNle2NvbnN0IGU9KDAsby5nZXRHbHlwaHNVbmljb2RlKSgpLGE9W107dGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoKHQscik9PntpZighdGhpcy5jb21wb3NpdGUpe2NvbnN0IGE9dGhpcy5kaWZmZXJlbmNlc1t0XXx8dGhpcy5kZWZhdWx0RW5jb2RpbmdbdF0sbj0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkoYSxlKTstMSE9PW4mJihyPW4pfWFbK3RdPXJ9KSk7dGhpcy5jb21wb3NpdGUmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcCYmL1ZlcmRhbmEvaS50ZXN0KHQpJiZhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKGEsKDAsbC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpO3RoaXMudG9Gb250Q2hhcj1hfWFtZW5kRmFsbGJhY2tUb1VuaWNvZGUoZSk7dGhpcy5sb2FkZWROYW1lPXUuc3BsaXQoIi0iKVswXTt0aGlzLmZvbnRUeXBlPSgwLGkuZ2V0Rm9udFR5cGUpKGEsbixlLmlzU3RhbmRhcmRGb250KX1jaGVja0FuZFJlcGFpcihlLHQsYSl7Y29uc3Qgcz1bIk9TLzIiLCJjbWFwIiwiaGVhZCIsImhoZWEiLCJobXR4IiwibWF4cCIsIm5hbWUiLCJwb3N0IiwibG9jYSIsImdseWYiLCJmcGdtIiwicHJlcCIsImN2dCAiLCJDRkYgIl07ZnVuY3Rpb24gcmVhZFRhYmxlcyhlLHQpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTthWyJPUy8yIl09bnVsbDthLmNtYXA9bnVsbDthLmhlYWQ9bnVsbDthLmhoZWE9bnVsbDthLmhtdHg9bnVsbDthLm1heHA9bnVsbDthLm5hbWU9bnVsbDthLnBvc3Q9bnVsbDtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCB0PXJlYWRUYWJsZUVudHJ5KGUpO3MuaW5jbHVkZXModC50YWcpJiYoMCE9PXQubGVuZ3RoJiYoYVt0LnRhZ109dCkpfXJldHVybiBhfWZ1bmN0aW9uIHJlYWRUYWJsZUVudHJ5KGUpe2NvbnN0IHQ9ZS5nZXRTdHJpbmcoNCksYT1lLmdldEludDMyKCk+Pj4wLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjAsaT1lLnBvcztlLnBvcz1lLnN0YXJ0fHwwO2Uuc2tpcChyKTtjb25zdCBzPWUuZ2V0Qnl0ZXMobik7ZS5wb3M9aTtpZigiaGVhZCI9PT10KXtzWzhdPXNbOV09c1sxMF09c1sxMV09MDtzWzE3XXw9MzJ9cmV0dXJue3RhZzp0LGNoZWNrc3VtOmEsbGVuZ3RoOm4sb2Zmc2V0OnIsZGF0YTpzfX1mdW5jdGlvbiByZWFkT3BlblR5cGVIZWFkZXIoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiBzYW5pdGl6ZUdseXBoKGUsdCxhLHIsbixpKXtjb25zdCBzPXtsZW5ndGg6MCxzaXplT2ZJbnN0cnVjdGlvbnM6MH07aWYoYS10PD0xMilyZXR1cm4gcztjb25zdCBvPWUuc3ViYXJyYXkodCxhKTtsZXQgYz1zaWduZWRJbnQxNihvWzBdLG9bMV0pO2lmKGM8MCl7Yz0tMTt3cml0ZVNpZ25lZEludDE2KG8sMCxjKTtyLnNldChvLG4pO3MubGVuZ3RoPW8ubGVuZ3RoO3JldHVybiBzfWxldCBsLGg9MTAsdT0wO2ZvcihsPTA7bDxjO2wrKyl7dT0ob1toXTw8OHxvW2grMV0pKzE7aCs9Mn1jb25zdCBkPWgsZj1vW2hdPDw4fG9baCsxXTtzLnNpemVPZkluc3RydWN0aW9ucz1mO2grPTIrZjtjb25zdCBnPWg7bGV0IHA9MDtmb3IobD0wO2w8dTtsKyspe2NvbnN0IGU9b1toKytdOzE5MiZlJiYob1toLTFdPTYzJmUpO2xldCB0PTI7MiZlP3Q9MToxNiZlJiYodD0wKTtsZXQgYT0yOzQmZT9hPTE6MzImZSYmKGE9MCk7Y29uc3Qgcj10K2E7cCs9cjtpZig4JmUpe2NvbnN0IGU9b1toKytdO2wrPWU7cCs9ZSpyfX1pZigwPT09cClyZXR1cm4gcztsZXQgbT1oK3A7aWYobT5vLmxlbmd0aClyZXR1cm4gcztpZighaSYmZj4wKXtyLnNldChvLnN1YmFycmF5KDAsZCksbik7ci5zZXQoWzAsMF0sbitkKTtyLnNldChvLnN1YmFycmF5KGcsbSksbitkKzIpO20tPWY7by5sZW5ndGgtbT4zJiYobT1tKzMmLTQpO3MubGVuZ3RoPW07cmV0dXJuIHN9aWYoby5sZW5ndGgtbT4zKXttPW0rMyYtNDtyLnNldChvLnN1YmFycmF5KDAsbSksbik7cy5sZW5ndGg9bTtyZXR1cm4gc31yLnNldChvLG4pO3MubGVuZ3RoPW8ubGVuZ3RoO3JldHVybiBzfWZ1bmN0aW9uIHJlYWROYW1lVGFibGUoZSl7Y29uc3QgYT0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9YTtjb25zdCByPVtbXSxbXV0sbj1lLmxlbmd0aCxpPWErbjtpZigwIT09dC5nZXRVaW50MTYoKXx8bjw2KXJldHVybiByO2NvbnN0IHM9dC5nZXRVaW50MTYoKSxvPXQuZ2V0VWludDE2KCksYz1bXTtsZXQgbCxoO2ZvcihsPTA7bDxzJiZ0LnBvcysxMjw9aTtsKyspe2NvbnN0IGU9e3BsYXRmb3JtOnQuZ2V0VWludDE2KCksZW5jb2Rpbmc6dC5nZXRVaW50MTYoKSxsYW5ndWFnZTp0LmdldFVpbnQxNigpLG5hbWU6dC5nZXRVaW50MTYoKSxsZW5ndGg6dC5nZXRVaW50MTYoKSxvZmZzZXQ6dC5nZXRVaW50MTYoKX07KDE9PT1lLnBsYXRmb3JtJiYwPT09ZS5lbmNvZGluZyYmMD09PWUubGFuZ3VhZ2V8fDM9PT1lLnBsYXRmb3JtJiYxPT09ZS5lbmNvZGluZyYmMTAzMz09PWUubGFuZ3VhZ2UpJiZjLnB1c2goZSl9Zm9yKGw9MCxoPWMubGVuZ3RoO2w8aDtsKyspe2NvbnN0IGU9Y1tsXTtpZihlLmxlbmd0aDw9MCljb250aW51ZTtjb25zdCBuPWErbytlLm9mZnNldDtpZihuK2UubGVuZ3RoPmkpY29udGludWU7dC5wb3M9bjtjb25zdCBzPWUubmFtZTtpZihlLmVuY29kaW5nKXtsZXQgYT0iIjtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKz0yKWErPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7clsxXVtzXT1hfWVsc2UgclswXVtzXT10LmdldFN0cmluZyhlLmxlbmd0aCl9cmV0dXJuIHJ9Y29uc3QgbD1bMCwwLDAsMCwwLDAsMCwwLC0yLC0yLC0yLC0yLDAsMCwtMiwtNSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwtMSwtMSwxLC0xLC05OTksMCwxLDAsLTEsLTIsMCwtMSwtMiwtMSwtMSwwLC0xLC0xLDAsMCwtOTk5LC05OTksLTEsLTEsLTEsLTEsLTIsLTk5OSwtMiwtMiwtOTk5LDAsLTIsLTIsMCwwLC0yLDAsLTIsMCwwLDAsLTIsLTEsLTEsMSwxLDAsMCwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwwLC05OTksLTEsLTEsLTEsLTEsLTEsLTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLTIsLTk5OSwtOTk5LC05OTksLTk5OSwtOTk5LC0xLC0xLC0yLC0yLDAsMCwwLDAsLTEsLTEsLTk5OSwtMiwtMiwwLDAsLTEsLTIsLTIsMCwwLDAsLTEsLTEsLTEsLTJdO2Z1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtKGUsdCl7bGV0IGEsbixpLHMsbyxjPWUuZGF0YSxoPTAsdT0wLGQ9MDtjb25zdCBmPVtdLGc9W10scD1bXTtsZXQgbT10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyxiPSExLHk9MCx3PTA7Zm9yKGxldCBlPWMubGVuZ3RoO2g8ZTspe2NvbnN0IGU9Y1toKytdO2lmKDY0PT09ZSl7bj1jW2grK107aWYoYnx8dyloKz1uO2Vsc2UgZm9yKGE9MDthPG47YSsrKWYucHVzaChjW2grK10pfWVsc2UgaWYoNjU9PT1lKXtuPWNbaCsrXTtpZihifHx3KWgrPTIqbjtlbHNlIGZvcihhPTA7YTxuO2ErKyl7aT1jW2grK107Zi5wdXNoKGk8PDh8Y1toKytdKX19ZWxzZSBpZigxNzY9PSgyNDgmZSkpe249ZS0xNzYrMTtpZihifHx3KWgrPW47ZWxzZSBmb3IoYT0wO2E8bjthKyspZi5wdXNoKGNbaCsrXSl9ZWxzZSBpZigxODQ9PSgyNDgmZSkpe249ZS0xODQrMTtpZihifHx3KWgrPTIqbjtlbHNlIGZvcihhPTA7YTxuO2ErKyl7aT1jW2grK107Zi5wdXNoKGk8PDh8Y1toKytdKX19ZWxzZSBpZig0MyE9PWV8fG0paWYoNDQhPT1lfHxtKXtpZig0NT09PWUpaWYoYil7Yj0hMTt1PWh9ZWxzZXtvPWcucG9wKCk7aWYoIW8peygwLHIud2FybikoIlRUOiBFTkRGIGJhZCBzdGFjayIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59cz1wLnBvcCgpO2M9by5kYXRhO2g9by5pO3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbc109Zi5sZW5ndGgtby5zdGFja1RvcH1lbHNlIGlmKDEzNz09PWUpe2lmKGJ8fHcpeygwLHIud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKTttPSEwfWI9ITA7ZD1ofWVsc2UgaWYoODg9PT1lKSsreTtlbHNlIGlmKDI3PT09ZSl3PXk7ZWxzZSBpZig4OT09PWUpe3c9PT15JiYodz0wKTstLXl9ZWxzZSBpZigyOD09PWUmJiFiJiYhdyl7Y29uc3QgZT1mLmF0KC0xKTtlPjAmJihoKz1lLTEpfX1lbHNle2lmKGJ8fHcpeygwLHIud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKTttPSEwfWI9ITA7ZD1oO3M9Zi5wb3AoKTt0LmZ1bmN0aW9uc0RlZmluZWRbc109e2RhdGE6YyxpOmh9fWVsc2UgaWYoIWImJiF3KXtzPWYuYXQoLTEpO2lmKGlzTmFOKHMpKSgwLHIuaW5mbykoIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS4iKTtlbHNle3QuZnVuY3Rpb25zVXNlZFtzXT0hMDtpZihzIGluIHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpe2NvbnN0IGU9Zi5sZW5ndGgrdC5mdW5jdGlvbnNTdGFja0RlbHRhc1tzXTtpZihlPDApeygwLHIud2FybikoIlRUOiBDQUxMIGludmFsaWQgZnVuY3Rpb25zIHN0YWNrIGRlbHRhLiIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59Zi5sZW5ndGg9ZX1lbHNlIGlmKHMgaW4gdC5mdW5jdGlvbnNEZWZpbmVkJiYhcC5pbmNsdWRlcyhzKSl7Zy5wdXNoKHtkYXRhOmMsaTpoLHN0YWNrVG9wOmYubGVuZ3RoLTF9KTtwLnB1c2gocyk7bz10LmZ1bmN0aW9uc0RlZmluZWRbc107aWYoIW8peygwLHIud2FybikoIlRUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvbiIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59Yz1vLmRhdGE7aD1vLml9fX1pZighYiYmIXcpe2xldCB0PTA7ZTw9MTQyP3Q9bFtlXTplPj0xOTImJmU8PTIyMz90PS0xOmU+PTIyNCYmKHQ9LTIpO2lmKGU+PTExMyYmZTw9MTE3KXtuPWYucG9wKCk7aXNOYU4obil8fCh0PTIqLW4pfWZvcig7dDwwJiZmLmxlbmd0aD4wOyl7Zi5wb3AoKTt0Kyt9Zm9yKDt0PjA7KXtmLnB1c2goTmFOKTt0LS19fX10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucz1tO2NvbnN0IFM9W2NdO2g+Yy5sZW5ndGgmJlMucHVzaChuZXcgVWludDhBcnJheShoLWMubGVuZ3RoKSk7aWYoZD51KXsoMCxyLndhcm4pKCJUVDogY29tcGxlbWVudGluZyBhIG1pc3NpbmcgZnVuY3Rpb24gdGFpbCIpO1MucHVzaChuZXcgVWludDhBcnJheShbMzQsNDVdKSl9IWZ1bmN0aW9uIGZvbGRUVFRhYmxlKGUsdCl7aWYodC5sZW5ndGg+MSl7bGV0IGEscixuPTA7Zm9yKGE9MCxyPXQubGVuZ3RoO2E8cjthKyspbis9dFthXS5sZW5ndGg7bj1uKzMmLTQ7Y29uc3QgaT1uZXcgVWludDhBcnJheShuKTtsZXQgcz0wO2ZvcihhPTAscj10Lmxlbmd0aDthPHI7YSsrKXtpLnNldCh0W2FdLHMpO3MrPXRbYV0ubGVuZ3RofWUuZGF0YT1pO2UubGVuZ3RoPW59fShlLFMpfWxldCBkLGYsYix3O2lmKGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZSh0PW5ldyB5LlN0cmVhbShuZXcgVWludDhBcnJheSh0LmdldEJ5dGVzKCkpKSkpe2NvbnN0IGU9ZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZSx0KXtjb25zdHtudW1Gb250czphLG9mZnNldFRhYmxlOm59PWZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIoZSl7Y29uc3QgdD1lLmdldFN0cmluZyg0KTsoMCxyLmFzc2VydCkoInR0Y2YiPT09dCwiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC4iKTtjb25zdCBhPWUuZ2V0VWludDE2KCksbj1lLmdldFVpbnQxNigpLGk9ZS5nZXRJbnQzMigpPj4+MCxzPVtdO2ZvcihsZXQgdD0wO3Q8aTt0Kyspcy5wdXNoKGUuZ2V0SW50MzIoKT4+PjApO2NvbnN0IG89e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjphLG1pbm9yVmVyc2lvbjpuLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6c307c3dpdGNoKGEpe2Nhc2UgMTpyZXR1cm4gbztjYXNlIDI6by5kc2lnVGFnPWUuZ2V0SW50MzIoKT4+PjA7by5kc2lnTGVuZ3RoPWUuZ2V0SW50MzIoKT4+PjA7by5kc2lnT2Zmc2V0PWUuZ2V0SW50MzIoKT4+PjA7cmV0dXJuIG99dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICR7YX0uYCl9KGUpLGk9dC5zcGxpdCgiKyIpO2xldCBzO2ZvcihsZXQgbz0wO288YTtvKyspe2UucG9zPShlLnN0YXJ0fHwwKStuW29dO2NvbnN0IGE9cmVhZE9wZW5UeXBlSGVhZGVyKGUpLGM9cmVhZFRhYmxlcyhlLGEubnVtVGFibGVzKTtpZighYy5uYW1lKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQgbXVzdCBjb250YWluIGEgIm5hbWUiIHRhYmxlLicpO2NvbnN0IGw9cmVhZE5hbWVUYWJsZShjLm5hbWUpO2ZvcihsZXQgZT0wLHI9bC5sZW5ndGg7ZTxyO2UrKylmb3IobGV0IHI9MCxuPWxbZV0ubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49bFtlXVtyXSYmbFtlXVtyXS5yZXBsYWNlKC9ccy9nLCIiKTtpZihuKXtpZihuPT09dClyZXR1cm57aGVhZGVyOmEsdGFibGVzOmN9O2lmKCEoaS5sZW5ndGg8MikpZm9yKGNvbnN0IGUgb2YgaSluPT09ZSYmKHM9e25hbWU6ZSxoZWFkZXI6YSx0YWJsZXM6Y30pfX19aWYocyl7KDAsci53YXJuKShgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICIke3R9IiBmb250LCBmYWxsaW5nIGJhY2sgdG8gIiR7cy5uYW1lfSIgZm9udCBpbnN0ZWFkLmApO3JldHVybntoZWFkZXI6cy5oZWFkZXIsdGFibGVzOnMudGFibGVzfX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICIke3R9IiBmb250LmApfSh0LHRoaXMubmFtZSk7ZD1lLmhlYWRlcjtmPWUudGFibGVzfWVsc2V7ZD1yZWFkT3BlblR5cGVIZWFkZXIodCk7Zj1yZWFkVGFibGVzKHQsZC5udW1UYWJsZXMpfWNvbnN0IFM9IWZbIkNGRiAiXTtpZihTKXtpZighZi5sb2NhKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAibG9jYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7aWYoIWYuZ2x5Zil7KDAsci53YXJuKSgnUmVxdWlyZWQgImdseWYiIHRhYmxlIGlzIG5vdCBmb3VuZCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtmLmdseWY9e3RhZzoiZ2x5ZiIsZGF0YTpuZXcgVWludDhBcnJheSgwKX19dGhpcy5pc09wZW5UeXBlPSExfWVsc2V7Y29uc3QgdD1hLmNvbXBvc2l0ZSYmKChhLmNpZFRvR2lkTWFwfHxbXSkubGVuZ3RoPjB8fCEoYS5jTWFwIGluc3RhbmNlb2YgcC5JZGVudGl0eUNNYXApKTtpZigiT1RUTyI9PT1kLnZlcnNpb24mJiF0fHwhZi5oZWFkfHwhZi5oaGVhfHwhZi5tYXhwfHwhZi5wb3N0KXt3PW5ldyB5LlN0cmVhbShmWyJDRkYgIl0uZGF0YSk7Yj1uZXcgdS5DRkZGb250KHcsYSk7YWRqdXN0V2lkdGhzKGEpO3JldHVybiB0aGlzLmNvbnZlcnQoZSxiLGEpfWRlbGV0ZSBmLmdseWY7ZGVsZXRlIGYubG9jYTtkZWxldGUgZi5mcGdtO2RlbGV0ZSBmLnByZXA7ZGVsZXRlIGZbImN2dCAiXTt0aGlzLmlzT3BlblR5cGU9ITB9aWYoIWYubWF4cCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcignUmVxdWlyZWQgIm1heHAiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO3QucG9zPSh0LnN0YXJ0fHwwKStmLm1heHAub2Zmc2V0O2NvbnN0IHg9dC5nZXRJbnQzMigpLGs9dC5nZXRVaW50MTYoKTtpZihhLnNjYWxlRmFjdG9ycyYmYS5zY2FsZUZhY3RvcnMubGVuZ3RoPT09ayYmUyl7Y29uc3R7c2NhbGVGYWN0b3JzOmV9PWEsdD1pbnQxNihmLmhlYWQuZGF0YVs1MF0sZi5oZWFkLmRhdGFbNTFdKSxyPW5ldyBnLkdseWZUYWJsZSh7Z2x5ZlRhYmxlOmYuZ2x5Zi5kYXRhLGlzR2x5cGhMb2NhdGlvbnNMb25nOnQsbG9jYVRhYmxlOmYubG9jYS5kYXRhLG51bUdseXBoczprfSk7ci5zY2FsZShlKTtjb25zdHtnbHlmOm4sbG9jYTppLGlzTG9jYXRpb25Mb25nOnN9PXIud3JpdGUoKTtmLmdseWYuZGF0YT1uO2YubG9jYS5kYXRhPWk7aWYocyE9PSEhdCl7Zi5oZWFkLmRhdGFbNTBdPTA7Zi5oZWFkLmRhdGFbNTFdPXM/MTowfWNvbnN0IG89Zi5obXR4LmRhdGE7Zm9yKGxldCB0PTA7dDxrO3QrKyl7Y29uc3QgYT00KnQscj1NYXRoLnJvdW5kKGVbdF0qaW50MTYob1thXSxvW2ErMV0pKTtvW2FdPXI+PjgmMjU1O29bYSsxXT0yNTUmcjt3cml0ZVNpZ25lZEludDE2KG8sYSsyLE1hdGgucm91bmQoZVt0XSpzaWduZWRJbnQxNihvW2ErMl0sb1thKzNdKSkpfX1sZXQgQz1rKzEsdj0hMDtpZihDPjY1NTM1KXt2PSExO0M9azsoMCxyLndhcm4pKCJOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKX1sZXQgRj0wLE89MDtpZih4Pj02NTUzNiYmZi5tYXhwLmxlbmd0aD49MjIpe3QucG9zKz04O2lmKHQuZ2V0VWludDE2KCk+Mil7Zi5tYXhwLmRhdGFbMTRdPTA7Zi5tYXhwLmRhdGFbMTVdPTJ9dC5wb3MrPTQ7Rj10LmdldFVpbnQxNigpO3QucG9zKz00O089dC5nZXRVaW50MTYoKX1mLm1heHAuZGF0YVs0XT1DPj44O2YubWF4cC5kYXRhWzVdPTI1NSZDO2NvbnN0IFQ9ZnVuY3Rpb24gc2FuaXRpemVUVFByb2dyYW1zKGUsdCxhLG4pe2NvbnN0IGk9e2Z1bmN0aW9uc0RlZmluZWQ6W10sZnVuY3Rpb25zVXNlZDpbXSxmdW5jdGlvbnNTdGFja0RlbHRhczpbXSx0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6ITEsaGludHNWYWxpZDohMH07ZSYmc2FuaXRpemVUVFByb2dyYW0oZSxpKTt0JiZzYW5pdGl6ZVRUUHJvZ3JhbSh0LGkpO2UmJmZ1bmN0aW9uIGNoZWNrSW52YWxpZEZ1bmN0aW9ucyhlLHQpe2lmKCFlLnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucylpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpeygwLHIud2FybikoIlRUOiBtb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoYW4gZXhwZWN0ZWQiKTtlLmhpbnRzVmFsaWQ9ITF9ZWxzZSBmb3IobGV0IGE9MCxuPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7YTxuO2ErKyl7aWYoYT50KXsoMCxyLndhcm4pKCJUVDogaW52YWxpZCBmdW5jdGlvbiBpZDogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufWlmKGUuZnVuY3Rpb25zVXNlZFthXSYmIWUuZnVuY3Rpb25zRGVmaW5lZFthXSl7KDAsci53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufX19KGksbik7aWYoYSYmMSZhLmxlbmd0aCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShhLmxlbmd0aCsxKTtlLnNldChhLmRhdGEpO2EuZGF0YT1lfXJldHVybiBpLmhpbnRzVmFsaWR9KGYuZnBnbSxmLnByZXAsZlsiY3Z0ICJdLEYpO2lmKCFUKXtkZWxldGUgZi5mcGdtO2RlbGV0ZSBmLnByZXA7ZGVsZXRlIGZbImN2dCAiXX0hZnVuY3Rpb24gc2FuaXRpemVNZXRyaWNzKGUsdCxhLG4saSxzKXtpZighdCl7YSYmKGEuZGF0YT1udWxsKTtyZXR1cm59ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0O2UucG9zKz00O2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2NvbnN0IG89ZS5nZXRVaW50MTYoKTtlLnBvcys9ODtlLnBvcys9MjtsZXQgYz1lLmdldFVpbnQxNigpO2lmKDAhPT1vKXtpZighKDImaW50MTYobi5kYXRhWzQ0XSxuLmRhdGFbNDVdKSkpe3QuZGF0YVsyMl09MDt0LmRhdGFbMjNdPTB9fWlmKGM+aSl7KDAsci5pbmZvKShgVGhlIG51bU9mTWV0cmljcyAoJHtjfSkgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bUdseXBocyAoJHtpfSkuYCk7Yz1pO3QuZGF0YVszNF09KDY1MjgwJmMpPj44O3QuZGF0YVszNV09MjU1JmN9Y29uc3QgbD1pLWMtKGEubGVuZ3RoLTQqYz4+MSk7aWYobD4wKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKzIqbCk7ZS5zZXQoYS5kYXRhKTtpZihzKXtlW2EubGVuZ3RoXT1hLmRhdGFbMl07ZVthLmxlbmd0aCsxXT1hLmRhdGFbM119YS5kYXRhPWV9fSh0LGYuaGhlYSxmLmhtdHgsZi5oZWFkLEMsdik7aWYoIWYuaGVhZCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhlYWQiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOyFmdW5jdGlvbiBzYW5pdGl6ZUhlYWQoZSx0LGEpe2NvbnN0IG49ZS5kYXRhLGk9ZnVuY3Rpb24gaW50MzIoZSx0LGEscil7cmV0dXJuKGU8PDI0KSsodDw8MTYpKyhhPDw4KStyfShuWzBdLG5bMV0sblsyXSxuWzNdKTtpZihpPj4xNiE9MSl7KDAsci5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICIraSk7blswXT0wO25bMV09MTtuWzJdPTA7blszXT0wfWNvbnN0IHM9aW50MTYobls1MF0sbls1MV0pO2lmKHM8MHx8cz4xKXsoMCxyLmluZm8pKCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIGluZGV4VG9Mb2NGb3JtYXQgaW4gaGVhZCB0YWJsZTogIitzKTtjb25zdCBlPXQrMTtpZihhPT09ZTw8MSl7bls1MF09MDtuWzUxXT0wfWVsc2V7aWYoYSE9PWU8PDIpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkNvdWxkIG5vdCBmaXggaW5kZXhUb0xvY0Zvcm1hdDogIitzKTtuWzUwXT0wO25bNTFdPTF9fX0oZi5oZWFkLGssUz9mLmxvY2EubGVuZ3RoOjApO2xldCBNPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoUyl7Y29uc3QgZT1pbnQxNihmLmhlYWQuZGF0YVs1MF0sZi5oZWFkLmRhdGFbNTFdKSx0PWZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMoZSx0LGEscixuLGkscyl7bGV0IG8sYyxsO2lmKHIpe289NDtjPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhlLHQpe3JldHVybiBlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM119O2w9ZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGVMb25nKGUsdCxhKXtlW3RdPWE+Pj4yNCYyNTU7ZVt0KzFdPWE+PjE2JjI1NTtlW3QrMl09YT4+OCYyNTU7ZVt0KzNdPTI1NSZhfX1lbHNle289MjtjPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfTtsPWZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGUsdCxhKXtlW3RdPWE+PjkmMjU1O2VbdCsxXT1hPj4xJjI1NX19Y29uc3QgaD1pP2ErMTphLHU9byooMStoKSxkPW5ldyBVaW50OEFycmF5KHUpO2Quc2V0KGUuZGF0YS5zdWJhcnJheSgwLHUpKTtlLmRhdGE9ZDtjb25zdCBmPXQuZGF0YSxnPWYubGVuZ3RoLHA9bmV3IFVpbnQ4QXJyYXkoZyk7bGV0IG0sYjtjb25zdCB5PVtdO2ZvcihtPTAsYj0wO208YSsxO20rKyxiKz1vKXtsZXQgZT1jKGQsYik7ZT5nJiYoZT1nKTt5LnB1c2goe2luZGV4Om0sb2Zmc2V0OmUsZW5kT2Zmc2V0OjB9KX15LnNvcnQoKChlLHQpPT5lLm9mZnNldC10Lm9mZnNldCkpO2ZvcihtPTA7bTxhO20rKyl5W21dLmVuZE9mZnNldD15W20rMV0ub2Zmc2V0O3kuc29ydCgoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCkpO2ZvcihtPTA7bTxhO20rKyl7Y29uc3R7b2Zmc2V0OmUsZW5kT2Zmc2V0OnR9PXlbbV07aWYoMCE9PWV8fDAhPT10KWJyZWFrO2NvbnN0IGE9eVttKzFdLm9mZnNldDtpZigwIT09YSl7eVttXS5lbmRPZmZzZXQ9YTticmVha319Y29uc3Qgdz1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBTPTA7bChkLDAsUyk7Zm9yKG09MCxiPW87bTxhO20rKyxiKz1vKXtjb25zdCBlPXNhbml0aXplR2x5cGgoZix5W21dLm9mZnNldCx5W21dLmVuZE9mZnNldCxwLFMsbiksdD1lLmxlbmd0aDswPT09dCYmKHdbbV09ITApO2Uuc2l6ZU9mSW5zdHJ1Y3Rpb25zPnMmJihzPWUuc2l6ZU9mSW5zdHJ1Y3Rpb25zKTtTKz10O2woZCxiLFMpfWlmKDA9PT1TKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihtPTAsYj1vO208aDttKyssYis9bylsKGQsYixlLmxlbmd0aCk7dC5kYXRhPWV9ZWxzZSBpZihpKXtjb25zdCBhPWMoZCxvKTtpZihwLmxlbmd0aD5hK1MpdC5kYXRhPXAuc3ViYXJyYXkoMCxhK1MpO2Vsc2V7dC5kYXRhPW5ldyBVaW50OEFycmF5KGErUyk7dC5kYXRhLnNldChwLnN1YmFycmF5KDAsUykpfXQuZGF0YS5zZXQocC5zdWJhcnJheSgwLGEpLFMpO2woZS5kYXRhLGQubGVuZ3RoLW8sUythKX1lbHNlIHQuZGF0YT1wLnN1YmFycmF5KDAsUyk7cmV0dXJue21pc3NpbmdHbHlwaHM6dyxtYXhTaXplT2ZJbnN0cnVjdGlvbnM6c319KGYubG9jYSxmLmdseWYsayxlLFQsdixPKTtNPXQubWlzc2luZ0dseXBocztpZih4Pj02NTUzNiYmZi5tYXhwLmxlbmd0aD49MjIpe2YubWF4cC5kYXRhWzI2XT10Lm1heFNpemVPZkluc3RydWN0aW9ucz4+ODtmLm1heHAuZGF0YVsyN109MjU1JnQubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zfX1pZighZi5oaGVhKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGhlYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7aWYoMD09PWYuaGhlYS5kYXRhWzEwXSYmMD09PWYuaGhlYS5kYXRhWzExXSl7Zi5oaGVhLmRhdGFbMTBdPTI1NTtmLmhoZWEuZGF0YVsxMV09MjU1fWNvbnN0IEU9e3VuaXRzUGVyRW06aW50MTYoZi5oZWFkLmRhdGFbMThdLGYuaGVhZC5kYXRhWzE5XSkseU1heDppbnQxNihmLmhlYWQuZGF0YVs0Ml0sZi5oZWFkLmRhdGFbNDNdKSx5TWluOnNpZ25lZEludDE2KGYuaGVhZC5kYXRhWzM4XSxmLmhlYWQuZGF0YVszOV0pLGFzY2VudDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs0XSxmLmhoZWEuZGF0YVs1XSksZGVzY2VudDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs2XSxmLmhoZWEuZGF0YVs3XSksbGluZUdhcDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs4XSxmLmhoZWEuZGF0YVs5XSl9O3RoaXMuYXNjZW50PUUuYXNjZW50L0UudW5pdHNQZXJFbTt0aGlzLmRlc2NlbnQ9RS5kZXNjZW50L0UudW5pdHNQZXJFbTt0aGlzLmxpbmVHYXA9RS5saW5lR2FwL0UudW5pdHNQZXJFbTtpZih0aGlzLmNzc0ZvbnRJbmZvJiZ0aGlzLmNzc0ZvbnRJbmZvLmxpbmVIZWlnaHQpe3RoaXMubGluZUhlaWdodD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUhlaWdodDt0aGlzLmxpbmVHYXA9dGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVHYXB9ZWxzZSB0aGlzLmxpbmVIZWlnaHQ9dGhpcy5hc2NlbnQtdGhpcy5kZXNjZW50K3RoaXMubGluZUdhcDtmLnBvc3QmJmZ1bmN0aW9uIHJlYWRQb3N0U2NyaXB0VGFibGUoZSxhLG4pe2NvbnN0IHM9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPXM7Y29uc3Qgbz1zK2UubGVuZ3RoLGM9dC5nZXRJbnQzMigpO3Quc2tpcCgyOCk7bGV0IGwsaCx1PSEwO3N3aXRjaChjKXtjYXNlIDY1NTM2Omw9aS5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc7YnJlYWs7Y2FzZSAxMzEwNzI6Y29uc3QgZT10LmdldFVpbnQxNigpO2lmKGUhPT1uKXt1PSExO2JyZWFrfWNvbnN0IHM9W107Zm9yKGg9MDtoPGU7KytoKXtjb25zdCBlPXQuZ2V0VWludDE2KCk7aWYoZT49MzI3Njgpe3U9ITE7YnJlYWt9cy5wdXNoKGUpfWlmKCF1KWJyZWFrO2NvbnN0IGQ9W10sZj1bXTtmb3IoO3QucG9zPG87KXtjb25zdCBlPXQuZ2V0Qnl0ZSgpO2YubGVuZ3RoPWU7Zm9yKGg9MDtoPGU7KytoKWZbaF09U3RyaW5nLmZyb21DaGFyQ29kZSh0LmdldEJ5dGUoKSk7ZC5wdXNoKGYuam9pbigiIikpfWw9W107Zm9yKGg9MDtoPGU7KytoKXtjb25zdCBlPXNbaF07ZTwyNTg/bC5wdXNoKGkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nW2VdKTpsLnB1c2goZFtlLTI1OF0pfWJyZWFrO2Nhc2UgMTk2NjA4OmJyZWFrO2RlZmF1bHQ6KDAsci53YXJuKSgiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gIitjKTt1PSExO2EuZGVmYXVsdEVuY29kaW5nJiYobD1hLmRlZmF1bHRFbmNvZGluZyl9YS5nbHlwaE5hbWVzPWw7cmV0dXJuIHV9KGYucG9zdCxhLGspO2YucG9zdD17dGFnOiJwb3N0IixkYXRhOmNyZWF0ZVBvc3RUYWJsZShhKX07Y29uc3QgRD1bXTtmdW5jdGlvbiBoYXNHbHlwaChlKXtyZXR1cm4hTVtlXX1pZihhLmNvbXBvc2l0ZSl7Y29uc3QgZT1hLmNpZFRvR2lkTWFwfHxbXSx0PTA9PT1lLmxlbmd0aDthLmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oYSxuKXsic3RyaW5nIj09dHlwZW9mIG4mJihuPWNvbnZlcnRDaWRTdHJpbmcoYSxuLCEwKSk7aWYobj42NTUzNSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpO2xldCBpPS0xO3Q/aT1uOnZvaWQgMCE9PWVbbl0mJihpPWVbbl0pO2k+PTAmJmk8ayYmaGFzR2x5cGgoaSkmJihEW2FdPWkpfSkpfWVsc2V7Y29uc3QgZT1mdW5jdGlvbiByZWFkQ21hcFRhYmxlKGUsdCxhLG4pe2lmKCFlKXsoMCxyLndhcm4pKCJObyBjbWFwIHRhYmxlIGF2YWlsYWJsZS4iKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19bGV0IGkscz0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9czt0LnNraXAoMik7Y29uc3Qgbz10LmdldFVpbnQxNigpO2xldCBjLGw9ITE7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3Qgcj10LmdldFVpbnQxNigpLGk9dC5nZXRVaW50MTYoKSxzPXQuZ2V0SW50MzIoKT4+PjA7bGV0IGg9ITE7aWYoIWN8fGMucGxhdGZvcm1JZCE9PXJ8fGMuZW5jb2RpbmdJZCE9PWkpe2lmKDAhPT1yfHwwIT09aSYmMSE9PWkmJjMhPT1pKWlmKDE9PT1yJiYwPT09aSloPSEwO2Vsc2UgaWYoMyE9PXJ8fDEhPT1pfHwhbiYmYyl7aWYoYSYmMz09PXImJjA9PT1pKXtoPSEwO2xldCBhPSEwO2lmKGU8by0xKXtjb25zdCBlPXQucGVla0J5dGVzKDIpO2ludDE2KGVbMF0sZVsxXSk8ciYmKGE9ITEpfWEmJihsPSEwKX19ZWxzZXtoPSEwO2F8fChsPSEwKX1lbHNlIGg9ITA7aCYmKGM9e3BsYXRmb3JtSWQ6cixlbmNvZGluZ0lkOmksb2Zmc2V0OnN9KTtpZihsKWJyZWFrfX1jJiYodC5wb3M9cytjLm9mZnNldCk7aWYoIWN8fC0xPT09dC5wZWVrQnl0ZSgpKXsoMCxyLndhcm4pKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpO3JldHVybntwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfX1jb25zdCBoPXQuZ2V0VWludDE2KCk7bGV0IHU9ITE7Y29uc3QgZD1bXTtsZXQgZixnO2lmKDA9PT1oKXt0LnNraXAoNCk7Zm9yKGY9MDtmPDI1NjtmKyspe2NvbnN0IGU9dC5nZXRCeXRlKCk7ZSYmZC5wdXNoKHtjaGFyQ29kZTpmLGdseXBoSWQ6ZX0pfXU9ITB9ZWxzZSBpZigyPT09aCl7dC5za2lwKDQpO2NvbnN0IGU9W107bGV0IGE9MDtmb3IobGV0IHI9MDtyPDI1NjtyKyspe2NvbnN0IHI9dC5nZXRVaW50MTYoKT4+MztlLnB1c2gocik7YT1NYXRoLm1heChyLGEpfWNvbnN0IHI9W107Zm9yKGxldCBlPTA7ZTw9YTtlKyspci5wdXNoKHtmaXJzdENvZGU6dC5nZXRVaW50MTYoKSxlbnRyeUNvdW50OnQuZ2V0VWludDE2KCksaWREZWx0YTpzaWduZWRJbnQxNih0LmdldEJ5dGUoKSx0LmdldEJ5dGUoKSksaWRSYW5nZVBvczp0LnBvcyt0LmdldFVpbnQxNigpfSk7Zm9yKGxldCBhPTA7YTwyNTY7YSsrKWlmKDA9PT1lW2FdKXt0LnBvcz1yWzBdLmlkUmFuZ2VQb3MrMiphO2c9dC5nZXRVaW50MTYoKTtkLnB1c2goe2NoYXJDb2RlOmEsZ2x5cGhJZDpnfSl9ZWxzZXtjb25zdCBuPXJbZVthXV07Zm9yKGY9MDtmPG4uZW50cnlDb3VudDtmKyspe2NvbnN0IGU9KGE8PDgpK2Yrbi5maXJzdENvZGU7dC5wb3M9bi5pZFJhbmdlUG9zKzIqZjtnPXQuZ2V0VWludDE2KCk7MCE9PWcmJihnPShnK24uaWREZWx0YSklNjU1MzYpO2QucHVzaCh7Y2hhckNvZGU6ZSxnbHlwaElkOmd9KX19fWVsc2UgaWYoND09PWgpe3Quc2tpcCg0KTtjb25zdCBlPXQuZ2V0VWludDE2KCk+PjE7dC5za2lwKDYpO2NvbnN0IGE9W107bGV0IHI7Zm9yKHI9MDtyPGU7cisrKWEucHVzaCh7ZW5kOnQuZ2V0VWludDE2KCl9KTt0LnNraXAoMik7Zm9yKHI9MDtyPGU7cisrKWFbcl0uc3RhcnQ9dC5nZXRVaW50MTYoKTtmb3Iocj0wO3I8ZTtyKyspYVtyXS5kZWx0YT10LmdldFVpbnQxNigpO2xldCBuLG89MDtmb3Iocj0wO3I8ZTtyKyspe2k9YVtyXTtjb25zdCBzPXQuZ2V0VWludDE2KCk7aWYocyl7bj0ocz4+MSktKGUtcik7aS5vZmZzZXRJbmRleD1uO289TWF0aC5tYXgobyxuK2kuZW5kLWkuc3RhcnQrMSl9ZWxzZSBpLm9mZnNldEluZGV4PS0xfWNvbnN0IGM9W107Zm9yKGY9MDtmPG87ZisrKWMucHVzaCh0LmdldFVpbnQxNigpKTtmb3Iocj0wO3I8ZTtyKyspe2k9YVtyXTtzPWkuc3RhcnQ7Y29uc3QgZT1pLmVuZCx0PWkuZGVsdGE7bj1pLm9mZnNldEluZGV4O2ZvcihmPXM7Zjw9ZTtmKyspaWYoNjU1MzUhPT1mKXtnPW48MD9mOmNbbitmLXNdO2c9Zyt0JjY1NTM1O2QucHVzaCh7Y2hhckNvZGU6ZixnbHlwaElkOmd9KX19fWVsc2UgaWYoNj09PWgpe3Quc2tpcCg0KTtjb25zdCBlPXQuZ2V0VWludDE2KCksYT10LmdldFVpbnQxNigpO2ZvcihmPTA7ZjxhO2YrKyl7Zz10LmdldFVpbnQxNigpO2NvbnN0IGE9ZStmO2QucHVzaCh7Y2hhckNvZGU6YSxnbHlwaElkOmd9KX19ZWxzZXtpZigxMiE9PWgpeygwLHIud2FybikoImNtYXAgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdDogIitoKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19e3Quc2tpcCgxMCk7Y29uc3QgZT10LmdldEludDMyKCk+Pj4wO2ZvcihmPTA7ZjxlO2YrKyl7Y29uc3QgZT10LmdldEludDMyKCk+Pj4wLGE9dC5nZXRJbnQzMigpPj4+MDtsZXQgcj10LmdldEludDMyKCk+Pj4wO2ZvcihsZXQgdD1lO3Q8PWE7dCsrKWQucHVzaCh7Y2hhckNvZGU6dCxnbHlwaElkOnIrK30pfX19ZC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNoYXJDb2RlLXQuY2hhckNvZGV9KSk7Zm9yKGxldCBlPTE7ZTxkLmxlbmd0aDtlKyspaWYoZFtlLTFdLmNoYXJDb2RlPT09ZFtlXS5jaGFyQ29kZSl7ZC5zcGxpY2UoZSwxKTtlLS19cmV0dXJue3BsYXRmb3JtSWQ6Yy5wbGF0Zm9ybUlkLGVuY29kaW5nSWQ6Yy5lbmNvZGluZ0lkLG1hcHBpbmdzOmQsaGFzU2hvcnRDbWFwOnV9fShmLmNtYXAsdCx0aGlzLmlzU3ltYm9saWNGb250LGEuaGFzRW5jb2RpbmcpLG49ZS5wbGF0Zm9ybUlkLHM9ZS5lbmNvZGluZ0lkLGw9ZS5tYXBwaW5ncztsZXQgdT1bXSxkPSExOyFhLmhhc0VuY29kaW5nfHwiTWFjUm9tYW5FbmNvZGluZyIhPT1hLmJhc2VFbmNvZGluZ05hbWUmJiJXaW5BbnNpRW5jb2RpbmciIT09YS5iYXNlRW5jb2RpbmdOYW1lfHwodT0oMCxjLmdldEVuY29kaW5nKShhLmJhc2VFbmNvZGluZ05hbWUpKTtpZihhLmhhc0VuY29kaW5nJiYhdGhpcy5pc1N5bWJvbGljRm9udCYmKDM9PT1uJiYxPT09c3x8MT09PW4mJjA9PT1zKSl7Y29uc3QgZT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKGxldCB0PTA7dDwyNTY7dCsrKXtsZXQgcjtyPXZvaWQgMCE9PXRoaXMuZGlmZmVyZW5jZXNbdF0/dGhpcy5kaWZmZXJlbmNlc1t0XTp1Lmxlbmd0aCYmIiIhPT11W3RdP3VbdF06Yy5TdGFuZGFyZEVuY29kaW5nW3RdO2lmKCFyKWNvbnRpbnVlO2NvbnN0IG89KDAsaS5yZWNvdmVyR2x5cGhOYW1lKShyLGUpO2xldCBkOzM9PT1uJiYxPT09cz9kPWVbb106MT09PW4mJjA9PT1zJiYoZD1jLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihvKSk7aWYodm9pZCAwPT09ZCl7aWYoIWEuZ2x5cGhOYW1lcyYmYS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCYmISh0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApKXtjb25zdCBlPXRoaXMudG9Vbmljb2RlLmdldCh0KTtlJiYoZD1lLmNvZGVQb2ludEF0KDApKX1pZih2b2lkIDA9PT1kKWNvbnRpbnVlfWZvcihjb25zdCBlIG9mIGwpaWYoZS5jaGFyQ29kZT09PWQpe0RbdF09ZS5nbHlwaElkO2JyZWFrfX19ZWxzZSBpZigwPT09bil7Zm9yKGNvbnN0IGUgb2YgbClEW2UuY2hhckNvZGVdPWUuZ2x5cGhJZDtkPSEwfWVsc2UgZm9yKGNvbnN0IGUgb2YgbCl7bGV0IHQ9ZS5jaGFyQ29kZTszPT09biYmdD49NjE0NDAmJnQ8PTYxNjk1JiYodCY9MjU1KTtEW3RdPWUuZ2x5cGhJZH1pZihhLmdseXBoTmFtZXMmJih1Lmxlbmd0aHx8dGhpcy5kaWZmZXJlbmNlcy5sZW5ndGgpKWZvcihsZXQgZT0wO2U8MjU2OysrZSl7aWYoIWQmJnZvaWQgMCE9PURbZV0pY29udGludWU7Y29uc3QgdD10aGlzLmRpZmZlcmVuY2VzW2VdfHx1W2VdO2lmKCF0KWNvbnRpbnVlO2NvbnN0IHI9YS5nbHlwaE5hbWVzLmluZGV4T2YodCk7cj4wJiZoYXNHbHlwaChyKSYmKERbZV09cil9fTA9PT1ELmxlbmd0aCYmKERbMF09MCk7bGV0IE49Qy0xO3Z8fChOPTApO2lmKCFhLmNzc0ZvbnRJbmZvKXtjb25zdCBlPWFkanVzdE1hcHBpbmcoRCxoYXNHbHlwaCxOLHRoaXMudG9Vbmljb2RlKTt0aGlzLnRvRm9udENoYXI9ZS50b0ZvbnRDaGFyO2YuY21hcD17dGFnOiJjbWFwIixkYXRhOmNyZWF0ZUNtYXBUYWJsZShlLmNoYXJDb2RlVG9HbHlwaElkLGUudG9Vbmljb2RlRXh0cmFNYXAsQyl9O2ZbIk9TLzIiXSYmZnVuY3Rpb24gdmFsaWRhdGVPUzJUYWJsZShlLHQpe3QucG9zPSh0LnN0YXJ0fHwwKStlLm9mZnNldDtjb25zdCBhPXQuZ2V0VWludDE2KCk7dC5za2lwKDYwKTtjb25zdCByPXQuZ2V0VWludDE2KCk7aWYoYTw0JiY3NjgmcilyZXR1cm4hMTtpZih0LmdldFVpbnQxNigpPnQuZ2V0VWludDE2KCkpcmV0dXJuITE7dC5za2lwKDYpO2lmKDA9PT10LmdldFVpbnQxNigpKXJldHVybiExO2UuZGF0YVs4XT1lLmRhdGFbOV09MDtyZXR1cm4hMH0oZlsiT1MvMiJdLHQpfHwoZlsiT1MvMiJdPXt0YWc6Ik9TLzIiLGRhdGE6Y3JlYXRlT1MyVGFibGUoYSxlLmNoYXJDb2RlVG9HbHlwaElkLEUpfSl9aWYoIVMpdHJ5e3c9bmV3IHkuU3RyZWFtKGZbIkNGRiAiXS5kYXRhKTtiPW5ldyBuLkNGRlBhcnNlcih3LGEsaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpLnBhcnNlKCk7Yi5kdXBsaWNhdGVGaXJzdEdseXBoKCk7Y29uc3QgZT1uZXcgbi5DRkZDb21waWxlcihiKTtmWyJDRkYgIl0uZGF0YT1lLmNvbXBpbGUoKX1jYXRjaChlKXsoMCxyLndhcm4pKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrYS5sb2FkZWROYW1lKX1pZihmLm5hbWUpe2NvbnN0IHQ9cmVhZE5hbWVUYWJsZShmLm5hbWUpO2YubmFtZS5kYXRhPWNyZWF0ZU5hbWVUYWJsZShlLHQpO3RoaXMucHNOYW1lPXRbMF1bNl18fG51bGx9ZWxzZSBmLm5hbWU9e3RhZzoibmFtZSIsZGF0YTpjcmVhdGVOYW1lVGFibGUodGhpcy5uYW1lKX07Y29uc3QgUj1uZXcgbS5PcGVuVHlwZUZpbGVCdWlsZGVyKGQudmVyc2lvbik7Zm9yKGNvbnN0IGUgaW4gZilSLmFkZFRhYmxlKGUsZltlXS5kYXRhKTtyZXR1cm4gUi50b0FycmF5KCl9Y29udmVydChlLHQsYSl7YS5maXhlZFBpdGNoPSExO2EuYnVpbHRJbkVuY29kaW5nJiZmdW5jdGlvbiBhZGp1c3RUb1VuaWNvZGUoZSx0KXtpZihlLmlzSW50ZXJuYWxGb250KXJldHVybjtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXJldHVybjtpZih0PT09ZS5kZWZhdWx0RW5jb2RpbmcpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcClyZXR1cm47Y29uc3QgYT1bXSxyPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IoY29uc3QgbiBpbiB0KXtpZihlLmhhc0VuY29kaW5nJiYoMD09PWUuZGlmZmVyZW5jZXMubGVuZ3RofHx2b2lkIDAhPT1lLmRpZmZlcmVuY2VzW25dKSljb250aW51ZTtjb25zdCBpPXRbbl0sbz0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkoaSxyKTstMSE9PW8mJihhW25dPVN0cmluZy5mcm9tQ2hhckNvZGUobykpfWEubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKGEpfShhLGEuYnVpbHRJbkVuY29kaW5nKTtsZXQgbj0xO3QgaW5zdGFuY2VvZiB1LkNGRkZvbnQmJihuPXQubnVtR2x5cGhzLTEpO2NvbnN0IGw9dC5nZXRHbHlwaE1hcHBpbmcoYSk7bGV0IGQ9bnVsbCxmPWwsZz1udWxsO2lmKCFhLmNzc0ZvbnRJbmZvKXtkPWFkanVzdE1hcHBpbmcobCx0Lmhhc0dseXBoSWQuYmluZCh0KSxuLHRoaXMudG9Vbmljb2RlKTt0aGlzLnRvRm9udENoYXI9ZC50b0ZvbnRDaGFyO2Y9ZC5jaGFyQ29kZVRvR2x5cGhJZDtnPWQudG9Vbmljb2RlRXh0cmFNYXB9Y29uc3QgcD10Lm51bUdseXBocztmdW5jdGlvbiBnZXRDaGFyQ29kZXMoZSx0KXtsZXQgYT1udWxsO2Zvcihjb25zdCByIGluIGUpaWYodD09PWVbcl0pe2F8fChhPVtdKTthLnB1c2goMHxyKX1yZXR1cm4gYX1mdW5jdGlvbiBjcmVhdGVDaGFyQ29kZShlLHQpe2Zvcihjb25zdCBhIGluIGUpaWYodD09PWVbYV0pcmV0dXJuIDB8YTtkLmNoYXJDb2RlVG9HbHlwaElkW2QubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV09dDtyZXR1cm4gZC5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKyt9Y29uc3QgYj10LnNlYWNzO2lmKGQmJmkuU0VBQ19BTkFMWVNJU19FTkFCTEVEJiZiJiZiLmxlbmd0aCl7Y29uc3QgZT1hLmZvbnRNYXRyaXh8fHIuRk9OVF9JREVOVElUWV9NQVRSSVgsbj10LmdldENoYXJzZXQoKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCB0IGluIGIpe3R8PTA7Y29uc3QgYT1iW3RdLHI9Yy5TdGFuZGFyZEVuY29kaW5nW2FbMl1dLHM9Yy5TdGFuZGFyZEVuY29kaW5nW2FbM11dLG89bi5pbmRleE9mKHIpLGg9bi5pbmRleE9mKHMpO2lmKG88MHx8aDwwKWNvbnRpbnVlO2NvbnN0IHU9e3g6YVswXSplWzBdK2FbMV0qZVsyXStlWzRdLHk6YVswXSplWzFdK2FbMV0qZVszXStlWzVdfSxmPWdldENoYXJDb2RlcyhsLHQpO2lmKGYpZm9yKGNvbnN0IGUgb2YgZil7Y29uc3QgdD1kLmNoYXJDb2RlVG9HbHlwaElkLGE9Y3JlYXRlQ2hhckNvZGUodCxvKSxyPWNyZWF0ZUNoYXJDb2RlKHQsaCk7aVtlXT17YmFzZUZvbnRDaGFyQ29kZTphLGFjY2VudEZvbnRDaGFyQ29kZTpyLGFjY2VudE9mZnNldDp1fX19YS5zZWFjTWFwPWl9Y29uc3QgeT0xLyhhLmZvbnRNYXRyaXh8fHIuRk9OVF9JREVOVElUWV9NQVRSSVgpWzBdLHc9bmV3IG0uT3BlblR5cGVGaWxlQnVpbGRlcigiT1RUTyIpO3cuYWRkVGFibGUoIkNGRiAiLHQuZGF0YSk7dy5hZGRUYWJsZSgiT1MvMiIsY3JlYXRlT1MyVGFibGUoYSxmKSk7dy5hZGRUYWJsZSgiY21hcCIsY3JlYXRlQ21hcFRhYmxlKGYsZyxwKSk7dy5hZGRUYWJsZSgiaGVhZCIsIlwwAVwwXDBcMFwwEFwwXDBcMFwwXDBfDzzDtVwwXDAiK3NhZmVTdHJpbmcxNih5KSsiXDBcMFwwXDDCnlx2fidcMFwwXDBcMMKeXHZ+J1wwXDAiK3NhZmVTdHJpbmcxNihhLmRlc2NlbnQpKyIPw78iK3NhZmVTdHJpbmcxNihhLmFzY2VudCkrc3RyaW5nMTYoYS5pdGFsaWNBbmdsZT8yOjApKyJcMBFcMFwwXDBcMFwwXDAiKTt3LmFkZFRhYmxlKCJoaGVhIiwiXDABXDBcMCIrc2FmZVN0cmluZzE2KGEuYXNjZW50KStzYWZlU3RyaW5nMTYoYS5kZXNjZW50KSsiXDBcMMO/w79cMFwwXDBcMFwwXDAiK3NhZmVTdHJpbmcxNihhLmNhcEhlaWdodCkrc2FmZVN0cmluZzE2KE1hdGgudGFuKGEuaXRhbGljQW5nbGUpKmEueEhlaWdodCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIrc3RyaW5nMTYocCkpO3cuYWRkVGFibGUoImhtdHgiLGZ1bmN0aW9uIGZvbnRGaWVsZHNIbXR4KCl7Y29uc3QgZT10LmNoYXJzdHJpbmdzLGE9dC5jZmY/dC5jZmYud2lkdGhzOm51bGw7bGV0IHI9IlwwXDBcMFwwIjtmb3IobGV0IHQ9MSxuPXA7dDxuO3QrKyl7bGV0IG49MDtpZihlKXtjb25zdCBhPWVbdC0xXTtuPSJ3aWR0aCJpbiBhP2Eud2lkdGg6MH1lbHNlIGEmJihuPU1hdGguY2VpbChhW3RdfHwwKSk7cis9c3RyaW5nMTYobikrc3RyaW5nMTYoMCl9cmV0dXJuIHJ9KCkpO3cuYWRkVGFibGUoIm1heHAiLCJcMFwwUFwwIitzdHJpbmcxNihwKSk7dy5hZGRUYWJsZSgibmFtZSIsY3JlYXRlTmFtZVRhYmxlKGUpKTt3LmFkZFRhYmxlKCJwb3N0IixjcmVhdGVQb3N0VGFibGUoYSkpO3JldHVybiB3LnRvQXJyYXkoKX1nZXQgc3BhY2VXaWR0aCgpe2NvbnN0IGU9WyJzcGFjZSIsIm1pbnVzIiwib25lIiwiaSIsIkkiXTtsZXQgdDtmb3IoY29uc3QgYSBvZiBlKXtpZihhIGluIHRoaXMud2lkdGhzKXt0PXRoaXMud2lkdGhzW2FdO2JyZWFrfWNvbnN0IGU9KDAsby5nZXRHbHlwaHNVbmljb2RlKSgpW2FdO2xldCByPTA7aWYodGhpcy5jb21wb3NpdGUmJnRoaXMuY01hcC5jb250YWlucyhlKSl7cj10aGlzLmNNYXAubG9va3VwKGUpOyJzdHJpbmciPT10eXBlb2YgciYmKHI9Y29udmVydENpZFN0cmluZyhlLHIpKX0hciYmdGhpcy50b1VuaWNvZGUmJihyPXRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoZSkpO3I8PTAmJihyPWUpO3Q9dGhpcy53aWR0aHNbcl07aWYodClicmVha310PXR8fHRoaXMuZGVmYXVsdFdpZHRoO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJzcGFjZVdpZHRoIix0KX1fY2hhclRvR2x5cGgoZSx0PSExKXtsZXQgYSxuLGksbz10aGlzLl9nbHlwaENhY2hlW2VdO2lmKG8mJm8uaXNTcGFjZT09PXQpcmV0dXJuIG87bGV0IGM9ZTtpZih0aGlzLmNNYXAmJnRoaXMuY01hcC5jb250YWlucyhlKSl7Yz10aGlzLmNNYXAubG9va3VwKGUpOyJzdHJpbmciPT10eXBlb2YgYyYmKGM9Y29udmVydENpZFN0cmluZyhlLGMpKX1uPXRoaXMud2lkdGhzW2NdOyJudW1iZXIiIT10eXBlb2YgbiYmKG49dGhpcy5kZWZhdWx0V2lkdGgpO2NvbnN0IGw9dGhpcy52bWV0cmljcyYmdGhpcy52bWV0cmljc1tjXTtsZXQgaD10aGlzLnRvVW5pY29kZS5nZXQoZSl8fGU7Im51bWJlciI9PXR5cGVvZiBoJiYoaD1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpKTtsZXQgdT12b2lkIDAhPT10aGlzLnRvRm9udENoYXJbZV07YT10aGlzLnRvRm9udENoYXJbZV18fGU7aWYodGhpcy5taXNzaW5nRmlsZSl7Y29uc3QgdD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTsiLm5vdGRlZiIhPT10JiYiIiE9PXR8fCJUeXBlMSIhPT10aGlzLnR5cGV8fChhPTMyKTthPSgwLHMubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKGEpfXRoaXMuaXNUeXBlM0ZvbnQmJihpPWEpO2xldCBkPW51bGw7aWYodGhpcy5zZWFjTWFwJiZ0aGlzLnNlYWNNYXBbZV0pe3U9ITA7Y29uc3QgdD10aGlzLnNlYWNNYXBbZV07YT10LmJhc2VGb250Q2hhckNvZGU7ZD17Zm9udENoYXI6U3RyaW5nLmZyb21Db2RlUG9pbnQodC5hY2NlbnRGb250Q2hhckNvZGUpLG9mZnNldDp0LmFjY2VudE9mZnNldH19bGV0IGY9IiI7Im51bWJlciI9PXR5cGVvZiBhJiYoYTw9MTExNDExMT9mPVN0cmluZy5mcm9tQ29kZVBvaW50KGEpOigwLHIud2FybikoYGNoYXJUb0dseXBoIC0gaW52YWxpZCBmb250Q2hhckNvZGU6ICR7YX1gKSk7bz1uZXcgR2x5cGgoZSxmLGgsZCxuLGwsaSx0LHUpO3JldHVybiB0aGlzLl9nbHlwaENhY2hlW2VdPW99Y2hhcnNUb0dseXBocyhlKXtsZXQgdD10aGlzLl9jaGFyc0NhY2hlW2VdO2lmKHQpcmV0dXJuIHQ7dD1bXTtpZih0aGlzLmNNYXApe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWUubGVuZ3RoO2xldCBuPTA7Zm9yKDtuPHI7KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUsbixhKTtjb25zdHtjaGFyY29kZTpyLGxlbmd0aDppfT1hO24rPWk7Y29uc3Qgcz10aGlzLl9jaGFyVG9HbHlwaChyLDE9PT1pJiYzMj09PWUuY2hhckNvZGVBdChuLTEpKTt0LnB1c2gocyl9fWVsc2UgZm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7KythKXtjb25zdCByPWUuY2hhckNvZGVBdChhKSxuPXRoaXMuX2NoYXJUb0dseXBoKHIsMzI9PT1yKTt0LnB1c2gobil9cmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbZV09dH1nZXRDaGFyUG9zaXRpb25zKGUpe2NvbnN0IHQ9W107aWYodGhpcy5jTWFwKXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHI9MDtmb3IoO3I8ZS5sZW5ndGg7KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUscixhKTtjb25zdCBuPWEubGVuZ3RoO3QucHVzaChbcixyK25dKTtyKz1ufX1lbHNlIGZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyOysrYSl0LnB1c2goW2EsYSsxXSk7cmV0dXJuIHR9Z2V0IGdseXBoQ2FjaGVWYWx1ZXMoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9nbHlwaENhY2hlKX1lbmNvZGVTdHJpbmcoZSl7Y29uc3QgdD1bXSxhPVtdLGhhc0N1cnJlbnRCdWZFcnJvcnM9KCk9PnQubGVuZ3RoJTI9PTEscj10aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXA/ZT0+dGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihlKTplPT50aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKFN0cmluZy5mcm9tQ29kZVBvaW50KGUpKTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9ZS5jb2RlUG9pbnRBdChuKTtpPjU1Mjk1JiYoaTw1NzM0NHx8aT42NTUzMykmJm4rKztpZih0aGlzLnRvVW5pY29kZSl7Y29uc3QgZT1yKGkpO2lmKC0xIT09ZSl7aWYoaGFzQ3VycmVudEJ1ZkVycm9ycygpKXt0LnB1c2goYS5qb2luKCIiKSk7YS5sZW5ndGg9MH1mb3IobGV0IHQ9KHRoaXMuY01hcD90aGlzLmNNYXAuZ2V0Q2hhckNvZGVMZW5ndGgoZSk6MSktMTt0Pj0wO3QtLSlhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlPj44KnQmMjU1KSk7Y29udGludWV9fWlmKCFoYXNDdXJyZW50QnVmRXJyb3JzKCkpe3QucHVzaChhLmpvaW4oIiIpKTthLmxlbmd0aD0wfWEucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChpKSl9dC5wdXNoKGEuam9pbigiIikpO3JldHVybiB0fX07dC5FcnJvckZvbnQ9Y2xhc3MgRXJyb3JGb250e2NvbnN0cnVjdG9yKGUpe3RoaXMuZXJyb3I9ZTt0aGlzLmxvYWRlZE5hbWU9ImdfZm9udF9lcnJvciI7dGhpcy5taXNzaW5nRmlsZT0hMH1jaGFyc1RvR2x5cGhzKCl7cmV0dXJuW119ZW5jb2RlU3RyaW5nKGUpe3JldHVybltlXX1leHBvcnREYXRhKGU9ITEpe3JldHVybntlcnJvcjp0aGlzLmVycm9yfX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ0ZGVG9wRGljdD10LkNGRlN0cmluZ3M9dC5DRkZTdGFuZGFyZFN0cmluZ3M9dC5DRkZQcml2YXRlRGljdD10LkNGRlBhcnNlcj10LkNGRkluZGV4PXQuQ0ZGSGVhZGVyPXQuQ0ZGRkRTZWxlY3Q9dC5DRkZDb21waWxlcj10LkNGRkNoYXJzZXQ9dC5DRkY9dm9pZCAwO3ZhciByPWEoMiksbj1hKDM0KSxpPWEoMzUpO2NvbnN0IHM9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIiwiMDAxLjAwMCIsIjAwMS4wMDEiLCIwMDEuMDAyIiwiMDAxLjAwMyIsIkJsYWNrIiwiQm9sZCIsIkJvb2siLCJMaWdodCIsIk1lZGl1bSIsIlJlZ3VsYXIiLCJSb21hbiIsIlNlbWlib2xkIl07dC5DRkZTdGFuZGFyZFN0cmluZ3M9cztjb25zdCBvPTM5MSxjPVtudWxsLHtpZDoiaHN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0sbnVsbCx7aWQ6InZzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoidm1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybGluZXRvIixtaW46MixyZXNldFN0YWNrOiEwfSx7aWQ6ImhsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoidmxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJycmN1cnZldG8iLG1pbjo2LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJyZXR1cm4iLG1pbjowLHVuZGVmU3RhY2s6ITB9LG51bGwsbnVsbCx7aWQ6ImVuZGNoYXIiLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LG51bGwsbnVsbCxudWxsLHtpZDoiaHN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6ImhpbnRtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6ImNudHJtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJtb3ZldG8iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiaG1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJ2c3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoicmN1cnZlbGluZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJybGluZWN1cnZlIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InZ2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJoaGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsZ3N1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoidmhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6Imh2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH1dLGw9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV07dC5DRkZQYXJzZXI9Y2xhc3MgQ0ZGUGFyc2Vye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmJ5dGVzPWUuZ2V0Qnl0ZXMoKTt0aGlzLnByb3BlcnRpZXM9dDt0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFhfXBhcnNlKCl7Y29uc3QgZT10aGlzLnByb3BlcnRpZXMsdD1uZXcgQ0ZGO3RoaXMuY2ZmPXQ7Y29uc3QgYT10aGlzLnBhcnNlSGVhZGVyKCkscj10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxpPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcykscz10aGlzLnBhcnNlSW5kZXgoaS5lbmRQb3MpLG89dGhpcy5wYXJzZURpY3Qobi5vYmouZ2V0KDApKSxjPXRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LG8sdC5zdHJpbmdzKTt0LmhlYWRlcj1hLm9iajt0Lm5hbWVzPXRoaXMucGFyc2VOYW1lSW5kZXgoci5vYmopO3Quc3RyaW5ncz10aGlzLnBhcnNlU3RyaW5nSW5kZXgoaS5vYmopO3QudG9wRGljdD1jO3QuZ2xvYmFsU3VickluZGV4PXMub2JqO3RoaXMucGFyc2VQcml2YXRlRGljdCh0LnRvcERpY3QpO3QuaXNDSURGb250PWMuaGFzTmFtZSgiUk9TIik7Y29uc3QgbD1jLmdldEJ5TmFtZSgiQ2hhclN0cmluZ3MiKSxoPXRoaXMucGFyc2VJbmRleChsKS5vYmosdT1jLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpO3UmJihlLmZvbnRNYXRyaXg9dSk7Y29uc3QgZD1jLmdldEJ5TmFtZSgiRm9udEJCb3giKTtpZihkKXtlLmFzY2VudD1NYXRoLm1heChkWzNdLGRbMV0pO2UuZGVzY2VudD1NYXRoLm1pbihkWzFdLGRbM10pO2UuYXNjZW50U2NhbGVkPSEwfWxldCBmLGc7aWYodC5pc0NJREZvbnQpe2NvbnN0IGU9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iajtmb3IobGV0IGE9MCxyPWUuY291bnQ7YTxyOysrYSl7Y29uc3Qgcj1lLmdldChhKSxuPXRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LHRoaXMucGFyc2VEaWN0KHIpLHQuc3RyaW5ncyk7dGhpcy5wYXJzZVByaXZhdGVEaWN0KG4pO3QuZmRBcnJheS5wdXNoKG4pfWc9bnVsbDtmPXRoaXMucGFyc2VDaGFyc2V0cyhjLmdldEJ5TmFtZSgiY2hhcnNldCIpLGguY291bnQsdC5zdHJpbmdzLCEwKTt0LmZkU2VsZWN0PXRoaXMucGFyc2VGRFNlbGVjdChjLmdldEJ5TmFtZSgiRkRTZWxlY3QiKSxoLmNvdW50KX1lbHNle2Y9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksaC5jb3VudCx0LnN0cmluZ3MsITEpO2c9dGhpcy5wYXJzZUVuY29kaW5nKGMuZ2V0QnlOYW1lKCJFbmNvZGluZyIpLGUsdC5zdHJpbmdzLGYuY2hhcnNldCl9dC5jaGFyc2V0PWY7dC5lbmNvZGluZz1nO2NvbnN0IHA9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpoLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6cy5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7dC5jaGFyU3RyaW5ncz1wLmNoYXJTdHJpbmdzO3Quc2VhY3M9cC5zZWFjczt0LndpZHRocz1wLndpZHRocztyZXR1cm4gdH1wYXJzZUhlYWRlcigpe2xldCBlPXRoaXMuYnl0ZXM7Y29uc3QgdD1lLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTx0JiYxIT09ZVthXTspKythO2lmKGE+PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgQ0ZGIGhlYWRlciIpO2lmKDAhPT1hKXsoMCxyLmluZm8pKCJjZmYgZGF0YSBpcyBzaGlmdGVkIik7ZT1lLnN1YmFycmF5KGEpO3RoaXMuYnl0ZXM9ZX1jb25zdCBuPWVbMF0saT1lWzFdLHM9ZVsyXSxvPWVbM107cmV0dXJue29iajpuZXcgQ0ZGSGVhZGVyKG4saSxzLG8pLGVuZFBvczpzfX1wYXJzZURpY3QoZSl7bGV0IHQ9MDtmdW5jdGlvbiBwYXJzZU9wZXJhbmQoKXtsZXQgYT1lW3QrK107aWYoMzA9PT1hKXJldHVybiBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpe2xldCBhPSIiO2NvbnN0IHI9MTUsbj1bIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIuIiwiRSIsIkUtIixudWxsLCItIl0saT1lLmxlbmd0aDtmb3IoO3Q8aTspe2NvbnN0IGk9ZVt0KytdLHM9aT4+NCxvPTE1Jmk7aWYocz09PXIpYnJlYWs7YSs9bltzXTtpZihvPT09cilicmVhazthKz1uW29dfXJldHVybiBwYXJzZUZsb2F0KGEpfSgpO2lmKDI4PT09YSl7YT1lW3QrK107YT0oYTw8MjR8ZVt0KytdPDwxNik+PjE2O3JldHVybiBhfWlmKDI5PT09YSl7YT1lW3QrK107YT1hPDw4fGVbdCsrXTthPWE8PDh8ZVt0KytdO2E9YTw8OHxlW3QrK107cmV0dXJuIGF9aWYoYT49MzImJmE8PTI0NilyZXR1cm4gYS0xMzk7aWYoYT49MjQ3JiZhPD0yNTApcmV0dXJuIDI1NiooYS0yNDcpK2VbdCsrXSsxMDg7aWYoYT49MjUxJiZhPD0yNTQpcmV0dXJuLTI1NiooYS0yNTEpLWVbdCsrXS0xMDg7KDAsci53YXJuKSgnQ0ZGUGFyc2VyX3BhcnNlRGljdDogIicrYSsnIiBpcyBhIHJlc2VydmVkIGNvbW1hbmQuJyk7cmV0dXJuIE5hTn1sZXQgYT1bXTtjb25zdCBuPVtdO3Q9MDtjb25zdCBpPWUubGVuZ3RoO2Zvcig7dDxpOyl7bGV0IHI9ZVt0XTtpZihyPD0yMSl7MTI9PT1yJiYocj1yPDw4fGVbKyt0XSk7bi5wdXNoKFtyLGFdKTthPVtdOysrdH1lbHNlIGEucHVzaChwYXJzZU9wZXJhbmQoKSl9cmV0dXJuIG59cGFyc2VJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleCxhPXRoaXMuYnl0ZXMscj1hW2UrK108PDh8YVtlKytdLG49W107bGV0IGkscyxvPWU7aWYoMCE9PXIpe2NvbnN0IHQ9YVtlKytdLGM9ZSsocisxKSp0LTE7Zm9yKGk9MCxzPXIrMTtpPHM7KytpKXtsZXQgcj0wO2ZvcihsZXQgbj0wO248dDsrK24pe3I8PD04O3IrPWFbZSsrXX1uLnB1c2goYytyKX1vPW5bcl19Zm9yKGk9MCxzPW4ubGVuZ3RoLTE7aTxzOysraSl7Y29uc3QgZT1uW2ldLHI9bltpKzFdO3QuYWRkKGEuc3ViYXJyYXkoZSxyKSl9cmV0dXJue29iajp0LGVuZFBvczpvfX1wYXJzZU5hbWVJbmRleChlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wLG49ZS5jb3VudDthPG47KythKXtjb25zdCBuPWUuZ2V0KGEpO3QucHVzaCgoMCxyLmJ5dGVzVG9TdHJpbmcpKG4pKX1yZXR1cm4gdH1wYXJzZVN0cmluZ0luZGV4KGUpe2NvbnN0IHQ9bmV3IENGRlN0cmluZ3M7Zm9yKGxldCBhPTAsbj1lLmNvdW50O2E8bjsrK2Epe2NvbnN0IG49ZS5nZXQoYSk7dC5hZGQoKDAsci5ieXRlc1RvU3RyaW5nKShuKSl9cmV0dXJuIHR9Y3JlYXRlRGljdChlLHQsYSl7Y29uc3Qgcj1uZXcgZShhKTtmb3IoY29uc3RbZSxhXW9mIHQpci5zZXRCeUtleShlLGEpO3JldHVybiByfXBhcnNlQ2hhclN0cmluZyhlLHQsYSxuKXtpZighdHx8ZS5jYWxsRGVwdGg+MTApcmV0dXJuITE7bGV0IGk9ZS5zdGFja1NpemU7Y29uc3Qgcz1lLnN0YWNrLG89dC5sZW5ndGg7Zm9yKGxldCBoPTA7aDxvOyl7Y29uc3Qgbz10W2grK107bGV0IHU9bnVsbDtpZigxMj09PW8pe2NvbnN0IGU9dFtoKytdO2lmKDA9PT1lKXt0W2gtMl09MTM5O3RbaC0xXT0yMjtpPTB9ZWxzZSB1PWxbZV19ZWxzZSBpZigyOD09PW8pe3NbaV09KHRbaF08PDI0fHRbaCsxXTw8MTYpPj4xNjtoKz0yO2krK31lbHNlIGlmKDE0PT09byl7aWYoaT49NCl7aS09NDtpZih0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpe2Uuc2VhYz1zLnNsaWNlKGksaSs0KTtyZXR1cm4hMX19dT1jW29dfWVsc2UgaWYobz49MzImJm88PTI0Nil7c1tpXT1vLTEzOTtpKyt9ZWxzZSBpZihvPj0yNDcmJm88PTI1NCl7c1tpXT1vPDI1MT8oby0yNDc8PDgpK3RbaF0rMTA4Oi0oby0yNTE8PDgpLXRbaF0tMTA4O2grKztpKyt9ZWxzZSBpZigyNTU9PT1vKXtzW2ldPSh0W2hdPDwyNHx0W2grMV08PDE2fHRbaCsyXTw8OHx0W2grM10pLzY1NTM2O2grPTQ7aSsrfWVsc2UgaWYoMTk9PT1vfHwyMD09PW8pe2UuaGludHMrPWk+PjE7aCs9ZS5oaW50cys3Pj4zO2klPTI7dT1jW29dfWVsc2V7aWYoMTA9PT1vfHwyOT09PW8pe2xldCB0O3Q9MTA9PT1vP2E6bjtpZighdCl7dT1jW29dOygwLHIud2FybikoIk1pc3Npbmcgc3VicnNJbmRleCBmb3IgIit1LmlkKTtyZXR1cm4hMX1sZXQgbD0zMjc2ODt0LmNvdW50PDEyNDA/bD0xMDc6dC5jb3VudDwzMzkwMCYmKGw9MTEzMSk7Y29uc3QgaD1zWy0taV0rbDtpZihoPDB8fGg+PXQuY291bnR8fGlzTmFOKGgpKXt1PWNbb107KDAsci53YXJuKSgiT3V0IG9mIGJvdW5kcyBzdWJySW5kZXggZm9yICIrdS5pZCk7cmV0dXJuITF9ZS5zdGFja1NpemU9aTtlLmNhbGxEZXB0aCsrO2lmKCF0aGlzLnBhcnNlQ2hhclN0cmluZyhlLHQuZ2V0KGgpLGEsbikpcmV0dXJuITE7ZS5jYWxsRGVwdGgtLTtpPWUuc3RhY2tTaXplO2NvbnRpbnVlfWlmKDExPT09byl7ZS5zdGFja1NpemU9aTtyZXR1cm4hMH1pZigwPT09byYmaD09PXQubGVuZ3RoKXt0W2gtMV09MTQ7dT1jWzE0XX1lbHNlIHU9Y1tvXX1pZih1KXtpZih1LnN0ZW0pe2UuaGludHMrPWk+PjE7aWYoMz09PW98fDIzPT09byllLmhhc1ZTdGVtcz0hMDtlbHNlIGlmKGUuaGFzVlN0ZW1zJiYoMT09PW98fDE4PT09bykpeygwLHIud2FybikoIkNGRiBzdGVtIGhpbnRzIGFyZSBpbiB3cm9uZyBvcmRlciIpO3RbaC0xXT0xPT09bz8zOjIzfX1pZigibWluImluIHUmJiFlLnVuZGVmU3RhY2smJmk8dS5taW4peygwLHIud2FybikoIk5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIit1LmlkKyI7IGFjdHVhbDogIitpKyIsIGV4cGVjdGVkOiAiK3UubWluKTtpZigwPT09aSl7dFtoLTFdPTE0O3JldHVybiEwfXJldHVybiExfWlmKGUuZmlyc3RTdGFja0NsZWFyaW5nJiZ1LnN0YWNrQ2xlYXJpbmcpe2UuZmlyc3RTdGFja0NsZWFyaW5nPSExO2ktPXUubWluO2k+PTImJnUuc3RlbT9pJT0yOmk+MSYmKDAsci53YXJuKSgiRm91bmQgdG9vIG1hbnkgcGFyYW1ldGVycyBmb3Igc3RhY2stY2xlYXJpbmcgY29tbWFuZCIpO2k+MCYmKGUud2lkdGg9c1tpLTFdKX1pZigic3RhY2tEZWx0YSJpbiB1KXsic3RhY2tGbiJpbiB1JiZ1LnN0YWNrRm4ocyxpKTtpKz11LnN0YWNrRGVsdGF9ZWxzZSBpZih1LnN0YWNrQ2xlYXJpbmcpaT0wO2Vsc2UgaWYodS5yZXNldFN0YWNrKXtpPTA7ZS51bmRlZlN0YWNrPSExfWVsc2UgaWYodS51bmRlZlN0YWNrKXtpPTA7ZS51bmRlZlN0YWNrPSEwO2UuZmlyc3RTdGFja0NsZWFyaW5nPSExfX19ZS5zdGFja1NpemU9aTtyZXR1cm4hMH1wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczplLGxvY2FsU3VickluZGV4OnQsZ2xvYmFsU3VickluZGV4OmEsZmRTZWxlY3Q6bixmZEFycmF5OmkscHJpdmF0ZURpY3Q6c30pe2NvbnN0IG89W10sYz1bXSxsPWUuY291bnQ7Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgbD1lLmdldChoKSx1PXtjYWxsRGVwdGg6MCxzdGFja1NpemU6MCxzdGFjazpbXSx1bmRlZlN0YWNrOiEwLGhpbnRzOjAsZmlyc3RTdGFja0NsZWFyaW5nOiEwLHNlYWM6bnVsbCx3aWR0aDpudWxsLGhhc1ZTdGVtczohMX07bGV0IGQ9ITAsZj1udWxsLGc9cztpZihuJiZpLmxlbmd0aCl7Y29uc3QgZT1uLmdldEZESW5kZXgoaCk7aWYoLTE9PT1lKXsoMCxyLndhcm4pKCJHbHlwaCBpbmRleCBpcyBub3QgaW4gZmQgc2VsZWN0LiIpO2Q9ITF9aWYoZT49aS5sZW5ndGgpeygwLHIud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpO2Q9ITF9aWYoZCl7Zz1pW2VdLnByaXZhdGVEaWN0O2Y9Zy5zdWJyc0luZGV4fX1lbHNlIHQmJihmPXQpO2QmJihkPXRoaXMucGFyc2VDaGFyU3RyaW5nKHUsbCxmLGEpKTtpZihudWxsIT09dS53aWR0aCl7Y29uc3QgZT1nLmdldEJ5TmFtZSgibm9taW5hbFdpZHRoWCIpO2NbaF09ZSt1LndpZHRofWVsc2V7Y29uc3QgZT1nLmdldEJ5TmFtZSgiZGVmYXVsdFdpZHRoWCIpO2NbaF09ZX1udWxsIT09dS5zZWFjJiYob1toXT11LnNlYWMpO2R8fGUuc2V0KGgsbmV3IFVpbnQ4QXJyYXkoWzE0XSkpfXJldHVybntjaGFyU3RyaW5nczplLHNlYWNzOm8sd2lkdGhzOmN9fWVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSl7Y29uc3QgdD10aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QsW10sZS5zdHJpbmdzKTtlLnNldEJ5S2V5KDE4LFswLDBdKTtlLnByaXZhdGVEaWN0PXR9cGFyc2VQcml2YXRlRGljdChlKXtpZighZS5oYXNOYW1lKCJQcml2YXRlIikpe3RoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKTtyZXR1cm59Y29uc3QgdD1lLmdldEJ5TmFtZSgiUHJpdmF0ZSIpO2lmKCFBcnJheS5pc0FycmF5KHQpfHwyIT09dC5sZW5ndGgpe2UucmVtb3ZlQnlOYW1lKCJQcml2YXRlIik7cmV0dXJufWNvbnN0IGE9dFswXSxyPXRbMV07aWYoMD09PWF8fHI+PXRoaXMuYnl0ZXMubGVuZ3RoKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IG49cithLGk9dGhpcy5ieXRlcy5zdWJhcnJheShyLG4pLHM9dGhpcy5wYXJzZURpY3QoaSksbz10aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QscyxlLnN0cmluZ3MpO2UucHJpdmF0ZURpY3Q9bztpZighby5nZXRCeU5hbWUoIlN1YnJzIikpcmV0dXJuO2NvbnN0IGM9by5nZXRCeU5hbWUoIlN1YnJzIiksbD1yK2M7aWYoMD09PWN8fGw+PXRoaXMuYnl0ZXMubGVuZ3RoKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IGg9dGhpcy5wYXJzZUluZGV4KGwpO28uc3VicnNJbmRleD1oLm9ian1wYXJzZUNoYXJzZXRzKGUsdCxhLGkpe2lmKDA9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxkLklTT19BRE9CRSxuLklTT0Fkb2JlQ2hhcnNldCk7aWYoMT09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGQuRVhQRVJULG4uRXhwZXJ0Q2hhcnNldCk7aWYoMj09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGQuRVhQRVJUX1NVQlNFVCxuLkV4cGVydFN1YnNldENoYXJzZXQpO2NvbnN0IHM9dGhpcy5ieXRlcyxvPWUsYz1zW2UrK10sbD1baT8wOiIubm90ZGVmIl07bGV0IGgsdSxmO3QtPTE7c3dpdGNoKGMpe2Nhc2UgMDpmb3IoZj0wO2Y8dDtmKyspe2g9c1tlKytdPDw4fHNbZSsrXTtsLnB1c2goaT9oOmEuZ2V0KGgpKX1icmVhaztjYXNlIDE6Zm9yKDtsLmxlbmd0aDw9dDspe2g9c1tlKytdPDw4fHNbZSsrXTt1PXNbZSsrXTtmb3IoZj0wO2Y8PXU7ZisrKWwucHVzaChpP2grKzphLmdldChoKyspKX1icmVhaztjYXNlIDI6Zm9yKDtsLmxlbmd0aDw9dDspe2g9c1tlKytdPDw4fHNbZSsrXTt1PXNbZSsrXTw8OHxzW2UrK107Zm9yKGY9MDtmPD11O2YrKylsLnB1c2goaT9oKys6YS5nZXQoaCsrKSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5rbm93biBjaGFyc2V0IGZvcm1hdCIpfWNvbnN0IGc9ZSxwPXMuc3ViYXJyYXkobyxnKTtyZXR1cm4gbmV3IENGRkNoYXJzZXQoITEsYyxsLHApfXBhcnNlRW5jb2RpbmcoZSx0LGEsbil7Y29uc3Qgcz1PYmplY3QuY3JlYXRlKG51bGwpLG89dGhpcy5ieXRlcztsZXQgYyxsLGgsdT0hMSxkPW51bGw7aWYoMD09PWV8fDE9PT1lKXt1PSEwO2M9ZTtjb25zdCB0PWU/aS5FeHBlcnRFbmNvZGluZzppLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKGw9MCxoPW4ubGVuZ3RoO2w8aDtsKyspe2NvbnN0IGU9dC5pbmRleE9mKG5bbF0pOy0xIT09ZSYmKHNbZV09bCl9fWVsc2V7Y29uc3QgdD1lO2M9b1tlKytdO3N3aXRjaCgxMjcmYyl7Y2FzZSAwOmNvbnN0IHQ9b1tlKytdO2ZvcihsPTE7bDw9dDtsKyspc1tvW2UrK11dPWw7YnJlYWs7Y2FzZSAxOmNvbnN0IGE9b1tlKytdO2xldCBuPTE7Zm9yKGw9MDtsPGE7bCsrKXtjb25zdCB0PW9bZSsrXSxhPW9bZSsrXTtmb3IobGV0IGU9dDtlPD10K2E7ZSsrKXNbZV09bisrfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gZW5jb2RpbmcgZm9ybWF0OiAke2N9IGluIENGRmApfWNvbnN0IGk9ZTtpZigxMjgmYyl7b1t0XSY9MTI3OyFmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpe2NvbnN0IHQ9b1tlKytdO2ZvcihsPTA7bDx0O2wrKyl7Y29uc3QgdD1vW2UrK10scj0ob1tlKytdPDw4KSsoMjU1Jm9bZSsrXSk7c1t0XT1uLmluZGV4T2YoYS5nZXQocikpfX0oKX1kPW8uc3ViYXJyYXkodCxpKX1jJj0xMjc7cmV0dXJuIG5ldyBDRkZFbmNvZGluZyh1LGMscyxkKX1wYXJzZUZEU2VsZWN0KGUsdCl7Y29uc3QgYT10aGlzLmJ5dGVzLG49YVtlKytdLGk9W107bGV0IHM7c3dpdGNoKG4pe2Nhc2UgMDpmb3Iocz0wO3M8dDsrK3Mpe2NvbnN0IHQ9YVtlKytdO2kucHVzaCh0KX1icmVhaztjYXNlIDM6Y29uc3Qgbz1hW2UrK108PDh8YVtlKytdO2ZvcihzPTA7czxvOysrcyl7bGV0IHQ9YVtlKytdPDw4fGFbZSsrXTtpZigwPT09cyYmMCE9PXQpeygwLHIud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKTt0PTB9Y29uc3Qgbj1hW2UrK10sbz1hW2VdPDw4fGFbZSsxXTtmb3IobGV0IGU9dDtlPG87KytlKWkucHVzaChuKX1lKz0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHBhcnNlRkRTZWxlY3Q6IFVua25vd24gZm9ybWF0ICIke259Ii5gKX1pZihpLmxlbmd0aCE9PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoInBhcnNlRkRTZWxlY3Q6IEludmFsaWQgZm9udCBkYXRhLiIpO3JldHVybiBuZXcgQ0ZGRkRTZWxlY3QobixpKX19O2NsYXNzIENGRntjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZGVyPW51bGw7dGhpcy5uYW1lcz1bXTt0aGlzLnRvcERpY3Q9bnVsbDt0aGlzLnN0cmluZ3M9bmV3IENGRlN0cmluZ3M7dGhpcy5nbG9iYWxTdWJySW5kZXg9bnVsbDt0aGlzLmVuY29kaW5nPW51bGw7dGhpcy5jaGFyc2V0PW51bGw7dGhpcy5jaGFyU3RyaW5ncz1udWxsO3RoaXMuZmRBcnJheT1bXTt0aGlzLmZkU2VsZWN0PW51bGw7dGhpcy5pc0NJREZvbnQ9ITF9ZHVwbGljYXRlRmlyc3RHbHlwaCgpe2lmKHRoaXMuY2hhclN0cmluZ3MuY291bnQ+PTY1NTM1KXsoMCxyLndhcm4pKCJOb3QgZW5vdWdoIHNwYWNlIGluIGNoYXJzdHJpbmdzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKTtyZXR1cm59Y29uc3QgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKTt0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KXJldHVybiExO3JldHVybiB0aGlzLmNoYXJTdHJpbmdzLmdldChlKS5sZW5ndGg+MH19dC5DRkY9Q0ZGO2NsYXNzIENGRkhlYWRlcntjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLm1ham9yPWU7dGhpcy5taW5vcj10O3RoaXMuaGRyU2l6ZT1hO3RoaXMub2ZmU2l6ZT1yfX10LkNGRkhlYWRlcj1DRkZIZWFkZXI7Y2xhc3MgQ0ZGU3RyaW5nc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyaW5ncz1bXX1nZXQoZSl7cmV0dXJuIGU+PTAmJmU8PTM5MD9zW2VdOmUtbzw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS1vXTpzWzBdfWdldFNJRChlKXtsZXQgdD1zLmluZGV4T2YoZSk7aWYoLTEhPT10KXJldHVybiB0O3Q9dGhpcy5zdHJpbmdzLmluZGV4T2YoZSk7cmV0dXJuLTEhPT10P3QrbzotMX1hZGQoZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGh9fXQuQ0ZGU3RyaW5ncz1DRkZTdHJpbmdzO2NsYXNzIENGRkluZGV4e2NvbnN0cnVjdG9yKCl7dGhpcy5vYmplY3RzPVtdO3RoaXMubGVuZ3RoPTB9YWRkKGUpe3RoaXMubGVuZ3RoKz1lLmxlbmd0aDt0aGlzLm9iamVjdHMucHVzaChlKX1zZXQoZSx0KXt0aGlzLmxlbmd0aCs9dC5sZW5ndGgtdGhpcy5vYmplY3RzW2VdLmxlbmd0aDt0aGlzLm9iamVjdHNbZV09dH1nZXQoZSl7cmV0dXJuIHRoaXMub2JqZWN0c1tlXX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5vYmplY3RzLmxlbmd0aH19dC5DRkZJbmRleD1DRkZJbmRleDtjbGFzcyBDRkZEaWN0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5rZXlUb05hbWVNYXA9ZS5rZXlUb05hbWVNYXA7dGhpcy5uYW1lVG9LZXlNYXA9ZS5uYW1lVG9LZXlNYXA7dGhpcy5kZWZhdWx0cz1lLmRlZmF1bHRzO3RoaXMudHlwZXM9ZS50eXBlczt0aGlzLm9wY29kZXM9ZS5vcGNvZGVzO3RoaXMub3JkZXI9ZS5vcmRlcjt0aGlzLnN0cmluZ3M9dDt0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXNldEJ5S2V5KGUsdCl7aWYoIShlIGluIHRoaXMua2V5VG9OYW1lTWFwKSlyZXR1cm4hMTtpZigwPT09dC5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0IGEgb2YgdClpZihpc05hTihhKSl7KDAsci53YXJuKShgSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJHt0fSIgZm9yIGtleSAiJHtlfSIuYCk7cmV0dXJuITB9Y29uc3QgYT10aGlzLnR5cGVzW2VdOyJudW0iIT09YSYmInNpZCIhPT1hJiYib2Zmc2V0IiE9PWF8fCh0PXRbMF0pO3RoaXMudmFsdWVzW2VdPXQ7cmV0dXJuITB9c2V0QnlOYW1lKGUsdCl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgIiR7ZX0iYCk7dGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dPXR9aGFzTmFtZShlKXtyZXR1cm4gdGhpcy5uYW1lVG9LZXlNYXBbZV1pbiB0aGlzLnZhbHVlc31nZXRCeU5hbWUoZSl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgJHtlfSJgKTtjb25zdCB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19cmVtb3ZlQnlOYW1lKGUpe2RlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV19c3RhdGljIGNyZWF0ZVRhYmxlcyhlKXtjb25zdCB0PXtrZXlUb05hbWVNYXA6e30sbmFtZVRvS2V5TWFwOnt9LGRlZmF1bHRzOnt9LHR5cGVzOnt9LG9wY29kZXM6e30sb3JkZXI6W119O2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9QXJyYXkuaXNBcnJheShhWzBdKT8oYVswXVswXTw8OCkrYVswXVsxXTphWzBdO3Qua2V5VG9OYW1lTWFwW2VdPWFbMV07dC5uYW1lVG9LZXlNYXBbYVsxXV09ZTt0LnR5cGVzW2VdPWFbMl07dC5kZWZhdWx0c1tlXT1hWzNdO3Qub3Bjb2Rlc1tlXT1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06W2FbMF1dO3Qub3JkZXIucHVzaChlKX1yZXR1cm4gdH19Y29uc3QgaD1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dO2NsYXNzIENGRlRvcERpY3QgZXh0ZW5kcyBDRkZEaWN0e3N0YXRpYyBnZXQgdGFibGVzKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInRhYmxlcyIsdGhpcy5jcmVhdGVUYWJsZXMoaCkpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKENGRlRvcERpY3QudGFibGVzLGUpO3RoaXMucHJpdmF0ZURpY3Q9bnVsbH19dC5DRkZUb3BEaWN0PUNGRlRvcERpY3Q7Y29uc3QgdT1bWzYsIkJsdWVWYWx1ZXMiLCJkZWx0YSIsbnVsbF0sWzcsIk90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzgsIkZhbWlseUJsdWVzIiwiZGVsdGEiLG51bGxdLFs5LCJGYW1pbHlPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFtbMTIsOV0sIkJsdWVTY2FsZSIsIm51bSIsLjAzOTYyNV0sW1sxMiwxMF0sIkJsdWVTaGlmdCIsIm51bSIsN10sW1sxMiwxMV0sIkJsdWVGdXp6IiwibnVtIiwxXSxbMTAsIlN0ZEhXIiwibnVtIixudWxsXSxbMTEsIlN0ZFZXIiwibnVtIixudWxsXSxbWzEyLDEyXSwiU3RlbVNuYXBIIiwiZGVsdGEiLG51bGxdLFtbMTIsMTNdLCJTdGVtU25hcFYiLCJkZWx0YSIsbnVsbF0sW1sxMiwxNF0sIkZvcmNlQm9sZCIsIm51bSIsMF0sW1sxMiwxN10sIkxhbmd1YWdlR3JvdXAiLCJudW0iLDBdLFtbMTIsMThdLCJFeHBhbnNpb25GYWN0b3IiLCJudW0iLC4wNl0sW1sxMiwxOV0sImluaXRpYWxSYW5kb21TZWVkIiwibnVtIiwwXSxbMjAsImRlZmF1bHRXaWR0aFgiLCJudW0iLDBdLFsyMSwibm9taW5hbFdpZHRoWCIsIm51bSIsMF0sWzE5LCJTdWJycyIsIm9mZnNldCIsbnVsbF1dO2NsYXNzIENGRlByaXZhdGVEaWN0IGV4dGVuZHMgQ0ZGRGljdHtzdGF0aWMgZ2V0IHRhYmxlcygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKHUpKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihDRkZQcml2YXRlRGljdC50YWJsZXMsZSk7dGhpcy5zdWJyc0luZGV4PW51bGx9fXQuQ0ZGUHJpdmF0ZURpY3Q9Q0ZGUHJpdmF0ZURpY3Q7Y29uc3QgZD17SVNPX0FET0JFOjAsRVhQRVJUOjEsRVhQRVJUX1NVQlNFVDoyfTtjbGFzcyBDRkZDaGFyc2V0e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMucHJlZGVmaW5lZD1lO3RoaXMuZm9ybWF0PXQ7dGhpcy5jaGFyc2V0PWE7dGhpcy5yYXc9cn19dC5DRkZDaGFyc2V0PUNGRkNoYXJzZXQ7Y2xhc3MgQ0ZGRW5jb2Rpbmd7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5wcmVkZWZpbmVkPWU7dGhpcy5mb3JtYXQ9dDt0aGlzLmVuY29kaW5nPWE7dGhpcy5yYXc9cn19Y2xhc3MgQ0ZGRkRTZWxlY3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZvcm1hdD1lO3RoaXMuZmRTZWxlY3Q9dH1nZXRGREluZGV4KGUpe3JldHVybiBlPDB8fGU+PXRoaXMuZmRTZWxlY3QubGVuZ3RoPy0xOnRoaXMuZmRTZWxlY3RbZV19fXQuQ0ZGRkRTZWxlY3Q9Q0ZGRkRTZWxlY3Q7Y2xhc3MgQ0ZGT2Zmc2V0VHJhY2tlcntjb25zdHJ1Y3Rvcigpe3RoaXMub2Zmc2V0cz1PYmplY3QuY3JlYXRlKG51bGwpfWlzVHJhY2tpbmcoZSl7cmV0dXJuIGUgaW4gdGhpcy5vZmZzZXRzfXRyYWNrKGUsdCl7aWYoZSBpbiB0aGlzLm9mZnNldHMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO3RoaXMub2Zmc2V0c1tlXT10fW9mZnNldChlKXtmb3IoY29uc3QgdCBpbiB0aGlzLm9mZnNldHMpdGhpcy5vZmZzZXRzW3RdKz1lfXNldEVudHJ5TG9jYXRpb24oZSx0LGEpe2lmKCEoZSBpbiB0aGlzLm9mZnNldHMpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBOb3QgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO2NvbnN0IG49YS5kYXRhLGk9dGhpcy5vZmZzZXRzW2VdO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGg7ZTxhOysrZSl7Y29uc3QgYT01KmUraSxzPWErMSxvPWErMixjPWErMyxsPWErNDtpZigyOSE9PW5bYV18fDAhPT1uW3NdfHwwIT09bltvXXx8MCE9PW5bY118fDAhPT1uW2xdKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpO2NvbnN0IGg9dFtlXTtuW2FdPTI5O25bc109aD4+MjQmMjU1O25bb109aD4+MTYmMjU1O25bY109aD4+OCYyNTU7bltsXT0yNTUmaH19fWNsYXNzIENGRkNvbXBpbGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuY2ZmPWV9Y29tcGlsZSgpe2NvbnN0IGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQoZSl7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSk7dGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LGE9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChhKTtjb25zdCBuPXRoaXMuY29tcGlsZU5hbWVJbmRleChlLm5hbWVzKTt0LmFkZChuKTtpZihlLmlzQ0lERm9udCYmZS50b3BEaWN0Lmhhc05hbWUoIkZvbnRNYXRyaXgiKSl7Y29uc3QgdD1lLnRvcERpY3QuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7ZS50b3BEaWN0LnJlbW92ZUJ5TmFtZSgiRm9udE1hdHJpeCIpO2Zvcihjb25zdCBhIG9mIGUuZmRBcnJheSl7bGV0IGU9dC5zbGljZSgwKTthLmhhc05hbWUoIkZvbnRNYXRyaXgiKSYmKGU9ci5VdGlsLnRyYW5zZm9ybShlLGEuZ2V0QnlOYW1lKCJGb250TWF0cml4IikpKTthLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsZSl9fWNvbnN0IGk9ZS50b3BEaWN0LmdldEJ5TmFtZSgiWFVJRCIpO2kmJmkubGVuZ3RoPjE2JiZlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJYVUlEIik7ZS50b3BEaWN0LnNldEJ5TmFtZSgiY2hhcnNldCIsMCk7bGV0IHM9dGhpcy5jb21waWxlVG9wRGljdHMoW2UudG9wRGljdF0sdC5sZW5ndGgsZS5pc0NJREZvbnQpO3QuYWRkKHMub3V0cHV0KTtjb25zdCBvPXMudHJhY2tlcnNbMF0sYz10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQoYyk7Y29uc3QgbD10aGlzLmNvbXBpbGVJbmRleChlLmdsb2JhbFN1YnJJbmRleCk7dC5hZGQobCk7aWYoZS5lbmNvZGluZyYmZS50b3BEaWN0Lmhhc05hbWUoIkVuY29kaW5nIikpaWYoZS5lbmNvZGluZy5wcmVkZWZpbmVkKW8uc2V0RW50cnlMb2NhdGlvbigiRW5jb2RpbmciLFtlLmVuY29kaW5nLmZvcm1hdF0sdCk7ZWxzZXtjb25zdCBhPXRoaXMuY29tcGlsZUVuY29kaW5nKGUuZW5jb2RpbmcpO28uc2V0RW50cnlMb2NhdGlvbigiRW5jb2RpbmciLFt0Lmxlbmd0aF0sdCk7dC5hZGQoYSl9Y29uc3QgaD10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCxlLmNoYXJTdHJpbmdzLmNvdW50LGUuc3RyaW5ncyxlLmlzQ0lERm9udCk7by5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpO3QuYWRkKGgpO2NvbnN0IHU9dGhpcy5jb21waWxlQ2hhclN0cmluZ3MoZS5jaGFyU3RyaW5ncyk7by5zZXRFbnRyeUxvY2F0aW9uKCJDaGFyU3RyaW5ncyIsW3QubGVuZ3RoXSx0KTt0LmFkZCh1KTtpZihlLmlzQ0lERm9udCl7by5zZXRFbnRyeUxvY2F0aW9uKCJGRFNlbGVjdCIsW3QubGVuZ3RoXSx0KTtjb25zdCBhPXRoaXMuY29tcGlsZUZEU2VsZWN0KGUuZmRTZWxlY3QpO3QuYWRkKGEpO3M9dGhpcy5jb21waWxlVG9wRGljdHMoZS5mZEFycmF5LHQubGVuZ3RoLCEwKTtvLnNldEVudHJ5TG9jYXRpb24oIkZEQXJyYXkiLFt0Lmxlbmd0aF0sdCk7dC5hZGQocy5vdXRwdXQpO2NvbnN0IHI9cy50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHIsdCl9dGhpcy5jb21waWxlUHJpdmF0ZURpY3RzKFtlLnRvcERpY3RdLFtvXSx0KTt0LmFkZChbMF0pO3JldHVybiB0LmRhdGF9ZW5jb2RlTnVtYmVyKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpP3RoaXMuZW5jb2RlSW50ZWdlcihlKTp0aGlzLmVuY29kZUZsb2F0KGUpfXN0YXRpYyBnZXQgRW5jb2RlRmxvYXRSZWdFeHAoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiRW5jb2RlRmxvYXRSZWdFeHAiLC9cLihcZCo/KSg/Ojl7NSwyMH18MHs1LDIwfSlcZHswLDJ9KD86ZSguKyl8JCkvKX1lbmNvZGVGbG9hdChlKXtsZXQgdD1lLnRvU3RyaW5nKCk7Y29uc3QgYT1DRkZDb21waWxlci5FbmNvZGVGbG9hdFJlZ0V4cC5leGVjKHQpO2lmKGEpe2NvbnN0IHI9cGFyc2VGbG9hdCgiMWUiKygoYVsyXT8rYVsyXTowKSthWzFdLmxlbmd0aCkpO3Q9KE1hdGgucm91bmQoZSpyKS9yKS50b1N0cmluZygpfWxldCByLG4saT0iIjtmb3Iocj0wLG49dC5sZW5ndGg7cjxuOysrcil7Y29uc3QgZT10W3JdO2krPSJlIj09PWU/Ii0iPT09dFsrK3JdPyJjIjoiYiI6Ii4iPT09ZT8iYSI6Ii0iPT09ZT8iZSI6ZX1pKz0xJmkubGVuZ3RoPyJmIjoiZmYiO2NvbnN0IHM9WzMwXTtmb3Iocj0wLG49aS5sZW5ndGg7cjxuO3IrPTIpcy5wdXNoKHBhcnNlSW50KGkuc3Vic3RyaW5nKHIscisyKSwxNikpO3JldHVybiBzfWVuY29kZUludGVnZXIoZSl7bGV0IHQ7dD1lPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXTtyZXR1cm4gdH1jb21waWxlSGVhZGVyKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfWNvbXBpbGVOYW1lSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1NYXRoLm1pbihhLmxlbmd0aCwxMjcpO2xldCBuPW5ldyBBcnJheShlKTtmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgZT1hW3RdOyhlPCIhInx8ZT4ifiJ8fCJbIj09PWV8fCJdIj09PWV8fCIoIj09PWV8fCIpIj09PWV8fCJ7Ij09PWV8fCJ9Ij09PWV8fCI8Ij09PWV8fCI+Ij09PWV8fCIvIj09PWV8fCIlIj09PWUpJiYoZT0iXyIpO25bdF09ZX1uPW4uam9pbigiIik7IiI9PT1uJiYobj0iQmFkX0ZvbnRfTmFtZSIpO3QuYWRkKCgwLHIuc3RyaW5nVG9CeXRlcykobikpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlVG9wRGljdHMoZSx0LGEpe2NvbnN0IHI9W107bGV0IG49bmV3IENGRkluZGV4O2Zvcihjb25zdCBpIG9mIGUpe2lmKGEpe2kucmVtb3ZlQnlOYW1lKCJDSURGb250VmVyc2lvbiIpO2kucmVtb3ZlQnlOYW1lKCJDSURGb250UmV2aXNpb24iKTtpLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFR5cGUiKTtpLnJlbW92ZUJ5TmFtZSgiQ0lEQ291bnQiKTtpLnJlbW92ZUJ5TmFtZSgiVUlEQmFzZSIpfWNvbnN0IGU9bmV3IENGRk9mZnNldFRyYWNrZXIscz10aGlzLmNvbXBpbGVEaWN0KGksZSk7ci5wdXNoKGUpO24uYWRkKHMpO2Uub2Zmc2V0KHQpfW49dGhpcy5jb21waWxlSW5kZXgobixyKTtyZXR1cm57dHJhY2tlcnM6cixvdXRwdXQ6bn19Y29tcGlsZVByaXZhdGVEaWN0cyhlLHQsYSl7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKXtjb25zdCBpPWVbbl0scz1pLnByaXZhdGVEaWN0O2lmKCFzfHwhaS5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7Y29uc3Qgbz1uZXcgQ0ZGT2Zmc2V0VHJhY2tlcixjPXRoaXMuY29tcGlsZURpY3QocyxvKTtsZXQgbD1hLmxlbmd0aDtvLm9mZnNldChsKTtjLmxlbmd0aHx8KGw9MCk7dFtuXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbYy5sZW5ndGgsbF0sYSk7YS5hZGQoYyk7aWYocy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe2NvbnN0IGU9dGhpcy5jb21waWxlSW5kZXgocy5zdWJyc0luZGV4KTtvLnNldEVudHJ5TG9jYXRpb24oIlN1YnJzIixbYy5sZW5ndGhdLGEpO2EuYWRkKGUpfX19Y29tcGlsZURpY3QoZSx0KXtjb25zdCBhPVtdO2Zvcihjb25zdCBuIG9mIGUub3JkZXIpe2lmKCEobiBpbiBlLnZhbHVlcykpY29udGludWU7bGV0IGk9ZS52YWx1ZXNbbl0scz1lLnR5cGVzW25dO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTtpZigwIT09aS5sZW5ndGgpe2ZvcihsZXQgbz0wLGM9cy5sZW5ndGg7bzxjOysrbyl7Y29uc3QgYz1zW29dLGw9aVtvXTtzd2l0Y2goYyl7Y2FzZSJudW0iOmNhc2Uic2lkIjphLnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIobCkpO2JyZWFrO2Nhc2Uib2Zmc2V0Ijpjb25zdCBzPWUua2V5VG9OYW1lTWFwW25dO3QuaXNUcmFja2luZyhzKXx8dC50cmFjayhzLGEubGVuZ3RoKTthLnB1c2goMjksMCwwLDAsMCk7YnJlYWs7Y2FzZSJhcnJheSI6Y2FzZSJkZWx0YSI6YS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGwpKTtmb3IobGV0IGU9MSx0PWkubGVuZ3RoO2U8dDsrK2UpYS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGlbZV0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmtub3duIGRhdGEgdHlwZSBvZiAke2N9YCl9fWEucHVzaCguLi5lLm9wY29kZXNbbl0pfX1yZXR1cm4gYX1jb21waWxlU3RyaW5nSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IGEgb2YgZSl0LmFkZCgoMCxyLnN0cmluZ1RvQnl0ZXMpKGEpKTtyZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUdsb2JhbFN1YnJJbmRleCgpe2NvbnN0IGU9dGhpcy5jZmYuZ2xvYmFsU3VickluZGV4O3RoaXMub3V0LndyaXRlQnl0ZUFycmF5KHRoaXMuY29tcGlsZUluZGV4KGUpKX1jb21waWxlQ2hhclN0cmluZ3MoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGxldCBhPTA7YTxlLmNvdW50O2ErKyl7Y29uc3Qgcj1lLmdldChhKTswIT09ci5sZW5ndGg/dC5hZGQocik6dC5hZGQobmV3IFVpbnQ4QXJyYXkoWzEzOSwxNF0pKX1yZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUNoYXJzZXQoZSx0LGEsbil7bGV0IGk7Y29uc3Qgcz10LTE7aWYobilpPW5ldyBVaW50OEFycmF5KFsyLDAsMCxzPj44JjI1NSwyNTUmc10pO2Vsc2V7aT1uZXcgVWludDhBcnJheSgxKzIqcyk7aVswXT0wO2xldCB0PTA7Y29uc3Qgbj1lLmNoYXJzZXQubGVuZ3RoO2xldCBvPSExO2ZvcihsZXQgcz0xO3M8aS5sZW5ndGg7cys9Mil7bGV0IGM9MDtpZih0PG4pe2NvbnN0IG49ZS5jaGFyc2V0W3QrK107Yz1hLmdldFNJRChuKTtpZigtMT09PWMpe2M9MDtpZighbyl7bz0hMDsoMCxyLndhcm4pKGBDb3VsZG4ndCBmaW5kICR7bn0gaW4gQ0ZGIHN0cmluZ3NgKX19fWlbc109Yz4+OCYyNTU7aVtzKzFdPTI1NSZjfX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShpKX1jb21waWxlRW5jb2RpbmcoZSl7cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoZS5yYXcpfWNvbXBpbGVGRFNlbGVjdChlKXtjb25zdCB0PWUuZm9ybWF0O2xldCBhLHI7c3dpdGNoKHQpe2Nhc2UgMDphPW5ldyBVaW50OEFycmF5KDErZS5mZFNlbGVjdC5sZW5ndGgpO2FbMF09dDtmb3Iocj0wO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKWFbcisxXT1lLmZkU2VsZWN0W3JdO2JyZWFrO2Nhc2UgMzpjb25zdCBuPTA7bGV0IGk9ZS5mZFNlbGVjdFswXTtjb25zdCBzPVt0LDAsMCxuPj44JjI1NSwyNTUmbixpXTtmb3Iocj0xO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKXtjb25zdCB0PWUuZmRTZWxlY3Rbcl07aWYodCE9PWkpe3MucHVzaChyPj44JjI1NSwyNTUmcix0KTtpPXR9fWNvbnN0IG89KHMubGVuZ3RoLTMpLzM7c1sxXT1vPj44JjI1NTtzWzJdPTI1NSZvO3MucHVzaChyPj44JjI1NSwyNTUmcik7YT1uZXcgVWludDhBcnJheShzKX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShhKX1jb21waWxlVHlwZWRBcnJheShlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyOysrYSl0W2FdPWVbYV07cmV0dXJuIHR9Y29tcGlsZUluZGV4KGUsdD1bXSl7Y29uc3QgYT1lLm9iamVjdHMscj1hLmxlbmd0aDtpZigwPT09cilyZXR1cm5bMCwwXTtjb25zdCBuPVtyPj44JjI1NSwyNTUmcl07bGV0IGkscyxvPTE7Zm9yKGk9MDtpPHI7KytpKW8rPWFbaV0ubGVuZ3RoO3M9bzwyNTY/MTpvPDY1NTM2PzI6bzwxNjc3NzIxNj8zOjQ7bi5wdXNoKHMpO2xldCBjPTE7Zm9yKGk9MDtpPHIrMTtpKyspezE9PT1zP24ucHVzaCgyNTUmYyk6Mj09PXM/bi5wdXNoKGM+PjgmMjU1LDI1NSZjKTozPT09cz9uLnB1c2goYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjKTpuLnB1c2goYz4+PjI0JjI1NSxjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMpO2FbaV0mJihjKz1hW2ldLmxlbmd0aCl9Zm9yKGk9MDtpPHI7aSsrKXt0W2ldJiZ0W2ldLm9mZnNldChuLmxlbmd0aCk7bi5wdXNoKC4uLmFbaV0pfXJldHVybiBufX10LkNGRkNvbXBpbGVyPUNGRkNvbXBpbGVyfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LklTT0Fkb2JlQ2hhcnNldD10LkV4cGVydFN1YnNldENoYXJzZXQ9dC5FeHBlcnRDaGFyc2V0PXZvaWQgMDt0LklTT0Fkb2JlQ2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiJdO3QuRXhwZXJ0Q2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXTt0LkV4cGVydFN1YnNldENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiaHlwaGVuc3VwZXJpb3IiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiY2VudG9sZHN0eWxlIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIl19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9dC5XaW5BbnNpRW5jb2Rpbmc9dC5TeW1ib2xTZXRFbmNvZGluZz10LlN0YW5kYXJkRW5jb2Rpbmc9dC5NYWNSb21hbkVuY29kaW5nPXQuRXhwZXJ0RW5jb2Rpbmc9dm9pZCAwO3QuZ2V0RW5jb2Rpbmc9ZnVuY3Rpb24gZ2V0RW5jb2RpbmcoZSl7c3dpdGNoKGUpe2Nhc2UiV2luQW5zaUVuY29kaW5nIjpyZXR1cm4gcztjYXNlIlN0YW5kYXJkRW5jb2RpbmciOnJldHVybiBpO2Nhc2UiTWFjUm9tYW5FbmNvZGluZyI6cmV0dXJuIG47Y2FzZSJTeW1ib2xTZXRFbmNvZGluZyI6cmV0dXJuIG87Y2FzZSJaYXBmRGluZ2JhdHNFbmNvZGluZyI6cmV0dXJuIGM7Y2FzZSJFeHBlcnRFbmNvZGluZyI6cmV0dXJuIGE7Y2FzZSJNYWNFeHBlcnRFbmNvZGluZyI6cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2NvbnN0IGE9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCIiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCIiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCIiLCIiLCIiLCJpc3VwZXJpb3IiLCIiLCIiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCIiLCIiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCIiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsIiIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCIiLCIiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiIiwiRG90YWNjZW50c21hbGwiLCIiLCIiLCJNYWNyb25zbWFsbCIsIiIsIiIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIiIsIiIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwiIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiIiwiIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXTt0LkV4cGVydEVuY29kaW5nPWE7Y29uc3Qgcj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLG49WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInNwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iXTt0Lk1hY1JvbWFuRW5jb2Rpbmc9bjtjb25zdCBpPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCIiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsIiIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsIiIsInF1ZXN0aW9uZG93biIsIiIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwiIiwicmluZyIsImNlZGlsbGEiLCIiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIkFFIiwiIiwib3JkZmVtaW5pbmUiLCIiLCIiLCIiLCIiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsIiIsIiIsIiIsIiIsIiIsImFlIiwiIiwiIiwiIiwiZG90bGVzc2kiLCIiLCIiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCIiLCIiLCIiLCIiXTt0LlN0YW5kYXJkRW5jb2Rpbmc9aTtjb25zdCBzPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVzaW5nbGUiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsImdyYXZlIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImJ1bGxldCIsIkV1cm8iLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsImZsb3JpbiIsInF1b3RlZGJsYmFzZSIsImVsbGlwc2lzIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwiY2lyY3VtZmxleCIsInBlcnRob3VzYW5kIiwiU2Nhcm9uIiwiZ3VpbHNpbmdsbGVmdCIsIk9FIiwiYnVsbGV0IiwiWmNhcm9uIiwiYnVsbGV0IiwiYnVsbGV0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJidWxsZXQiLCJlbmRhc2giLCJlbWRhc2giLCJ0aWxkZSIsInRyYWRlbWFyayIsInNjYXJvbiIsImd1aWxzaW5nbHJpZ2h0Iiwib2UiLCJidWxsZXQiLCJ6Y2Fyb24iLCJZZGllcmVzaXMiLCJzcGFjZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJjdXJyZW5jeSIsInllbiIsImJyb2tlbmJhciIsInNlY3Rpb24iLCJkaWVyZXNpcyIsImNvcHlyaWdodCIsIm9yZGZlbWluaW5lIiwiZ3VpbGxlbW90bGVmdCIsImxvZ2ljYWxub3QiLCJoeXBoZW4iLCJyZWdpc3RlcmVkIiwibWFjcm9uIiwiZGVncmVlIiwicGx1c21pbnVzIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiYWN1dGUiLCJtdSIsInBhcmFncmFwaCIsInBlcmlvZGNlbnRlcmVkIiwiY2VkaWxsYSIsIm9uZXN1cGVyaW9yIiwib3JkbWFzY3VsaW5lIiwiZ3VpbGxlbW90cmlnaHQiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd24iLCJBZ3JhdmUiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkF0aWxkZSIsIkFkaWVyZXNpcyIsIkFyaW5nIiwiQUUiLCJDY2VkaWxsYSIsIkVncmF2ZSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiSWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJFdGgiLCJOdGlsZGUiLCJPZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk90aWxkZSIsIk9kaWVyZXNpcyIsIm11bHRpcGx5IiwiT3NsYXNoIiwiVWdyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJZYWN1dGUiLCJUaG9ybiIsImdlcm1hbmRibHMiLCJhZ3JhdmUiLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImF0aWxkZSIsImFkaWVyZXNpcyIsImFyaW5nIiwiYWUiLCJjY2VkaWxsYSIsImVncmF2ZSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJldGgiLCJudGlsZGUiLCJvZ3JhdmUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm90aWxkZSIsIm9kaWVyZXNpcyIsImRpdmlkZSIsIm9zbGFzaCIsInVncmF2ZSIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwieWFjdXRlIiwidGhvcm4iLCJ5ZGllcmVzaXMiXTt0LldpbkFuc2lFbmNvZGluZz1zO2NvbnN0IG89WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXTt0LlN5bWJvbFNldEVuY29kaW5nPW87Y29uc3QgYz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiYTEiLCJhMiIsImEyMDIiLCJhMyIsImE0IiwiYTUiLCJhMTE5IiwiYTExOCIsImExMTciLCJhMTEiLCJhMTIiLCJhMTMiLCJhMTQiLCJhMTUiLCJhMTYiLCJhMTA1IiwiYTE3IiwiYTE4IiwiYTE5IiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTI0IiwiYTI1IiwiYTI2IiwiYTI3IiwiYTI4IiwiYTYiLCJhNyIsImE4IiwiYTkiLCJhMTAiLCJhMjkiLCJhMzAiLCJhMzEiLCJhMzIiLCJhMzMiLCJhMzQiLCJhMzUiLCJhMzYiLCJhMzciLCJhMzgiLCJhMzkiLCJhNDAiLCJhNDEiLCJhNDIiLCJhNDMiLCJhNDQiLCJhNDUiLCJhNDYiLCJhNDciLCJhNDgiLCJhNDkiLCJhNTAiLCJhNTEiLCJhNTIiLCJhNTMiLCJhNTQiLCJhNTUiLCJhNTYiLCJhNTciLCJhNTgiLCJhNTkiLCJhNjAiLCJhNjEiLCJhNjIiLCJhNjMiLCJhNjQiLCJhNjUiLCJhNjYiLCJhNjciLCJhNjgiLCJhNjkiLCJhNzAiLCJhNzEiLCJhNzIiLCJhNzMiLCJhNzQiLCJhMjAzIiwiYTc1IiwiYTIwNCIsImE3NiIsImE3NyIsImE3OCIsImE3OSIsImE4MSIsImE4MiIsImE4MyIsImE4NCIsImE5NyIsImE5OCIsImE5OSIsImExMDAiLCIiLCJhODkiLCJhOTAiLCJhOTMiLCJhOTQiLCJhOTEiLCJhOTIiLCJhMjA1IiwiYTg1IiwiYTIwNiIsImE4NiIsImE4NyIsImE4OCIsImE5NSIsImE5NiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImExMDEiLCJhMTAyIiwiYTEwMyIsImExMDQiLCJhMTA2IiwiYTEwNyIsImExMDgiLCJhMTEyIiwiYTExMSIsImExMTAiLCJhMTA5IiwiYTEyMCIsImExMjEiLCJhMTIyIiwiYTEyMyIsImExMjQiLCJhMTI1IiwiYTEyNiIsImExMjciLCJhMTI4IiwiYTEyOSIsImExMzAiLCJhMTMxIiwiYTEzMiIsImExMzMiLCJhMTM0IiwiYTEzNSIsImExMzYiLCJhMTM3IiwiYTEzOCIsImExMzkiLCJhMTQwIiwiYTE0MSIsImExNDIiLCJhMTQzIiwiYTE0NCIsImExNDUiLCJhMTQ2IiwiYTE0NyIsImExNDgiLCJhMTQ5IiwiYTE1MCIsImExNTEiLCJhMTUyIiwiYTE1MyIsImExNTQiLCJhMTU1IiwiYTE1NiIsImExNTciLCJhMTU4IiwiYTE1OSIsImExNjAiLCJhMTYxIiwiYTE2MyIsImExNjQiLCJhMTk2IiwiYTE2NSIsImExOTIiLCJhMTY2IiwiYTE2NyIsImExNjgiLCJhMTY5IiwiYTE3MCIsImExNzEiLCJhMTcyIiwiYTE3MyIsImExNjIiLCJhMTc0IiwiYTE3NSIsImExNzYiLCJhMTc3IiwiYTE3OCIsImExNzkiLCJhMTkzIiwiYTE4MCIsImExOTkiLCJhMTgxIiwiYTIwMCIsImExODIiLCIiLCJhMjAxIiwiYTE4MyIsImExODQiLCJhMTk3IiwiYTE4NSIsImExOTQiLCJhMTk4IiwiYTE4NiIsImExOTUiLCJhMTg3IiwiYTE4OCIsImExODkiLCJhMTkwIiwiYTE5MSIsIiJdO3QuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9Y30sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlNFQUNfQU5BTFlTSVNfRU5BQkxFRD10Lk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZz10LkZvbnRGbGFncz12b2lkIDA7dC5nZXRGb250VHlwZT1mdW5jdGlvbiBnZXRGb250VHlwZShlLHQsYT0hMSl7c3dpdGNoKGUpe2Nhc2UiVHlwZTEiOnJldHVybiBhP3IuRm9udFR5cGUuVFlQRTFTVEFOREFSRDoiVHlwZTFDIj09PXQ/ci5Gb250VHlwZS5UWVBFMUM6ci5Gb250VHlwZS5UWVBFMTtjYXNlIkNJREZvbnRUeXBlMCI6cmV0dXJuIkNJREZvbnRUeXBlMEMiPT09dD9yLkZvbnRUeXBlLkNJREZPTlRUWVBFMEM6ci5Gb250VHlwZS5DSURGT05UVFlQRTA7Y2FzZSJPcGVuVHlwZSI6cmV0dXJuIHIuRm9udFR5cGUuT1BFTlRZUEU7Y2FzZSJUcnVlVHlwZSI6cmV0dXJuIHIuRm9udFR5cGUuVFJVRVRZUEU7Y2FzZSJDSURGb250VHlwZTIiOnJldHVybiByLkZvbnRUeXBlLkNJREZPTlRUWVBFMjtjYXNlIk1NVHlwZTEiOnJldHVybiByLkZvbnRUeXBlLk1NVFlQRTE7Y2FzZSJUeXBlMCI6cmV0dXJuIHIuRm9udFR5cGUuVFlQRTA7ZGVmYXVsdDpyZXR1cm4gci5Gb250VHlwZS5VTktOT1dOfX07dC5ub3JtYWxpemVGb250TmFtZT1mdW5jdGlvbiBub3JtYWxpemVGb250TmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bLF9dL2csIi0iKS5yZXBsYWNlKC9ccy9nLCIiKX07dC5yZWNvdmVyR2x5cGhOYW1lPXJlY292ZXJHbHlwaE5hbWU7dC50eXBlMUZvbnRHbHlwaE1hcHBpbmc9ZnVuY3Rpb24gdHlwZTFGb250R2x5cGhNYXBwaW5nKGUsdCxhKXtjb25zdCByPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHMsYyxsO2NvbnN0IGg9ISEoZS5mbGFncyZvLlN5bWJvbGljKTtpZihlLmlzSW50ZXJuYWxGb250KXtsPXQ7Zm9yKGM9MDtjPGwubGVuZ3RoO2MrKyl7cz1hLmluZGV4T2YobFtjXSk7cltjXT1zPj0wP3M6MH19ZWxzZSBpZihlLmJhc2VFbmNvZGluZ05hbWUpe2w9KDAsbi5nZXRFbmNvZGluZykoZS5iYXNlRW5jb2RpbmdOYW1lKTtmb3IoYz0wO2M8bC5sZW5ndGg7YysrKXtzPWEuaW5kZXhPZihsW2NdKTtyW2NdPXM+PTA/czowfX1lbHNlIGlmKGgpZm9yKGMgaW4gdClyW2NdPXRbY107ZWxzZXtsPW4uU3RhbmRhcmRFbmNvZGluZztmb3IoYz0wO2M8bC5sZW5ndGg7YysrKXtzPWEuaW5kZXhPZihsW2NdKTtyW2NdPXM+PTA/czowfX1jb25zdCB1PWUuZGlmZmVyZW5jZXM7bGV0IGQ7aWYodSlmb3IoYyBpbiB1KXtjb25zdCBlPXVbY107cz1hLmluZGV4T2YoZSk7aWYoLTE9PT1zKXtkfHwoZD0oMCxpLmdldEdseXBoc1VuaWNvZGUpKCkpO2NvbnN0IHQ9cmVjb3ZlckdseXBoTmFtZShlLGQpO3QhPT1lJiYocz1hLmluZGV4T2YodCkpfXJbY109cz49MD9zOjB9cmV0dXJuIHJ9O3ZhciByPWEoMiksbj1hKDM1KSxpPWEoMzcpLHM9YSgzOCk7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9ITA7Y29uc3Qgbz17Rml4ZWRQaXRjaDoxLFNlcmlmOjIsU3ltYm9saWM6NCxTY3JpcHQ6OCxOb25zeW1ib2xpYzozMixJdGFsaWM6NjQsQWxsQ2FwOjY1NTM2LFNtYWxsQ2FwOjEzMTA3MixGb3JjZUJvbGQ6MjYyMTQ0fTt0LkZvbnRGbGFncz1vO3QuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXTtmdW5jdGlvbiByZWNvdmVyR2x5cGhOYW1lKGUsdCl7aWYodm9pZCAwIT09dFtlXSlyZXR1cm4gZTtjb25zdCBhPSgwLHMuZ2V0VW5pY29kZUZvckdseXBoKShlLHQpO2lmKC0xIT09YSlmb3IoY29uc3QgZSBpbiB0KWlmKHRbZV09PT1hKXJldHVybiBlOygwLHIuaW5mbykoIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSk7cmV0dXJuIGV9fSwoZSx0LGEpPT57YS5yKHQpO2EuZCh0LHtnZXREaW5nYmF0c0dseXBoc1VuaWNvZGU6KCk9PmksZ2V0R2x5cGhzVW5pY29kZTooKT0+bn0pO3ZhciByPWEoNCk7Y29uc3Qgbj0oMCxyLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oKXtyZXR1cm5bIkEiLDY1LCJBRSIsMTk4LCJBRWFjdXRlIiw1MDgsIkFFbWFjcm9uIiw0ODIsIkFFc21hbGwiLDYzNDYyLCJBYWN1dGUiLDE5MywiQWFjdXRlc21hbGwiLDYzNDU3LCJBYnJldmUiLDI1OCwiQWJyZXZlYWN1dGUiLDc4NTQsIkFicmV2ZWN5cmlsbGljIiwxMjMyLCJBYnJldmVkb3RiZWxvdyIsNzg2MiwiQWJyZXZlZ3JhdmUiLDc4NTYsIkFicmV2ZWhvb2thYm92ZSIsNzg1OCwiQWJyZXZldGlsZGUiLDc4NjAsIkFjYXJvbiIsNDYxLCJBY2lyY2xlIiw5Mzk4LCJBY2lyY3VtZmxleCIsMTk0LCJBY2lyY3VtZmxleGFjdXRlIiw3ODQ0LCJBY2lyY3VtZmxleGRvdGJlbG93Iiw3ODUyLCJBY2lyY3VtZmxleGdyYXZlIiw3ODQ2LCJBY2lyY3VtZmxleGhvb2thYm92ZSIsNzg0OCwiQWNpcmN1bWZsZXhzbWFsbCIsNjM0NTgsIkFjaXJjdW1mbGV4dGlsZGUiLDc4NTAsIkFjdXRlIiw2MzE3NywiQWN1dGVzbWFsbCIsNjM0MTIsIkFjeXJpbGxpYyIsMTA0MCwiQWRibGdyYXZlIiw1MTIsIkFkaWVyZXNpcyIsMTk2LCJBZGllcmVzaXNjeXJpbGxpYyIsMTIzNCwiQWRpZXJlc2lzbWFjcm9uIiw0NzgsIkFkaWVyZXNpc3NtYWxsIiw2MzQ2MCwiQWRvdGJlbG93Iiw3ODQwLCJBZG90bWFjcm9uIiw0ODAsIkFncmF2ZSIsMTkyLCJBZ3JhdmVzbWFsbCIsNjM0NTYsIkFob29rYWJvdmUiLDc4NDIsIkFpZWN5cmlsbGljIiwxMjM2LCJBaW52ZXJ0ZWRicmV2ZSIsNTE0LCJBbHBoYSIsOTEzLCJBbHBoYXRvbm9zIiw5MDIsIkFtYWNyb24iLDI1NiwiQW1vbm9zcGFjZSIsNjUzMTMsIkFvZ29uZWsiLDI2MCwiQXJpbmciLDE5NywiQXJpbmdhY3V0ZSIsNTA2LCJBcmluZ2JlbG93Iiw3NjgwLCJBcmluZ3NtYWxsIiw2MzQ2MSwiQXNtYWxsIiw2MzMyOSwiQXRpbGRlIiwxOTUsIkF0aWxkZXNtYWxsIiw2MzQ1OSwiQXliYXJtZW5pYW4iLDEzMjksIkIiLDY2LCJCY2lyY2xlIiw5Mzk5LCJCZG90YWNjZW50Iiw3NjgyLCJCZG90YmVsb3ciLDc2ODQsIkJlY3lyaWxsaWMiLDEwNDEsIkJlbmFybWVuaWFuIiwxMzMwLCJCZXRhIiw5MTQsIkJob29rIiwzODUsIkJsaW5lYmVsb3ciLDc2ODYsIkJtb25vc3BhY2UiLDY1MzE0LCJCcmV2ZXNtYWxsIiw2MzIyMCwiQnNtYWxsIiw2MzMzMCwiQnRvcGJhciIsMzg2LCJDIiw2NywiQ2Fhcm1lbmlhbiIsMTM0MiwiQ2FjdXRlIiwyNjIsIkNhcm9uIiw2MzE3OCwiQ2Fyb25zbWFsbCIsNjMyMjEsIkNjYXJvbiIsMjY4LCJDY2VkaWxsYSIsMTk5LCJDY2VkaWxsYWFjdXRlIiw3Njg4LCJDY2VkaWxsYXNtYWxsIiw2MzQ2MywiQ2NpcmNsZSIsOTQwMCwiQ2NpcmN1bWZsZXgiLDI2NCwiQ2RvdCIsMjY2LCJDZG90YWNjZW50IiwyNjYsIkNlZGlsbGFzbWFsbCIsNjM0MTYsIkNoYWFybWVuaWFuIiwxMzUzLCJDaGVhYmtoYXNpYW5jeXJpbGxpYyIsMTIxMiwiQ2hlY3lyaWxsaWMiLDEwNjMsIkNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljIiwxMjE0LCJDaGVkZXNjZW5kZXJjeXJpbGxpYyIsMTIwNiwiQ2hlZGllcmVzaXNjeXJpbGxpYyIsMTI2OCwiQ2hlaGFybWVuaWFuIiwxMzQ3LCJDaGVraGFrYXNzaWFuY3lyaWxsaWMiLDEyMjcsIkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMiLDEyMDgsIkNoaSIsOTM1LCJDaG9vayIsMzkxLCJDaXJjdW1mbGV4c21hbGwiLDYzMjIyLCJDbW9ub3NwYWNlIiw2NTMxNSwiQ29hcm1lbmlhbiIsMTM2MSwiQ3NtYWxsIiw2MzMzMSwiRCIsNjgsIkRaIiw0OTcsIkRaY2Fyb24iLDQ1MiwiRGFhcm1lbmlhbiIsMTMzMiwiRGFmcmljYW4iLDM5MywiRGNhcm9uIiwyNzAsIkRjZWRpbGxhIiw3Njk2LCJEY2lyY2xlIiw5NDAxLCJEY2lyY3VtZmxleGJlbG93Iiw3Njk4LCJEY3JvYXQiLDI3MiwiRGRvdGFjY2VudCIsNzY5MCwiRGRvdGJlbG93Iiw3NjkyLCJEZWN5cmlsbGljIiwxMDQ0LCJEZWljb3B0aWMiLDEwMDYsIkRlbHRhIiw4NzEwLCJEZWx0YWdyZWVrIiw5MTYsIkRob29rIiwzOTQsIkRpZXJlc2lzIiw2MzE3OSwiRGllcmVzaXNBY3V0ZSIsNjMxODAsIkRpZXJlc2lzR3JhdmUiLDYzMTgxLCJEaWVyZXNpc3NtYWxsIiw2MzQwMCwiRGlnYW1tYWdyZWVrIiw5ODgsIkRqZWN5cmlsbGljIiwxMDI2LCJEbGluZWJlbG93Iiw3Njk0LCJEbW9ub3NwYWNlIiw2NTMxNiwiRG90YWNjZW50c21hbGwiLDYzMjIzLCJEc2xhc2giLDI3MiwiRHNtYWxsIiw2MzMzMiwiRHRvcGJhciIsMzk1LCJEeiIsNDk4LCJEemNhcm9uIiw0NTMsIkR6ZWFia2hhc2lhbmN5cmlsbGljIiwxMjQ4LCJEemVjeXJpbGxpYyIsMTAyOSwiRHpoZWN5cmlsbGljIiwxMDM5LCJFIiw2OSwiRWFjdXRlIiwyMDEsIkVhY3V0ZXNtYWxsIiw2MzQ2NSwiRWJyZXZlIiwyNzYsIkVjYXJvbiIsMjgyLCJFY2VkaWxsYWJyZXZlIiw3NzA4LCJFY2hhcm1lbmlhbiIsMTMzMywiRWNpcmNsZSIsOTQwMiwiRWNpcmN1bWZsZXgiLDIwMiwiRWNpcmN1bWZsZXhhY3V0ZSIsNzg3MCwiRWNpcmN1bWZsZXhiZWxvdyIsNzcwNCwiRWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg3OCwiRWNpcmN1bWZsZXhncmF2ZSIsNzg3MiwiRWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NzQsIkVjaXJjdW1mbGV4c21hbGwiLDYzNDY2LCJFY2lyY3VtZmxleHRpbGRlIiw3ODc2LCJFY3lyaWxsaWMiLDEwMjgsIkVkYmxncmF2ZSIsNTE2LCJFZGllcmVzaXMiLDIwMywiRWRpZXJlc2lzc21hbGwiLDYzNDY3LCJFZG90IiwyNzgsIkVkb3RhY2NlbnQiLDI3OCwiRWRvdGJlbG93Iiw3ODY0LCJFZmN5cmlsbGljIiwxMDYwLCJFZ3JhdmUiLDIwMCwiRWdyYXZlc21hbGwiLDYzNDY0LCJFaGFybWVuaWFuIiwxMzM1LCJFaG9va2Fib3ZlIiw3ODY2LCJFaWdodHJvbWFuIiw4NTUxLCJFaW52ZXJ0ZWRicmV2ZSIsNTE4LCJFaW90aWZpZWRjeXJpbGxpYyIsMTEyNCwiRWxjeXJpbGxpYyIsMTA1MSwiRWxldmVucm9tYW4iLDg1NTQsIkVtYWNyb24iLDI3NCwiRW1hY3JvbmFjdXRlIiw3NzAyLCJFbWFjcm9uZ3JhdmUiLDc3MDAsIkVtY3lyaWxsaWMiLDEwNTIsIkVtb25vc3BhY2UiLDY1MzE3LCJFbmN5cmlsbGljIiwxMDUzLCJFbmRlc2NlbmRlcmN5cmlsbGljIiwxMTg2LCJFbmciLDMzMCwiRW5naGVjeXJpbGxpYyIsMTE4OCwiRW5ob29rY3lyaWxsaWMiLDEyMjMsIkVvZ29uZWsiLDI4MCwiRW9wZW4iLDQwMCwiRXBzaWxvbiIsOTE3LCJFcHNpbG9udG9ub3MiLDkwNCwiRXJjeXJpbGxpYyIsMTA1NiwiRXJldmVyc2VkIiwzOTgsIkVyZXZlcnNlZGN5cmlsbGljIiwxMDY5LCJFc2N5cmlsbGljIiwxMDU3LCJFc2Rlc2NlbmRlcmN5cmlsbGljIiwxMTk0LCJFc2giLDQyNSwiRXNtYWxsIiw2MzMzMywiRXRhIiw5MTksIkV0YXJtZW5pYW4iLDEzMzYsIkV0YXRvbm9zIiw5MDUsIkV0aCIsMjA4LCJFdGhzbWFsbCIsNjM0NzIsIkV0aWxkZSIsNzg2OCwiRXRpbGRlYmVsb3ciLDc3MDYsIkV1cm8iLDgzNjQsIkV6aCIsNDM5LCJFemhjYXJvbiIsNDk0LCJFemhyZXZlcnNlZCIsNDQwLCJGIiw3MCwiRmNpcmNsZSIsOTQwMywiRmRvdGFjY2VudCIsNzcxMCwiRmVoYXJtZW5pYW4iLDEzNjYsIkZlaWNvcHRpYyIsOTk2LCJGaG9vayIsNDAxLCJGaXRhY3lyaWxsaWMiLDExMzgsIkZpdmVyb21hbiIsODU0OCwiRm1vbm9zcGFjZSIsNjUzMTgsIkZvdXJyb21hbiIsODU0NywiRnNtYWxsIiw2MzMzNCwiRyIsNzEsIkdCc3F1YXJlIiwxMzE5MSwiR2FjdXRlIiw1MDAsIkdhbW1hIiw5MTUsIkdhbW1hYWZyaWNhbiIsNDA0LCJHYW5naWFjb3B0aWMiLDEwMDIsIkdicmV2ZSIsMjg2LCJHY2Fyb24iLDQ4NiwiR2NlZGlsbGEiLDI5MCwiR2NpcmNsZSIsOTQwNCwiR2NpcmN1bWZsZXgiLDI4NCwiR2NvbW1hYWNjZW50IiwyOTAsIkdkb3QiLDI4OCwiR2RvdGFjY2VudCIsMjg4LCJHZWN5cmlsbGljIiwxMDQzLCJHaGFkYXJtZW5pYW4iLDEzNDYsIkdoZW1pZGRsZWhvb2tjeXJpbGxpYyIsMTE3MiwiR2hlc3Ryb2tlY3lyaWxsaWMiLDExNzAsIkdoZXVwdHVybmN5cmlsbGljIiwxMTY4LCJHaG9vayIsNDAzLCJHaW1hcm1lbmlhbiIsMTMzMSwiR2plY3lyaWxsaWMiLDEwMjcsIkdtYWNyb24iLDc3MTIsIkdtb25vc3BhY2UiLDY1MzE5LCJHcmF2ZSIsNjMxODIsIkdyYXZlc21hbGwiLDYzMzI4LCJHc21hbGwiLDYzMzM1LCJHc21hbGxob29rIiw2NjcsIkdzdHJva2UiLDQ4NCwiSCIsNzIsIkgxODUzMyIsOTY3OSwiSDE4NTQzIiw5NjQyLCJIMTg1NTEiLDk2NDMsIkgyMjA3MyIsOTYzMywiSFBzcXVhcmUiLDEzMjU5LCJIYWFia2hhc2lhbmN5cmlsbGljIiwxMTkyLCJIYWRlc2NlbmRlcmN5cmlsbGljIiwxMjAyLCJIYXJkc2lnbmN5cmlsbGljIiwxMDY2LCJIYmFyIiwyOTQsIkhicmV2ZWJlbG93Iiw3NzIyLCJIY2VkaWxsYSIsNzcyMCwiSGNpcmNsZSIsOTQwNSwiSGNpcmN1bWZsZXgiLDI5MiwiSGRpZXJlc2lzIiw3NzE4LCJIZG90YWNjZW50Iiw3NzE0LCJIZG90YmVsb3ciLDc3MTYsIkhtb25vc3BhY2UiLDY1MzIwLCJIb2FybWVuaWFuIiwxMzQ0LCJIb3JpY29wdGljIiwxZTMsIkhzbWFsbCIsNjMzMzYsIkh1bmdhcnVtbGF1dCIsNjMxODMsIkh1bmdhcnVtbGF1dHNtYWxsIiw2MzIyNCwiSHpzcXVhcmUiLDEzMjAwLCJJIiw3MywiSUFjeXJpbGxpYyIsMTA3MSwiSUoiLDMwNiwiSVVjeXJpbGxpYyIsMTA3MCwiSWFjdXRlIiwyMDUsIklhY3V0ZXNtYWxsIiw2MzQ2OSwiSWJyZXZlIiwzMDAsIkljYXJvbiIsNDYzLCJJY2lyY2xlIiw5NDA2LCJJY2lyY3VtZmxleCIsMjA2LCJJY2lyY3VtZmxleHNtYWxsIiw2MzQ3MCwiSWN5cmlsbGljIiwxMDMwLCJJZGJsZ3JhdmUiLDUyMCwiSWRpZXJlc2lzIiwyMDcsIklkaWVyZXNpc2FjdXRlIiw3NzI2LCJJZGllcmVzaXNjeXJpbGxpYyIsMTI1MiwiSWRpZXJlc2lzc21hbGwiLDYzNDcxLCJJZG90IiwzMDQsIklkb3RhY2NlbnQiLDMwNCwiSWRvdGJlbG93Iiw3ODgyLCJJZWJyZXZlY3lyaWxsaWMiLDEyMzgsIkllY3lyaWxsaWMiLDEwNDUsIklmcmFrdHVyIiw4NDY1LCJJZ3JhdmUiLDIwNCwiSWdyYXZlc21hbGwiLDYzNDY4LCJJaG9va2Fib3ZlIiw3ODgwLCJJaWN5cmlsbGljIiwxMDQ4LCJJaW52ZXJ0ZWRicmV2ZSIsNTIyLCJJaXNob3J0Y3lyaWxsaWMiLDEwNDksIkltYWNyb24iLDI5OCwiSW1hY3JvbmN5cmlsbGljIiwxMjUwLCJJbW9ub3NwYWNlIiw2NTMyMSwiSW5pYXJtZW5pYW4iLDEzMzksIklvY3lyaWxsaWMiLDEwMjUsIklvZ29uZWsiLDMwMiwiSW90YSIsOTIxLCJJb3RhYWZyaWNhbiIsNDA2LCJJb3RhZGllcmVzaXMiLDkzOCwiSW90YXRvbm9zIiw5MDYsIklzbWFsbCIsNjMzMzcsIklzdHJva2UiLDQwNywiSXRpbGRlIiwyOTYsIkl0aWxkZWJlbG93Iiw3NzI0LCJJemhpdHNhY3lyaWxsaWMiLDExNDAsIkl6aGl0c2FkYmxncmF2ZWN5cmlsbGljIiwxMTQyLCJKIiw3NCwiSmFhcm1lbmlhbiIsMTM0NSwiSmNpcmNsZSIsOTQwNywiSmNpcmN1bWZsZXgiLDMwOCwiSmVjeXJpbGxpYyIsMTAzMiwiSmhlaGFybWVuaWFuIiwxMzU1LCJKbW9ub3NwYWNlIiw2NTMyMiwiSnNtYWxsIiw2MzMzOCwiSyIsNzUsIktCc3F1YXJlIiwxMzE4OSwiS0tzcXVhcmUiLDEzMjYxLCJLYWJhc2hraXJjeXJpbGxpYyIsMTE4NCwiS2FjdXRlIiw3NzI4LCJLYWN5cmlsbGljIiwxMDUwLCJLYWRlc2NlbmRlcmN5cmlsbGljIiwxMTc4LCJLYWhvb2tjeXJpbGxpYyIsMTIxOSwiS2FwcGEiLDkyMiwiS2FzdHJva2VjeXJpbGxpYyIsMTE4MiwiS2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMTgwLCJLY2Fyb24iLDQ4OCwiS2NlZGlsbGEiLDMxMCwiS2NpcmNsZSIsOTQwOCwiS2NvbW1hYWNjZW50IiwzMTAsIktkb3RiZWxvdyIsNzczMCwiS2VoYXJtZW5pYW4iLDEzNjQsIktlbmFybWVuaWFuIiwxMzQzLCJLaGFjeXJpbGxpYyIsMTA2MSwiS2hlaWNvcHRpYyIsOTk4LCJLaG9vayIsNDA4LCJLamVjeXJpbGxpYyIsMTAzNiwiS2xpbmViZWxvdyIsNzczMiwiS21vbm9zcGFjZSIsNjUzMjMsIktvcHBhY3lyaWxsaWMiLDExNTIsIktvcHBhZ3JlZWsiLDk5MCwiS3NpY3lyaWxsaWMiLDExMzQsIktzbWFsbCIsNjMzMzksIkwiLDc2LCJMSiIsNDU1LCJMTCIsNjMxNjcsIkxhY3V0ZSIsMzEzLCJMYW1iZGEiLDkyMywiTGNhcm9uIiwzMTcsIkxjZWRpbGxhIiwzMTUsIkxjaXJjbGUiLDk0MDksIkxjaXJjdW1mbGV4YmVsb3ciLDc3NDAsIkxjb21tYWFjY2VudCIsMzE1LCJMZG90IiwzMTksIkxkb3RhY2NlbnQiLDMxOSwiTGRvdGJlbG93Iiw3NzM0LCJMZG90YmVsb3dtYWNyb24iLDc3MzYsIkxpd25hcm1lbmlhbiIsMTM0MCwiTGoiLDQ1NiwiTGplY3lyaWxsaWMiLDEwMzMsIkxsaW5lYmVsb3ciLDc3MzgsIkxtb25vc3BhY2UiLDY1MzI0LCJMc2xhc2giLDMyMSwiTHNsYXNoc21hbGwiLDYzMjI1LCJMc21hbGwiLDYzMzQwLCJNIiw3NywiTUJzcXVhcmUiLDEzMTkwLCJNYWNyb24iLDYzMTg0LCJNYWNyb25zbWFsbCIsNjM0MDcsIk1hY3V0ZSIsNzc0MiwiTWNpcmNsZSIsOTQxMCwiTWRvdGFjY2VudCIsNzc0NCwiTWRvdGJlbG93Iiw3NzQ2LCJNZW5hcm1lbmlhbiIsMTM0OCwiTW1vbm9zcGFjZSIsNjUzMjUsIk1zbWFsbCIsNjMzNDEsIk10dXJuZWQiLDQxMiwiTXUiLDkyNCwiTiIsNzgsIk5KIiw0NTgsIk5hY3V0ZSIsMzIzLCJOY2Fyb24iLDMyNywiTmNlZGlsbGEiLDMyNSwiTmNpcmNsZSIsOTQxMSwiTmNpcmN1bWZsZXhiZWxvdyIsNzc1NCwiTmNvbW1hYWNjZW50IiwzMjUsIk5kb3RhY2NlbnQiLDc3NDgsIk5kb3RiZWxvdyIsNzc1MCwiTmhvb2tsZWZ0Iiw0MTMsIk5pbmVyb21hbiIsODU1MiwiTmoiLDQ1OSwiTmplY3lyaWxsaWMiLDEwMzQsIk5saW5lYmVsb3ciLDc3NTIsIk5tb25vc3BhY2UiLDY1MzI2LCJOb3dhcm1lbmlhbiIsMTM1MCwiTnNtYWxsIiw2MzM0MiwiTnRpbGRlIiwyMDksIk50aWxkZXNtYWxsIiw2MzQ3MywiTnUiLDkyNSwiTyIsNzksIk9FIiwzMzgsIk9Fc21hbGwiLDYzMjI2LCJPYWN1dGUiLDIxMSwiT2FjdXRlc21hbGwiLDYzNDc1LCJPYmFycmVkY3lyaWxsaWMiLDEyNTYsIk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljIiwxMjU4LCJPYnJldmUiLDMzNCwiT2Nhcm9uIiw0NjUsIk9jZW50ZXJlZHRpbGRlIiw0MTUsIk9jaXJjbGUiLDk0MTIsIk9jaXJjdW1mbGV4IiwyMTIsIk9jaXJjdW1mbGV4YWN1dGUiLDc4ODgsIk9jaXJjdW1mbGV4ZG90YmVsb3ciLDc4OTYsIk9jaXJjdW1mbGV4Z3JhdmUiLDc4OTAsIk9jaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODkyLCJPY2lyY3VtZmxleHNtYWxsIiw2MzQ3NiwiT2NpcmN1bWZsZXh0aWxkZSIsNzg5NCwiT2N5cmlsbGljIiwxMDU0LCJPZGJsYWN1dGUiLDMzNiwiT2RibGdyYXZlIiw1MjQsIk9kaWVyZXNpcyIsMjE0LCJPZGllcmVzaXNjeXJpbGxpYyIsMTI1NCwiT2RpZXJlc2lzc21hbGwiLDYzNDc4LCJPZG90YmVsb3ciLDc4ODQsIk9nb25la3NtYWxsIiw2MzIyNywiT2dyYXZlIiwyMTAsIk9ncmF2ZXNtYWxsIiw2MzQ3NCwiT2hhcm1lbmlhbiIsMTM2NSwiT2htIiw4NDg2LCJPaG9va2Fib3ZlIiw3ODg2LCJPaG9ybiIsNDE2LCJPaG9ybmFjdXRlIiw3ODk4LCJPaG9ybmRvdGJlbG93Iiw3OTA2LCJPaG9ybmdyYXZlIiw3OTAwLCJPaG9ybmhvb2thYm92ZSIsNzkwMiwiT2hvcm50aWxkZSIsNzkwNCwiT2h1bmdhcnVtbGF1dCIsMzM2LCJPaSIsNDE4LCJPaW52ZXJ0ZWRicmV2ZSIsNTI2LCJPbWFjcm9uIiwzMzIsIk9tYWNyb25hY3V0ZSIsNzc2MiwiT21hY3JvbmdyYXZlIiw3NzYwLCJPbWVnYSIsODQ4NiwiT21lZ2FjeXJpbGxpYyIsMTEyMCwiT21lZ2FncmVlayIsOTM3LCJPbWVnYXJvdW5kY3lyaWxsaWMiLDExNDYsIk9tZWdhdGl0bG9jeXJpbGxpYyIsMTE0OCwiT21lZ2F0b25vcyIsOTExLCJPbWljcm9uIiw5MjcsIk9taWNyb250b25vcyIsOTA4LCJPbW9ub3NwYWNlIiw2NTMyNywiT25lcm9tYW4iLDg1NDQsIk9vZ29uZWsiLDQ5MCwiT29nb25la21hY3JvbiIsNDkyLCJPb3BlbiIsMzkwLCJPc2xhc2giLDIxNiwiT3NsYXNoYWN1dGUiLDUxMCwiT3NsYXNoc21hbGwiLDYzNDgwLCJPc21hbGwiLDYzMzQzLCJPc3Ryb2tlYWN1dGUiLDUxMCwiT3RjeXJpbGxpYyIsMTE1MCwiT3RpbGRlIiwyMTMsIk90aWxkZWFjdXRlIiw3NzU2LCJPdGlsZGVkaWVyZXNpcyIsNzc1OCwiT3RpbGRlc21hbGwiLDYzNDc3LCJQIiw4MCwiUGFjdXRlIiw3NzY0LCJQY2lyY2xlIiw5NDEzLCJQZG90YWNjZW50Iiw3NzY2LCJQZWN5cmlsbGljIiwxMDU1LCJQZWhhcm1lbmlhbiIsMTM1NCwiUGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTAsIlBoaSIsOTM0LCJQaG9vayIsNDIwLCJQaSIsOTI4LCJQaXdyYXJtZW5pYW4iLDEzNjMsIlBtb25vc3BhY2UiLDY1MzI4LCJQc2kiLDkzNiwiUHNpY3lyaWxsaWMiLDExMzYsIlBzbWFsbCIsNjMzNDQsIlEiLDgxLCJRY2lyY2xlIiw5NDE0LCJRbW9ub3NwYWNlIiw2NTMyOSwiUXNtYWxsIiw2MzM0NSwiUiIsODIsIlJhYXJtZW5pYW4iLDEzNTYsIlJhY3V0ZSIsMzQwLCJSY2Fyb24iLDM0NCwiUmNlZGlsbGEiLDM0MiwiUmNpcmNsZSIsOTQxNSwiUmNvbW1hYWNjZW50IiwzNDIsIlJkYmxncmF2ZSIsNTI4LCJSZG90YWNjZW50Iiw3NzY4LCJSZG90YmVsb3ciLDc3NzAsIlJkb3RiZWxvd21hY3JvbiIsNzc3MiwiUmVoYXJtZW5pYW4iLDEzNjAsIlJmcmFrdHVyIiw4NDc2LCJSaG8iLDkyOSwiUmluZ3NtYWxsIiw2MzIyOCwiUmludmVydGVkYnJldmUiLDUzMCwiUmxpbmViZWxvdyIsNzc3NCwiUm1vbm9zcGFjZSIsNjUzMzAsIlJzbWFsbCIsNjMzNDYsIlJzbWFsbGludmVydGVkIiw2NDEsIlJzbWFsbGludmVydGVkc3VwZXJpb3IiLDY5NCwiUyIsODMsIlNGMDEwMDAwIiw5NDg0LCJTRjAyMDAwMCIsOTQ5MiwiU0YwMzAwMDAiLDk0ODgsIlNGMDQwMDAwIiw5NDk2LCJTRjA1MDAwMCIsOTUzMiwiU0YwNjAwMDAiLDk1MTYsIlNGMDcwMDAwIiw5NTI0LCJTRjA4MDAwMCIsOTUwMCwiU0YwOTAwMDAiLDk1MDgsIlNGMTAwMDAwIiw5NDcyLCJTRjExMDAwMCIsOTQ3NCwiU0YxOTAwMDAiLDk1NjksIlNGMjAwMDAwIiw5NTcwLCJTRjIxMDAwMCIsOTU1OCwiU0YyMjAwMDAiLDk1NTcsIlNGMjMwMDAwIiw5NTcxLCJTRjI0MDAwMCIsOTU1MywiU0YyNTAwMDAiLDk1NTksIlNGMjYwMDAwIiw5NTY1LCJTRjI3MDAwMCIsOTU2NCwiU0YyODAwMDAiLDk1NjMsIlNGMzYwMDAwIiw5NTY2LCJTRjM3MDAwMCIsOTU2NywiU0YzODAwMDAiLDk1NjIsIlNGMzkwMDAwIiw5NTU2LCJTRjQwMDAwMCIsOTU3NywiU0Y0MTAwMDAiLDk1NzQsIlNGNDIwMDAwIiw5NTY4LCJTRjQzMDAwMCIsOTU1MiwiU0Y0NDAwMDAiLDk1ODAsIlNGNDUwMDAwIiw5NTc1LCJTRjQ2MDAwMCIsOTU3NiwiU0Y0NzAwMDAiLDk1NzIsIlNGNDgwMDAwIiw5NTczLCJTRjQ5MDAwMCIsOTU2MSwiU0Y1MDAwMDAiLDk1NjAsIlNGNTEwMDAwIiw5NTU0LCJTRjUyMDAwMCIsOTU1NSwiU0Y1MzAwMDAiLDk1NzksIlNGNTQwMDAwIiw5NTc4LCJTYWN1dGUiLDM0NiwiU2FjdXRlZG90YWNjZW50Iiw3NzgwLCJTYW1waWdyZWVrIiw5OTIsIlNjYXJvbiIsMzUyLCJTY2Fyb25kb3RhY2NlbnQiLDc3ODIsIlNjYXJvbnNtYWxsIiw2MzIyOSwiU2NlZGlsbGEiLDM1MCwiU2Nod2EiLDM5OSwiU2Nod2FjeXJpbGxpYyIsMTI0MCwiU2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQyLCJTY2lyY2xlIiw5NDE2LCJTY2lyY3VtZmxleCIsMzQ4LCJTY29tbWFhY2NlbnQiLDUzNiwiU2RvdGFjY2VudCIsNzc3NiwiU2RvdGJlbG93Iiw3Nzc4LCJTZG90YmVsb3dkb3RhY2NlbnQiLDc3ODQsIlNlaGFybWVuaWFuIiwxMzU3LCJTZXZlbnJvbWFuIiw4NTUwLCJTaGFhcm1lbmlhbiIsMTM1MSwiU2hhY3lyaWxsaWMiLDEwNjQsIlNoY2hhY3lyaWxsaWMiLDEwNjUsIlNoZWljb3B0aWMiLDk5NCwiU2hoYWN5cmlsbGljIiwxMjEwLCJTaGltYWNvcHRpYyIsMTAwNCwiU2lnbWEiLDkzMSwiU2l4cm9tYW4iLDg1NDksIlNtb25vc3BhY2UiLDY1MzMxLCJTb2Z0c2lnbmN5cmlsbGljIiwxMDY4LCJTc21hbGwiLDYzMzQ3LCJTdGlnbWFncmVlayIsOTg2LCJUIiw4NCwiVGF1Iiw5MzIsIlRiYXIiLDM1OCwiVGNhcm9uIiwzNTYsIlRjZWRpbGxhIiwzNTQsIlRjaXJjbGUiLDk0MTcsIlRjaXJjdW1mbGV4YmVsb3ciLDc3OTIsIlRjb21tYWFjY2VudCIsMzU0LCJUZG90YWNjZW50Iiw3Nzg2LCJUZG90YmVsb3ciLDc3ODgsIlRlY3lyaWxsaWMiLDEwNTgsIlRlZGVzY2VuZGVyY3lyaWxsaWMiLDExOTYsIlRlbnJvbWFuIiw4NTUzLCJUZXRzZWN5cmlsbGljIiwxMjA0LCJUaGV0YSIsOTIwLCJUaG9vayIsNDI4LCJUaG9ybiIsMjIyLCJUaG9ybnNtYWxsIiw2MzQ4NiwiVGhyZWVyb21hbiIsODU0NiwiVGlsZGVzbWFsbCIsNjMyMzAsIlRpd25hcm1lbmlhbiIsMTM1OSwiVGxpbmViZWxvdyIsNzc5MCwiVG1vbm9zcGFjZSIsNjUzMzIsIlRvYXJtZW5pYW4iLDEzMzcsIlRvbmVmaXZlIiw0NDQsIlRvbmVzaXgiLDM4OCwiVG9uZXR3byIsNDIzLCJUcmV0cm9mbGV4aG9vayIsNDMwLCJUc2VjeXJpbGxpYyIsMTA2MiwiVHNoZWN5cmlsbGljIiwxMDM1LCJUc21hbGwiLDYzMzQ4LCJUd2VsdmVyb21hbiIsODU1NSwiVHdvcm9tYW4iLDg1NDUsIlUiLDg1LCJVYWN1dGUiLDIxOCwiVWFjdXRlc21hbGwiLDYzNDgyLCJVYnJldmUiLDM2NCwiVWNhcm9uIiw0NjcsIlVjaXJjbGUiLDk0MTgsIlVjaXJjdW1mbGV4IiwyMTksIlVjaXJjdW1mbGV4YmVsb3ciLDc3OTgsIlVjaXJjdW1mbGV4c21hbGwiLDYzNDgzLCJVY3lyaWxsaWMiLDEwNTksIlVkYmxhY3V0ZSIsMzY4LCJVZGJsZ3JhdmUiLDUzMiwiVWRpZXJlc2lzIiwyMjAsIlVkaWVyZXNpc2FjdXRlIiw0NzEsIlVkaWVyZXNpc2JlbG93Iiw3Nzk0LCJVZGllcmVzaXNjYXJvbiIsNDczLCJVZGllcmVzaXNjeXJpbGxpYyIsMTI2NCwiVWRpZXJlc2lzZ3JhdmUiLDQ3NSwiVWRpZXJlc2lzbWFjcm9uIiw0NjksIlVkaWVyZXNpc3NtYWxsIiw2MzQ4NCwiVWRvdGJlbG93Iiw3OTA4LCJVZ3JhdmUiLDIxNywiVWdyYXZlc21hbGwiLDYzNDgxLCJVaG9va2Fib3ZlIiw3OTEwLCJVaG9ybiIsNDMxLCJVaG9ybmFjdXRlIiw3OTEyLCJVaG9ybmRvdGJlbG93Iiw3OTIwLCJVaG9ybmdyYXZlIiw3OTE0LCJVaG9ybmhvb2thYm92ZSIsNzkxNiwiVWhvcm50aWxkZSIsNzkxOCwiVWh1bmdhcnVtbGF1dCIsMzY4LCJVaHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjYsIlVpbnZlcnRlZGJyZXZlIiw1MzQsIlVrY3lyaWxsaWMiLDExNDQsIlVtYWNyb24iLDM2MiwiVW1hY3JvbmN5cmlsbGljIiwxMjYyLCJVbWFjcm9uZGllcmVzaXMiLDc4MDIsIlVtb25vc3BhY2UiLDY1MzMzLCJVb2dvbmVrIiwzNzAsIlVwc2lsb24iLDkzMywiVXBzaWxvbjEiLDk3OCwiVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrIiw5NzksIlVwc2lsb25hZnJpY2FuIiw0MzMsIlVwc2lsb25kaWVyZXNpcyIsOTM5LCJVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsiLDk4MCwiVXBzaWxvbmhvb2tzeW1ib2wiLDk3OCwiVXBzaWxvbnRvbm9zIiw5MTAsIlVyaW5nIiwzNjYsIlVzaG9ydGN5cmlsbGljIiwxMDM4LCJVc21hbGwiLDYzMzQ5LCJVc3RyYWlnaHRjeXJpbGxpYyIsMTE5OCwiVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMiLDEyMDAsIlV0aWxkZSIsMzYwLCJVdGlsZGVhY3V0ZSIsNzgwMCwiVXRpbGRlYmVsb3ciLDc3OTYsIlYiLDg2LCJWY2lyY2xlIiw5NDE5LCJWZG90YmVsb3ciLDc4MDYsIlZlY3lyaWxsaWMiLDEwNDIsIlZld2FybWVuaWFuIiwxMzU4LCJWaG9vayIsNDM0LCJWbW9ub3NwYWNlIiw2NTMzNCwiVm9hcm1lbmlhbiIsMTM1MiwiVnNtYWxsIiw2MzM1MCwiVnRpbGRlIiw3ODA0LCJXIiw4NywiV2FjdXRlIiw3ODEwLCJXY2lyY2xlIiw5NDIwLCJXY2lyY3VtZmxleCIsMzcyLCJXZGllcmVzaXMiLDc4MTIsIldkb3RhY2NlbnQiLDc4MTQsIldkb3RiZWxvdyIsNzgxNiwiV2dyYXZlIiw3ODA4LCJXbW9ub3NwYWNlIiw2NTMzNSwiV3NtYWxsIiw2MzM1MSwiWCIsODgsIlhjaXJjbGUiLDk0MjEsIlhkaWVyZXNpcyIsNzgyMCwiWGRvdGFjY2VudCIsNzgxOCwiWGVoYXJtZW5pYW4iLDEzNDEsIlhpIiw5MjYsIlhtb25vc3BhY2UiLDY1MzM2LCJYc21hbGwiLDYzMzUyLCJZIiw4OSwiWWFjdXRlIiwyMjEsIllhY3V0ZXNtYWxsIiw2MzQ4NSwiWWF0Y3lyaWxsaWMiLDExMjIsIlljaXJjbGUiLDk0MjIsIlljaXJjdW1mbGV4IiwzNzQsIllkaWVyZXNpcyIsMzc2LCJZZGllcmVzaXNzbWFsbCIsNjM0ODcsIllkb3RhY2NlbnQiLDc4MjIsIllkb3RiZWxvdyIsNzkyNCwiWWVyaWN5cmlsbGljIiwxMDY3LCJZZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MiwiWWdyYXZlIiw3OTIyLCJZaG9vayIsNDM1LCJZaG9va2Fib3ZlIiw3OTI2LCJZaWFybWVuaWFuIiwxMzQ5LCJZaWN5cmlsbGljIiwxMDMxLCJZaXduYXJtZW5pYW4iLDEzNjIsIlltb25vc3BhY2UiLDY1MzM3LCJZc21hbGwiLDYzMzUzLCJZdGlsZGUiLDc5MjgsIll1c2JpZ2N5cmlsbGljIiwxMTMwLCJZdXNiaWdpb3RpZmllZGN5cmlsbGljIiwxMTMyLCJZdXNsaXR0bGVjeXJpbGxpYyIsMTEyNiwiWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyIsMTEyOCwiWiIsOTAsIlphYXJtZW5pYW4iLDEzMzQsIlphY3V0ZSIsMzc3LCJaY2Fyb24iLDM4MSwiWmNhcm9uc21hbGwiLDYzMjMxLCJaY2lyY2xlIiw5NDIzLCJaY2lyY3VtZmxleCIsNzgyNCwiWmRvdCIsMzc5LCJaZG90YWNjZW50IiwzNzksIlpkb3RiZWxvdyIsNzgyNiwiWmVjeXJpbGxpYyIsMTA0NywiWmVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NiwiWmVkaWVyZXNpc2N5cmlsbGljIiwxMjQ2LCJaZXRhIiw5MTgsIlpoZWFybWVuaWFuIiwxMzM4LCJaaGVicmV2ZWN5cmlsbGljIiwxMjE3LCJaaGVjeXJpbGxpYyIsMTA0NiwiWmhlZGVzY2VuZGVyY3lyaWxsaWMiLDExNzQsIlpoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDQsIlpsaW5lYmVsb3ciLDc4MjgsIlptb25vc3BhY2UiLDY1MzM4LCJac21hbGwiLDYzMzU0LCJac3Ryb2tlIiw0MzcsImEiLDk3LCJhYWJlbmdhbGkiLDI0MzgsImFhY3V0ZSIsMjI1LCJhYWRldmEiLDIzMTAsImFhZ3VqYXJhdGkiLDI2OTQsImFhZ3VybXVraGkiLDI1NjYsImFhbWF0cmFndXJtdWtoaSIsMjYyMiwiYWFydXNxdWFyZSIsMTMwNTksImFhdm93ZWxzaWduYmVuZ2FsaSIsMjQ5NCwiYWF2b3dlbHNpZ25kZXZhIiwyMzY2LCJhYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzUwLCJhYmJyZXZpYXRpb25tYXJrYXJtZW5pYW4iLDEzNzUsImFiYnJldmlhdGlvbnNpZ25kZXZhIiwyNDE2LCJhYmVuZ2FsaSIsMjQzNywiYWJvcG9tb2ZvIiwxMjU3MCwiYWJyZXZlIiwyNTksImFicmV2ZWFjdXRlIiw3ODU1LCJhYnJldmVjeXJpbGxpYyIsMTIzMywiYWJyZXZlZG90YmVsb3ciLDc4NjMsImFicmV2ZWdyYXZlIiw3ODU3LCJhYnJldmVob29rYWJvdmUiLDc4NTksImFicmV2ZXRpbGRlIiw3ODYxLCJhY2Fyb24iLDQ2MiwiYWNpcmNsZSIsOTQyNCwiYWNpcmN1bWZsZXgiLDIyNiwiYWNpcmN1bWZsZXhhY3V0ZSIsNzg0NSwiYWNpcmN1bWZsZXhkb3RiZWxvdyIsNzg1MywiYWNpcmN1bWZsZXhncmF2ZSIsNzg0NywiYWNpcmN1bWZsZXhob29rYWJvdmUiLDc4NDksImFjaXJjdW1mbGV4dGlsZGUiLDc4NTEsImFjdXRlIiwxODAsImFjdXRlYmVsb3djbWIiLDc5MSwiYWN1dGVjbWIiLDc2OSwiYWN1dGVjb21iIiw3NjksImFjdXRlZGV2YSIsMjM4OCwiYWN1dGVsb3dtb2QiLDcxOSwiYWN1dGV0b25lY21iIiw4MzMsImFjeXJpbGxpYyIsMTA3MiwiYWRibGdyYXZlIiw1MTMsImFkZGFrZ3VybXVraGkiLDI2NzMsImFkZXZhIiwyMzA5LCJhZGllcmVzaXMiLDIyOCwiYWRpZXJlc2lzY3lyaWxsaWMiLDEyMzUsImFkaWVyZXNpc21hY3JvbiIsNDc5LCJhZG90YmVsb3ciLDc4NDEsImFkb3RtYWNyb24iLDQ4MSwiYWUiLDIzMCwiYWVhY3V0ZSIsNTA5LCJhZWtvcmVhbiIsMTI2MjQsImFlbWFjcm9uIiw0ODMsImFmaWkwMDIwOCIsODIxMywiYWZpaTA4OTQxIiw4MzU2LCJhZmlpMTAwMTciLDEwNDAsImFmaWkxMDAxOCIsMTA0MSwiYWZpaTEwMDE5IiwxMDQyLCJhZmlpMTAwMjAiLDEwNDMsImFmaWkxMDAyMSIsMTA0NCwiYWZpaTEwMDIyIiwxMDQ1LCJhZmlpMTAwMjMiLDEwMjUsImFmaWkxMDAyNCIsMTA0NiwiYWZpaTEwMDI1IiwxMDQ3LCJhZmlpMTAwMjYiLDEwNDgsImFmaWkxMDAyNyIsMTA0OSwiYWZpaTEwMDI4IiwxMDUwLCJhZmlpMTAwMjkiLDEwNTEsImFmaWkxMDAzMCIsMTA1MiwiYWZpaTEwMDMxIiwxMDUzLCJhZmlpMTAwMzIiLDEwNTQsImFmaWkxMDAzMyIsMTA1NSwiYWZpaTEwMDM0IiwxMDU2LCJhZmlpMTAwMzUiLDEwNTcsImFmaWkxMDAzNiIsMTA1OCwiYWZpaTEwMDM3IiwxMDU5LCJhZmlpMTAwMzgiLDEwNjAsImFmaWkxMDAzOSIsMTA2MSwiYWZpaTEwMDQwIiwxMDYyLCJhZmlpMTAwNDEiLDEwNjMsImFmaWkxMDA0MiIsMTA2NCwiYWZpaTEwMDQzIiwxMDY1LCJhZmlpMTAwNDQiLDEwNjYsImFmaWkxMDA0NSIsMTA2NywiYWZpaTEwMDQ2IiwxMDY4LCJhZmlpMTAwNDciLDEwNjksImFmaWkxMDA0OCIsMTA3MCwiYWZpaTEwMDQ5IiwxMDcxLCJhZmlpMTAwNTAiLDExNjgsImFmaWkxMDA1MSIsMTAyNiwiYWZpaTEwMDUyIiwxMDI3LCJhZmlpMTAwNTMiLDEwMjgsImFmaWkxMDA1NCIsMTAyOSwiYWZpaTEwMDU1IiwxMDMwLCJhZmlpMTAwNTYiLDEwMzEsImFmaWkxMDA1NyIsMTAzMiwiYWZpaTEwMDU4IiwxMDMzLCJhZmlpMTAwNTkiLDEwMzQsImFmaWkxMDA2MCIsMTAzNSwiYWZpaTEwMDYxIiwxMDM2LCJhZmlpMTAwNjIiLDEwMzgsImFmaWkxMDA2MyIsNjMxNzIsImFmaWkxMDA2NCIsNjMxNzMsImFmaWkxMDA2NSIsMTA3MiwiYWZpaTEwMDY2IiwxMDczLCJhZmlpMTAwNjciLDEwNzQsImFmaWkxMDA2OCIsMTA3NSwiYWZpaTEwMDY5IiwxMDc2LCJhZmlpMTAwNzAiLDEwNzcsImFmaWkxMDA3MSIsMTEwNSwiYWZpaTEwMDcyIiwxMDc4LCJhZmlpMTAwNzMiLDEwNzksImFmaWkxMDA3NCIsMTA4MCwiYWZpaTEwMDc1IiwxMDgxLCJhZmlpMTAwNzYiLDEwODIsImFmaWkxMDA3NyIsMTA4MywiYWZpaTEwMDc4IiwxMDg0LCJhZmlpMTAwNzkiLDEwODUsImFmaWkxMDA4MCIsMTA4NiwiYWZpaTEwMDgxIiwxMDg3LCJhZmlpMTAwODIiLDEwODgsImFmaWkxMDA4MyIsMTA4OSwiYWZpaTEwMDg0IiwxMDkwLCJhZmlpMTAwODUiLDEwOTEsImFmaWkxMDA4NiIsMTA5MiwiYWZpaTEwMDg3IiwxMDkzLCJhZmlpMTAwODgiLDEwOTQsImFmaWkxMDA4OSIsMTA5NSwiYWZpaTEwMDkwIiwxMDk2LCJhZmlpMTAwOTEiLDEwOTcsImFmaWkxMDA5MiIsMTA5OCwiYWZpaTEwMDkzIiwxMDk5LCJhZmlpMTAwOTQiLDExMDAsImFmaWkxMDA5NSIsMTEwMSwiYWZpaTEwMDk2IiwxMTAyLCJhZmlpMTAwOTciLDExMDMsImFmaWkxMDA5OCIsMTE2OSwiYWZpaTEwMDk5IiwxMTA2LCJhZmlpMTAxMDAiLDExMDcsImFmaWkxMDEwMSIsMTEwOCwiYWZpaTEwMTAyIiwxMTA5LCJhZmlpMTAxMDMiLDExMTAsImFmaWkxMDEwNCIsMTExMSwiYWZpaTEwMTA1IiwxMTEyLCJhZmlpMTAxMDYiLDExMTMsImFmaWkxMDEwNyIsMTExNCwiYWZpaTEwMTA4IiwxMTE1LCJhZmlpMTAxMDkiLDExMTYsImFmaWkxMDExMCIsMTExOCwiYWZpaTEwMTQ1IiwxMDM5LCJhZmlpMTAxNDYiLDExMjIsImFmaWkxMDE0NyIsMTEzOCwiYWZpaTEwMTQ4IiwxMTQwLCJhZmlpMTAxOTIiLDYzMTc0LCJhZmlpMTAxOTMiLDExMTksImFmaWkxMDE5NCIsMTEyMywiYWZpaTEwMTk1IiwxMTM5LCJhZmlpMTAxOTYiLDExNDEsImFmaWkxMDgzMSIsNjMxNzUsImFmaWkxMDgzMiIsNjMxNzYsImFmaWkxMDg0NiIsMTI0MSwiYWZpaTI5OSIsODIwNiwiYWZpaTMwMCIsODIwNywiYWZpaTMwMSIsODIwNSwiYWZpaTU3MzgxIiwxNjQyLCJhZmlpNTczODgiLDE1NDgsImFmaWk1NzM5MiIsMTYzMiwiYWZpaTU3MzkzIiwxNjMzLCJhZmlpNTczOTQiLDE2MzQsImFmaWk1NzM5NSIsMTYzNSwiYWZpaTU3Mzk2IiwxNjM2LCJhZmlpNTczOTciLDE2MzcsImFmaWk1NzM5OCIsMTYzOCwiYWZpaTU3Mzk5IiwxNjM5LCJhZmlpNTc0MDAiLDE2NDAsImFmaWk1NzQwMSIsMTY0MSwiYWZpaTU3NDAzIiwxNTYzLCJhZmlpNTc0MDciLDE1NjcsImFmaWk1NzQwOSIsMTU2OSwiYWZpaTU3NDEwIiwxNTcwLCJhZmlpNTc0MTEiLDE1NzEsImFmaWk1NzQxMiIsMTU3MiwiYWZpaTU3NDEzIiwxNTczLCJhZmlpNTc0MTQiLDE1NzQsImFmaWk1NzQxNSIsMTU3NSwiYWZpaTU3NDE2IiwxNTc2LCJhZmlpNTc0MTciLDE1NzcsImFmaWk1NzQxOCIsMTU3OCwiYWZpaTU3NDE5IiwxNTc5LCJhZmlpNTc0MjAiLDE1ODAsImFmaWk1NzQyMSIsMTU4MSwiYWZpaTU3NDIyIiwxNTgyLCJhZmlpNTc0MjMiLDE1ODMsImFmaWk1NzQyNCIsMTU4NCwiYWZpaTU3NDI1IiwxNTg1LCJhZmlpNTc0MjYiLDE1ODYsImFmaWk1NzQyNyIsMTU4NywiYWZpaTU3NDI4IiwxNTg4LCJhZmlpNTc0MjkiLDE1ODksImFmaWk1NzQzMCIsMTU5MCwiYWZpaTU3NDMxIiwxNTkxLCJhZmlpNTc0MzIiLDE1OTIsImFmaWk1NzQzMyIsMTU5MywiYWZpaTU3NDM0IiwxNTk0LCJhZmlpNTc0NDAiLDE2MDAsImFmaWk1NzQ0MSIsMTYwMSwiYWZpaTU3NDQyIiwxNjAyLCJhZmlpNTc0NDMiLDE2MDMsImFmaWk1NzQ0NCIsMTYwNCwiYWZpaTU3NDQ1IiwxNjA1LCJhZmlpNTc0NDYiLDE2MDYsImFmaWk1NzQ0OCIsMTYwOCwiYWZpaTU3NDQ5IiwxNjA5LCJhZmlpNTc0NTAiLDE2MTAsImFmaWk1NzQ1MSIsMTYxMSwiYWZpaTU3NDUyIiwxNjEyLCJhZmlpNTc0NTMiLDE2MTMsImFmaWk1NzQ1NCIsMTYxNCwiYWZpaTU3NDU1IiwxNjE1LCJhZmlpNTc0NTYiLDE2MTYsImFmaWk1NzQ1NyIsMTYxNywiYWZpaTU3NDU4IiwxNjE4LCJhZmlpNTc0NzAiLDE2MDcsImFmaWk1NzUwNSIsMTcwMCwiYWZpaTU3NTA2IiwxNjYyLCJhZmlpNTc1MDciLDE2NzAsImFmaWk1NzUwOCIsMTY4OCwiYWZpaTU3NTA5IiwxNzExLCJhZmlpNTc1MTEiLDE2NTcsImFmaWk1NzUxMiIsMTY3MiwiYWZpaTU3NTEzIiwxNjgxLCJhZmlpNTc1MTQiLDE3MjIsImFmaWk1NzUxOSIsMTc0NiwiYWZpaTU3NTM0IiwxNzQ5LCJhZmlpNTc2MzYiLDgzNjIsImFmaWk1NzY0NSIsMTQ3MCwiYWZpaTU3NjU4IiwxNDc1LCJhZmlpNTc2NjQiLDE0ODgsImFmaWk1NzY2NSIsMTQ4OSwiYWZpaTU3NjY2IiwxNDkwLCJhZmlpNTc2NjciLDE0OTEsImFmaWk1NzY2OCIsMTQ5MiwiYWZpaTU3NjY5IiwxNDkzLCJhZmlpNTc2NzAiLDE0OTQsImFmaWk1NzY3MSIsMTQ5NSwiYWZpaTU3NjcyIiwxNDk2LCJhZmlpNTc2NzMiLDE0OTcsImFmaWk1NzY3NCIsMTQ5OCwiYWZpaTU3Njc1IiwxNDk5LCJhZmlpNTc2NzYiLDE1MDAsImFmaWk1NzY3NyIsMTUwMSwiYWZpaTU3Njc4IiwxNTAyLCJhZmlpNTc2NzkiLDE1MDMsImFmaWk1NzY4MCIsMTUwNCwiYWZpaTU3NjgxIiwxNTA1LCJhZmlpNTc2ODIiLDE1MDYsImFmaWk1NzY4MyIsMTUwNywiYWZpaTU3Njg0IiwxNTA4LCJhZmlpNTc2ODUiLDE1MDksImFmaWk1NzY4NiIsMTUxMCwiYWZpaTU3Njg3IiwxNTExLCJhZmlpNTc2ODgiLDE1MTIsImFmaWk1NzY4OSIsMTUxMywiYWZpaTU3NjkwIiwxNTE0LCJhZmlpNTc2OTQiLDY0Mjk4LCJhZmlpNTc2OTUiLDY0Mjk5LCJhZmlpNTc3MDAiLDY0MzMxLCJhZmlpNTc3MDUiLDY0Mjg3LCJhZmlpNTc3MTYiLDE1MjAsImFmaWk1NzcxNyIsMTUyMSwiYWZpaTU3NzE4IiwxNTIyLCJhZmlpNTc3MjMiLDY0MzA5LCJhZmlpNTc3OTMiLDE0NjAsImFmaWk1Nzc5NCIsMTQ2MSwiYWZpaTU3Nzk1IiwxNDYyLCJhZmlpNTc3OTYiLDE0NjcsImFmaWk1Nzc5NyIsMTQ2NCwiYWZpaTU3Nzk4IiwxNDYzLCJhZmlpNTc3OTkiLDE0NTYsImFmaWk1NzgwMCIsMTQ1OCwiYWZpaTU3ODAxIiwxNDU3LCJhZmlpNTc4MDIiLDE0NTksImFmaWk1NzgwMyIsMTQ3NCwiYWZpaTU3ODA0IiwxNDczLCJhZmlpNTc4MDYiLDE0NjUsImFmaWk1NzgwNyIsMTQ2OCwiYWZpaTU3ODM5IiwxNDY5LCJhZmlpNTc4NDEiLDE0NzEsImFmaWk1Nzg0MiIsMTQ3MiwiYWZpaTU3OTI5Iiw3MDAsImFmaWk2MTI0OCIsODQ1MywiYWZpaTYxMjg5Iiw4NDY3LCJhZmlpNjEzNTIiLDg0NzAsImFmaWk2MTU3MyIsODIzNiwiYWZpaTYxNTc0Iiw4MjM3LCJhZmlpNjE1NzUiLDgyMzgsImFmaWk2MTY2NCIsODIwNCwiYWZpaTYzMTY3IiwxNjQ1LCJhZmlpNjQ5MzciLDcwMSwiYWdyYXZlIiwyMjQsImFndWphcmF0aSIsMjY5MywiYWd1cm11a2hpIiwyNTY1LCJhaGlyYWdhbmEiLDEyMzU0LCJhaG9va2Fib3ZlIiw3ODQzLCJhaWJlbmdhbGkiLDI0NDgsImFpYm9wb21vZm8iLDEyNTc0LCJhaWRldmEiLDIzMjAsImFpZWN5cmlsbGljIiwxMjM3LCJhaWd1amFyYXRpIiwyNzA0LCJhaWd1cm11a2hpIiwyNTc2LCJhaW1hdHJhZ3VybXVraGkiLDI2MzIsImFpbmFyYWJpYyIsMTU5MywiYWluZmluYWxhcmFiaWMiLDY1MjI2LCJhaW5pbml0aWFsYXJhYmljIiw2NTIyNywiYWlubWVkaWFsYXJhYmljIiw2NTIyOCwiYWludmVydGVkYnJldmUiLDUxNSwiYWl2b3dlbHNpZ25iZW5nYWxpIiwyNTA0LCJhaXZvd2Vsc2lnbmRldmEiLDIzNzYsImFpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjAsImFrYXRha2FuYSIsMTI0NTAsImFrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTMsImFrb3JlYW4iLDEyNjIzLCJhbGVmIiwxNDg4LCJhbGVmYXJhYmljIiwxNTc1LCJhbGVmZGFnZXNoaGVicmV3Iiw2NDMwNCwiYWxlZmZpbmFsYXJhYmljIiw2NTE2NiwiYWxlZmhhbXphYWJvdmVhcmFiaWMiLDE1NzEsImFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU2LCJhbGVmaGFtemFiZWxvd2FyYWJpYyIsMTU3MywiYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUxNjAsImFsZWZoZWJyZXciLDE0ODgsImFsZWZsYW1lZGhlYnJldyIsNjQzMzUsImFsZWZtYWRkYWFib3ZlYXJhYmljIiwxNTcwLCJhbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTE1NCwiYWxlZm1ha3N1cmFhcmFiaWMiLDE2MDksImFsZWZtYWtzdXJhZmluYWxhcmFiaWMiLDY1MjY0LCJhbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMiLDY1MjY3LCJhbGVmbWFrc3VyYW1lZGlhbGFyYWJpYyIsNjUyNjgsImFsZWZwYXRhaGhlYnJldyIsNjQzMDIsImFsZWZxYW1hdHNoZWJyZXciLDY0MzAzLCJhbGVwaCIsODUwMSwiYWxsZXF1YWwiLDg3ODAsImFscGhhIiw5NDUsImFscGhhdG9ub3MiLDk0MCwiYW1hY3JvbiIsMjU3LCJhbW9ub3NwYWNlIiw2NTM0NSwiYW1wZXJzYW5kIiwzOCwiYW1wZXJzYW5kbW9ub3NwYWNlIiw2NTI4NiwiYW1wZXJzYW5kc21hbGwiLDYzMjcwLCJhbXNxdWFyZSIsMTMyNTAsImFuYm9wb21vZm8iLDEyNTc4LCJhbmdib3BvbW9mbyIsMTI1ODAsImFuZ2JyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nYnJhY2tldHJpZ2h0IiwxMjI5NywiYW5na2hhbmtodXRoYWkiLDM2NzQsImFuZ2xlIiw4NzM2LCJhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5NiwiYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NywiYW5nbGVicmFja2V0cmlnaHQiLDEyMjk3LCJhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4OCwiYW5nbGVsZWZ0Iiw5MDAxLCJhbmdsZXJpZ2h0Iiw5MDAyLCJhbmdzdHJvbSIsODQ5MSwiYW5vdGVsZWlhIiw5MDMsImFudWRhdHRhZGV2YSIsMjM4NiwiYW51c3ZhcmFiZW5nYWxpIiwyNDM0LCJhbnVzdmFyYWRldmEiLDIzMDYsImFudXN2YXJhZ3VqYXJhdGkiLDI2OTAsImFvZ29uZWsiLDI2MSwiYXBhYXRvc3F1YXJlIiwxMzA1NiwiYXBhcmVuIiw5MzcyLCJhcG9zdHJvcGhlYXJtZW5pYW4iLDEzNzAsImFwb3N0cm9waGVtb2QiLDcwMCwiYXBwbGUiLDYzNzQzLCJhcHByb2FjaGVzIiw4Nzg0LCJhcHByb3hlcXVhbCIsODc3NiwiYXBwcm94ZXF1YWxvcmltYWdlIiw4Nzg2LCJhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3NzMsImFyYWVhZWtvcmVhbiIsMTI2ODYsImFyYWVha29yZWFuIiwxMjY4NSwiYXJjIiw4OTc4LCJhcmlnaHRoYWxmcmluZyIsNzgzNCwiYXJpbmciLDIyOSwiYXJpbmdhY3V0ZSIsNTA3LCJhcmluZ2JlbG93Iiw3NjgxLCJhcnJvd2JvdGgiLDg1OTYsImFycm93ZGFzaGRvd24iLDg2NzUsImFycm93ZGFzaGxlZnQiLDg2NzIsImFycm93ZGFzaHJpZ2h0Iiw4Njc0LCJhcnJvd2Rhc2h1cCIsODY3MywiYXJyb3dkYmxib3RoIiw4NjYwLCJhcnJvd2RibGRvd24iLDg2NTksImFycm93ZGJsbGVmdCIsODY1NiwiYXJyb3dkYmxyaWdodCIsODY1OCwiYXJyb3dkYmx1cCIsODY1NywiYXJyb3dkb3duIiw4NTk1LCJhcnJvd2Rvd25sZWZ0Iiw4NjAxLCJhcnJvd2Rvd25yaWdodCIsODYwMCwiYXJyb3dkb3dud2hpdGUiLDg2ODEsImFycm93aGVhZGRvd25tb2QiLDcwOSwiYXJyb3doZWFkbGVmdG1vZCIsNzA2LCJhcnJvd2hlYWRyaWdodG1vZCIsNzA3LCJhcnJvd2hlYWR1cG1vZCIsNzA4LCJhcnJvd2hvcml6ZXgiLDYzNzE5LCJhcnJvd2xlZnQiLDg1OTIsImFycm93bGVmdGRibCIsODY1NiwiYXJyb3dsZWZ0ZGJsc3Ryb2tlIiw4NjUzLCJhcnJvd2xlZnRvdmVycmlnaHQiLDg2NDYsImFycm93bGVmdHdoaXRlIiw4Njc4LCJhcnJvd3JpZ2h0Iiw4NTk0LCJhcnJvd3JpZ2h0ZGJsc3Ryb2tlIiw4NjU1LCJhcnJvd3JpZ2h0aGVhdnkiLDEwMTQyLCJhcnJvd3JpZ2h0b3ZlcmxlZnQiLDg2NDQsImFycm93cmlnaHR3aGl0ZSIsODY4MCwiYXJyb3d0YWJsZWZ0Iiw4Njc2LCJhcnJvd3RhYnJpZ2h0Iiw4Njc3LCJhcnJvd3VwIiw4NTkzLCJhcnJvd3VwZG4iLDg1OTcsImFycm93dXBkbmJzZSIsODYxNiwiYXJyb3d1cGRvd25iYXNlIiw4NjE2LCJhcnJvd3VwbGVmdCIsODU5OCwiYXJyb3d1cGxlZnRvZmRvd24iLDg2NDUsImFycm93dXByaWdodCIsODU5OSwiYXJyb3d1cHdoaXRlIiw4Njc5LCJhcnJvd3ZlcnRleCIsNjM3MTgsImFzY2lpY2lyY3VtIiw5NCwiYXNjaWljaXJjdW1tb25vc3BhY2UiLDY1MzQyLCJhc2NpaXRpbGRlIiwxMjYsImFzY2lpdGlsZGVtb25vc3BhY2UiLDY1Mzc0LCJhc2NyaXB0Iiw1OTMsImFzY3JpcHR0dXJuZWQiLDU5NCwiYXNtYWxsaGlyYWdhbmEiLDEyMzUzLCJhc21hbGxrYXRha2FuYSIsMTI0NDksImFzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4MywiYXN0ZXJpc2siLDQyLCJhc3Rlcmlza2FsdG9uZWFyYWJpYyIsMTY0NSwiYXN0ZXJpc2thcmFiaWMiLDE2NDUsImFzdGVyaXNrbWF0aCIsODcyNywiYXN0ZXJpc2ttb25vc3BhY2UiLDY1MjkwLCJhc3Rlcmlza3NtYWxsIiw2NTEyMSwiYXN0ZXJpc20iLDgyNTgsImFzdXBlcmlvciIsNjMyMDksImFzeW1wdG90aWNhbGx5ZXF1YWwiLDg3NzEsImF0Iiw2NCwiYXRpbGRlIiwyMjcsImF0bW9ub3NwYWNlIiw2NTMxMiwiYXRzbWFsbCIsNjUxMzEsImF0dXJuZWQiLDU5MiwiYXViZW5nYWxpIiwyNDUyLCJhdWJvcG9tb2ZvIiwxMjU3NiwiYXVkZXZhIiwyMzI0LCJhdWd1amFyYXRpIiwyNzA4LCJhdWd1cm11a2hpIiwyNTgwLCJhdWxlbmd0aG1hcmtiZW5nYWxpIiwyNTE5LCJhdW1hdHJhZ3VybXVraGkiLDI2MzYsImF1dm93ZWxzaWduYmVuZ2FsaSIsMjUwOCwiYXV2b3dlbHNpZ25kZXZhIiwyMzgwLCJhdXZvd2Vsc2lnbmd1amFyYXRpIiwyNzY0LCJhdmFncmFoYWRldmEiLDIzNjUsImF5YmFybWVuaWFuIiwxMzc3LCJheWluIiwxNTA2LCJheWluYWx0b25laGVicmV3Iiw2NDI4OCwiYXlpbmhlYnJldyIsMTUwNiwiYiIsOTgsImJhYmVuZ2FsaSIsMjQ3NiwiYmFja3NsYXNoIiw5MiwiYmFja3NsYXNobW9ub3NwYWNlIiw2NTM0MCwiYmFkZXZhIiwyMzQ4LCJiYWd1amFyYXRpIiwyNzMyLCJiYWd1cm11a2hpIiwyNjA0LCJiYWhpcmFnYW5hIiwxMjQwMCwiYmFodHRoYWkiLDM2NDcsImJha2F0YWthbmEiLDEyNDk2LCJiYXIiLDEyNCwiYmFybW9ub3NwYWNlIiw2NTM3MiwiYmJvcG9tb2ZvIiwxMjU0OSwiYmNpcmNsZSIsOTQyNSwiYmRvdGFjY2VudCIsNzY4MywiYmRvdGJlbG93Iiw3Njg1LCJiZWFtZWRzaXh0ZWVudGhub3RlcyIsOTgzNiwiYmVjYXVzZSIsODc1NywiYmVjeXJpbGxpYyIsMTA3MywiYmVoYXJhYmljIiwxNTc2LCJiZWhmaW5hbGFyYWJpYyIsNjUxNjgsImJlaGluaXRpYWxhcmFiaWMiLDY1MTY5LCJiZWhpcmFnYW5hIiwxMjQwOSwiYmVobWVkaWFsYXJhYmljIiw2NTE3MCwiYmVobWVlbWluaXRpYWxhcmFiaWMiLDY0NjcxLCJiZWhtZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIwLCJiZWhub29uZmluYWxhcmFiaWMiLDY0NjIxLCJiZWthdGFrYW5hIiwxMjUwNSwiYmVuYXJtZW5pYW4iLDEzNzgsImJldCIsMTQ4OSwiYmV0YSIsOTQ2LCJiZXRhc3ltYm9sZ3JlZWsiLDk3NiwiYmV0ZGFnZXNoIiw2NDMwNSwiYmV0ZGFnZXNoaGVicmV3Iiw2NDMwNSwiYmV0aGVicmV3IiwxNDg5LCJiZXRyYWZlaGVicmV3Iiw2NDMzMiwiYmhhYmVuZ2FsaSIsMjQ3NywiYmhhZGV2YSIsMjM0OSwiYmhhZ3VqYXJhdGkiLDI3MzMsImJoYWd1cm11a2hpIiwyNjA1LCJiaG9vayIsNTk1LCJiaWhpcmFnYW5hIiwxMjQwMywiYmlrYXRha2FuYSIsMTI0OTksImJpbGFiaWFsY2xpY2siLDY2NCwiYmluZGlndXJtdWtoaSIsMjU2MiwiYmlydXNxdWFyZSIsMTMxMDUsImJsYWNrY2lyY2xlIiw5Njc5LCJibGFja2RpYW1vbmQiLDk2NzAsImJsYWNrZG93bnBvaW50aW5ndHJpYW5nbGUiLDk2NjAsImJsYWNrbGVmdHBvaW50aW5ncG9pbnRlciIsOTY2OCwiYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZSIsOTY2NCwiYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQiLDEyMzA0LCJibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4MywiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMwNSwiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDg0LCJibGFja2xvd2VybGVmdHRyaWFuZ2xlIiw5Njk5LCJibGFja2xvd2VycmlnaHR0cmlhbmdsZSIsOTY5OCwiYmxhY2tyZWN0YW5nbGUiLDk2NDQsImJsYWNrcmlnaHRwb2ludGluZ3BvaW50ZXIiLDk2NTgsImJsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlIiw5NjU0LCJibGFja3NtYWxsc3F1YXJlIiw5NjQyLCJibGFja3NtaWxpbmdmYWNlIiw5Nzg3LCJibGFja3NxdWFyZSIsOTYzMiwiYmxhY2tzdGFyIiw5NzMzLCJibGFja3VwcGVybGVmdHRyaWFuZ2xlIiw5NzAwLCJibGFja3VwcGVycmlnaHR0cmlhbmdsZSIsOTcwMSwiYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1MiwiYmxhY2t1cHBvaW50aW5ndHJpYW5nbGUiLDk2NTAsImJsYW5rIiw5MjUxLCJibGluZWJlbG93Iiw3Njg3LCJibG9jayIsOTYwOCwiYm1vbm9zcGFjZSIsNjUzNDYsImJvYmFpbWFpdGhhaSIsMzYxMCwiYm9oaXJhZ2FuYSIsMTI0MTIsImJva2F0YWthbmEiLDEyNTA4LCJicGFyZW4iLDkzNzMsImJxc3F1YXJlIiwxMzI1MSwiYnJhY2VleCIsNjM3MzIsImJyYWNlbGVmdCIsMTIzLCJicmFjZWxlZnRidCIsNjM3MzEsImJyYWNlbGVmdG1pZCIsNjM3MzAsImJyYWNlbGVmdG1vbm9zcGFjZSIsNjUzNzEsImJyYWNlbGVmdHNtYWxsIiw2NTExNSwiYnJhY2VsZWZ0dHAiLDYzNzI5LCJicmFjZWxlZnR2ZXJ0aWNhbCIsNjUwNzksImJyYWNlcmlnaHQiLDEyNSwiYnJhY2VyaWdodGJ0Iiw2Mzc0MiwiYnJhY2VyaWdodG1pZCIsNjM3NDEsImJyYWNlcmlnaHRtb25vc3BhY2UiLDY1MzczLCJicmFjZXJpZ2h0c21hbGwiLDY1MTE2LCJicmFjZXJpZ2h0dHAiLDYzNzQwLCJicmFjZXJpZ2h0dmVydGljYWwiLDY1MDgwLCJicmFja2V0bGVmdCIsOTEsImJyYWNrZXRsZWZ0YnQiLDYzNzI4LCJicmFja2V0bGVmdGV4Iiw2MzcyNywiYnJhY2tldGxlZnRtb25vc3BhY2UiLDY1MzM5LCJicmFja2V0bGVmdHRwIiw2MzcyNiwiYnJhY2tldHJpZ2h0Iiw5MywiYnJhY2tldHJpZ2h0YnQiLDYzNzM5LCJicmFja2V0cmlnaHRleCIsNjM3MzgsImJyYWNrZXRyaWdodG1vbm9zcGFjZSIsNjUzNDEsImJyYWNrZXRyaWdodHRwIiw2MzczNywiYnJldmUiLDcyOCwiYnJldmViZWxvd2NtYiIsODE0LCJicmV2ZWNtYiIsNzc0LCJicmV2ZWludmVydGVkYmVsb3djbWIiLDgxNSwiYnJldmVpbnZlcnRlZGNtYiIsNzg1LCJicmV2ZWludmVydGVkZG91YmxlY21iIiw4NjUsImJyaWRnZWJlbG93Y21iIiw4MTAsImJyaWRnZWludmVydGVkYmVsb3djbWIiLDgyNiwiYnJva2VuYmFyIiwxNjYsImJzdHJva2UiLDM4NCwiYnN1cGVyaW9yIiw2MzIxMCwiYnRvcGJhciIsMzg3LCJidWhpcmFnYW5hIiwxMjQwNiwiYnVrYXRha2FuYSIsMTI1MDIsImJ1bGxldCIsODIyNiwiYnVsbGV0aW52ZXJzZSIsOTY4OCwiYnVsbGV0b3BlcmF0b3IiLDg3MjksImJ1bGxzZXllIiw5Njc4LCJjIiw5OSwiY2Fhcm1lbmlhbiIsMTM5MCwiY2FiZW5nYWxpIiwyNDU4LCJjYWN1dGUiLDI2MywiY2FkZXZhIiwyMzMwLCJjYWd1amFyYXRpIiwyNzE0LCJjYWd1cm11a2hpIiwyNTg2LCJjYWxzcXVhcmUiLDEzMTkyLCJjYW5kcmFiaW5kdWJlbmdhbGkiLDI0MzMsImNhbmRyYWJpbmR1Y21iIiw3ODQsImNhbmRyYWJpbmR1ZGV2YSIsMjMwNSwiY2FuZHJhYmluZHVndWphcmF0aSIsMjY4OSwiY2Fwc2xvY2siLDg2ODIsImNhcmVvZiIsODQ1MywiY2Fyb24iLDcxMSwiY2Fyb25iZWxvd2NtYiIsODEyLCJjYXJvbmNtYiIsNzgwLCJjYXJyaWFnZXJldHVybiIsODYyOSwiY2JvcG9tb2ZvIiwxMjU2OCwiY2Nhcm9uIiwyNjksImNjZWRpbGxhIiwyMzEsImNjZWRpbGxhYWN1dGUiLDc2ODksImNjaXJjbGUiLDk0MjYsImNjaXJjdW1mbGV4IiwyNjUsImNjdXJsIiw1OTcsImNkb3QiLDI2NywiY2RvdGFjY2VudCIsMjY3LCJjZHNxdWFyZSIsMTMyNTMsImNlZGlsbGEiLDE4NCwiY2VkaWxsYWNtYiIsODA3LCJjZW50IiwxNjIsImNlbnRpZ3JhZGUiLDg0NTEsImNlbnRpbmZlcmlvciIsNjMxOTksImNlbnRtb25vc3BhY2UiLDY1NTA0LCJjZW50b2xkc3R5bGUiLDYzMzk0LCJjZW50c3VwZXJpb3IiLDYzMjAwLCJjaGFhcm1lbmlhbiIsMTQwMSwiY2hhYmVuZ2FsaSIsMjQ1OSwiY2hhZGV2YSIsMjMzMSwiY2hhZ3VqYXJhdGkiLDI3MTUsImNoYWd1cm11a2hpIiwyNTg3LCJjaGJvcG9tb2ZvIiwxMjU2NCwiY2hlYWJraGFzaWFuY3lyaWxsaWMiLDEyMTMsImNoZWNrbWFyayIsMTAwMDMsImNoZWN5cmlsbGljIiwxMDk1LCJjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyIsMTIxNSwiY2hlZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDcsImNoZWRpZXJlc2lzY3lyaWxsaWMiLDEyNjksImNoZWhhcm1lbmlhbiIsMTM5NSwiY2hla2hha2Fzc2lhbmN5cmlsbGljIiwxMjI4LCJjaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljIiwxMjA5LCJjaGkiLDk2NywiY2hpZXVjaGFjaXJjbGVrb3JlYW4iLDEyOTE5LCJjaGlldWNoYXBhcmVua29yZWFuIiwxMjgyMywiY2hpZXVjaGNpcmNsZWtvcmVhbiIsMTI5MDUsImNoaWV1Y2hrb3JlYW4iLDEyNjE4LCJjaGlldWNocGFyZW5rb3JlYW4iLDEyODA5LCJjaG9jaGFuZ3RoYWkiLDM1OTQsImNob2NoYW50aGFpIiwzNTkyLCJjaG9jaGluZ3RoYWkiLDM1OTMsImNob2Nob2V0aGFpIiwzNTk2LCJjaG9vayIsMzkyLCJjaWV1Y2FjaXJjbGVrb3JlYW4iLDEyOTE4LCJjaWV1Y2FwYXJlbmtvcmVhbiIsMTI4MjIsImNpZXVjY2lyY2xla29yZWFuIiwxMjkwNCwiY2lldWNrb3JlYW4iLDEyNjE2LCJjaWV1Y3BhcmVua29yZWFuIiwxMjgwOCwiY2lldWN1cGFyZW5rb3JlYW4iLDEyODI4LCJjaXJjbGUiLDk2NzUsImNpcmNsZWNvcHlydCIsMTY5LCJjaXJjbGVtdWx0aXBseSIsODg1NSwiY2lyY2xlb3QiLDg4NTcsImNpcmNsZXBsdXMiLDg4NTMsImNpcmNsZXBvc3RhbG1hcmsiLDEyMzQyLCJjaXJjbGV3aXRobGVmdGhhbGZibGFjayIsOTY4MCwiY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrIiw5NjgxLCJjaXJjdW1mbGV4Iiw3MTAsImNpcmN1bWZsZXhiZWxvd2NtYiIsODEzLCJjaXJjdW1mbGV4Y21iIiw3NzAsImNsZWFyIiw4OTk5LCJjbGlja2FsdmVvbGFyIiw0NTAsImNsaWNrZGVudGFsIiw0NDgsImNsaWNrbGF0ZXJhbCIsNDQ5LCJjbGlja3JldHJvZmxleCIsNDUxLCJjbHViIiw5ODI3LCJjbHVic3VpdGJsYWNrIiw5ODI3LCJjbHVic3VpdHdoaXRlIiw5ODMxLCJjbWN1YmVkc3F1YXJlIiwxMzIyMCwiY21vbm9zcGFjZSIsNjUzNDcsImNtc3F1YXJlZHNxdWFyZSIsMTMyMTYsImNvYXJtZW5pYW4iLDE0MDksImNvbG9uIiw1OCwiY29sb25tb25ldGFyeSIsODM1MywiY29sb25tb25vc3BhY2UiLDY1MzA2LCJjb2xvbnNpZ24iLDgzNTMsImNvbG9uc21hbGwiLDY1MTA5LCJjb2xvbnRyaWFuZ3VsYXJoYWxmbW9kIiw3MjEsImNvbG9udHJpYW5ndWxhcm1vZCIsNzIwLCJjb21tYSIsNDQsImNvbW1hYWJvdmVjbWIiLDc4NywiY29tbWFhYm92ZXJpZ2h0Y21iIiw3ODksImNvbW1hYWNjZW50Iiw2MzE3MSwiY29tbWFhcmFiaWMiLDE1NDgsImNvbW1hYXJtZW5pYW4iLDEzNzMsImNvbW1haW5mZXJpb3IiLDYzMjAxLCJjb21tYW1vbm9zcGFjZSIsNjUyOTIsImNvbW1hcmV2ZXJzZWRhYm92ZWNtYiIsNzg4LCJjb21tYXJldmVyc2VkbW9kIiw3MDEsImNvbW1hc21hbGwiLDY1MTA0LCJjb21tYXN1cGVyaW9yIiw2MzIwMiwiY29tbWF0dXJuZWRhYm92ZWNtYiIsNzg2LCJjb21tYXR1cm5lZG1vZCIsNjk5LCJjb21wYXNzIiw5Nzg4LCJjb25ncnVlbnQiLDg3NzMsImNvbnRvdXJpbnRlZ3JhbCIsODc1MCwiY29udHJvbCIsODk2MywiY29udHJvbEFDSyIsNiwiY29udHJvbEJFTCIsNywiY29udHJvbEJTIiw4LCJjb250cm9sQ0FOIiwyNCwiY29udHJvbENSIiwxMywiY29udHJvbERDMSIsMTcsImNvbnRyb2xEQzIiLDE4LCJjb250cm9sREMzIiwxOSwiY29udHJvbERDNCIsMjAsImNvbnRyb2xERUwiLDEyNywiY29udHJvbERMRSIsMTYsImNvbnRyb2xFTSIsMjUsImNvbnRyb2xFTlEiLDUsImNvbnRyb2xFT1QiLDQsImNvbnRyb2xFU0MiLDI3LCJjb250cm9sRVRCIiwyMywiY29udHJvbEVUWCIsMywiY29udHJvbEZGIiwxMiwiY29udHJvbEZTIiwyOCwiY29udHJvbEdTIiwyOSwiY29udHJvbEhUIiw5LCJjb250cm9sTEYiLDEwLCJjb250cm9sTkFLIiwyMSwiY29udHJvbE5VTEwiLDAsImNvbnRyb2xSUyIsMzAsImNvbnRyb2xTSSIsMTUsImNvbnRyb2xTTyIsMTQsImNvbnRyb2xTT1QiLDIsImNvbnRyb2xTVFgiLDEsImNvbnRyb2xTVUIiLDI2LCJjb250cm9sU1lOIiwyMiwiY29udHJvbFVTIiwzMSwiY29udHJvbFZUIiwxMSwiY29weXJpZ2h0IiwxNjksImNvcHlyaWdodHNhbnMiLDYzNzIxLCJjb3B5cmlnaHRzZXJpZiIsNjMxOTMsImNvcm5lcmJyYWNrZXRsZWZ0IiwxMjMwMCwiY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGgiLDY1Mzc4LCJjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4OSwiY29ybmVyYnJhY2tldHJpZ2h0IiwxMjMwMSwiY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoIiw2NTM3OSwiY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkwLCJjb3Jwb3JhdGlvbnNxdWFyZSIsMTMxODMsImNvc3F1YXJlIiwxMzI1NSwiY292ZXJrZ3NxdWFyZSIsMTMyNTQsImNwYXJlbiIsOTM3NCwiY3J1emVpcm8iLDgzNTQsImNzdHJldGNoZWQiLDY2MywiY3VybHlhbmQiLDg5MTEsImN1cmx5b3IiLDg5MTAsImN1cnJlbmN5IiwxNjQsImN5ckJyZXZlIiw2MzE4NSwiY3lyRmxleCIsNjMxODYsImN5cmJyZXZlIiw2MzE4OCwiY3lyZmxleCIsNjMxODksImQiLDEwMCwiZGFhcm1lbmlhbiIsMTM4MCwiZGFiZW5nYWxpIiwyNDcwLCJkYWRhcmFiaWMiLDE1OTAsImRhZGV2YSIsMjM0MiwiZGFkZmluYWxhcmFiaWMiLDY1MjE0LCJkYWRpbml0aWFsYXJhYmljIiw2NTIxNSwiZGFkbWVkaWFsYXJhYmljIiw2NTIxNiwiZGFnZXNoIiwxNDY4LCJkYWdlc2hoZWJyZXciLDE0NjgsImRhZ2dlciIsODIyNCwiZGFnZ2VyZGJsIiw4MjI1LCJkYWd1amFyYXRpIiwyNzI2LCJkYWd1cm11a2hpIiwyNTk4LCJkYWhpcmFnYW5hIiwxMjM4NCwiZGFrYXRha2FuYSIsMTI0ODAsImRhbGFyYWJpYyIsMTU4MywiZGFsZXQiLDE0OTEsImRhbGV0ZGFnZXNoIiw2NDMwNywiZGFsZXRkYWdlc2hoZWJyZXciLDY0MzA3LCJkYWxldGhlYnJldyIsMTQ5MSwiZGFsZmluYWxhcmFiaWMiLDY1MTk0LCJkYW1tYWFyYWJpYyIsMTYxNSwiZGFtbWFsb3dhcmFiaWMiLDE2MTUsImRhbW1hdGFuYWx0b25lYXJhYmljIiwxNjEyLCJkYW1tYXRhbmFyYWJpYyIsMTYxMiwiZGFuZGEiLDI0MDQsImRhcmdhaGVicmV3IiwxNDQ3LCJkYXJnYWxlZnRoZWJyZXciLDE0NDcsImRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1NywiZGJsR3JhdmUiLDYzMTg3LCJkYmxhbmdsZWJyYWNrZXRsZWZ0IiwxMjI5OCwiZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsIiw2NTA4NSwiZGJsYW5nbGVicmFja2V0cmlnaHQiLDEyMjk5LCJkYmxhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4NiwiZGJsYXJjaGludmVydGVkYmVsb3djbWIiLDgxMSwiZGJsYXJyb3dsZWZ0Iiw4NjYwLCJkYmxhcnJvd3JpZ2h0Iiw4NjU4LCJkYmxkYW5kYSIsMjQwNSwiZGJsZ3JhdmUiLDYzMTkwLCJkYmxncmF2ZWNtYiIsNzgzLCJkYmxpbnRlZ3JhbCIsODc0OCwiZGJsbG93bGluZSIsODIxNSwiZGJsbG93bGluZWNtYiIsODE5LCJkYmxvdmVybGluZWNtYiIsODMxLCJkYmxwcmltZW1vZCIsNjk4LCJkYmx2ZXJ0aWNhbGJhciIsODIxNCwiZGJsdmVydGljYWxsaW5lYWJvdmVjbWIiLDc4MiwiZGJvcG9tb2ZvIiwxMjU1MywiZGJzcXVhcmUiLDEzMjU2LCJkY2Fyb24iLDI3MSwiZGNlZGlsbGEiLDc2OTcsImRjaXJjbGUiLDk0MjcsImRjaXJjdW1mbGV4YmVsb3ciLDc2OTksImRjcm9hdCIsMjczLCJkZGFiZW5nYWxpIiwyNDY1LCJkZGFkZXZhIiwyMzM3LCJkZGFndWphcmF0aSIsMjcyMSwiZGRhZ3VybXVraGkiLDI1OTMsImRkYWxhcmFiaWMiLDE2NzIsImRkYWxmaW5hbGFyYWJpYyIsNjQzOTMsImRkZGhhZGV2YSIsMjM5NiwiZGRoYWJlbmdhbGkiLDI0NjYsImRkaGFkZXZhIiwyMzM4LCJkZGhhZ3VqYXJhdGkiLDI3MjIsImRkaGFndXJtdWtoaSIsMjU5NCwiZGRvdGFjY2VudCIsNzY5MSwiZGRvdGJlbG93Iiw3NjkzLCJkZWNpbWFsc2VwYXJhdG9yYXJhYmljIiwxNjQzLCJkZWNpbWFsc2VwYXJhdG9ycGVyc2lhbiIsMTY0MywiZGVjeXJpbGxpYyIsMTA3NiwiZGVncmVlIiwxNzYsImRlaGloZWJyZXciLDE0NTMsImRlaGlyYWdhbmEiLDEyMzkxLCJkZWljb3B0aWMiLDEwMDcsImRla2F0YWthbmEiLDEyNDg3LCJkZWxldGVsZWZ0Iiw5MDAzLCJkZWxldGVyaWdodCIsODk5OCwiZGVsdGEiLDk0OCwiZGVsdGF0dXJuZWQiLDM5NywiZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGkiLDI1NTIsImRlemgiLDY3NiwiZGhhYmVuZ2FsaSIsMjQ3MSwiZGhhZGV2YSIsMjM0MywiZGhhZ3VqYXJhdGkiLDI3MjcsImRoYWd1cm11a2hpIiwyNTk5LCJkaG9vayIsNTk5LCJkaWFseXRpa2F0b25vcyIsOTAxLCJkaWFseXRpa2F0b25vc2NtYiIsODM2LCJkaWFtb25kIiw5ODMwLCJkaWFtb25kc3VpdHdoaXRlIiw5ODI2LCJkaWVyZXNpcyIsMTY4LCJkaWVyZXNpc2FjdXRlIiw2MzE5MSwiZGllcmVzaXNiZWxvd2NtYiIsODA0LCJkaWVyZXNpc2NtYiIsNzc2LCJkaWVyZXNpc2dyYXZlIiw2MzE5MiwiZGllcmVzaXN0b25vcyIsOTAxLCJkaWhpcmFnYW5hIiwxMjM4NiwiZGlrYXRha2FuYSIsMTI0ODIsImRpdHRvbWFyayIsMTIyOTEsImRpdmlkZSIsMjQ3LCJkaXZpZGVzIiw4NzM5LCJkaXZpc2lvbnNsYXNoIiw4NzI1LCJkamVjeXJpbGxpYyIsMTEwNiwiZGtzaGFkZSIsOTYxOSwiZGxpbmViZWxvdyIsNzY5NSwiZGxzcXVhcmUiLDEzMjA3LCJkbWFjcm9uIiwyNzMsImRtb25vc3BhY2UiLDY1MzQ4LCJkbmJsb2NrIiw5NjA0LCJkb2NoYWRhdGhhaSIsMzU5OCwiZG9kZWt0aGFpIiwzNjA0LCJkb2hpcmFnYW5hIiwxMjM5MywiZG9rYXRha2FuYSIsMTI0ODksImRvbGxhciIsMzYsImRvbGxhcmluZmVyaW9yIiw2MzIwMywiZG9sbGFybW9ub3NwYWNlIiw2NTI4NCwiZG9sbGFyb2xkc3R5bGUiLDYzMjY4LCJkb2xsYXJzbWFsbCIsNjUxMjksImRvbGxhcnN1cGVyaW9yIiw2MzIwNCwiZG9uZyIsODM2MywiZG9ydXNxdWFyZSIsMTMwOTQsImRvdGFjY2VudCIsNzI5LCJkb3RhY2NlbnRjbWIiLDc3NSwiZG90YmVsb3djbWIiLDgwMywiZG90YmVsb3djb21iIiw4MDMsImRvdGthdGFrYW5hIiwxMjUzOSwiZG90bGVzc2kiLDMwNSwiZG90bGVzc2oiLDYzMTY2LCJkb3RsZXNzanN0cm9rZWhvb2siLDY0NCwiZG90bWF0aCIsODkwMSwiZG90dGVkY2lyY2xlIiw5Njc2LCJkb3VibGV5b2RwYXRhaCIsNjQyODcsImRvdWJsZXlvZHBhdGFoaGVicmV3Iiw2NDI4NywiZG93bnRhY2tiZWxvd2NtYiIsNzk4LCJkb3dudGFja21vZCIsNzI1LCJkcGFyZW4iLDkzNzUsImRzdXBlcmlvciIsNjMyMTEsImR0YWlsIiw1OTgsImR0b3BiYXIiLDM5NiwiZHVoaXJhZ2FuYSIsMTIzODksImR1a2F0YWthbmEiLDEyNDg1LCJkeiIsNDk5LCJkemFsdG9uZSIsNjc1LCJkemNhcm9uIiw0NTQsImR6Y3VybCIsNjc3LCJkemVhYmtoYXNpYW5jeXJpbGxpYyIsMTI0OSwiZHplY3lyaWxsaWMiLDExMDksImR6aGVjeXJpbGxpYyIsMTExOSwiZSIsMTAxLCJlYWN1dGUiLDIzMywiZWFydGgiLDk3OTMsImViZW5nYWxpIiwyNDQ3LCJlYm9wb21vZm8iLDEyNTcyLCJlYnJldmUiLDI3NywiZWNhbmRyYWRldmEiLDIzMTcsImVjYW5kcmFndWphcmF0aSIsMjcwMSwiZWNhbmRyYXZvd2Vsc2lnbmRldmEiLDIzNzMsImVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aSIsMjc1NywiZWNhcm9uIiwyODMsImVjZWRpbGxhYnJldmUiLDc3MDksImVjaGFybWVuaWFuIiwxMzgxLCJlY2h5aXduYXJtZW5pYW4iLDE0MTUsImVjaXJjbGUiLDk0MjgsImVjaXJjdW1mbGV4IiwyMzQsImVjaXJjdW1mbGV4YWN1dGUiLDc4NzEsImVjaXJjdW1mbGV4YmVsb3ciLDc3MDUsImVjaXJjdW1mbGV4ZG90YmVsb3ciLDc4NzksImVjaXJjdW1mbGV4Z3JhdmUiLDc4NzMsImVjaXJjdW1mbGV4aG9va2Fib3ZlIiw3ODc1LCJlY2lyY3VtZmxleHRpbGRlIiw3ODc3LCJlY3lyaWxsaWMiLDExMDgsImVkYmxncmF2ZSIsNTE3LCJlZGV2YSIsMjMxOSwiZWRpZXJlc2lzIiwyMzUsImVkb3QiLDI3OSwiZWRvdGFjY2VudCIsMjc5LCJlZG90YmVsb3ciLDc4NjUsImVlZ3VybXVraGkiLDI1NzUsImVlbWF0cmFndXJtdWtoaSIsMjYzMSwiZWZjeXJpbGxpYyIsMTA5MiwiZWdyYXZlIiwyMzIsImVndWphcmF0aSIsMjcwMywiZWhhcm1lbmlhbiIsMTM4MywiZWhib3BvbW9mbyIsMTI1NzMsImVoaXJhZ2FuYSIsMTIzNjAsImVob29rYWJvdmUiLDc4NjcsImVpYm9wb21vZm8iLDEyNTc1LCJlaWdodCIsNTYsImVpZ2h0YXJhYmljIiwxNjQwLCJlaWdodGJlbmdhbGkiLDI1NDIsImVpZ2h0Y2lyY2xlIiw5MzE5LCJlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI5LCJlaWdodGRldmEiLDI0MTQsImVpZ2h0ZWVuY2lyY2xlIiw5MzI5LCJlaWdodGVlbnBhcmVuIiw5MzQ5LCJlaWdodGVlbnBlcmlvZCIsOTM2OSwiZWlnaHRndWphcmF0aSIsMjc5OCwiZWlnaHRndXJtdWtoaSIsMjY3MCwiZWlnaHRoYWNrYXJhYmljIiwxNjQwLCJlaWdodGhhbmd6aG91IiwxMjMyOCwiZWlnaHRobm90ZWJlYW1lZCIsOTgzNSwiZWlnaHRpZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOSwiZWlnaHRpbmZlcmlvciIsODMyOCwiZWlnaHRtb25vc3BhY2UiLDY1MzA0LCJlaWdodG9sZHN0eWxlIiw2MzI4OCwiZWlnaHRwYXJlbiIsOTMzOSwiZWlnaHRwZXJpb2QiLDkzNTksImVpZ2h0cGVyc2lhbiIsMTc4NCwiZWlnaHRyb21hbiIsODU2NywiZWlnaHRzdXBlcmlvciIsODMxMiwiZWlnaHR0aGFpIiwzNjcyLCJlaW52ZXJ0ZWRicmV2ZSIsNTE5LCJlaW90aWZpZWRjeXJpbGxpYyIsMTEyNSwiZWthdGFrYW5hIiwxMjQ1NiwiZWthdGFrYW5haGFsZndpZHRoIiw2NTM5NiwiZWtvbmthcmd1cm11a2hpIiwyNjc2LCJla29yZWFuIiwxMjYyOCwiZWxjeXJpbGxpYyIsMTA4MywiZWxlbWVudCIsODcxMiwiZWxldmVuY2lyY2xlIiw5MzIyLCJlbGV2ZW5wYXJlbiIsOTM0MiwiZWxldmVucGVyaW9kIiw5MzYyLCJlbGV2ZW5yb21hbiIsODU3MCwiZWxsaXBzaXMiLDgyMzAsImVsbGlwc2lzdmVydGljYWwiLDg5NDIsImVtYWNyb24iLDI3NSwiZW1hY3JvbmFjdXRlIiw3NzAzLCJlbWFjcm9uZ3JhdmUiLDc3MDEsImVtY3lyaWxsaWMiLDEwODQsImVtZGFzaCIsODIxMiwiZW1kYXNodmVydGljYWwiLDY1MDczLCJlbW9ub3NwYWNlIiw2NTM0OSwiZW1waGFzaXNtYXJrYXJtZW5pYW4iLDEzNzEsImVtcHR5c2V0Iiw4NzA5LCJlbmJvcG9tb2ZvIiwxMjU3OSwiZW5jeXJpbGxpYyIsMTA4NSwiZW5kYXNoIiw4MjExLCJlbmRhc2h2ZXJ0aWNhbCIsNjUwNzQsImVuZGVzY2VuZGVyY3lyaWxsaWMiLDExODcsImVuZyIsMzMxLCJlbmdib3BvbW9mbyIsMTI1ODEsImVuZ2hlY3lyaWxsaWMiLDExODksImVuaG9va2N5cmlsbGljIiwxMjI0LCJlbnNwYWNlIiw4MTk0LCJlb2dvbmVrIiwyODEsImVva29yZWFuIiwxMjYyNywiZW9wZW4iLDYwMywiZW9wZW5jbG9zZWQiLDY2NiwiZW9wZW5yZXZlcnNlZCIsNjA0LCJlb3BlbnJldmVyc2VkY2xvc2VkIiw2MDYsImVvcGVucmV2ZXJzZWRob29rIiw2MDUsImVwYXJlbiIsOTM3NiwiZXBzaWxvbiIsOTQ5LCJlcHNpbG9udG9ub3MiLDk0MSwiZXF1YWwiLDYxLCJlcXVhbG1vbm9zcGFjZSIsNjUzMDksImVxdWFsc21hbGwiLDY1MTI2LCJlcXVhbHN1cGVyaW9yIiw4MzE2LCJlcXVpdmFsZW5jZSIsODgwMSwiZXJib3BvbW9mbyIsMTI1ODIsImVyY3lyaWxsaWMiLDEwODgsImVyZXZlcnNlZCIsNjAwLCJlcmV2ZXJzZWRjeXJpbGxpYyIsMTEwMSwiZXNjeXJpbGxpYyIsMTA4OSwiZXNkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NSwiZXNoIiw2NDMsImVzaGN1cmwiLDY0NiwiZXNob3J0ZGV2YSIsMjMxOCwiZXNob3J0dm93ZWxzaWduZGV2YSIsMjM3NCwiZXNocmV2ZXJzZWRsb29wIiw0MjYsImVzaHNxdWF0cmV2ZXJzZWQiLDY0NSwiZXNtYWxsaGlyYWdhbmEiLDEyMzU5LCJlc21hbGxrYXRha2FuYSIsMTI0NTUsImVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NiwiZXN0aW1hdGVkIiw4NDk0LCJlc3VwZXJpb3IiLDYzMjEyLCJldGEiLDk1MSwiZXRhcm1lbmlhbiIsMTM4NCwiZXRhdG9ub3MiLDk0MiwiZXRoIiwyNDAsImV0aWxkZSIsNzg2OSwiZXRpbGRlYmVsb3ciLDc3MDcsImV0bmFodGFmb3VraGhlYnJldyIsMTQyNSwiZXRuYWh0YWZvdWtobGVmdGhlYnJldyIsMTQyNSwiZXRuYWh0YWhlYnJldyIsMTQyNSwiZXRuYWh0YWxlZnRoZWJyZXciLDE0MjUsImV0dXJuZWQiLDQ3NywiZXVrb3JlYW4iLDEyNjQxLCJldXJvIiw4MzY0LCJldm93ZWxzaWduYmVuZ2FsaSIsMjUwMywiZXZvd2Vsc2lnbmRldmEiLDIzNzUsImV2b3dlbHNpZ25ndWphcmF0aSIsMjc1OSwiZXhjbGFtIiwzMywiZXhjbGFtYXJtZW5pYW4iLDEzNzIsImV4Y2xhbWRibCIsODI1MiwiZXhjbGFtZG93biIsMTYxLCJleGNsYW1kb3duc21hbGwiLDYzMzkzLCJleGNsYW1tb25vc3BhY2UiLDY1MjgxLCJleGNsYW1zbWFsbCIsNjMyNjUsImV4aXN0ZW50aWFsIiw4NzA3LCJlemgiLDY1OCwiZXpoY2Fyb24iLDQ5NSwiZXpoY3VybCIsNjU5LCJlemhyZXZlcnNlZCIsNDQxLCJlemh0YWlsIiw0NDIsImYiLDEwMiwiZmFkZXZhIiwyMzk4LCJmYWd1cm11a2hpIiwyNjU0LCJmYWhyZW5oZWl0Iiw4NDU3LCJmYXRoYWFyYWJpYyIsMTYxNCwiZmF0aGFsb3dhcmFiaWMiLDE2MTQsImZhdGhhdGFuYXJhYmljIiwxNjExLCJmYm9wb21vZm8iLDEyNTUyLCJmY2lyY2xlIiw5NDI5LCJmZG90YWNjZW50Iiw3NzExLCJmZWhhcmFiaWMiLDE2MDEsImZlaGFybWVuaWFuIiwxNDE0LCJmZWhmaW5hbGFyYWJpYyIsNjUyMzQsImZlaGluaXRpYWxhcmFiaWMiLDY1MjM1LCJmZWhtZWRpYWxhcmFiaWMiLDY1MjM2LCJmZWljb3B0aWMiLDk5NywiZmVtYWxlIiw5NzkyLCJmZiIsNjQyNTYsImZfZiIsNjQyNTYsImZmaSIsNjQyNTksImZfZl9pIiw2NDI1OSwiZmZsIiw2NDI2MCwiZl9mX2wiLDY0MjYwLCJmaSIsNjQyNTcsImZfaSIsNjQyNTcsImZpZnRlZW5jaXJjbGUiLDkzMjYsImZpZnRlZW5wYXJlbiIsOTM0NiwiZmlmdGVlbnBlcmlvZCIsOTM2NiwiZmlndXJlZGFzaCIsODIxMCwiZmlsbGVkYm94Iiw5NjMyLCJmaWxsZWRyZWN0Iiw5NjQ0LCJmaW5hbGthZiIsMTQ5OCwiZmluYWxrYWZkYWdlc2giLDY0MzE0LCJmaW5hbGthZmRhZ2VzaGhlYnJldyIsNjQzMTQsImZpbmFsa2FmaGVicmV3IiwxNDk4LCJmaW5hbG1lbSIsMTUwMSwiZmluYWxtZW1oZWJyZXciLDE1MDEsImZpbmFsbnVuIiwxNTAzLCJmaW5hbG51bmhlYnJldyIsMTUwMywiZmluYWxwZSIsMTUwNywiZmluYWxwZWhlYnJldyIsMTUwNywiZmluYWx0c2FkaSIsMTUwOSwiZmluYWx0c2FkaWhlYnJldyIsMTUwOSwiZmlyc3R0b25lY2hpbmVzZSIsNzEzLCJmaXNoZXllIiw5NjczLCJmaXRhY3lyaWxsaWMiLDExMzksImZpdmUiLDUzLCJmaXZlYXJhYmljIiwxNjM3LCJmaXZlYmVuZ2FsaSIsMjUzOSwiZml2ZWNpcmNsZSIsOTMxNiwiZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI2LCJmaXZlZGV2YSIsMjQxMSwiZml2ZWVpZ2h0aHMiLDg1NDEsImZpdmVndWphcmF0aSIsMjc5NSwiZml2ZWd1cm11a2hpIiwyNjY3LCJmaXZlaGFja2FyYWJpYyIsMTYzNywiZml2ZWhhbmd6aG91IiwxMjMyNSwiZml2ZWlkZW9ncmFwaGljcGFyZW4iLDEyODM2LCJmaXZlaW5mZXJpb3IiLDgzMjUsImZpdmVtb25vc3BhY2UiLDY1MzAxLCJmaXZlb2xkc3R5bGUiLDYzMjg1LCJmaXZlcGFyZW4iLDkzMzYsImZpdmVwZXJpb2QiLDkzNTYsImZpdmVwZXJzaWFuIiwxNzgxLCJmaXZlcm9tYW4iLDg1NjQsImZpdmVzdXBlcmlvciIsODMwOSwiZml2ZXRoYWkiLDM2NjksImZsIiw2NDI1OCwiZl9sIiw2NDI1OCwiZmxvcmluIiw0MDIsImZtb25vc3BhY2UiLDY1MzUwLCJmbXNxdWFyZSIsMTMyMDksImZvZmFudGhhaSIsMzYxNSwiZm9mYXRoYWkiLDM2MTMsImZvbmdtYW50aGFpIiwzNjYzLCJmb3JhbGwiLDg3MDQsImZvdXIiLDUyLCJmb3VyYXJhYmljIiwxNjM2LCJmb3VyYmVuZ2FsaSIsMjUzOCwiZm91cmNpcmNsZSIsOTMxNSwiZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI1LCJmb3VyZGV2YSIsMjQxMCwiZm91cmd1amFyYXRpIiwyNzk0LCJmb3VyZ3VybXVraGkiLDI2NjYsImZvdXJoYWNrYXJhYmljIiwxNjM2LCJmb3VyaGFuZ3pob3UiLDEyMzI0LCJmb3VyaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzUsImZvdXJpbmZlcmlvciIsODMyNCwiZm91cm1vbm9zcGFjZSIsNjUzMDAsImZvdXJudW1lcmF0b3JiZW5nYWxpIiwyNTUxLCJmb3Vyb2xkc3R5bGUiLDYzMjg0LCJmb3VycGFyZW4iLDkzMzUsImZvdXJwZXJpb2QiLDkzNTUsImZvdXJwZXJzaWFuIiwxNzgwLCJmb3Vycm9tYW4iLDg1NjMsImZvdXJzdXBlcmlvciIsODMwOCwiZm91cnRlZW5jaXJjbGUiLDkzMjUsImZvdXJ0ZWVucGFyZW4iLDkzNDUsImZvdXJ0ZWVucGVyaW9kIiw5MzY1LCJmb3VydGhhaSIsMzY2OCwiZm91cnRodG9uZWNoaW5lc2UiLDcxNSwiZnBhcmVuIiw5Mzc3LCJmcmFjdGlvbiIsODI2MCwiZnJhbmMiLDgzNTUsImciLDEwMywiZ2FiZW5nYWxpIiwyNDU1LCJnYWN1dGUiLDUwMSwiZ2FkZXZhIiwyMzI3LCJnYWZhcmFiaWMiLDE3MTEsImdhZmZpbmFsYXJhYmljIiw2NDQwMywiZ2FmaW5pdGlhbGFyYWJpYyIsNjQ0MDQsImdhZm1lZGlhbGFyYWJpYyIsNjQ0MDUsImdhZ3VqYXJhdGkiLDI3MTEsImdhZ3VybXVraGkiLDI1ODMsImdhaGlyYWdhbmEiLDEyMzY0LCJnYWthdGFrYW5hIiwxMjQ2MCwiZ2FtbWEiLDk0NywiZ2FtbWFsYXRpbnNtYWxsIiw2MTEsImdhbW1hc3VwZXJpb3IiLDczNiwiZ2FuZ2lhY29wdGljIiwxMDAzLCJnYm9wb21vZm8iLDEyNTU3LCJnYnJldmUiLDI4NywiZ2Nhcm9uIiw0ODcsImdjZWRpbGxhIiwyOTEsImdjaXJjbGUiLDk0MzAsImdjaXJjdW1mbGV4IiwyODUsImdjb21tYWFjY2VudCIsMjkxLCJnZG90IiwyODksImdkb3RhY2NlbnQiLDI4OSwiZ2VjeXJpbGxpYyIsMTA3NSwiZ2VoaXJhZ2FuYSIsMTIzNzAsImdla2F0YWthbmEiLDEyNDY2LCJnZW9tZXRyaWNhbGx5ZXF1YWwiLDg3ODUsImdlcmVzaGFjY2VudGhlYnJldyIsMTQzNiwiZ2VyZXNoaGVicmV3IiwxNTIzLCJnZXJlc2htdXFkYW1oZWJyZXciLDE0MzcsImdlcm1hbmRibHMiLDIyMywiZ2Vyc2hheWltYWNjZW50aGVicmV3IiwxNDM4LCJnZXJzaGF5aW1oZWJyZXciLDE1MjQsImdldGFtYXJrIiwxMjMwNywiZ2hhYmVuZ2FsaSIsMjQ1NiwiZ2hhZGFybWVuaWFuIiwxMzk0LCJnaGFkZXZhIiwyMzI4LCJnaGFndWphcmF0aSIsMjcxMiwiZ2hhZ3VybXVraGkiLDI1ODQsImdoYWluYXJhYmljIiwxNTk0LCJnaGFpbmZpbmFsYXJhYmljIiw2NTIzMCwiZ2hhaW5pbml0aWFsYXJhYmljIiw2NTIzMSwiZ2hhaW5tZWRpYWxhcmFiaWMiLDY1MjMyLCJnaGVtaWRkbGVob29rY3lyaWxsaWMiLDExNzMsImdoZXN0cm9rZWN5cmlsbGljIiwxMTcxLCJnaGV1cHR1cm5jeXJpbGxpYyIsMTE2OSwiZ2hoYWRldmEiLDIzOTQsImdoaGFndXJtdWtoaSIsMjY1MCwiZ2hvb2siLDYwOCwiZ2h6c3F1YXJlIiwxMzIwMywiZ2loaXJhZ2FuYSIsMTIzNjYsImdpa2F0YWthbmEiLDEyNDYyLCJnaW1hcm1lbmlhbiIsMTM3OSwiZ2ltZWwiLDE0OTAsImdpbWVsZGFnZXNoIiw2NDMwNiwiZ2ltZWxkYWdlc2hoZWJyZXciLDY0MzA2LCJnaW1lbGhlYnJldyIsMTQ5MCwiZ2plY3lyaWxsaWMiLDExMDcsImdsb3R0YWxpbnZlcnRlZHN0cm9rZSIsNDQ2LCJnbG90dGFsc3RvcCIsNjYwLCJnbG90dGFsc3RvcGludmVydGVkIiw2NjIsImdsb3R0YWxzdG9wbW9kIiw3MDQsImdsb3R0YWxzdG9wcmV2ZXJzZWQiLDY2MSwiZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZCIsNzA1LCJnbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3IiLDc0MCwiZ2xvdHRhbHN0b3BzdHJva2UiLDY3MywiZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZCIsNjc0LCJnbWFjcm9uIiw3NzEzLCJnbW9ub3NwYWNlIiw2NTM1MSwiZ29oaXJhZ2FuYSIsMTIzNzIsImdva2F0YWthbmEiLDEyNDY4LCJncGFyZW4iLDkzNzgsImdwYXNxdWFyZSIsMTMyMjgsImdyYWRpZW50Iiw4NzExLCJncmF2ZSIsOTYsImdyYXZlYmVsb3djbWIiLDc5MCwiZ3JhdmVjbWIiLDc2OCwiZ3JhdmVjb21iIiw3NjgsImdyYXZlZGV2YSIsMjM4NywiZ3JhdmVsb3dtb2QiLDcxOCwiZ3JhdmVtb25vc3BhY2UiLDY1MzQ0LCJncmF2ZXRvbmVjbWIiLDgzMiwiZ3JlYXRlciIsNjIsImdyZWF0ZXJlcXVhbCIsODgwNSwiZ3JlYXRlcmVxdWFsb3JsZXNzIiw4OTIzLCJncmVhdGVybW9ub3NwYWNlIiw2NTMxMCwiZ3JlYXRlcm9yZXF1aXZhbGVudCIsODgxOSwiZ3JlYXRlcm9ybGVzcyIsODgyMywiZ3JlYXRlcm92ZXJlcXVhbCIsODgwNywiZ3JlYXRlcnNtYWxsIiw2NTEyNSwiZ3NjcmlwdCIsNjA5LCJnc3Ryb2tlIiw0ODUsImd1aGlyYWdhbmEiLDEyMzY4LCJndWlsbGVtb3RsZWZ0IiwxNzEsImd1aWxsZW1vdHJpZ2h0IiwxODcsImd1aWxzaW5nbGxlZnQiLDgyNDksImd1aWxzaW5nbHJpZ2h0Iiw4MjUwLCJndWthdGFrYW5hIiwxMjQ2NCwiZ3VyYW11c3F1YXJlIiwxMzA4MCwiZ3lzcXVhcmUiLDEzMjU3LCJoIiwxMDQsImhhYWJraGFzaWFuY3lyaWxsaWMiLDExOTMsImhhYWx0b25lYXJhYmljIiwxNzI5LCJoYWJlbmdhbGkiLDI0ODksImhhZGVzY2VuZGVyY3lyaWxsaWMiLDEyMDMsImhhZGV2YSIsMjM2MSwiaGFndWphcmF0aSIsMjc0NSwiaGFndXJtdWtoaSIsMjYxNywiaGFoYXJhYmljIiwxNTgxLCJoYWhmaW5hbGFyYWJpYyIsNjUxODYsImhhaGluaXRpYWxhcmFiaWMiLDY1MTg3LCJoYWhpcmFnYW5hIiwxMjM5OSwiaGFobWVkaWFsYXJhYmljIiw2NTE4OCwiaGFpdHVzcXVhcmUiLDEzMDk4LCJoYWthdGFrYW5hIiwxMjQ5NSwiaGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTgsImhhbGFudGd1cm11a2hpIiwyNjM3LCJoYW16YWFyYWJpYyIsMTU2OSwiaGFtemFsb3dhcmFiaWMiLDE1NjksImhhbmd1bGZpbGxlciIsMTI2NDQsImhhcmRzaWduY3lyaWxsaWMiLDEwOTgsImhhcnBvb25sZWZ0YmFyYnVwIiw4NjM2LCJoYXJwb29ucmlnaHRiYXJidXAiLDg2NDAsImhhc3F1YXJlIiwxMzI1OCwiaGF0YWZwYXRhaCIsMTQ1OCwiaGF0YWZwYXRhaDE2IiwxNDU4LCJoYXRhZnBhdGFoMjMiLDE0NTgsImhhdGFmcGF0YWgyZiIsMTQ1OCwiaGF0YWZwYXRhaGhlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaG5hcnJvd2hlYnJldyIsMTQ1OCwiaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NTgsImhhdGFmcGF0YWh3aWRlaGVicmV3IiwxNDU4LCJoYXRhZnFhbWF0cyIsMTQ1OSwiaGF0YWZxYW1hdHMxYiIsMTQ1OSwiaGF0YWZxYW1hdHMyOCIsMTQ1OSwiaGF0YWZxYW1hdHMzNCIsMTQ1OSwiaGF0YWZxYW1hdHNoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzbmFycm93aGVicmV3IiwxNDU5LCJoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NTksImhhdGFmcWFtYXRzd2lkZWhlYnJldyIsMTQ1OSwiaGF0YWZzZWdvbCIsMTQ1NywiaGF0YWZzZWdvbDE3IiwxNDU3LCJoYXRhZnNlZ29sMjQiLDE0NTcsImhhdGFmc2Vnb2wzMCIsMTQ1NywiaGF0YWZzZWdvbGhlYnJldyIsMTQ1NywiaGF0YWZzZWdvbG5hcnJvd2hlYnJldyIsMTQ1NywiaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXciLDE0NTcsImhhdGFmc2Vnb2x3aWRlaGVicmV3IiwxNDU3LCJoYmFyIiwyOTUsImhib3BvbW9mbyIsMTI1NTksImhicmV2ZWJlbG93Iiw3NzIzLCJoY2VkaWxsYSIsNzcyMSwiaGNpcmNsZSIsOTQzMSwiaGNpcmN1bWZsZXgiLDI5MywiaGRpZXJlc2lzIiw3NzE5LCJoZG90YWNjZW50Iiw3NzE1LCJoZG90YmVsb3ciLDc3MTcsImhlIiwxNDkyLCJoZWFydCIsOTgyOSwiaGVhcnRzdWl0YmxhY2siLDk4MjksImhlYXJ0c3VpdHdoaXRlIiw5ODI1LCJoZWRhZ2VzaCIsNjQzMDgsImhlZGFnZXNoaGVicmV3Iiw2NDMwOCwiaGVoYWx0b25lYXJhYmljIiwxNzI5LCJoZWhhcmFiaWMiLDE2MDcsImhlaGVicmV3IiwxNDkyLCJoZWhmaW5hbGFsdG9uZWFyYWJpYyIsNjQ0MjMsImhlaGZpbmFsYWx0dHdvYXJhYmljIiw2NTI1OCwiaGVoZmluYWxhcmFiaWMiLDY1MjU4LCJoZWhoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY0NDIxLCJoZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWMiLDY0NDIwLCJoZWhpbml0aWFsYWx0b25lYXJhYmljIiw2NDQyNCwiaGVoaW5pdGlhbGFyYWJpYyIsNjUyNTksImhlaGlyYWdhbmEiLDEyNDA4LCJoZWhtZWRpYWxhbHRvbmVhcmFiaWMiLDY0NDI1LCJoZWhtZWRpYWxhcmFiaWMiLDY1MjYwLCJoZWlzZWllcmFzcXVhcmUiLDEzMTc5LCJoZWthdGFrYW5hIiwxMjUwNCwiaGVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjEsImhla3V0YWFydXNxdWFyZSIsMTMxMTAsImhlbmdob29rIiw2MTUsImhlcnV0dXNxdWFyZSIsMTMxMTMsImhldCIsMTQ5NSwiaGV0aGVicmV3IiwxNDk1LCJoaG9vayIsNjE0LCJoaG9va3N1cGVyaW9yIiw2ODksImhpZXVoYWNpcmNsZWtvcmVhbiIsMTI5MjMsImhpZXVoYXBhcmVua29yZWFuIiwxMjgyNywiaGlldWhjaXJjbGVrb3JlYW4iLDEyOTA5LCJoaWV1aGtvcmVhbiIsMTI2MjIsImhpZXVocGFyZW5rb3JlYW4iLDEyODEzLCJoaWhpcmFnYW5hIiwxMjQwMiwiaGlrYXRha2FuYSIsMTI0OTgsImhpa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE5LCJoaXJpcSIsMTQ2MCwiaGlyaXExNCIsMTQ2MCwiaGlyaXEyMSIsMTQ2MCwiaGlyaXEyZCIsMTQ2MCwiaGlyaXFoZWJyZXciLDE0NjAsImhpcmlxbmFycm93aGVicmV3IiwxNDYwLCJoaXJpcXF1YXJ0ZXJoZWJyZXciLDE0NjAsImhpcmlxd2lkZWhlYnJldyIsMTQ2MCwiaGxpbmViZWxvdyIsNzgzMCwiaG1vbm9zcGFjZSIsNjUzNTIsImhvYXJtZW5pYW4iLDEzOTIsImhvaGlwdGhhaSIsMzYyNywiaG9oaXJhZ2FuYSIsMTI0MTEsImhva2F0YWthbmEiLDEyNTA3LCJob2thdGFrYW5haGFsZndpZHRoIiw2NTQyMiwiaG9sYW0iLDE0NjUsImhvbGFtMTkiLDE0NjUsImhvbGFtMjYiLDE0NjUsImhvbGFtMzIiLDE0NjUsImhvbGFtaGVicmV3IiwxNDY1LCJob2xhbW5hcnJvd2hlYnJldyIsMTQ2NSwiaG9sYW1xdWFydGVyaGVicmV3IiwxNDY1LCJob2xhbXdpZGVoZWJyZXciLDE0NjUsImhvbm9raHVrdGhhaSIsMzYzMCwiaG9va2Fib3ZlY29tYiIsNzc3LCJob29rY21iIiw3NzcsImhvb2twYWxhdGFsaXplZGJlbG93Y21iIiw4MDEsImhvb2tyZXRyb2ZsZXhiZWxvd2NtYiIsODAyLCJob29uc3F1YXJlIiwxMzEyMiwiaG9yaWNvcHRpYyIsMTAwMSwiaG9yaXpvbnRhbGJhciIsODIxMywiaG9ybmNtYiIsNzk1LCJob3RzcHJpbmdzIiw5ODMyLCJob3VzZSIsODk2MiwiaHBhcmVuIiw5Mzc5LCJoc3VwZXJpb3IiLDY4OCwiaHR1cm5lZCIsNjEzLCJodWhpcmFnYW5hIiwxMjQwNSwiaHVpaXRvc3F1YXJlIiwxMzEwNywiaHVrYXRha2FuYSIsMTI1MDEsImh1a2F0YWthbmFoYWxmd2lkdGgiLDY1NDIwLCJodW5nYXJ1bWxhdXQiLDczMywiaHVuZ2FydW1sYXV0Y21iIiw3NzksImh2Iiw0MDUsImh5cGhlbiIsNDUsImh5cGhlbmluZmVyaW9yIiw2MzIwNSwiaHlwaGVubW9ub3NwYWNlIiw2NTI5MywiaHlwaGVuc21hbGwiLDY1MTIzLCJoeXBoZW5zdXBlcmlvciIsNjMyMDYsImh5cGhlbnR3byIsODIwOCwiaSIsMTA1LCJpYWN1dGUiLDIzNywiaWFjeXJpbGxpYyIsMTEwMywiaWJlbmdhbGkiLDI0MzksImlib3BvbW9mbyIsMTI1ODMsImlicmV2ZSIsMzAxLCJpY2Fyb24iLDQ2NCwiaWNpcmNsZSIsOTQzMiwiaWNpcmN1bWZsZXgiLDIzOCwiaWN5cmlsbGljIiwxMTEwLCJpZGJsZ3JhdmUiLDUyMSwiaWRlb2dyYXBoZWFydGhjaXJjbGUiLDEyOTQzLCJpZGVvZ3JhcGhmaXJlY2lyY2xlIiwxMjkzOSwiaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuIiwxMjg2MywiaWRlb2dyYXBoaWNjYWxscGFyZW4iLDEyODU4LCJpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZSIsMTI5NjUsImlkZW9ncmFwaGljY2xvc2UiLDEyMjk0LCJpZGVvZ3JhcGhpY2NvbW1hIiwxMjI4OSwiaWRlb2dyYXBoaWNjb21tYWxlZnQiLDY1MzgwLCJpZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4iLDEyODU1LCJpZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGUiLDEyOTYzLCJpZGVvZ3JhcGhpY2VhcnRocGFyZW4iLDEyODQ3LCJpZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiIsMTI4NjEsImlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlIiwxMjk1NywiaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuIiwxMjg2NCwiaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUiLDEyOTUwLCJpZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuIiwxMjg1NCwiaWRlb2dyYXBoaWNmaXJlcGFyZW4iLDEyODQzLCJpZGVvZ3JhcGhpY2hhdmVwYXJlbiIsMTI4NTAsImlkZW9ncmFwaGljaGlnaGNpcmNsZSIsMTI5NjQsImlkZW9ncmFwaGljaXRlcmF0aW9ubWFyayIsMTIyOTMsImlkZW9ncmFwaGljbGFib3JjaXJjbGUiLDEyOTUyLCJpZGVvZ3JhcGhpY2xhYm9ycGFyZW4iLDEyODU2LCJpZGVvZ3JhcGhpY2xlZnRjaXJjbGUiLDEyOTY3LCJpZGVvZ3JhcGhpY2xvd2NpcmNsZSIsMTI5NjYsImlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGUiLDEyOTY5LCJpZGVvZ3JhcGhpY21ldGFscGFyZW4iLDEyODQ2LCJpZGVvZ3JhcGhpY21vb25wYXJlbiIsMTI4NDIsImlkZW9ncmFwaGljbmFtZXBhcmVuIiwxMjg1MiwiaWRlb2dyYXBoaWNwZXJpb2QiLDEyMjkwLCJpZGVvZ3JhcGhpY3ByaW50Y2lyY2xlIiwxMjk1OCwiaWRlb2dyYXBoaWNyZWFjaHBhcmVuIiwxMjg2NywiaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbiIsMTI4NTcsImlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiIsMTI4NjIsImlkZW9ncmFwaGljcmlnaHRjaXJjbGUiLDEyOTY4LCJpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZSIsMTI5NTMsImlkZW9ncmFwaGljc2VsZnBhcmVuIiwxMjg2NiwiaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW4iLDEyODUxLCJpZGVvZ3JhcGhpY3NwYWNlIiwxMjI4OCwiaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4iLDEyODUzLCJpZGVvZ3JhcGhpY3N0b2NrcGFyZW4iLDEyODQ5LCJpZGVvZ3JhcGhpY3N0dWR5cGFyZW4iLDEyODU5LCJpZGVvZ3JhcGhpY3N1bnBhcmVuIiwxMjg0OCwiaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbiIsMTI4NjAsImlkZW9ncmFwaGljd2F0ZXJwYXJlbiIsMTI4NDQsImlkZW9ncmFwaGljd29vZHBhcmVuIiwxMjg0NSwiaWRlb2dyYXBoaWN6ZXJvIiwxMjI5NSwiaWRlb2dyYXBobWV0YWxjaXJjbGUiLDEyOTQyLCJpZGVvZ3JhcGhtb29uY2lyY2xlIiwxMjkzOCwiaWRlb2dyYXBobmFtZWNpcmNsZSIsMTI5NDgsImlkZW9ncmFwaHN1bmNpcmNsZSIsMTI5NDQsImlkZW9ncmFwaHdhdGVyY2lyY2xlIiwxMjk0MCwiaWRlb2dyYXBod29vZGNpcmNsZSIsMTI5NDEsImlkZXZhIiwyMzExLCJpZGllcmVzaXMiLDIzOSwiaWRpZXJlc2lzYWN1dGUiLDc3MjcsImlkaWVyZXNpc2N5cmlsbGljIiwxMjUzLCJpZG90YmVsb3ciLDc4ODMsImllYnJldmVjeXJpbGxpYyIsMTIzOSwiaWVjeXJpbGxpYyIsMTA3NywiaWV1bmdhY2lyY2xla29yZWFuIiwxMjkxNywiaWV1bmdhcGFyZW5rb3JlYW4iLDEyODIxLCJpZXVuZ2NpcmNsZWtvcmVhbiIsMTI5MDMsImlldW5na29yZWFuIiwxMjYxNSwiaWV1bmdwYXJlbmtvcmVhbiIsMTI4MDcsImlncmF2ZSIsMjM2LCJpZ3VqYXJhdGkiLDI2OTUsImlndXJtdWtoaSIsMjU2NywiaWhpcmFnYW5hIiwxMjM1NiwiaWhvb2thYm92ZSIsNzg4MSwiaWliZW5nYWxpIiwyNDQwLCJpaWN5cmlsbGljIiwxMDgwLCJpaWRldmEiLDIzMTIsImlpZ3VqYXJhdGkiLDI2OTYsImlpZ3VybXVraGkiLDI1NjgsImlpbWF0cmFndXJtdWtoaSIsMjYyNCwiaWludmVydGVkYnJldmUiLDUyMywiaWlzaG9ydGN5cmlsbGljIiwxMDgxLCJpaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTYsImlpdm93ZWxzaWduZGV2YSIsMjM2OCwiaWl2b3dlbHNpZ25ndWphcmF0aSIsMjc1MiwiaWoiLDMwNywiaWthdGFrYW5hIiwxMjQ1MiwiaWthdGFrYW5haGFsZndpZHRoIiw2NTM5NCwiaWtvcmVhbiIsMTI2NDMsImlsZGUiLDczMiwiaWx1eWhlYnJldyIsMTQ1MiwiaW1hY3JvbiIsMjk5LCJpbWFjcm9uY3lyaWxsaWMiLDEyNTEsImltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWwiLDg3ODcsImltYXRyYWd1cm11a2hpIiwyNjIzLCJpbW9ub3NwYWNlIiw2NTM1MywiaW5jcmVtZW50Iiw4NzEwLCJpbmZpbml0eSIsODczNCwiaW5pYXJtZW5pYW4iLDEzODcsImludGVncmFsIiw4NzQ3LCJpbnRlZ3JhbGJvdHRvbSIsODk5MywiaW50ZWdyYWxidCIsODk5MywiaW50ZWdyYWxleCIsNjM3MzMsImludGVncmFsdG9wIiw4OTkyLCJpbnRlZ3JhbHRwIiw4OTkyLCJpbnRlcnNlY3Rpb24iLDg3NDUsImludGlzcXVhcmUiLDEzMDYxLCJpbnZidWxsZXQiLDk2ODgsImludmNpcmNsZSIsOTY4OSwiaW52c21pbGVmYWNlIiw5Nzg3LCJpb2N5cmlsbGljIiwxMTA1LCJpb2dvbmVrIiwzMDMsImlvdGEiLDk1MywiaW90YWRpZXJlc2lzIiw5NzAsImlvdGFkaWVyZXNpc3Rvbm9zIiw5MTIsImlvdGFsYXRpbiIsNjE3LCJpb3RhdG9ub3MiLDk0MywiaXBhcmVuIiw5MzgwLCJpcmlndXJtdWtoaSIsMjY3NCwiaXNtYWxsaGlyYWdhbmEiLDEyMzU1LCJpc21hbGxrYXRha2FuYSIsMTI0NTEsImlzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NCwiaXNzaGFyYmVuZ2FsaSIsMjU1NCwiaXN0cm9rZSIsNjE2LCJpc3VwZXJpb3IiLDYzMjEzLCJpdGVyYXRpb25oaXJhZ2FuYSIsMTI0NDUsIml0ZXJhdGlvbmthdGFrYW5hIiwxMjU0MSwiaXRpbGRlIiwyOTcsIml0aWxkZWJlbG93Iiw3NzI1LCJpdWJvcG9tb2ZvIiwxMjU4NSwiaXVjeXJpbGxpYyIsMTEwMiwiaXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTUsIml2b3dlbHNpZ25kZXZhIiwyMzY3LCJpdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTEsIml6aGl0c2FjeXJpbGxpYyIsMTE0MSwiaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMiLDExNDMsImoiLDEwNiwiamFhcm1lbmlhbiIsMTM5MywiamFiZW5nYWxpIiwyNDYwLCJqYWRldmEiLDIzMzIsImphZ3VqYXJhdGkiLDI3MTYsImphZ3VybXVraGkiLDI1ODgsImpib3BvbW9mbyIsMTI1NjAsImpjYXJvbiIsNDk2LCJqY2lyY2xlIiw5NDMzLCJqY2lyY3VtZmxleCIsMzA5LCJqY3Jvc3NlZHRhaWwiLDY2OSwiamRvdGxlc3NzdHJva2UiLDYwNywiamVjeXJpbGxpYyIsMTExMiwiamVlbWFyYWJpYyIsMTU4MCwiamVlbWZpbmFsYXJhYmljIiw2NTE4MiwiamVlbWluaXRpYWxhcmFiaWMiLDY1MTgzLCJqZWVtbWVkaWFsYXJhYmljIiw2NTE4NCwiamVoYXJhYmljIiwxNjg4LCJqZWhmaW5hbGFyYWJpYyIsNjQzOTUsImpoYWJlbmdhbGkiLDI0NjEsImpoYWRldmEiLDIzMzMsImpoYWd1amFyYXRpIiwyNzE3LCJqaGFndXJtdWtoaSIsMjU4OSwiamhlaGFybWVuaWFuIiwxNDAzLCJqaXMiLDEyMjkyLCJqbW9ub3NwYWNlIiw2NTM1NCwianBhcmVuIiw5MzgxLCJqc3VwZXJpb3IiLDY5MCwiayIsMTA3LCJrYWJhc2hraXJjeXJpbGxpYyIsMTE4NSwia2FiZW5nYWxpIiwyNDUzLCJrYWN1dGUiLDc3MjksImthY3lyaWxsaWMiLDEwODIsImthZGVzY2VuZGVyY3lyaWxsaWMiLDExNzksImthZGV2YSIsMjMyNSwia2FmIiwxNDk5LCJrYWZhcmFiaWMiLDE2MDMsImthZmRhZ2VzaCIsNjQzMTUsImthZmRhZ2VzaGhlYnJldyIsNjQzMTUsImthZmZpbmFsYXJhYmljIiw2NTI0Miwia2FmaGVicmV3IiwxNDk5LCJrYWZpbml0aWFsYXJhYmljIiw2NTI0Mywia2FmbWVkaWFsYXJhYmljIiw2NTI0NCwia2FmcmFmZWhlYnJldyIsNjQzMzMsImthZ3VqYXJhdGkiLDI3MDksImthZ3VybXVraGkiLDI1ODEsImthaGlyYWdhbmEiLDEyMzYzLCJrYWhvb2tjeXJpbGxpYyIsMTIyMCwia2FrYXRha2FuYSIsMTI0NTksImtha2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk4LCJrYXBwYSIsOTU0LCJrYXBwYXN5bWJvbGdyZWVrIiwxMDA4LCJrYXB5ZW91bm1pZXVta29yZWFuIiwxMjY1Nywia2FweWVvdW5waGlldXBoa29yZWFuIiwxMjY3Niwia2FweWVvdW5waWV1cGtvcmVhbiIsMTI2NjQsImthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbiIsMTI2NjUsImthcm9yaWlzcXVhcmUiLDEzMDY5LCJrYXNoaWRhYXV0b2FyYWJpYyIsMTYwMCwia2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljIiwxNjAwLCJrYXNtYWxsa2F0YWthbmEiLDEyNTMzLCJrYXNxdWFyZSIsMTMxODgsImthc3JhYXJhYmljIiwxNjE2LCJrYXNyYXRhbmFyYWJpYyIsMTYxMywia2FzdHJva2VjeXJpbGxpYyIsMTE4Mywia2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aCIsNjUzOTIsImthdmVydGljYWxzdHJva2VjeXJpbGxpYyIsMTE4MSwia2JvcG9tb2ZvIiwxMjU1OCwia2NhbHNxdWFyZSIsMTMxOTMsImtjYXJvbiIsNDg5LCJrY2VkaWxsYSIsMzExLCJrY2lyY2xlIiw5NDM0LCJrY29tbWFhY2NlbnQiLDMxMSwia2RvdGJlbG93Iiw3NzMxLCJrZWhhcm1lbmlhbiIsMTQxMiwia2VoaXJhZ2FuYSIsMTIzNjksImtla2F0YWthbmEiLDEyNDY1LCJrZWthdGFrYW5haGFsZndpZHRoIiw2NTQwMSwia2VuYXJtZW5pYW4iLDEzOTEsImtlc21hbGxrYXRha2FuYSIsMTI1MzQsImtncmVlbmxhbmRpYyIsMzEyLCJraGFiZW5nYWxpIiwyNDU0LCJraGFjeXJpbGxpYyIsMTA5Mywia2hhZGV2YSIsMjMyNiwia2hhZ3VqYXJhdGkiLDI3MTAsImtoYWd1cm11a2hpIiwyNTgyLCJraGFoYXJhYmljIiwxNTgyLCJraGFoZmluYWxhcmFiaWMiLDY1MTkwLCJraGFoaW5pdGlhbGFyYWJpYyIsNjUxOTEsImtoYWhtZWRpYWxhcmFiaWMiLDY1MTkyLCJraGVpY29wdGljIiw5OTksImtoaGFkZXZhIiwyMzkzLCJraGhhZ3VybXVraGkiLDI2NDksImtoaWV1a2hhY2lyY2xla29yZWFuIiwxMjkyMCwia2hpZXVraGFwYXJlbmtvcmVhbiIsMTI4MjQsImtoaWV1a2hjaXJjbGVrb3JlYW4iLDEyOTA2LCJraGlldWtoa29yZWFuIiwxMjYxOSwia2hpZXVraHBhcmVua29yZWFuIiwxMjgxMCwia2hva2hhaXRoYWkiLDM1ODYsImtob2tob250aGFpIiwzNTg5LCJraG9raHVhdHRoYWkiLDM1ODcsImtob2tod2FpdGhhaSIsMzU4OCwia2hvbXV0dGhhaSIsMzY3NSwia2hvb2siLDQwOSwia2hvcmFraGFuZ3RoYWkiLDM1OTAsImtoenNxdWFyZSIsMTMyMDEsImtpaGlyYWdhbmEiLDEyMzY1LCJraWthdGFrYW5hIiwxMjQ2MSwia2lrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTksImtpcm9ndXJhbXVzcXVhcmUiLDEzMDc3LCJraXJvbWVldG9ydXNxdWFyZSIsMTMwNzgsImtpcm9zcXVhcmUiLDEzMDc2LCJraXllb2thY2lyY2xla29yZWFuIiwxMjkxMCwia2l5ZW9rYXBhcmVua29yZWFuIiwxMjgxNCwia2l5ZW9rY2lyY2xla29yZWFuIiwxMjg5Niwia2l5ZW9ra29yZWFuIiwxMjU5Mywia2l5ZW9rcGFyZW5rb3JlYW4iLDEyODAwLCJraXllb2tzaW9za29yZWFuIiwxMjU5NSwia2plY3lyaWxsaWMiLDExMTYsImtsaW5lYmVsb3ciLDc3MzMsImtsc3F1YXJlIiwxMzIwOCwia21jdWJlZHNxdWFyZSIsMTMyMjIsImttb25vc3BhY2UiLDY1MzU1LCJrbXNxdWFyZWRzcXVhcmUiLDEzMjE4LCJrb2hpcmFnYW5hIiwxMjM3MSwia29obXNxdWFyZSIsMTMyNDgsImtva2FpdGhhaSIsMzU4NSwia29rYXRha2FuYSIsMTI0NjcsImtva2F0YWthbmFoYWxmd2lkdGgiLDY1NDAyLCJrb29wb3NxdWFyZSIsMTMwODYsImtvcHBhY3lyaWxsaWMiLDExNTMsImtvcmVhbnN0YW5kYXJkc3ltYm9sIiwxMjkyNywia29yb25pc2NtYiIsODM1LCJrcGFyZW4iLDkzODIsImtwYXNxdWFyZSIsMTMyMjYsImtzaWN5cmlsbGljIiwxMTM1LCJrdHNxdWFyZSIsMTMyNjMsImt0dXJuZWQiLDY3MCwia3VoaXJhZ2FuYSIsMTIzNjcsImt1a2F0YWthbmEiLDEyNDYzLCJrdWthdGFrYW5haGFsZndpZHRoIiw2NTQwMCwia3ZzcXVhcmUiLDEzMjQwLCJrd3NxdWFyZSIsMTMyNDYsImwiLDEwOCwibGFiZW5nYWxpIiwyNDgyLCJsYWN1dGUiLDMxNCwibGFkZXZhIiwyMzU0LCJsYWd1amFyYXRpIiwyNzM4LCJsYWd1cm11a2hpIiwyNjEwLCJsYWtraGFuZ3lhb3RoYWkiLDM2NTMsImxhbWFsZWZmaW5hbGFyYWJpYyIsNjUyNzYsImxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MjcyLCJsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljIiw2NTI3MSwibGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYyIsNjUyNzQsImxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWMiLDY1MjczLCJsYW1hbGVmaXNvbGF0ZWRhcmFiaWMiLDY1Mjc1LCJsYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljIiw2NTI3MCwibGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYyIsNjUyNjksImxhbWFyYWJpYyIsMTYwNCwibGFtYmRhIiw5NTUsImxhbWJkYXN0cm9rZSIsNDExLCJsYW1lZCIsMTUwMCwibGFtZWRkYWdlc2giLDY0MzE2LCJsYW1lZGRhZ2VzaGhlYnJldyIsNjQzMTYsImxhbWVkaGVicmV3IiwxNTAwLCJsYW1maW5hbGFyYWJpYyIsNjUyNDYsImxhbWhhaGluaXRpYWxhcmFiaWMiLDY0NzE0LCJsYW1pbml0aWFsYXJhYmljIiw2NTI0NywibGFtamVlbWluaXRpYWxhcmFiaWMiLDY0NzEzLCJsYW1raGFoaW5pdGlhbGFyYWJpYyIsNjQ3MTUsImxhbWxhbWhlaGlzb2xhdGVkYXJhYmljIiw2NTAxMCwibGFtbWVkaWFsYXJhYmljIiw2NTI0OCwibGFtbWVlbWhhaGluaXRpYWxhcmFiaWMiLDY0OTA0LCJsYW1tZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MTYsImxhcmdlY2lyY2xlIiw5NzExLCJsYmFyIiw0MTAsImxiZWx0Iiw2MjAsImxib3BvbW9mbyIsMTI1NTYsImxjYXJvbiIsMzE4LCJsY2VkaWxsYSIsMzE2LCJsY2lyY2xlIiw5NDM1LCJsY2lyY3VtZmxleGJlbG93Iiw3NzQxLCJsY29tbWFhY2NlbnQiLDMxNiwibGRvdCIsMzIwLCJsZG90YWNjZW50IiwzMjAsImxkb3RiZWxvdyIsNzczNSwibGRvdGJlbG93bWFjcm9uIiw3NzM3LCJsZWZ0YW5nbGVhYm92ZWNtYiIsNzk0LCJsZWZ0dGFja2JlbG93Y21iIiw3OTIsImxlc3MiLDYwLCJsZXNzZXF1YWwiLDg4MDQsImxlc3NlcXVhbG9yZ3JlYXRlciIsODkyMiwibGVzc21vbm9zcGFjZSIsNjUzMDgsImxlc3NvcmVxdWl2YWxlbnQiLDg4MTgsImxlc3NvcmdyZWF0ZXIiLDg4MjIsImxlc3NvdmVyZXF1YWwiLDg4MDYsImxlc3NzbWFsbCIsNjUxMjQsImxlemgiLDYyMiwibGZibG9jayIsOTYxMiwibGhvb2tyZXRyb2ZsZXgiLDYyMSwibGlyYSIsODM1NiwibGl3bmFybWVuaWFuIiwxMzg4LCJsaiIsNDU3LCJsamVjeXJpbGxpYyIsMTExMywibGwiLDYzMTY4LCJsbGFkZXZhIiwyMzU1LCJsbGFndWphcmF0aSIsMjczOSwibGxpbmViZWxvdyIsNzczOSwibGxsYWRldmEiLDIzNTYsImxsdm9jYWxpY2JlbmdhbGkiLDI1MjksImxsdm9jYWxpY2RldmEiLDI0MDEsImxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzEsImxsdm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDI0MDMsImxtaWRkbGV0aWxkZSIsNjE5LCJsbW9ub3NwYWNlIiw2NTM1NiwibG1zcXVhcmUiLDEzMjY0LCJsb2NodWxhdGhhaSIsMzYyOCwibG9naWNhbGFuZCIsODc0MywibG9naWNhbG5vdCIsMTcyLCJsb2dpY2Fsbm90cmV2ZXJzZWQiLDg5NzYsImxvZ2ljYWxvciIsODc0NCwibG9saW5ndGhhaSIsMzYyMSwibG9uZ3MiLDM4MywibG93bGluZWNlbnRlcmxpbmUiLDY1MTAyLCJsb3dsaW5lY21iIiw4MTgsImxvd2xpbmVkYXNoZWQiLDY1MTAxLCJsb3plbmdlIiw5Njc0LCJscGFyZW4iLDkzODMsImxzbGFzaCIsMzIyLCJsc3F1YXJlIiw4NDY3LCJsc3VwZXJpb3IiLDYzMjE0LCJsdHNoYWRlIiw5NjE3LCJsdXRoYWkiLDM2MjIsImx2b2NhbGljYmVuZ2FsaSIsMjQ0NCwibHZvY2FsaWNkZXZhIiwyMzE2LCJsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MzAsImx2b2NhbGljdm93ZWxzaWduZGV2YSIsMjQwMiwibHhzcXVhcmUiLDEzMjY3LCJtIiwxMDksIm1hYmVuZ2FsaSIsMjQ3OCwibWFjcm9uIiwxNzUsIm1hY3JvbmJlbG93Y21iIiw4MTcsIm1hY3JvbmNtYiIsNzcyLCJtYWNyb25sb3dtb2QiLDcxNywibWFjcm9ubW9ub3NwYWNlIiw2NTUwNywibWFjdXRlIiw3NzQzLCJtYWRldmEiLDIzNTAsIm1hZ3VqYXJhdGkiLDI3MzQsIm1hZ3VybXVraGkiLDI2MDYsIm1haGFwYWtoaGVicmV3IiwxNDQ0LCJtYWhhcGFraGxlZnRoZWJyZXciLDE0NDQsIm1haGlyYWdhbmEiLDEyNDE0LCJtYWljaGF0dGF3YWxvd2xlZnR0aGFpIiw2MzYzNywibWFpY2hhdHRhd2Fsb3dyaWdodHRoYWkiLDYzNjM2LCJtYWljaGF0dGF3YXRoYWkiLDM2NTksIm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSIsNjM2MzUsIm1haWVrbG93bGVmdHRoYWkiLDYzNjI4LCJtYWlla2xvd3JpZ2h0dGhhaSIsNjM2MjcsIm1haWVrdGhhaSIsMzY1NiwibWFpZWt1cHBlcmxlZnR0aGFpIiw2MzYyNiwibWFpaGFuYWthdGxlZnR0aGFpIiw2MzYyMCwibWFpaGFuYWthdHRoYWkiLDM2MzMsIm1haXRhaWtodWxlZnR0aGFpIiw2MzYyNSwibWFpdGFpa2h1dGhhaSIsMzY1NSwibWFpdGhvbG93bGVmdHRoYWkiLDYzNjMxLCJtYWl0aG9sb3dyaWdodHRoYWkiLDYzNjMwLCJtYWl0aG90aGFpIiwzNjU3LCJtYWl0aG91cHBlcmxlZnR0aGFpIiw2MzYyOSwibWFpdHJpbG93bGVmdHRoYWkiLDYzNjM0LCJtYWl0cmlsb3dyaWdodHRoYWkiLDYzNjMzLCJtYWl0cml0aGFpIiwzNjU4LCJtYWl0cml1cHBlcmxlZnR0aGFpIiw2MzYzMiwibWFpeWFtb2t0aGFpIiwzNjU0LCJtYWthdGFrYW5hIiwxMjUxMCwibWFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjMsIm1hbGUiLDk3OTQsIm1hbnN5b25zcXVhcmUiLDEzMTI3LCJtYXFhZmhlYnJldyIsMTQ3MCwibWFycyIsOTc5NCwibWFzb3JhY2lyY2xlaGVicmV3IiwxNDU1LCJtYXNxdWFyZSIsMTMxODcsIm1ib3BvbW9mbyIsMTI1NTEsIm1ic3F1YXJlIiwxMzI2OCwibWNpcmNsZSIsOTQzNiwibWN1YmVkc3F1YXJlIiwxMzIyMSwibWRvdGFjY2VudCIsNzc0NSwibWRvdGJlbG93Iiw3NzQ3LCJtZWVtYXJhYmljIiwxNjA1LCJtZWVtZmluYWxhcmFiaWMiLDY1MjUwLCJtZWVtaW5pdGlhbGFyYWJpYyIsNjUyNTEsIm1lZW1tZWRpYWxhcmFiaWMiLDY1MjUyLCJtZWVtbWVlbWluaXRpYWxhcmFiaWMiLDY0NzIxLCJtZWVtbWVlbWlzb2xhdGVkYXJhYmljIiw2NDU4NCwibWVldG9ydXNxdWFyZSIsMTMxMzMsIm1laGlyYWdhbmEiLDEyNDE3LCJtZWl6aWVyYXNxdWFyZSIsMTMxODIsIm1la2F0YWthbmEiLDEyNTEzLCJtZWthdGFrYW5haGFsZndpZHRoIiw2NTQyNiwibWVtIiwxNTAyLCJtZW1kYWdlc2giLDY0MzE4LCJtZW1kYWdlc2hoZWJyZXciLDY0MzE4LCJtZW1oZWJyZXciLDE1MDIsIm1lbmFybWVuaWFuIiwxMzk2LCJtZXJraGFoZWJyZXciLDE0NDUsIm1lcmtoYWtlZnVsYWhlYnJldyIsMTQ0NiwibWVya2hha2VmdWxhbGVmdGhlYnJldyIsMTQ0NiwibWVya2hhbGVmdGhlYnJldyIsMTQ0NSwibWhvb2siLDYyNSwibWh6c3F1YXJlIiwxMzIwMiwibWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGgiLDY1MzgxLCJtaWRkb3QiLDE4MywibWlldW1hY2lyY2xla29yZWFuIiwxMjkxNCwibWlldW1hcGFyZW5rb3JlYW4iLDEyODE4LCJtaWV1bWNpcmNsZWtvcmVhbiIsMTI5MDAsIm1pZXVta29yZWFuIiwxMjYwOSwibWlldW1wYW5zaW9za29yZWFuIiwxMjY1NiwibWlldW1wYXJlbmtvcmVhbiIsMTI4MDQsIm1pZXVtcGlldXBrb3JlYW4iLDEyNjU0LCJtaWV1bXNpb3Nrb3JlYW4iLDEyNjU1LCJtaWhpcmFnYW5hIiwxMjQxNSwibWlrYXRha2FuYSIsMTI1MTEsIm1pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDI0LCJtaW51cyIsODcyMiwibWludXNiZWxvd2NtYiIsODAwLCJtaW51c2NpcmNsZSIsODg1NCwibWludXNtb2QiLDcyNywibWludXNwbHVzIiw4NzIzLCJtaW51dGUiLDgyNDIsIm1pcmliYWFydXNxdWFyZSIsMTMxMzAsIm1pcmlzcXVhcmUiLDEzMTI5LCJtbG9uZ2xlZ3R1cm5lZCIsNjI0LCJtbHNxdWFyZSIsMTMyMDYsIm1tY3ViZWRzcXVhcmUiLDEzMjE5LCJtbW9ub3NwYWNlIiw2NTM1NywibW1zcXVhcmVkc3F1YXJlIiwxMzIxNSwibW9oaXJhZ2FuYSIsMTI0MTgsIm1vaG1zcXVhcmUiLDEzMjQ5LCJtb2thdGFrYW5hIiwxMjUxNCwibW9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjcsIm1vbHNxdWFyZSIsMTMyNzAsIm1vbWF0aGFpIiwzNjE3LCJtb3ZlcnNzcXVhcmUiLDEzMjIzLCJtb3ZlcnNzcXVhcmVkc3F1YXJlIiwxMzIyNCwibXBhcmVuIiw5Mzg0LCJtcGFzcXVhcmUiLDEzMjI3LCJtc3NxdWFyZSIsMTMyMzUsIm1zdXBlcmlvciIsNjMyMTUsIm10dXJuZWQiLDYyMywibXUiLDE4MSwibXUxIiwxODEsIm11YXNxdWFyZSIsMTMxODYsIm11Y2hncmVhdGVyIiw4ODExLCJtdWNobGVzcyIsODgxMCwibXVmc3F1YXJlIiwxMzE5NiwibXVncmVlayIsOTU2LCJtdWdzcXVhcmUiLDEzMTk3LCJtdWhpcmFnYW5hIiwxMjQxNiwibXVrYXRha2FuYSIsMTI1MTIsIm11a2F0YWthbmFoYWxmd2lkdGgiLDY1NDI1LCJtdWxzcXVhcmUiLDEzMjA1LCJtdWx0aXBseSIsMjE1LCJtdW1zcXVhcmUiLDEzMjExLCJtdW5haGhlYnJldyIsMTQ0MywibXVuYWhsZWZ0aGVicmV3IiwxNDQzLCJtdXNpY2Fsbm90ZSIsOTgzNCwibXVzaWNhbG5vdGVkYmwiLDk4MzUsIm11c2ljZmxhdHNpZ24iLDk4MzcsIm11c2ljc2hhcnBzaWduIiw5ODM5LCJtdXNzcXVhcmUiLDEzMjM0LCJtdXZzcXVhcmUiLDEzMjM4LCJtdXdzcXVhcmUiLDEzMjQ0LCJtdm1lZ2FzcXVhcmUiLDEzMjQxLCJtdnNxdWFyZSIsMTMyMzksIm13bWVnYXNxdWFyZSIsMTMyNDcsIm13c3F1YXJlIiwxMzI0NSwibiIsMTEwLCJuYWJlbmdhbGkiLDI0NzIsIm5hYmxhIiw4NzExLCJuYWN1dGUiLDMyNCwibmFkZXZhIiwyMzQ0LCJuYWd1amFyYXRpIiwyNzI4LCJuYWd1cm11a2hpIiwyNjAwLCJuYWhpcmFnYW5hIiwxMjM5NCwibmFrYXRha2FuYSIsMTI0OTAsIm5ha2F0YWthbmFoYWxmd2lkdGgiLDY1NDEzLCJuYXBvc3Ryb3BoZSIsMzI5LCJuYXNxdWFyZSIsMTMxODUsIm5ib3BvbW9mbyIsMTI1NTUsIm5ic3BhY2UiLDE2MCwibmNhcm9uIiwzMjgsIm5jZWRpbGxhIiwzMjYsIm5jaXJjbGUiLDk0MzcsIm5jaXJjdW1mbGV4YmVsb3ciLDc3NTUsIm5jb21tYWFjY2VudCIsMzI2LCJuZG90YWNjZW50Iiw3NzQ5LCJuZG90YmVsb3ciLDc3NTEsIm5laGlyYWdhbmEiLDEyMzk3LCJuZWthdGFrYW5hIiwxMjQ5MywibmVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTYsIm5ld3NoZXFlbHNpZ24iLDgzNjIsIm5mc3F1YXJlIiwxMzE5NSwibmdhYmVuZ2FsaSIsMjQ1NywibmdhZGV2YSIsMjMyOSwibmdhZ3VqYXJhdGkiLDI3MTMsIm5nYWd1cm11a2hpIiwyNTg1LCJuZ29uZ3V0aGFpIiwzNTkxLCJuaGlyYWdhbmEiLDEyNDM1LCJuaG9va2xlZnQiLDYyNiwibmhvb2tyZXRyb2ZsZXgiLDYyNywibmlldW5hY2lyY2xla29yZWFuIiwxMjkxMSwibmlldW5hcGFyZW5rb3JlYW4iLDEyODE1LCJuaWV1bmNpZXVja29yZWFuIiwxMjU5NywibmlldW5jaXJjbGVrb3JlYW4iLDEyODk3LCJuaWV1bmhpZXVoa29yZWFuIiwxMjU5OCwibmlldW5rb3JlYW4iLDEyNTk2LCJuaWV1bnBhbnNpb3Nrb3JlYW4iLDEyNjQ4LCJuaWV1bnBhcmVua29yZWFuIiwxMjgwMSwibmlldW5zaW9za29yZWFuIiwxMjY0NywibmlldW50aWtldXRrb3JlYW4iLDEyNjQ2LCJuaWhpcmFnYW5hIiwxMjM5NSwibmlrYXRha2FuYSIsMTI0OTEsIm5pa2F0YWthbmFoYWxmd2lkdGgiLDY1NDE0LCJuaWtoYWhpdGxlZnR0aGFpIiw2MzY0MSwibmlraGFoaXR0aGFpIiwzNjYxLCJuaW5lIiw1NywibmluZWFyYWJpYyIsMTY0MSwibmluZWJlbmdhbGkiLDI1NDMsIm5pbmVjaXJjbGUiLDkzMjAsIm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEzMCwibmluZWRldmEiLDI0MTUsIm5pbmVndWphcmF0aSIsMjc5OSwibmluZWd1cm11a2hpIiwyNjcxLCJuaW5laGFja2FyYWJpYyIsMTY0MSwibmluZWhhbmd6aG91IiwxMjMyOSwibmluZWlkZW9ncmFwaGljcGFyZW4iLDEyODQwLCJuaW5laW5mZXJpb3IiLDgzMjksIm5pbmVtb25vc3BhY2UiLDY1MzA1LCJuaW5lb2xkc3R5bGUiLDYzMjg5LCJuaW5lcGFyZW4iLDkzNDAsIm5pbmVwZXJpb2QiLDkzNjAsIm5pbmVwZXJzaWFuIiwxNzg1LCJuaW5lcm9tYW4iLDg1NjgsIm5pbmVzdXBlcmlvciIsODMxMywibmluZXRlZW5jaXJjbGUiLDkzMzAsIm5pbmV0ZWVucGFyZW4iLDkzNTAsIm5pbmV0ZWVucGVyaW9kIiw5MzcwLCJuaW5ldGhhaSIsMzY3MywibmoiLDQ2MCwibmplY3lyaWxsaWMiLDExMTQsIm5rYXRha2FuYSIsMTI1MzEsIm5rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzcsIm5sZWdyaWdodGxvbmciLDQxNCwibmxpbmViZWxvdyIsNzc1Mywibm1vbm9zcGFjZSIsNjUzNTgsIm5tc3F1YXJlIiwxMzIxMCwibm5hYmVuZ2FsaSIsMjQ2Nywibm5hZGV2YSIsMjMzOSwibm5hZ3VqYXJhdGkiLDI3MjMsIm5uYWd1cm11a2hpIiwyNTk1LCJubm5hZGV2YSIsMjM0NSwibm9oaXJhZ2FuYSIsMTIzOTgsIm5va2F0YWthbmEiLDEyNDk0LCJub2thdGFrYW5haGFsZndpZHRoIiw2NTQxNywibm9uYnJlYWtpbmdzcGFjZSIsMTYwLCJub25lbnRoYWkiLDM2MDMsIm5vbnV0aGFpIiwzNjA5LCJub29uYXJhYmljIiwxNjA2LCJub29uZmluYWxhcmFiaWMiLDY1MjU0LCJub29uZ2h1bm5hYXJhYmljIiwxNzIyLCJub29uZ2h1bm5hZmluYWxhcmFiaWMiLDY0NDE1LCJub29uaW5pdGlhbGFyYWJpYyIsNjUyNTUsIm5vb25qZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MjIsIm5vb25qZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTg3LCJub29ubWVkaWFsYXJhYmljIiw2NTI1Niwibm9vbm1lZW1pbml0aWFsYXJhYmljIiw2NDcyNSwibm9vbm1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1OTAsIm5vb25ub29uZmluYWxhcmFiaWMiLDY0NjUzLCJub3Rjb250YWlucyIsODcxNiwibm90ZWxlbWVudCIsODcxMywibm90ZWxlbWVudG9mIiw4NzEzLCJub3RlcXVhbCIsODgwMCwibm90Z3JlYXRlciIsODgxNSwibm90Z3JlYXRlcm5vcmVxdWFsIiw4ODE3LCJub3RncmVhdGVybm9ybGVzcyIsODgyNSwibm90aWRlbnRpY2FsIiw4ODAyLCJub3RsZXNzIiw4ODE0LCJub3RsZXNzbm9yZXF1YWwiLDg4MTYsIm5vdHBhcmFsbGVsIiw4NzQyLCJub3RwcmVjZWRlcyIsODgzMiwibm90c3Vic2V0Iiw4ODM2LCJub3RzdWNjZWVkcyIsODgzMywibm90c3VwZXJzZXQiLDg4MzcsIm5vd2FybWVuaWFuIiwxMzk4LCJucGFyZW4iLDkzODUsIm5zc3F1YXJlIiwxMzIzMywibnN1cGVyaW9yIiw4MzE5LCJudGlsZGUiLDI0MSwibnUiLDk1NywibnVoaXJhZ2FuYSIsMTIzOTYsIm51a2F0YWthbmEiLDEyNDkyLCJudWthdGFrYW5haGFsZndpZHRoIiw2NTQxNSwibnVrdGFiZW5nYWxpIiwyNDkyLCJudWt0YWRldmEiLDIzNjQsIm51a3RhZ3VqYXJhdGkiLDI3NDgsIm51a3RhZ3VybXVraGkiLDI2MjAsIm51bWJlcnNpZ24iLDM1LCJudW1iZXJzaWdubW9ub3NwYWNlIiw2NTI4MywibnVtYmVyc2lnbnNtYWxsIiw2NTExOSwibnVtZXJhbHNpZ25ncmVlayIsODg0LCJudW1lcmFsc2lnbmxvd2VyZ3JlZWsiLDg4NSwibnVtZXJvIiw4NDcwLCJudW4iLDE1MDQsIm51bmRhZ2VzaCIsNjQzMjAsIm51bmRhZ2VzaGhlYnJldyIsNjQzMjAsIm51bmhlYnJldyIsMTUwNCwibnZzcXVhcmUiLDEzMjM3LCJud3NxdWFyZSIsMTMyNDMsIm55YWJlbmdhbGkiLDI0NjIsIm55YWRldmEiLDIzMzQsIm55YWd1amFyYXRpIiwyNzE4LCJueWFndXJtdWtoaSIsMjU5MCwibyIsMTExLCJvYWN1dGUiLDI0Mywib2FuZ3RoYWkiLDM2MjksIm9iYXJyZWQiLDYyOSwib2JhcnJlZGN5cmlsbGljIiwxMjU3LCJvYmFycmVkZGllcmVzaXNjeXJpbGxpYyIsMTI1OSwib2JlbmdhbGkiLDI0NTEsIm9ib3BvbW9mbyIsMTI1NzEsIm9icmV2ZSIsMzM1LCJvY2FuZHJhZGV2YSIsMjMyMSwib2NhbmRyYWd1amFyYXRpIiwyNzA1LCJvY2FuZHJhdm93ZWxzaWduZGV2YSIsMjM3Nywib2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpIiwyNzYxLCJvY2Fyb24iLDQ2Niwib2NpcmNsZSIsOTQzOCwib2NpcmN1bWZsZXgiLDI0NCwib2NpcmN1bWZsZXhhY3V0ZSIsNzg4OSwib2NpcmN1bWZsZXhkb3RiZWxvdyIsNzg5Nywib2NpcmN1bWZsZXhncmF2ZSIsNzg5MSwib2NpcmN1bWZsZXhob29rYWJvdmUiLDc4OTMsIm9jaXJjdW1mbGV4dGlsZGUiLDc4OTUsIm9jeXJpbGxpYyIsMTA4Niwib2RibGFjdXRlIiwzMzcsIm9kYmxncmF2ZSIsNTI1LCJvZGV2YSIsMjMyMywib2RpZXJlc2lzIiwyNDYsIm9kaWVyZXNpc2N5cmlsbGljIiwxMjU1LCJvZG90YmVsb3ciLDc4ODUsIm9lIiwzMzksIm9la29yZWFuIiwxMjYzNCwib2dvbmVrIiw3MzEsIm9nb25la2NtYiIsODA4LCJvZ3JhdmUiLDI0Miwib2d1amFyYXRpIiwyNzA3LCJvaGFybWVuaWFuIiwxNDEzLCJvaGlyYWdhbmEiLDEyMzYyLCJvaG9va2Fib3ZlIiw3ODg3LCJvaG9ybiIsNDE3LCJvaG9ybmFjdXRlIiw3ODk5LCJvaG9ybmRvdGJlbG93Iiw3OTA3LCJvaG9ybmdyYXZlIiw3OTAxLCJvaG9ybmhvb2thYm92ZSIsNzkwMywib2hvcm50aWxkZSIsNzkwNSwib2h1bmdhcnVtbGF1dCIsMzM3LCJvaSIsNDE5LCJvaW52ZXJ0ZWRicmV2ZSIsNTI3LCJva2F0YWthbmEiLDEyNDU4LCJva2F0YWthbmFoYWxmd2lkdGgiLDY1Mzk3LCJva29yZWFuIiwxMjYzMSwib2xlaGVicmV3IiwxNDUxLCJvbWFjcm9uIiwzMzMsIm9tYWNyb25hY3V0ZSIsNzc2Mywib21hY3JvbmdyYXZlIiw3NzYxLCJvbWRldmEiLDIzODQsIm9tZWdhIiw5NjksIm9tZWdhMSIsOTgyLCJvbWVnYWN5cmlsbGljIiwxMTIxLCJvbWVnYWxhdGluY2xvc2VkIiw2MzEsIm9tZWdhcm91bmRjeXJpbGxpYyIsMTE0Nywib21lZ2F0aXRsb2N5cmlsbGljIiwxMTQ5LCJvbWVnYXRvbm9zIiw5NzQsIm9tZ3VqYXJhdGkiLDI3NjgsIm9taWNyb24iLDk1OSwib21pY3JvbnRvbm9zIiw5NzIsIm9tb25vc3BhY2UiLDY1MzU5LCJvbmUiLDQ5LCJvbmVhcmFiaWMiLDE2MzMsIm9uZWJlbmdhbGkiLDI1MzUsIm9uZWNpcmNsZSIsOTMxMiwib25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiIsMTAxMjIsIm9uZWRldmEiLDI0MDcsIm9uZWRvdGVubGVhZGVyIiw4MjI4LCJvbmVlaWdodGgiLDg1MzksIm9uZWZpdHRlZCIsNjMxOTYsIm9uZWd1amFyYXRpIiwyNzkxLCJvbmVndXJtdWtoaSIsMjY2Mywib25laGFja2FyYWJpYyIsMTYzMywib25laGFsZiIsMTg5LCJvbmVoYW5nemhvdSIsMTIzMjEsIm9uZWlkZW9ncmFwaGljcGFyZW4iLDEyODMyLCJvbmVpbmZlcmlvciIsODMyMSwib25lbW9ub3NwYWNlIiw2NTI5Nywib25lbnVtZXJhdG9yYmVuZ2FsaSIsMjU0OCwib25lb2xkc3R5bGUiLDYzMjgxLCJvbmVwYXJlbiIsOTMzMiwib25lcGVyaW9kIiw5MzUyLCJvbmVwZXJzaWFuIiwxNzc3LCJvbmVxdWFydGVyIiwxODgsIm9uZXJvbWFuIiw4NTYwLCJvbmVzdXBlcmlvciIsMTg1LCJvbmV0aGFpIiwzNjY1LCJvbmV0aGlyZCIsODUzMSwib29nb25layIsNDkxLCJvb2dvbmVrbWFjcm9uIiw0OTMsIm9vZ3VybXVraGkiLDI1NzksIm9vbWF0cmFndXJtdWtoaSIsMjYzNSwib29wZW4iLDU5Niwib3BhcmVuIiw5Mzg2LCJvcGVuYnVsbGV0Iiw5NzAyLCJvcHRpb24iLDg5OTcsIm9yZGZlbWluaW5lIiwxNzAsIm9yZG1hc2N1bGluZSIsMTg2LCJvcnRob2dvbmFsIiw4NzM1LCJvc2hvcnRkZXZhIiwyMzIyLCJvc2hvcnR2b3dlbHNpZ25kZXZhIiwyMzc4LCJvc2xhc2giLDI0OCwib3NsYXNoYWN1dGUiLDUxMSwib3NtYWxsaGlyYWdhbmEiLDEyMzYxLCJvc21hbGxrYXRha2FuYSIsMTI0NTcsIm9zbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4Nywib3N0cm9rZWFjdXRlIiw1MTEsIm9zdXBlcmlvciIsNjMyMTYsIm90Y3lyaWxsaWMiLDExNTEsIm90aWxkZSIsMjQ1LCJvdGlsZGVhY3V0ZSIsNzc1Nywib3RpbGRlZGllcmVzaXMiLDc3NTksIm91Ym9wb21vZm8iLDEyNTc3LCJvdmVybGluZSIsODI1NCwib3ZlcmxpbmVjZW50ZXJsaW5lIiw2NTA5OCwib3ZlcmxpbmVjbWIiLDc3Mywib3ZlcmxpbmVkYXNoZWQiLDY1MDk3LCJvdmVybGluZWRibHdhdnkiLDY1MTAwLCJvdmVybGluZXdhdnkiLDY1MDk5LCJvdmVyc2NvcmUiLDE3NSwib3Zvd2Vsc2lnbmJlbmdhbGkiLDI1MDcsIm92b3dlbHNpZ25kZXZhIiwyMzc5LCJvdm93ZWxzaWduZ3VqYXJhdGkiLDI3NjMsInAiLDExMiwicGFhbXBzc3F1YXJlIiwxMzE4NCwicGFhc2VudG9zcXVhcmUiLDEzMDk5LCJwYWJlbmdhbGkiLDI0NzQsInBhY3V0ZSIsNzc2NSwicGFkZXZhIiwyMzQ2LCJwYWdlZG93biIsODY3MSwicGFnZXVwIiw4NjcwLCJwYWd1amFyYXRpIiwyNzMwLCJwYWd1cm11a2hpIiwyNjAyLCJwYWhpcmFnYW5hIiwxMjQwMSwicGFpeWFubm9pdGhhaSIsMzYzMSwicGFrYXRha2FuYSIsMTI0OTcsInBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWIiLDExNTYsInBhbG9jaGthY3lyaWxsaWMiLDEyMTYsInBhbnNpb3Nrb3JlYW4iLDEyNjcxLCJwYXJhZ3JhcGgiLDE4MiwicGFyYWxsZWwiLDg3NDEsInBhcmVubGVmdCIsNDAsInBhcmVubGVmdGFsdG9uZWFyYWJpYyIsNjQ4MzAsInBhcmVubGVmdGJ0Iiw2MzcyNSwicGFyZW5sZWZ0ZXgiLDYzNzI0LCJwYXJlbmxlZnRpbmZlcmlvciIsODMzMywicGFyZW5sZWZ0bW9ub3NwYWNlIiw2NTI4OCwicGFyZW5sZWZ0c21hbGwiLDY1MTEzLCJwYXJlbmxlZnRzdXBlcmlvciIsODMxNywicGFyZW5sZWZ0dHAiLDYzNzIzLCJwYXJlbmxlZnR2ZXJ0aWNhbCIsNjUwNzcsInBhcmVucmlnaHQiLDQxLCJwYXJlbnJpZ2h0YWx0b25lYXJhYmljIiw2NDgzMSwicGFyZW5yaWdodGJ0Iiw2MzczNiwicGFyZW5yaWdodGV4Iiw2MzczNSwicGFyZW5yaWdodGluZmVyaW9yIiw4MzM0LCJwYXJlbnJpZ2h0bW9ub3NwYWNlIiw2NTI4OSwicGFyZW5yaWdodHNtYWxsIiw2NTExNCwicGFyZW5yaWdodHN1cGVyaW9yIiw4MzE4LCJwYXJlbnJpZ2h0dHAiLDYzNzM0LCJwYXJlbnJpZ2h0dmVydGljYWwiLDY1MDc4LCJwYXJ0aWFsZGlmZiIsODcwNiwicGFzZXFoZWJyZXciLDE0NzIsInBhc2h0YWhlYnJldyIsMTQzMywicGFzcXVhcmUiLDEzMjI1LCJwYXRhaCIsMTQ2MywicGF0YWgxMSIsMTQ2MywicGF0YWgxZCIsMTQ2MywicGF0YWgyYSIsMTQ2MywicGF0YWhoZWJyZXciLDE0NjMsInBhdGFobmFycm93aGVicmV3IiwxNDYzLCJwYXRhaHF1YXJ0ZXJoZWJyZXciLDE0NjMsInBhdGFod2lkZWhlYnJldyIsMTQ2MywicGF6ZXJoZWJyZXciLDE0NDEsInBib3BvbW9mbyIsMTI1NTAsInBjaXJjbGUiLDk0MzksInBkb3RhY2NlbnQiLDc3NjcsInBlIiwxNTA4LCJwZWN5cmlsbGljIiwxMDg3LCJwZWRhZ2VzaCIsNjQzMjQsInBlZGFnZXNoaGVicmV3Iiw2NDMyNCwicGVlemlzcXVhcmUiLDEzMTE1LCJwZWZpbmFsZGFnZXNoaGVicmV3Iiw2NDMyMywicGVoYXJhYmljIiwxNjYyLCJwZWhhcm1lbmlhbiIsMTQwMiwicGVoZWJyZXciLDE1MDgsInBlaGZpbmFsYXJhYmljIiw2NDM0MywicGVoaW5pdGlhbGFyYWJpYyIsNjQzNDQsInBlaGlyYWdhbmEiLDEyNDEwLCJwZWhtZWRpYWxhcmFiaWMiLDY0MzQ1LCJwZWthdGFrYW5hIiwxMjUwNiwicGVtaWRkbGVob29rY3lyaWxsaWMiLDExOTEsInBlcmFmZWhlYnJldyIsNjQzMzQsInBlcmNlbnQiLDM3LCJwZXJjZW50YXJhYmljIiwxNjQyLCJwZXJjZW50bW9ub3NwYWNlIiw2NTI4NSwicGVyY2VudHNtYWxsIiw2NTEzMCwicGVyaW9kIiw0NiwicGVyaW9kYXJtZW5pYW4iLDE0MTcsInBlcmlvZGNlbnRlcmVkIiwxODMsInBlcmlvZGhhbGZ3aWR0aCIsNjUzNzcsInBlcmlvZGluZmVyaW9yIiw2MzIwNywicGVyaW9kbW9ub3NwYWNlIiw2NTI5NCwicGVyaW9kc21hbGwiLDY1MTA2LCJwZXJpb2RzdXBlcmlvciIsNjMyMDgsInBlcmlzcG9tZW5pZ3JlZWtjbWIiLDgzNCwicGVycGVuZGljdWxhciIsODg2OSwicGVydGhvdXNhbmQiLDgyNDAsInBlc2V0YSIsODM1OSwicGZzcXVhcmUiLDEzMTk0LCJwaGFiZW5nYWxpIiwyNDc1LCJwaGFkZXZhIiwyMzQ3LCJwaGFndWphcmF0aSIsMjczMSwicGhhZ3VybXVraGkiLDI2MDMsInBoaSIsOTY2LCJwaGkxIiw5ODEsInBoaWV1cGhhY2lyY2xla29yZWFuIiwxMjkyMiwicGhpZXVwaGFwYXJlbmtvcmVhbiIsMTI4MjYsInBoaWV1cGhjaXJjbGVrb3JlYW4iLDEyOTA4LCJwaGlldXBoa29yZWFuIiwxMjYyMSwicGhpZXVwaHBhcmVua29yZWFuIiwxMjgxMiwicGhpbGF0aW4iLDYzMiwicGhpbnRodXRoYWkiLDM2NDIsInBoaXN5bWJvbGdyZWVrIiw5ODEsInBob29rIiw0MjEsInBob3BoYW50aGFpIiwzNjE0LCJwaG9waHVuZ3RoYWkiLDM2MTIsInBob3NhbXBoYW90aGFpIiwzNjE2LCJwaSIsOTYwLCJwaWV1cGFjaXJjbGVrb3JlYW4iLDEyOTE1LCJwaWV1cGFwYXJlbmtvcmVhbiIsMTI4MTksInBpZXVwY2lldWNrb3JlYW4iLDEyNjYyLCJwaWV1cGNpcmNsZWtvcmVhbiIsMTI5MDEsInBpZXVwa2l5ZW9ra29yZWFuIiwxMjY1OCwicGlldXBrb3JlYW4iLDEyNjEwLCJwaWV1cHBhcmVua29yZWFuIiwxMjgwNSwicGlldXBzaW9za2l5ZW9ra29yZWFuIiwxMjY2MCwicGlldXBzaW9za29yZWFuIiwxMjYxMiwicGlldXBzaW9zdGlrZXV0a29yZWFuIiwxMjY2MSwicGlldXB0aGlldXRoa29yZWFuIiwxMjY2MywicGlldXB0aWtldXRrb3JlYW4iLDEyNjU5LCJwaWhpcmFnYW5hIiwxMjQwNCwicGlrYXRha2FuYSIsMTI1MDAsInBpc3ltYm9sZ3JlZWsiLDk4MiwicGl3cmFybWVuaWFuIiwxNDExLCJwbHVzIiw0MywicGx1c2JlbG93Y21iIiw3OTksInBsdXNjaXJjbGUiLDg4NTMsInBsdXNtaW51cyIsMTc3LCJwbHVzbW9kIiw3MjYsInBsdXNtb25vc3BhY2UiLDY1MjkxLCJwbHVzc21hbGwiLDY1MTIyLCJwbHVzc3VwZXJpb3IiLDgzMTQsInBtb25vc3BhY2UiLDY1MzYwLCJwbXNxdWFyZSIsMTMyNzIsInBvaGlyYWdhbmEiLDEyNDEzLCJwb2ludGluZ2luZGV4ZG93bndoaXRlIiw5NzU5LCJwb2ludGluZ2luZGV4bGVmdHdoaXRlIiw5NzU2LCJwb2ludGluZ2luZGV4cmlnaHR3aGl0ZSIsOTc1OCwicG9pbnRpbmdpbmRleHVwd2hpdGUiLDk3NTcsInBva2F0YWthbmEiLDEyNTA5LCJwb3BsYXRoYWkiLDM2MTEsInBvc3RhbG1hcmsiLDEyMzA2LCJwb3N0YWxtYXJrZmFjZSIsMTIzMjAsInBwYXJlbiIsOTM4NywicHJlY2VkZXMiLDg4MjYsInByZXNjcmlwdGlvbiIsODQ3OCwicHJpbWVtb2QiLDY5NywicHJpbWVyZXZlcnNlZCIsODI0NSwicHJvZHVjdCIsODcxOSwicHJvamVjdGl2ZSIsODk2NSwicHJvbG9uZ2Vka2FuYSIsMTI1NDAsInByb3BlbGxvciIsODk4NCwicHJvcGVyc3Vic2V0Iiw4ODM0LCJwcm9wZXJzdXBlcnNldCIsODgzNSwicHJvcG9ydGlvbiIsODc1OSwicHJvcG9ydGlvbmFsIiw4NzMzLCJwc2kiLDk2OCwicHNpY3lyaWxsaWMiLDExMzcsInBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiIsMTE1OCwicHNzcXVhcmUiLDEzMjMyLCJwdWhpcmFnYW5hIiwxMjQwNywicHVrYXRha2FuYSIsMTI1MDMsInB2c3F1YXJlIiwxMzIzNiwicHdzcXVhcmUiLDEzMjQyLCJxIiwxMTMsInFhZGV2YSIsMjM5MiwicWFkbWFoZWJyZXciLDE0NDgsInFhZmFyYWJpYyIsMTYwMiwicWFmZmluYWxhcmFiaWMiLDY1MjM4LCJxYWZpbml0aWFsYXJhYmljIiw2NTIzOSwicWFmbWVkaWFsYXJhYmljIiw2NTI0MCwicWFtYXRzIiwxNDY0LCJxYW1hdHMxMCIsMTQ2NCwicWFtYXRzMWEiLDE0NjQsInFhbWF0czFjIiwxNDY0LCJxYW1hdHMyNyIsMTQ2NCwicWFtYXRzMjkiLDE0NjQsInFhbWF0czMzIiwxNDY0LCJxYW1hdHNkZSIsMTQ2NCwicWFtYXRzaGVicmV3IiwxNDY0LCJxYW1hdHNuYXJyb3doZWJyZXciLDE0NjQsInFhbWF0c3FhdGFuaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbm5hcnJvd2hlYnJldyIsMTQ2NCwicWFtYXRzcWF0YW5xdWFydGVyaGVicmV3IiwxNDY0LCJxYW1hdHNxYXRhbndpZGVoZWJyZXciLDE0NjQsInFhbWF0c3F1YXJ0ZXJoZWJyZXciLDE0NjQsInFhbWF0c3dpZGVoZWJyZXciLDE0NjQsInFhcm5leXBhcmFoZWJyZXciLDE0MzksInFib3BvbW9mbyIsMTI1NjEsInFjaXJjbGUiLDk0NDAsInFob29rIiw2NzIsInFtb25vc3BhY2UiLDY1MzYxLCJxb2YiLDE1MTEsInFvZmRhZ2VzaCIsNjQzMjcsInFvZmRhZ2VzaGhlYnJldyIsNjQzMjcsInFvZmhlYnJldyIsMTUxMSwicXBhcmVuIiw5Mzg4LCJxdWFydGVybm90ZSIsOTgzMywicXVidXRzIiwxNDY3LCJxdWJ1dHMxOCIsMTQ2NywicXVidXRzMjUiLDE0NjcsInF1YnV0czMxIiwxNDY3LCJxdWJ1dHNoZWJyZXciLDE0NjcsInF1YnV0c25hcnJvd2hlYnJldyIsMTQ2NywicXVidXRzcXVhcnRlcmhlYnJldyIsMTQ2NywicXVidXRzd2lkZWhlYnJldyIsMTQ2NywicXVlc3Rpb24iLDYzLCJxdWVzdGlvbmFyYWJpYyIsMTU2NywicXVlc3Rpb25hcm1lbmlhbiIsMTM3NCwicXVlc3Rpb25kb3duIiwxOTEsInF1ZXN0aW9uZG93bnNtYWxsIiw2MzQyMywicXVlc3Rpb25ncmVlayIsODk0LCJxdWVzdGlvbm1vbm9zcGFjZSIsNjUzMTEsInF1ZXN0aW9uc21hbGwiLDYzMjk1LCJxdW90ZWRibCIsMzQsInF1b3RlZGJsYmFzZSIsODIyMiwicXVvdGVkYmxsZWZ0Iiw4MjIwLCJxdW90ZWRibG1vbm9zcGFjZSIsNjUyODIsInF1b3RlZGJscHJpbWUiLDEyMzE4LCJxdW90ZWRibHByaW1lcmV2ZXJzZWQiLDEyMzE3LCJxdW90ZWRibHJpZ2h0Iiw4MjIxLCJxdW90ZWxlZnQiLDgyMTYsInF1b3RlbGVmdHJldmVyc2VkIiw4MjE5LCJxdW90ZXJldmVyc2VkIiw4MjE5LCJxdW90ZXJpZ2h0Iiw4MjE3LCJxdW90ZXJpZ2h0biIsMzI5LCJxdW90ZXNpbmdsYmFzZSIsODIxOCwicXVvdGVzaW5nbGUiLDM5LCJxdW90ZXNpbmdsZW1vbm9zcGFjZSIsNjUyODcsInIiLDExNCwicmFhcm1lbmlhbiIsMTQwNCwicmFiZW5nYWxpIiwyNDgwLCJyYWN1dGUiLDM0MSwicmFkZXZhIiwyMzUyLCJyYWRpY2FsIiw4NzMwLCJyYWRpY2FsZXgiLDYzNzE3LCJyYWRvdmVyc3NxdWFyZSIsMTMyMzAsInJhZG92ZXJzc3F1YXJlZHNxdWFyZSIsMTMyMzEsInJhZHNxdWFyZSIsMTMyMjksInJhZmUiLDE0NzEsInJhZmVoZWJyZXciLDE0NzEsInJhZ3VqYXJhdGkiLDI3MzYsInJhZ3VybXVraGkiLDI2MDgsInJhaGlyYWdhbmEiLDEyNDI1LCJyYWthdGFrYW5hIiwxMjUyMSwicmFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzEsInJhbG93ZXJkaWFnb25hbGJlbmdhbGkiLDI1NDUsInJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpIiwyNTQ0LCJyYW1zaG9ybiIsNjEyLCJyYXRpbyIsODc1OCwicmJvcG9tb2ZvIiwxMjU2NiwicmNhcm9uIiwzNDUsInJjZWRpbGxhIiwzNDMsInJjaXJjbGUiLDk0NDEsInJjb21tYWFjY2VudCIsMzQzLCJyZGJsZ3JhdmUiLDUyOSwicmRvdGFjY2VudCIsNzc2OSwicmRvdGJlbG93Iiw3NzcxLCJyZG90YmVsb3dtYWNyb24iLDc3NzMsInJlZmVyZW5jZW1hcmsiLDgyNTEsInJlZmxleHN1YnNldCIsODgzOCwicmVmbGV4c3VwZXJzZXQiLDg4MzksInJlZ2lzdGVyZWQiLDE3NCwicmVnaXN0ZXJzYW5zIiw2MzcyMCwicmVnaXN0ZXJzZXJpZiIsNjMxOTQsInJlaGFyYWJpYyIsMTU4NSwicmVoYXJtZW5pYW4iLDE0MDgsInJlaGZpbmFsYXJhYmljIiw2NTE5OCwicmVoaXJhZ2FuYSIsMTI0MjgsInJla2F0YWthbmEiLDEyNTI0LCJyZWthdGFrYW5haGFsZndpZHRoIiw2NTQzNCwicmVzaCIsMTUxMiwicmVzaGRhZ2VzaGhlYnJldyIsNjQzMjgsInJlc2hoZWJyZXciLDE1MTIsInJldmVyc2VkdGlsZGUiLDg3NjUsInJldmlhaGVicmV3IiwxNDMxLCJyZXZpYW11Z3Jhc2hoZWJyZXciLDE0MzEsInJldmxvZ2ljYWxub3QiLDg5NzYsInJmaXNoaG9vayIsNjM4LCJyZmlzaGhvb2tyZXZlcnNlZCIsNjM5LCJyaGFiZW5nYWxpIiwyNTI1LCJyaGFkZXZhIiwyMzk3LCJyaG8iLDk2MSwicmhvb2siLDYzNywicmhvb2t0dXJuZWQiLDYzNSwicmhvb2t0dXJuZWRzdXBlcmlvciIsNjkzLCJyaG9zeW1ib2xncmVlayIsMTAwOSwicmhvdGljaG9va21vZCIsNzM0LCJyaWV1bGFjaXJjbGVrb3JlYW4iLDEyOTEzLCJyaWV1bGFwYXJlbmtvcmVhbiIsMTI4MTcsInJpZXVsY2lyY2xla29yZWFuIiwxMjg5OSwicmlldWxoaWV1aGtvcmVhbiIsMTI2MDgsInJpZXVsa2l5ZW9ra29yZWFuIiwxMjYwMiwicmlldWxraXllb2tzaW9za29yZWFuIiwxMjY0OSwicmlldWxrb3JlYW4iLDEyNjAxLCJyaWV1bG1pZXVta29yZWFuIiwxMjYwMywicmlldWxwYW5zaW9za29yZWFuIiwxMjY1MiwicmlldWxwYXJlbmtvcmVhbiIsMTI4MDMsInJpZXVscGhpZXVwaGtvcmVhbiIsMTI2MDcsInJpZXVscGlldXBrb3JlYW4iLDEyNjA0LCJyaWV1bHBpZXVwc2lvc2tvcmVhbiIsMTI2NTEsInJpZXVsc2lvc2tvcmVhbiIsMTI2MDUsInJpZXVsdGhpZXV0aGtvcmVhbiIsMTI2MDYsInJpZXVsdGlrZXV0a29yZWFuIiwxMjY1MCwicmlldWx5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NTMsInJpZ2h0YW5nbGUiLDg3MzUsInJpZ2h0dGFja2JlbG93Y21iIiw3OTMsInJpZ2h0dHJpYW5nbGUiLDg4OTUsInJpaGlyYWdhbmEiLDEyNDI2LCJyaWthdGFrYW5hIiwxMjUyMiwicmlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MzIsInJpbmciLDczMCwicmluZ2JlbG93Y21iIiw4MDUsInJpbmdjbWIiLDc3OCwicmluZ2hhbGZsZWZ0Iiw3MDMsInJpbmdoYWxmbGVmdGFybWVuaWFuIiwxMzY5LCJyaW5naGFsZmxlZnRiZWxvd2NtYiIsNzk2LCJyaW5naGFsZmxlZnRjZW50ZXJlZCIsNzIzLCJyaW5naGFsZnJpZ2h0Iiw3MDIsInJpbmdoYWxmcmlnaHRiZWxvd2NtYiIsODI1LCJyaW5naGFsZnJpZ2h0Y2VudGVyZWQiLDcyMiwicmludmVydGVkYnJldmUiLDUzMSwicml0dG9ydXNxdWFyZSIsMTMxMzcsInJsaW5lYmVsb3ciLDc3NzUsInJsb25nbGVnIiw2MzYsInJsb25nbGVndHVybmVkIiw2MzQsInJtb25vc3BhY2UiLDY1MzYyLCJyb2hpcmFnYW5hIiwxMjQyOSwicm9rYXRha2FuYSIsMTI1MjUsInJva2F0YWthbmFoYWxmd2lkdGgiLDY1NDM1LCJyb3J1YXRoYWkiLDM2MTksInJwYXJlbiIsOTM4OSwicnJhYmVuZ2FsaSIsMjUyNCwicnJhZGV2YSIsMjM1MywicnJhZ3VybXVraGkiLDI2NTIsInJyZWhhcmFiaWMiLDE2ODEsInJyZWhmaW5hbGFyYWJpYyIsNjQzOTcsInJydm9jYWxpY2JlbmdhbGkiLDI1MjgsInJydm9jYWxpY2RldmEiLDI0MDAsInJydm9jYWxpY2d1amFyYXRpIiwyNzg0LCJycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNTAwLCJycnZvY2FsaWN2b3dlbHNpZ25kZXZhIiwyMzcyLCJycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aSIsMjc1NiwicnN1cGVyaW9yIiw2MzIxNywicnRibG9jayIsOTYxNiwicnR1cm5lZCIsNjMzLCJydHVybmVkc3VwZXJpb3IiLDY5MiwicnVoaXJhZ2FuYSIsMTI0MjcsInJ1a2F0YWthbmEiLDEyNTIzLCJydWthdGFrYW5haGFsZndpZHRoIiw2NTQzMywicnVwZWVtYXJrYmVuZ2FsaSIsMjU0NiwicnVwZWVzaWduYmVuZ2FsaSIsMjU0NywicnVwaWFoIiw2MzE5NywicnV0aGFpIiwzNjIwLCJydm9jYWxpY2JlbmdhbGkiLDI0NDMsInJ2b2NhbGljZGV2YSIsMjMxNSwicnZvY2FsaWNndWphcmF0aSIsMjY5OSwicnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpIiwyNDk5LCJydm9jYWxpY3Zvd2Vsc2lnbmRldmEiLDIzNzEsInJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGkiLDI3NTUsInMiLDExNSwic2FiZW5nYWxpIiwyNDg4LCJzYWN1dGUiLDM0Nywic2FjdXRlZG90YWNjZW50Iiw3NzgxLCJzYWRhcmFiaWMiLDE1ODksInNhZGV2YSIsMjM2MCwic2FkZmluYWxhcmFiaWMiLDY1MjEwLCJzYWRpbml0aWFsYXJhYmljIiw2NTIxMSwic2FkbWVkaWFsYXJhYmljIiw2NTIxMiwic2FndWphcmF0aSIsMjc0NCwic2FndXJtdWtoaSIsMjYxNiwic2FoaXJhZ2FuYSIsMTIzNzMsInNha2F0YWthbmEiLDEyNDY5LCJzYWthdGFrYW5haGFsZndpZHRoIiw2NTQwMywic2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYyIsNjUwMTgsInNhbWVraCIsMTUwNSwic2FtZWtoZGFnZXNoIiw2NDMyMSwic2FtZWtoZGFnZXNoaGVicmV3Iiw2NDMyMSwic2FtZWtoaGVicmV3IiwxNTA1LCJzYXJhYWF0aGFpIiwzNjM0LCJzYXJhYWV0aGFpIiwzNjQ5LCJzYXJhYWltYWltYWxhaXRoYWkiLDM2NTIsInNhcmFhaW1haW11YW50aGFpIiwzNjUxLCJzYXJhYW10aGFpIiwzNjM1LCJzYXJhYXRoYWkiLDM2MzIsInNhcmFldGhhaSIsMzY0OCwic2FyYWlpbGVmdHRoYWkiLDYzNjIyLCJzYXJhaWl0aGFpIiwzNjM3LCJzYXJhaWxlZnR0aGFpIiw2MzYyMSwic2FyYWl0aGFpIiwzNjM2LCJzYXJhb3RoYWkiLDM2NTAsInNhcmF1ZWVsZWZ0dGhhaSIsNjM2MjQsInNhcmF1ZWV0aGFpIiwzNjM5LCJzYXJhdWVsZWZ0dGhhaSIsNjM2MjMsInNhcmF1ZXRoYWkiLDM2MzgsInNhcmF1dGhhaSIsMzY0MCwic2FyYXV1dGhhaSIsMzY0MSwic2JvcG9tb2ZvIiwxMjU2OSwic2Nhcm9uIiwzNTMsInNjYXJvbmRvdGFjY2VudCIsNzc4Mywic2NlZGlsbGEiLDM1MSwic2Nod2EiLDYwMSwic2Nod2FjeXJpbGxpYyIsMTI0MSwic2Nod2FkaWVyZXNpc2N5cmlsbGljIiwxMjQzLCJzY2h3YWhvb2siLDYwMiwic2NpcmNsZSIsOTQ0Miwic2NpcmN1bWZsZXgiLDM0OSwic2NvbW1hYWNjZW50Iiw1MzcsInNkb3RhY2NlbnQiLDc3NzcsInNkb3RiZWxvdyIsNzc3OSwic2RvdGJlbG93ZG90YWNjZW50Iiw3Nzg1LCJzZWFndWxsYmVsb3djbWIiLDgyOCwic2Vjb25kIiw4MjQzLCJzZWNvbmR0b25lY2hpbmVzZSIsNzE0LCJzZWN0aW9uIiwxNjcsInNlZW5hcmFiaWMiLDE1ODcsInNlZW5maW5hbGFyYWJpYyIsNjUyMDIsInNlZW5pbml0aWFsYXJhYmljIiw2NTIwMywic2Vlbm1lZGlhbGFyYWJpYyIsNjUyMDQsInNlZ29sIiwxNDYyLCJzZWdvbDEzIiwxNDYyLCJzZWdvbDFmIiwxNDYyLCJzZWdvbDJjIiwxNDYyLCJzZWdvbGhlYnJldyIsMTQ2Miwic2Vnb2xuYXJyb3doZWJyZXciLDE0NjIsInNlZ29scXVhcnRlcmhlYnJldyIsMTQ2Miwic2Vnb2x0YWhlYnJldyIsMTQyNiwic2Vnb2x3aWRlaGVicmV3IiwxNDYyLCJzZWhhcm1lbmlhbiIsMTQwNSwic2VoaXJhZ2FuYSIsMTIzNzksInNla2F0YWthbmEiLDEyNDc1LCJzZWthdGFrYW5haGFsZndpZHRoIiw2NTQwNiwic2VtaWNvbG9uIiw1OSwic2VtaWNvbG9uYXJhYmljIiwxNTYzLCJzZW1pY29sb25tb25vc3BhY2UiLDY1MzA3LCJzZW1pY29sb25zbWFsbCIsNjUxMDgsInNlbWl2b2ljZWRtYXJra2FuYSIsMTI0NDQsInNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aCIsNjU0MzksInNlbnRpc3F1YXJlIiwxMzA5MCwic2VudG9zcXVhcmUiLDEzMDkxLCJzZXZlbiIsNTUsInNldmVuYXJhYmljIiwxNjM5LCJzZXZlbmJlbmdhbGkiLDI1NDEsInNldmVuY2lyY2xlIiw5MzE4LCJzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYiLDEwMTI4LCJzZXZlbmRldmEiLDI0MTMsInNldmVuZWlnaHRocyIsODU0Miwic2V2ZW5ndWphcmF0aSIsMjc5Nywic2V2ZW5ndXJtdWtoaSIsMjY2OSwic2V2ZW5oYWNrYXJhYmljIiwxNjM5LCJzZXZlbmhhbmd6aG91IiwxMjMyNywic2V2ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjgzOCwic2V2ZW5pbmZlcmlvciIsODMyNywic2V2ZW5tb25vc3BhY2UiLDY1MzAzLCJzZXZlbm9sZHN0eWxlIiw2MzI4Nywic2V2ZW5wYXJlbiIsOTMzOCwic2V2ZW5wZXJpb2QiLDkzNTgsInNldmVucGVyc2lhbiIsMTc4Mywic2V2ZW5yb21hbiIsODU2Niwic2V2ZW5zdXBlcmlvciIsODMxMSwic2V2ZW50ZWVuY2lyY2xlIiw5MzI4LCJzZXZlbnRlZW5wYXJlbiIsOTM0OCwic2V2ZW50ZWVucGVyaW9kIiw5MzY4LCJzZXZlbnRoYWkiLDM2NzEsInNmdGh5cGhlbiIsMTczLCJzaGFhcm1lbmlhbiIsMTM5OSwic2hhYmVuZ2FsaSIsMjQ4Niwic2hhY3lyaWxsaWMiLDEwOTYsInNoYWRkYWFyYWJpYyIsMTYxNywic2hhZGRhZGFtbWFhcmFiaWMiLDY0NjA5LCJzaGFkZGFkYW1tYXRhbmFyYWJpYyIsNjQ2MDYsInNoYWRkYWZhdGhhYXJhYmljIiw2NDYwOCwic2hhZGRha2FzcmFhcmFiaWMiLDY0NjEwLCJzaGFkZGFrYXNyYXRhbmFyYWJpYyIsNjQ2MDcsInNoYWRlIiw5NjE4LCJzaGFkZWRhcmsiLDk2MTksInNoYWRlbGlnaHQiLDk2MTcsInNoYWRlbWVkaXVtIiw5NjE4LCJzaGFkZXZhIiwyMzU4LCJzaGFndWphcmF0aSIsMjc0Miwic2hhZ3VybXVraGkiLDI2MTQsInNoYWxzaGVsZXRoZWJyZXciLDE0MjcsInNoYm9wb21vZm8iLDEyNTY1LCJzaGNoYWN5cmlsbGljIiwxMDk3LCJzaGVlbmFyYWJpYyIsMTU4OCwic2hlZW5maW5hbGFyYWJpYyIsNjUyMDYsInNoZWVuaW5pdGlhbGFyYWJpYyIsNjUyMDcsInNoZWVubWVkaWFsYXJhYmljIiw2NTIwOCwic2hlaWNvcHRpYyIsOTk1LCJzaGVxZWwiLDgzNjIsInNoZXFlbGhlYnJldyIsODM2Miwic2hldmEiLDE0NTYsInNoZXZhMTE1IiwxNDU2LCJzaGV2YTE1IiwxNDU2LCJzaGV2YTIyIiwxNDU2LCJzaGV2YTJlIiwxNDU2LCJzaGV2YWhlYnJldyIsMTQ1Niwic2hldmFuYXJyb3doZWJyZXciLDE0NTYsInNoZXZhcXVhcnRlcmhlYnJldyIsMTQ1Niwic2hldmF3aWRlaGVicmV3IiwxNDU2LCJzaGhhY3lyaWxsaWMiLDEyMTEsInNoaW1hY29wdGljIiwxMDA1LCJzaGluIiwxNTEzLCJzaGluZGFnZXNoIiw2NDMyOSwic2hpbmRhZ2VzaGhlYnJldyIsNjQzMjksInNoaW5kYWdlc2hzaGluZG90Iiw2NDMwMCwic2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXciLDY0MzAwLCJzaGluZGFnZXNoc2luZG90Iiw2NDMwMSwic2hpbmRhZ2VzaHNpbmRvdGhlYnJldyIsNjQzMDEsInNoaW5kb3RoZWJyZXciLDE0NzMsInNoaW5oZWJyZXciLDE1MTMsInNoaW5zaGluZG90Iiw2NDI5OCwic2hpbnNoaW5kb3RoZWJyZXciLDY0Mjk4LCJzaGluc2luZG90Iiw2NDI5OSwic2hpbnNpbmRvdGhlYnJldyIsNjQyOTksInNob29rIiw2NDIsInNpZ21hIiw5NjMsInNpZ21hMSIsOTYyLCJzaWdtYWZpbmFsIiw5NjIsInNpZ21hbHVuYXRlc3ltYm9sZ3JlZWsiLDEwMTAsInNpaGlyYWdhbmEiLDEyMzc1LCJzaWthdGFrYW5hIiwxMjQ3MSwic2lrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDQsInNpbHVxaGVicmV3IiwxNDY5LCJzaWx1cWxlZnRoZWJyZXciLDE0NjksInNpbWlsYXIiLDg3NjQsInNpbmRvdGhlYnJldyIsMTQ3NCwic2lvc2FjaXJjbGVrb3JlYW4iLDEyOTE2LCJzaW9zYXBhcmVua29yZWFuIiwxMjgyMCwic2lvc2NpZXVja29yZWFuIiwxMjY3MCwic2lvc2NpcmNsZWtvcmVhbiIsMTI5MDIsInNpb3NraXllb2trb3JlYW4iLDEyNjY2LCJzaW9za29yZWFuIiwxMjYxMywic2lvc25pZXVua29yZWFuIiwxMjY2Nywic2lvc3BhcmVua29yZWFuIiwxMjgwNiwic2lvc3BpZXVwa29yZWFuIiwxMjY2OSwic2lvc3Rpa2V1dGtvcmVhbiIsMTI2NjgsInNpeCIsNTQsInNpeGFyYWJpYyIsMTYzOCwic2l4YmVuZ2FsaSIsMjU0MCwic2l4Y2lyY2xlIiw5MzE3LCJzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNywic2l4ZGV2YSIsMjQxMiwic2l4Z3VqYXJhdGkiLDI3OTYsInNpeGd1cm11a2hpIiwyNjY4LCJzaXhoYWNrYXJhYmljIiwxNjM4LCJzaXhoYW5nemhvdSIsMTIzMjYsInNpeGlkZW9ncmFwaGljcGFyZW4iLDEyODM3LCJzaXhpbmZlcmlvciIsODMyNiwic2l4bW9ub3NwYWNlIiw2NTMwMiwic2l4b2xkc3R5bGUiLDYzMjg2LCJzaXhwYXJlbiIsOTMzNywic2l4cGVyaW9kIiw5MzU3LCJzaXhwZXJzaWFuIiwxNzgyLCJzaXhyb21hbiIsODU2NSwic2l4c3VwZXJpb3IiLDgzMTAsInNpeHRlZW5jaXJjbGUiLDkzMjcsInNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSIsMjU1Mywic2l4dGVlbnBhcmVuIiw5MzQ3LCJzaXh0ZWVucGVyaW9kIiw5MzY3LCJzaXh0aGFpIiwzNjcwLCJzbGFzaCIsNDcsInNsYXNobW9ub3NwYWNlIiw2NTI5NSwic2xvbmciLDM4Mywic2xvbmdkb3RhY2NlbnQiLDc4MzUsInNtaWxlZmFjZSIsOTc4Niwic21vbm9zcGFjZSIsNjUzNjMsInNvZnBhc3VxaGVicmV3IiwxNDc1LCJzb2Z0aHlwaGVuIiwxNzMsInNvZnRzaWduY3lyaWxsaWMiLDExMDAsInNvaGlyYWdhbmEiLDEyMzgxLCJzb2thdGFrYW5hIiwxMjQ3Nywic29rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDcsInNvbGlkdXNsb25nb3ZlcmxheWNtYiIsODI0LCJzb2xpZHVzc2hvcnRvdmVybGF5Y21iIiw4MjMsInNvcnVzaXRoYWkiLDM2MjUsInNvc2FsYXRoYWkiLDM2MjQsInNvc290aGFpIiwzNTk1LCJzb3N1YXRoYWkiLDM2MjYsInNwYWNlIiwzMiwic3BhY2VoYWNrYXJhYmljIiwzMiwic3BhZGUiLDk4MjQsInNwYWRlc3VpdGJsYWNrIiw5ODI0LCJzcGFkZXN1aXR3aGl0ZSIsOTgyOCwic3BhcmVuIiw5MzkwLCJzcXVhcmViZWxvd2NtYiIsODI3LCJzcXVhcmVjYyIsMTMyNTIsInNxdWFyZWNtIiwxMzIxMywic3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTY0MSwic3F1YXJlaG9yaXpvbnRhbGZpbGwiLDk2MzYsInNxdWFyZWtnIiwxMzE5OSwic3F1YXJla20iLDEzMjE0LCJzcXVhcmVrbWNhcGl0YWwiLDEzMjYyLCJzcXVhcmVsbiIsMTMyNjUsInNxdWFyZWxvZyIsMTMyNjYsInNxdWFyZW1nIiwxMzE5OCwic3F1YXJlbWlsIiwxMzI2OSwic3F1YXJlbW0iLDEzMjEyLCJzcXVhcmVtc3F1YXJlZCIsMTMyMTcsInNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbCIsOTYzOCwic3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCIsOTYzOSwic3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbCIsOTY0MCwic3F1YXJldmVydGljYWxmaWxsIiw5NjM3LCJzcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrIiw5NjM1LCJzcnNxdWFyZSIsMTMyNzUsInNzYWJlbmdhbGkiLDI0ODcsInNzYWRldmEiLDIzNTksInNzYWd1amFyYXRpIiwyNzQzLCJzc2FuZ2NpZXVja29yZWFuIiwxMjYxNywic3NhbmdoaWV1aGtvcmVhbiIsMTI2NzcsInNzYW5naWV1bmdrb3JlYW4iLDEyNjcyLCJzc2FuZ2tpeWVva2tvcmVhbiIsMTI1OTQsInNzYW5nbmlldW5rb3JlYW4iLDEyNjQ1LCJzc2FuZ3BpZXVwa29yZWFuIiwxMjYxMSwic3NhbmdzaW9za29yZWFuIiwxMjYxNCwic3Nhbmd0aWtldXRrb3JlYW4iLDEyNjAwLCJzc3VwZXJpb3IiLDYzMjE4LCJzdGVybGluZyIsMTYzLCJzdGVybGluZ21vbm9zcGFjZSIsNjU1MDUsInN0cm9rZWxvbmdvdmVybGF5Y21iIiw4MjIsInN0cm9rZXNob3J0b3ZlcmxheWNtYiIsODIxLCJzdWJzZXQiLDg4MzQsInN1YnNldG5vdGVxdWFsIiw4ODQyLCJzdWJzZXRvcmVxdWFsIiw4ODM4LCJzdWNjZWVkcyIsODgyNywic3VjaHRoYXQiLDg3MTUsInN1aGlyYWdhbmEiLDEyMzc3LCJzdWthdGFrYW5hIiwxMjQ3Mywic3VrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDUsInN1a3VuYXJhYmljIiwxNjE4LCJzdW1tYXRpb24iLDg3MjEsInN1biIsOTc4OCwic3VwZXJzZXQiLDg4MzUsInN1cGVyc2V0bm90ZXF1YWwiLDg4NDMsInN1cGVyc2V0b3JlcXVhbCIsODgzOSwic3ZzcXVhcmUiLDEzMjc2LCJzeW91d2FlcmFzcXVhcmUiLDEzMTgwLCJ0IiwxMTYsInRhYmVuZ2FsaSIsMjQ2OCwidGFja2Rvd24iLDg4NjgsInRhY2tsZWZ0Iiw4ODY3LCJ0YWRldmEiLDIzNDAsInRhZ3VqYXJhdGkiLDI3MjQsInRhZ3VybXVraGkiLDI1OTYsInRhaGFyYWJpYyIsMTU5MSwidGFoZmluYWxhcmFiaWMiLDY1MjE4LCJ0YWhpbml0aWFsYXJhYmljIiw2NTIxOSwidGFoaXJhZ2FuYSIsMTIzODMsInRhaG1lZGlhbGFyYWJpYyIsNjUyMjAsInRhaXN5b3VlcmFzcXVhcmUiLDEzMTgxLCJ0YWthdGFrYW5hIiwxMjQ3OSwidGFrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDgsInRhdHdlZWxhcmFiaWMiLDE2MDAsInRhdSIsOTY0LCJ0YXYiLDE1MTQsInRhdmRhZ2VzIiw2NDMzMCwidGF2ZGFnZXNoIiw2NDMzMCwidGF2ZGFnZXNoaGVicmV3Iiw2NDMzMCwidGF2aGVicmV3IiwxNTE0LCJ0YmFyIiwzNTksInRib3BvbW9mbyIsMTI1NTQsInRjYXJvbiIsMzU3LCJ0Y2N1cmwiLDY4MCwidGNlZGlsbGEiLDM1NSwidGNoZWhhcmFiaWMiLDE2NzAsInRjaGVoZmluYWxhcmFiaWMiLDY0Mzc5LCJ0Y2hlaGluaXRpYWxhcmFiaWMiLDY0MzgwLCJ0Y2hlaG1lZGlhbGFyYWJpYyIsNjQzODEsInRjaXJjbGUiLDk0NDMsInRjaXJjdW1mbGV4YmVsb3ciLDc3OTMsInRjb21tYWFjY2VudCIsMzU1LCJ0ZGllcmVzaXMiLDc4MzEsInRkb3RhY2NlbnQiLDc3ODcsInRkb3RiZWxvdyIsNzc4OSwidGVjeXJpbGxpYyIsMTA5MCwidGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE5NywidGVoYXJhYmljIiwxNTc4LCJ0ZWhmaW5hbGFyYWJpYyIsNjUxNzQsInRlaGhhaGluaXRpYWxhcmFiaWMiLDY0Njc0LCJ0ZWhoYWhpc29sYXRlZGFyYWJpYyIsNjQ1MjQsInRlaGluaXRpYWxhcmFiaWMiLDY1MTc1LCJ0ZWhpcmFnYW5hIiwxMjM5MCwidGVoamVlbWluaXRpYWxhcmFiaWMiLDY0NjczLCJ0ZWhqZWVtaXNvbGF0ZWRhcmFiaWMiLDY0NTIzLCJ0ZWhtYXJidXRhYXJhYmljIiwxNTc3LCJ0ZWhtYXJidXRhZmluYWxhcmFiaWMiLDY1MTcyLCJ0ZWhtZWRpYWxhcmFiaWMiLDY1MTc2LCJ0ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ2NzYsInRlaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ1MjYsInRlaG5vb25maW5hbGFyYWJpYyIsNjQ2MjcsInRla2F0YWthbmEiLDEyNDg2LCJ0ZWthdGFrYW5haGFsZndpZHRoIiw2NTQxMSwidGVsZXBob25lIiw4NDgxLCJ0ZWxlcGhvbmVibGFjayIsOTc0MiwidGVsaXNoYWdlZG9sYWhlYnJldyIsMTQ0MCwidGVsaXNoYXFldGFuYWhlYnJldyIsMTQ0OSwidGVuY2lyY2xlIiw5MzIxLCJ0ZW5pZGVvZ3JhcGhpY3BhcmVuIiwxMjg0MSwidGVucGFyZW4iLDkzNDEsInRlbnBlcmlvZCIsOTM2MSwidGVucm9tYW4iLDg1NjksInRlc2giLDY3OSwidGV0IiwxNDk2LCJ0ZXRkYWdlc2giLDY0MzEyLCJ0ZXRkYWdlc2hoZWJyZXciLDY0MzEyLCJ0ZXRoZWJyZXciLDE0OTYsInRldHNlY3lyaWxsaWMiLDEyMDUsInRldmlyaGVicmV3IiwxNDM1LCJ0ZXZpcmxlZnRoZWJyZXciLDE0MzUsInRoYWJlbmdhbGkiLDI0NjksInRoYWRldmEiLDIzNDEsInRoYWd1amFyYXRpIiwyNzI1LCJ0aGFndXJtdWtoaSIsMjU5NywidGhhbGFyYWJpYyIsMTU4NCwidGhhbGZpbmFsYXJhYmljIiw2NTE5NiwidGhhbnRoYWtoYXRsb3dsZWZ0dGhhaSIsNjM2NDAsInRoYW50aGFraGF0bG93cmlnaHR0aGFpIiw2MzYzOSwidGhhbnRoYWtoYXR0aGFpIiwzNjYwLCJ0aGFudGhha2hhdHVwcGVybGVmdHRoYWkiLDYzNjM4LCJ0aGVoYXJhYmljIiwxNTc5LCJ0aGVoZmluYWxhcmFiaWMiLDY1MTc4LCJ0aGVoaW5pdGlhbGFyYWJpYyIsNjUxNzksInRoZWhtZWRpYWxhcmFiaWMiLDY1MTgwLCJ0aGVyZWV4aXN0cyIsODcwNywidGhlcmVmb3JlIiw4NzU2LCJ0aGV0YSIsOTUyLCJ0aGV0YTEiLDk3NywidGhldGFzeW1ib2xncmVlayIsOTc3LCJ0aGlldXRoYWNpcmNsZWtvcmVhbiIsMTI5MjEsInRoaWV1dGhhcGFyZW5rb3JlYW4iLDEyODI1LCJ0aGlldXRoY2lyY2xla29yZWFuIiwxMjkwNywidGhpZXV0aGtvcmVhbiIsMTI2MjAsInRoaWV1dGhwYXJlbmtvcmVhbiIsMTI4MTEsInRoaXJ0ZWVuY2lyY2xlIiw5MzI0LCJ0aGlydGVlbnBhcmVuIiw5MzQ0LCJ0aGlydGVlbnBlcmlvZCIsOTM2NCwidGhvbmFuZ21vbnRob3RoYWkiLDM2MDEsInRob29rIiw0MjksInRob3BodXRoYW90aGFpIiwzNjAyLCJ0aG9ybiIsMjU0LCJ0aG90aGFoYW50aGFpIiwzNjA3LCJ0aG90aGFudGhhaSIsMzYwMCwidGhvdGhvbmd0aGFpIiwzNjA4LCJ0aG90aHVuZ3RoYWkiLDM2MDYsInRob3VzYW5kY3lyaWxsaWMiLDExNTQsInRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYyIsMTY0NCwidGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiIsMTY0NCwidGhyZWUiLDUxLCJ0aHJlZWFyYWJpYyIsMTYzNSwidGhyZWViZW5nYWxpIiwyNTM3LCJ0aHJlZWNpcmNsZSIsOTMxNCwidGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyNCwidGhyZWVkZXZhIiwyNDA5LCJ0aHJlZWVpZ2h0aHMiLDg1NDAsInRocmVlZ3VqYXJhdGkiLDI3OTMsInRocmVlZ3VybXVraGkiLDI2NjUsInRocmVlaGFja2FyYWJpYyIsMTYzNSwidGhyZWVoYW5nemhvdSIsMTIzMjMsInRocmVlaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzQsInRocmVlaW5mZXJpb3IiLDgzMjMsInRocmVlbW9ub3NwYWNlIiw2NTI5OSwidGhyZWVudW1lcmF0b3JiZW5nYWxpIiwyNTUwLCJ0aHJlZW9sZHN0eWxlIiw2MzI4MywidGhyZWVwYXJlbiIsOTMzNCwidGhyZWVwZXJpb2QiLDkzNTQsInRocmVlcGVyc2lhbiIsMTc3OSwidGhyZWVxdWFydGVycyIsMTkwLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiw2MzE5OCwidGhyZWVyb21hbiIsODU2MiwidGhyZWVzdXBlcmlvciIsMTc5LCJ0aHJlZXRoYWkiLDM2NjcsInRoenNxdWFyZSIsMTMyMDQsInRpaGlyYWdhbmEiLDEyMzg1LCJ0aWthdGFrYW5hIiwxMjQ4MSwidGlrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MDksInRpa2V1dGFjaXJjbGVrb3JlYW4iLDEyOTEyLCJ0aWtldXRhcGFyZW5rb3JlYW4iLDEyODE2LCJ0aWtldXRjaXJjbGVrb3JlYW4iLDEyODk4LCJ0aWtldXRrb3JlYW4iLDEyNTk5LCJ0aWtldXRwYXJlbmtvcmVhbiIsMTI4MDIsInRpbGRlIiw3MzIsInRpbGRlYmVsb3djbWIiLDgxNiwidGlsZGVjbWIiLDc3MSwidGlsZGVjb21iIiw3NzEsInRpbGRlZG91YmxlY21iIiw4NjQsInRpbGRlb3BlcmF0b3IiLDg3NjQsInRpbGRlb3ZlcmxheWNtYiIsODIwLCJ0aWxkZXZlcnRpY2FsY21iIiw4MzAsInRpbWVzY2lyY2xlIiw4ODU1LCJ0aXBlaGFoZWJyZXciLDE0MzAsInRpcGVoYWxlZnRoZWJyZXciLDE0MzAsInRpcHBpZ3VybXVraGkiLDI2NzIsInRpdGxvY3lyaWxsaWNjbWIiLDExNTUsInRpd25hcm1lbmlhbiIsMTQwNywidGxpbmViZWxvdyIsNzc5MSwidG1vbm9zcGFjZSIsNjUzNjQsInRvYXJtZW5pYW4iLDEzODUsInRvaGlyYWdhbmEiLDEyMzkyLCJ0b2thdGFrYW5hIiwxMjQ4OCwidG9rYXRha2FuYWhhbGZ3aWR0aCIsNjU0MTIsInRvbmViYXJleHRyYWhpZ2htb2QiLDc0MSwidG9uZWJhcmV4dHJhbG93bW9kIiw3NDUsInRvbmViYXJoaWdobW9kIiw3NDIsInRvbmViYXJsb3dtb2QiLDc0NCwidG9uZWJhcm1pZG1vZCIsNzQzLCJ0b25lZml2ZSIsNDQ1LCJ0b25lc2l4IiwzODksInRvbmV0d28iLDQyNCwidG9ub3MiLDkwMCwidG9uc3F1YXJlIiwxMzA5NSwidG9wYXRha3RoYWkiLDM1OTksInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMDgsInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsIiw2NTExNywidG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDgxLCJ0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0IiwxMjMwOSwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsIiw2NTExOCwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsIiw2NTA4MiwidG90YW90aGFpIiwzNjA1LCJ0cGFsYXRhbGhvb2siLDQyNywidHBhcmVuIiw5MzkxLCJ0cmFkZW1hcmsiLDg0ODIsInRyYWRlbWFya3NhbnMiLDYzNzIyLCJ0cmFkZW1hcmtzZXJpZiIsNjMxOTUsInRyZXRyb2ZsZXhob29rIiw2NDgsInRyaWFnZG4iLDk2NjAsInRyaWFnbGYiLDk2NjgsInRyaWFncnQiLDk2NTgsInRyaWFndXAiLDk2NTAsInRzIiw2NzgsInRzYWRpIiwxNTEwLCJ0c2FkaWRhZ2VzaCIsNjQzMjYsInRzYWRpZGFnZXNoaGVicmV3Iiw2NDMyNiwidHNhZGloZWJyZXciLDE1MTAsInRzZWN5cmlsbGljIiwxMDk0LCJ0c2VyZSIsMTQ2MSwidHNlcmUxMiIsMTQ2MSwidHNlcmUxZSIsMTQ2MSwidHNlcmUyYiIsMTQ2MSwidHNlcmVoZWJyZXciLDE0NjEsInRzZXJlbmFycm93aGVicmV3IiwxNDYxLCJ0c2VyZXF1YXJ0ZXJoZWJyZXciLDE0NjEsInRzZXJld2lkZWhlYnJldyIsMTQ2MSwidHNoZWN5cmlsbGljIiwxMTE1LCJ0c3VwZXJpb3IiLDYzMjE5LCJ0dGFiZW5nYWxpIiwyNDYzLCJ0dGFkZXZhIiwyMzM1LCJ0dGFndWphcmF0aSIsMjcxOSwidHRhZ3VybXVraGkiLDI1OTEsInR0ZWhhcmFiaWMiLDE2NTcsInR0ZWhmaW5hbGFyYWJpYyIsNjQzNTksInR0ZWhpbml0aWFsYXJhYmljIiw2NDM2MCwidHRlaG1lZGlhbGFyYWJpYyIsNjQzNjEsInR0aGFiZW5nYWxpIiwyNDY0LCJ0dGhhZGV2YSIsMjMzNiwidHRoYWd1amFyYXRpIiwyNzIwLCJ0dGhhZ3VybXVraGkiLDI1OTIsInR0dXJuZWQiLDY0NywidHVoaXJhZ2FuYSIsMTIzODgsInR1a2F0YWthbmEiLDEyNDg0LCJ0dWthdGFrYW5haGFsZndpZHRoIiw2NTQxMCwidHVzbWFsbGhpcmFnYW5hIiwxMjM4NywidHVzbWFsbGthdGFrYW5hIiwxMjQ4MywidHVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM5MSwidHdlbHZlY2lyY2xlIiw5MzIzLCJ0d2VsdmVwYXJlbiIsOTM0MywidHdlbHZlcGVyaW9kIiw5MzYzLCJ0d2VsdmVyb21hbiIsODU3MSwidHdlbnR5Y2lyY2xlIiw5MzMxLCJ0d2VudHloYW5nemhvdSIsMjEzMTYsInR3ZW50eXBhcmVuIiw5MzUxLCJ0d2VudHlwZXJpb2QiLDkzNzEsInR3byIsNTAsInR3b2FyYWJpYyIsMTYzNCwidHdvYmVuZ2FsaSIsMjUzNiwidHdvY2lyY2xlIiw5MzEzLCJ0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmIiwxMDEyMywidHdvZGV2YSIsMjQwOCwidHdvZG90ZW5sZWFkZXIiLDgyMjksInR3b2RvdGxlYWRlciIsODIyOSwidHdvZG90bGVhZGVydmVydGljYWwiLDY1MDcyLCJ0d29ndWphcmF0aSIsMjc5MiwidHdvZ3VybXVraGkiLDI2NjQsInR3b2hhY2thcmFiaWMiLDE2MzQsInR3b2hhbmd6aG91IiwxMjMyMiwidHdvaWRlb2dyYXBoaWNwYXJlbiIsMTI4MzMsInR3b2luZmVyaW9yIiw4MzIyLCJ0d29tb25vc3BhY2UiLDY1Mjk4LCJ0d29udW1lcmF0b3JiZW5nYWxpIiwyNTQ5LCJ0d29vbGRzdHlsZSIsNjMyODIsInR3b3BhcmVuIiw5MzMzLCJ0d29wZXJpb2QiLDkzNTMsInR3b3BlcnNpYW4iLDE3NzgsInR3b3JvbWFuIiw4NTYxLCJ0d29zdHJva2UiLDQ0MywidHdvc3VwZXJpb3IiLDE3OCwidHdvdGhhaSIsMzY2NiwidHdvdGhpcmRzIiw4NTMyLCJ1IiwxMTcsInVhY3V0ZSIsMjUwLCJ1YmFyIiw2NDksInViZW5nYWxpIiwyNDQxLCJ1Ym9wb21vZm8iLDEyNTg0LCJ1YnJldmUiLDM2NSwidWNhcm9uIiw0NjgsInVjaXJjbGUiLDk0NDQsInVjaXJjdW1mbGV4IiwyNTEsInVjaXJjdW1mbGV4YmVsb3ciLDc3OTksInVjeXJpbGxpYyIsMTA5MSwidWRhdHRhZGV2YSIsMjM4NSwidWRibGFjdXRlIiwzNjksInVkYmxncmF2ZSIsNTMzLCJ1ZGV2YSIsMjMxMywidWRpZXJlc2lzIiwyNTIsInVkaWVyZXNpc2FjdXRlIiw0NzIsInVkaWVyZXNpc2JlbG93Iiw3Nzk1LCJ1ZGllcmVzaXNjYXJvbiIsNDc0LCJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI2NSwidWRpZXJlc2lzZ3JhdmUiLDQ3NiwidWRpZXJlc2lzbWFjcm9uIiw0NzAsInVkb3RiZWxvdyIsNzkwOSwidWdyYXZlIiwyNDksInVndWphcmF0aSIsMjY5NywidWd1cm11a2hpIiwyNTY5LCJ1aGlyYWdhbmEiLDEyMzU4LCJ1aG9va2Fib3ZlIiw3OTExLCJ1aG9ybiIsNDMyLCJ1aG9ybmFjdXRlIiw3OTEzLCJ1aG9ybmRvdGJlbG93Iiw3OTIxLCJ1aG9ybmdyYXZlIiw3OTE1LCJ1aG9ybmhvb2thYm92ZSIsNzkxNywidWhvcm50aWxkZSIsNzkxOSwidWh1bmdhcnVtbGF1dCIsMzY5LCJ1aHVuZ2FydW1sYXV0Y3lyaWxsaWMiLDEyNjcsInVpbnZlcnRlZGJyZXZlIiw1MzUsInVrYXRha2FuYSIsMTI0NTQsInVrYXRha2FuYWhhbGZ3aWR0aCIsNjUzOTUsInVrY3lyaWxsaWMiLDExNDUsInVrb3JlYW4iLDEyNjM2LCJ1bWFjcm9uIiwzNjMsInVtYWNyb25jeXJpbGxpYyIsMTI2MywidW1hY3JvbmRpZXJlc2lzIiw3ODAzLCJ1bWF0cmFndXJtdWtoaSIsMjYyNSwidW1vbm9zcGFjZSIsNjUzNjUsInVuZGVyc2NvcmUiLDk1LCJ1bmRlcnNjb3JlZGJsIiw4MjE1LCJ1bmRlcnNjb3JlbW9ub3NwYWNlIiw2NTM0MywidW5kZXJzY29yZXZlcnRpY2FsIiw2NTA3NSwidW5kZXJzY29yZXdhdnkiLDY1MTAzLCJ1bmlvbiIsODc0NiwidW5pdmVyc2FsIiw4NzA0LCJ1b2dvbmVrIiwzNzEsInVwYXJlbiIsOTM5MiwidXBibG9jayIsOTYwMCwidXBwZXJkb3RoZWJyZXciLDE0NzYsInVwc2lsb24iLDk2NSwidXBzaWxvbmRpZXJlc2lzIiw5NzEsInVwc2lsb25kaWVyZXNpc3Rvbm9zIiw5NDQsInVwc2lsb25sYXRpbiIsNjUwLCJ1cHNpbG9udG9ub3MiLDk3MywidXB0YWNrYmVsb3djbWIiLDc5NywidXB0YWNrbW9kIiw3MjQsInVyYWd1cm11a2hpIiwyNjc1LCJ1cmluZyIsMzY3LCJ1c2hvcnRjeXJpbGxpYyIsMTExOCwidXNtYWxsaGlyYWdhbmEiLDEyMzU3LCJ1c21hbGxrYXRha2FuYSIsMTI0NTMsInVzbWFsbGthdGFrYW5haGFsZndpZHRoIiw2NTM4NSwidXN0cmFpZ2h0Y3lyaWxsaWMiLDExOTksInVzdHJhaWdodHN0cm9rZWN5cmlsbGljIiwxMjAxLCJ1dGlsZGUiLDM2MSwidXRpbGRlYWN1dGUiLDc4MDEsInV0aWxkZWJlbG93Iiw3Nzk3LCJ1dWJlbmdhbGkiLDI0NDIsInV1ZGV2YSIsMjMxNCwidXVndWphcmF0aSIsMjY5OCwidXVndXJtdWtoaSIsMjU3MCwidXVtYXRyYWd1cm11a2hpIiwyNjI2LCJ1dXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTgsInV1dm93ZWxzaWduZGV2YSIsMjM3MCwidXV2b3dlbHNpZ25ndWphcmF0aSIsMjc1NCwidXZvd2Vsc2lnbmJlbmdhbGkiLDI0OTcsInV2b3dlbHNpZ25kZXZhIiwyMzY5LCJ1dm93ZWxzaWduZ3VqYXJhdGkiLDI3NTMsInYiLDExOCwidmFkZXZhIiwyMzU3LCJ2YWd1amFyYXRpIiwyNzQxLCJ2YWd1cm11a2hpIiwyNjEzLCJ2YWthdGFrYW5hIiwxMjUzNSwidmF2IiwxNDkzLCJ2YXZkYWdlc2giLDY0MzA5LCJ2YXZkYWdlc2g2NSIsNjQzMDksInZhdmRhZ2VzaGhlYnJldyIsNjQzMDksInZhdmhlYnJldyIsMTQ5MywidmF2aG9sYW0iLDY0MzMxLCJ2YXZob2xhbWhlYnJldyIsNjQzMzEsInZhdnZhdmhlYnJldyIsMTUyMCwidmF2eW9kaGVicmV3IiwxNTIxLCJ2Y2lyY2xlIiw5NDQ1LCJ2ZG90YmVsb3ciLDc4MDcsInZlY3lyaWxsaWMiLDEwNzQsInZlaGFyYWJpYyIsMTcwMCwidmVoZmluYWxhcmFiaWMiLDY0MzYzLCJ2ZWhpbml0aWFsYXJhYmljIiw2NDM2NCwidmVobWVkaWFsYXJhYmljIiw2NDM2NSwidmVrYXRha2FuYSIsMTI1MzcsInZlbnVzIiw5NzkyLCJ2ZXJ0aWNhbGJhciIsMTI0LCJ2ZXJ0aWNhbGxpbmVhYm92ZWNtYiIsNzgxLCJ2ZXJ0aWNhbGxpbmViZWxvd2NtYiIsODA5LCJ2ZXJ0aWNhbGxpbmVsb3dtb2QiLDcxNiwidmVydGljYWxsaW5lbW9kIiw3MTIsInZld2FybWVuaWFuIiwxNDA2LCJ2aG9vayIsNjUxLCJ2aWthdGFrYW5hIiwxMjUzNiwidmlyYW1hYmVuZ2FsaSIsMjUwOSwidmlyYW1hZGV2YSIsMjM4MSwidmlyYW1hZ3VqYXJhdGkiLDI3NjUsInZpc2FyZ2FiZW5nYWxpIiwyNDM1LCJ2aXNhcmdhZGV2YSIsMjMwNywidmlzYXJnYWd1amFyYXRpIiwyNjkxLCJ2bW9ub3NwYWNlIiw2NTM2Niwidm9hcm1lbmlhbiIsMTQwMCwidm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEiLDEyNDQ2LCJ2b2ljZWRpdGVyYXRpb25rYXRha2FuYSIsMTI1NDIsInZvaWNlZG1hcmtrYW5hIiwxMjQ0Mywidm9pY2VkbWFya2thbmFoYWxmd2lkdGgiLDY1NDM4LCJ2b2thdGFrYW5hIiwxMjUzOCwidnBhcmVuIiw5MzkzLCJ2dGlsZGUiLDc4MDUsInZ0dXJuZWQiLDY1MiwidnVoaXJhZ2FuYSIsMTI0MzYsInZ1a2F0YWthbmEiLDEyNTMyLCJ3IiwxMTksIndhY3V0ZSIsNzgxMSwid2Fla29yZWFuIiwxMjYzMywid2FoaXJhZ2FuYSIsMTI0MzEsIndha2F0YWthbmEiLDEyNTI3LCJ3YWthdGFrYW5haGFsZndpZHRoIiw2NTQzNiwid2Frb3JlYW4iLDEyNjMyLCJ3YXNtYWxsaGlyYWdhbmEiLDEyNDMwLCJ3YXNtYWxsa2F0YWthbmEiLDEyNTI2LCJ3YXR0b3NxdWFyZSIsMTMxNDMsIndhdmVkYXNoIiwxMjMxNiwid2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbCIsNjUwNzYsIndhd2FyYWJpYyIsMTYwOCwid2F3ZmluYWxhcmFiaWMiLDY1MjYyLCJ3YXdoYW16YWFib3ZlYXJhYmljIiwxNTcyLCJ3YXdoYW16YWFib3ZlZmluYWxhcmFiaWMiLDY1MTU4LCJ3YnNxdWFyZSIsMTMyNzcsIndjaXJjbGUiLDk0NDYsIndjaXJjdW1mbGV4IiwzNzMsIndkaWVyZXNpcyIsNzgxMywid2RvdGFjY2VudCIsNzgxNSwid2RvdGJlbG93Iiw3ODE3LCJ3ZWhpcmFnYW5hIiwxMjQzMywid2VpZXJzdHJhc3MiLDg0NzIsIndla2F0YWthbmEiLDEyNTI5LCJ3ZWtvcmVhbiIsMTI2MzgsIndlb2tvcmVhbiIsMTI2MzcsIndncmF2ZSIsNzgwOSwid2hpdGVidWxsZXQiLDk3MDIsIndoaXRlY2lyY2xlIiw5Njc1LCJ3aGl0ZWNpcmNsZWludmVyc2UiLDk2ODksIndoaXRlY29ybmVyYnJhY2tldGxlZnQiLDEyMzAyLCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWwiLDY1MDkxLCJ3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCIsMTIzMDMsIndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwiLDY1MDkyLCJ3aGl0ZWRpYW1vbmQiLDk2NzEsIndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZCIsOTY3Miwid2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlIiw5NjYzLCJ3aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlIiw5NjYxLCJ3aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NjcsIndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGUiLDk2NjUsIndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0IiwxMjMxMCwid2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0IiwxMjMxMSwid2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZSIsOTY1Nywid2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUiLDk2NTUsIndoaXRlc21hbGxzcXVhcmUiLDk2NDMsIndoaXRlc21pbGluZ2ZhY2UiLDk3ODYsIndoaXRlc3F1YXJlIiw5NjMzLCJ3aGl0ZXN0YXIiLDk3MzQsIndoaXRldGVsZXBob25lIiw5NzQzLCJ3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCIsMTIzMTIsIndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCIsMTIzMTMsIndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGUiLDk2NTMsIndoaXRldXBwb2ludGluZ3RyaWFuZ2xlIiw5NjUxLCJ3aWhpcmFnYW5hIiwxMjQzMiwid2lrYXRha2FuYSIsMTI1MjgsIndpa29yZWFuIiwxMjYzOSwid21vbm9zcGFjZSIsNjUzNjcsIndvaGlyYWdhbmEiLDEyNDM0LCJ3b2thdGFrYW5hIiwxMjUzMCwid29rYXRha2FuYWhhbGZ3aWR0aCIsNjUzODIsIndvbiIsODM2MSwid29ubW9ub3NwYWNlIiw2NTUxMCwid293YWVudGhhaSIsMzYyMywid3BhcmVuIiw5Mzk0LCJ3cmluZyIsNzgzMiwid3N1cGVyaW9yIiw2OTUsInd0dXJuZWQiLDY1Mywid3lubiIsNDQ3LCJ4IiwxMjAsInhhYm92ZWNtYiIsODI5LCJ4Ym9wb21vZm8iLDEyNTYyLCJ4Y2lyY2xlIiw5NDQ3LCJ4ZGllcmVzaXMiLDc4MjEsInhkb3RhY2NlbnQiLDc4MTksInhlaGFybWVuaWFuIiwxMzg5LCJ4aSIsOTU4LCJ4bW9ub3NwYWNlIiw2NTM2OCwieHBhcmVuIiw5Mzk1LCJ4c3VwZXJpb3IiLDczOSwieSIsMTIxLCJ5YWFkb3NxdWFyZSIsMTMxMzQsInlhYmVuZ2FsaSIsMjQ3OSwieWFjdXRlIiwyNTMsInlhZGV2YSIsMjM1MSwieWFla29yZWFuIiwxMjYyNiwieWFndWphcmF0aSIsMjczNSwieWFndXJtdWtoaSIsMjYwNywieWFoaXJhZ2FuYSIsMTI0MjAsInlha2F0YWthbmEiLDEyNTE2LCJ5YWthdGFrYW5haGFsZndpZHRoIiw2NTQyOCwieWFrb3JlYW4iLDEyNjI1LCJ5YW1ha2thbnRoYWkiLDM2NjIsInlhc21hbGxoaXJhZ2FuYSIsMTI0MTksInlhc21hbGxrYXRha2FuYSIsMTI1MTUsInlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aCIsNjUzODgsInlhdGN5cmlsbGljIiwxMTIzLCJ5Y2lyY2xlIiw5NDQ4LCJ5Y2lyY3VtZmxleCIsMzc1LCJ5ZGllcmVzaXMiLDI1NSwieWRvdGFjY2VudCIsNzgyMywieWRvdGJlbG93Iiw3OTI1LCJ5ZWhhcmFiaWMiLDE2MTAsInllaGJhcnJlZWFyYWJpYyIsMTc0NiwieWVoYmFycmVlZmluYWxhcmFiaWMiLDY0NDMxLCJ5ZWhmaW5hbGFyYWJpYyIsNjUyNjYsInllaGhhbXphYWJvdmVhcmFiaWMiLDE1NzQsInllaGhhbXphYWJvdmVmaW5hbGFyYWJpYyIsNjUxNjIsInllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljIiw2NTE2MywieWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYyIsNjUxNjQsInllaGluaXRpYWxhcmFiaWMiLDY1MjY3LCJ5ZWhtZWRpYWxhcmFiaWMiLDY1MjY4LCJ5ZWhtZWVtaW5pdGlhbGFyYWJpYyIsNjQ3MzMsInllaG1lZW1pc29sYXRlZGFyYWJpYyIsNjQ2MDAsInllaG5vb25maW5hbGFyYWJpYyIsNjQ2NjAsInllaHRocmVlZG90c2JlbG93YXJhYmljIiwxNzQ1LCJ5ZWtvcmVhbiIsMTI2MzAsInllbiIsMTY1LCJ5ZW5tb25vc3BhY2UiLDY1NTA5LCJ5ZW9rb3JlYW4iLDEyNjI5LCJ5ZW9yaW5oaWV1aGtvcmVhbiIsMTI2NzgsInllcmFoYmVueW9tb2hlYnJldyIsMTQ1MCwieWVyYWhiZW55b21vbGVmdGhlYnJldyIsMTQ1MCwieWVyaWN5cmlsbGljIiwxMDk5LCJ5ZXJ1ZGllcmVzaXNjeXJpbGxpYyIsMTI3MywieWVzaWV1bmdrb3JlYW4iLDEyNjczLCJ5ZXNpZXVuZ3BhbnNpb3Nrb3JlYW4iLDEyNjc1LCJ5ZXNpZXVuZ3Npb3Nrb3JlYW4iLDEyNjc0LCJ5ZXRpdmhlYnJldyIsMTQzNCwieWdyYXZlIiw3OTIzLCJ5aG9vayIsNDM2LCJ5aG9va2Fib3ZlIiw3OTI3LCJ5aWFybWVuaWFuIiwxMzk3LCJ5aWN5cmlsbGljIiwxMTExLCJ5aWtvcmVhbiIsMTI2NDIsInlpbnlhbmciLDk3NzUsInlpd25hcm1lbmlhbiIsMTQxMCwieW1vbm9zcGFjZSIsNjUzNjksInlvZCIsMTQ5NywieW9kZGFnZXNoIiw2NDMxMywieW9kZGFnZXNoaGVicmV3Iiw2NDMxMywieW9kaGVicmV3IiwxNDk3LCJ5b2R5b2RoZWJyZXciLDE1MjIsInlvZHlvZHBhdGFoaGVicmV3Iiw2NDI4NywieW9oaXJhZ2FuYSIsMTI0MjQsInlvaWtvcmVhbiIsMTI2ODEsInlva2F0YWthbmEiLDEyNTIwLCJ5b2thdGFrYW5haGFsZndpZHRoIiw2NTQzMCwieW9rb3JlYW4iLDEyNjM1LCJ5b3NtYWxsaGlyYWdhbmEiLDEyNDIzLCJ5b3NtYWxsa2F0YWthbmEiLDEyNTE5LCJ5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1MzkwLCJ5b3RncmVlayIsMTAxMSwieW95YWVrb3JlYW4iLDEyNjgwLCJ5b3lha29yZWFuIiwxMjY3OSwieW95YWt0aGFpIiwzNjE4LCJ5b3lpbmd0aGFpIiwzNTk3LCJ5cGFyZW4iLDkzOTYsInlwb2dlZ3JhbW1lbmkiLDg5MCwieXBvZ2VncmFtbWVuaWdyZWVrY21iIiw4MzcsInlyIiw0MjIsInlyaW5nIiw3ODMzLCJ5c3VwZXJpb3IiLDY5NiwieXRpbGRlIiw3OTI5LCJ5dHVybmVkIiw2NTQsInl1aGlyYWdhbmEiLDEyNDIyLCJ5dWlrb3JlYW4iLDEyNjg0LCJ5dWthdGFrYW5hIiwxMjUxOCwieXVrYXRha2FuYWhhbGZ3aWR0aCIsNjU0MjksInl1a29yZWFuIiwxMjY0MCwieXVzYmlnY3lyaWxsaWMiLDExMzEsInl1c2JpZ2lvdGlmaWVkY3lyaWxsaWMiLDExMzMsInl1c2xpdHRsZWN5cmlsbGljIiwxMTI3LCJ5dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljIiwxMTI5LCJ5dXNtYWxsaGlyYWdhbmEiLDEyNDIxLCJ5dXNtYWxsa2F0YWthbmEiLDEyNTE3LCJ5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGgiLDY1Mzg5LCJ5dXlla29yZWFuIiwxMjY4MywieXV5ZW9rb3JlYW4iLDEyNjgyLCJ5eWFiZW5nYWxpIiwyNTI3LCJ5eWFkZXZhIiwyMzk5LCJ6IiwxMjIsInphYXJtZW5pYW4iLDEzODIsInphY3V0ZSIsMzc4LCJ6YWRldmEiLDIzOTUsInphZ3VybXVraGkiLDI2NTEsInphaGFyYWJpYyIsMTU5MiwiemFoZmluYWxhcmFiaWMiLDY1MjIyLCJ6YWhpbml0aWFsYXJhYmljIiw2NTIyMywiemFoaXJhZ2FuYSIsMTIzNzQsInphaG1lZGlhbGFyYWJpYyIsNjUyMjQsInphaW5hcmFiaWMiLDE1ODYsInphaW5maW5hbGFyYWJpYyIsNjUyMDAsInpha2F0YWthbmEiLDEyNDcwLCJ6YXFlZmdhZG9saGVicmV3IiwxNDI5LCJ6YXFlZnFhdGFuaGVicmV3IiwxNDI4LCJ6YXJxYWhlYnJldyIsMTQzMiwiemF5aW4iLDE0OTQsInpheWluZGFnZXNoIiw2NDMxMCwiemF5aW5kYWdlc2hoZWJyZXciLDY0MzEwLCJ6YXlpbmhlYnJldyIsMTQ5NCwiemJvcG9tb2ZvIiwxMjU2NywiemNhcm9uIiwzODIsInpjaXJjbGUiLDk0NDksInpjaXJjdW1mbGV4Iiw3ODI1LCJ6Y3VybCIsNjU3LCJ6ZG90IiwzODAsInpkb3RhY2NlbnQiLDM4MCwiemRvdGJlbG93Iiw3ODI3LCJ6ZWN5cmlsbGljIiwxMDc5LCJ6ZWRlc2NlbmRlcmN5cmlsbGljIiwxMTc3LCJ6ZWRpZXJlc2lzY3lyaWxsaWMiLDEyNDcsInplaGlyYWdhbmEiLDEyMzgwLCJ6ZWthdGFrYW5hIiwxMjQ3NiwiemVybyIsNDgsInplcm9hcmFiaWMiLDE2MzIsInplcm9iZW5nYWxpIiwyNTM0LCJ6ZXJvZGV2YSIsMjQwNiwiemVyb2d1amFyYXRpIiwyNzkwLCJ6ZXJvZ3VybXVraGkiLDI2NjIsInplcm9oYWNrYXJhYmljIiwxNjMyLCJ6ZXJvaW5mZXJpb3IiLDgzMjAsInplcm9tb25vc3BhY2UiLDY1Mjk2LCJ6ZXJvb2xkc3R5bGUiLDYzMjgwLCJ6ZXJvcGVyc2lhbiIsMTc3NiwiemVyb3N1cGVyaW9yIiw4MzA0LCJ6ZXJvdGhhaSIsMzY2NCwiemVyb3dpZHRoam9pbmVyIiw2NTI3OSwiemVyb3dpZHRobm9uam9pbmVyIiw4MjA0LCJ6ZXJvd2lkdGhzcGFjZSIsODIwMywiemV0YSIsOTUwLCJ6aGJvcG9tb2ZvIiwxMjU2MywiemhlYXJtZW5pYW4iLDEzODYsInpoZWJyZXZlY3lyaWxsaWMiLDEyMTgsInpoZWN5cmlsbGljIiwxMDc4LCJ6aGVkZXNjZW5kZXJjeXJpbGxpYyIsMTE3NSwiemhlZGllcmVzaXNjeXJpbGxpYyIsMTI0NSwiemloaXJhZ2FuYSIsMTIzNzYsInppa2F0YWthbmEiLDEyNDcyLCJ6aW5vcmhlYnJldyIsMTQ1NCwiemxpbmViZWxvdyIsNzgyOSwiem1vbm9zcGFjZSIsNjUzNzAsInpvaGlyYWdhbmEiLDEyMzgyLCJ6b2thdGFrYW5hIiwxMjQ3OCwienBhcmVuIiw5Mzk3LCJ6cmV0cm9mbGV4aG9vayIsNjU2LCJ6c3Ryb2tlIiw0MzgsInp1aGlyYWdhbmEiLDEyMzc4LCJ6dWthdGFrYW5hIiwxMjQ3NCwiLm5vdGRlZiIsMCwiYW5nYnJhY2tldGxlZnRiaWciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnIiw5MDAxLCJhbmdicmFja2V0bGVmdGJpZ2ciLDkwMDEsImFuZ2JyYWNrZXRsZWZ0QmlnZyIsOTAwMSwiYW5nYnJhY2tldHJpZ2h0QmlnIiw5MDAyLCJhbmdicmFja2V0cmlnaHRiaWciLDkwMDIsImFuZ2JyYWNrZXRyaWdodEJpZ2ciLDkwMDIsImFuZ2JyYWNrZXRyaWdodGJpZ2ciLDkwMDIsImFycm93aG9va2xlZnQiLDg2MTgsImFycm93aG9va3JpZ2h0Iiw4NjE3LCJhcnJvd2xlZnR0b3BoYWxmIiw4NjM2LCJhcnJvd2xlZnRib3RoYWxmIiw4NjM3LCJhcnJvd25vcnRoZWFzdCIsODU5OSwiYXJyb3dub3J0aHdlc3QiLDg1OTgsImFycm93cmlnaHR0b3BoYWxmIiw4NjQwLCJhcnJvd3JpZ2h0Ym90aGFsZiIsODY0MSwiYXJyb3dzb3V0aGVhc3QiLDg2MDAsImFycm93c291dGh3ZXN0Iiw4NjAxLCJiYWNrc2xhc2hiaWciLDg3MjYsImJhY2tzbGFzaEJpZyIsODcyNiwiYmFja3NsYXNoQmlnZyIsODcyNiwiYmFja3NsYXNoYmlnZyIsODcyNiwiYmFyZGJsIiw4MjE0LCJicmFjZWh0aXBkb3dubGVmdCIsNjUwNzksImJyYWNlaHRpcGRvd25yaWdodCIsNjUwNzksImJyYWNlaHRpcHVwbGVmdCIsNjUwODAsImJyYWNlaHRpcHVwcmlnaHQiLDY1MDgwLCJicmFjZWxlZnRCaWciLDEyMywiYnJhY2VsZWZ0YmlnIiwxMjMsImJyYWNlbGVmdGJpZ2ciLDEyMywiYnJhY2VsZWZ0QmlnZyIsMTIzLCJicmFjZXJpZ2h0QmlnIiwxMjUsImJyYWNlcmlnaHRiaWciLDEyNSwiYnJhY2VyaWdodGJpZ2ciLDEyNSwiYnJhY2VyaWdodEJpZ2ciLDEyNSwiYnJhY2tldGxlZnRiaWciLDkxLCJicmFja2V0bGVmdEJpZyIsOTEsImJyYWNrZXRsZWZ0YmlnZyIsOTEsImJyYWNrZXRsZWZ0QmlnZyIsOTEsImJyYWNrZXRyaWdodEJpZyIsOTMsImJyYWNrZXRyaWdodGJpZyIsOTMsImJyYWNrZXRyaWdodGJpZ2ciLDkzLCJicmFja2V0cmlnaHRCaWdnIiw5MywiY2VpbGluZ2xlZnRiaWciLDg5NjgsImNlaWxpbmdsZWZ0QmlnIiw4OTY4LCJjZWlsaW5nbGVmdEJpZ2ciLDg5NjgsImNlaWxpbmdsZWZ0YmlnZyIsODk2OCwiY2VpbGluZ3JpZ2h0YmlnIiw4OTY5LCJjZWlsaW5ncmlnaHRCaWciLDg5NjksImNlaWxpbmdyaWdodGJpZ2ciLDg5NjksImNlaWxpbmdyaWdodEJpZ2ciLDg5NjksImNpcmNsZWRvdGRpc3BsYXkiLDg4NTcsImNpcmNsZWRvdHRleHQiLDg4NTcsImNpcmNsZW11bHRpcGx5ZGlzcGxheSIsODg1NSwiY2lyY2xlbXVsdGlwbHl0ZXh0Iiw4ODU1LCJjaXJjbGVwbHVzZGlzcGxheSIsODg1MywiY2lyY2xlcGx1c3RleHQiLDg4NTMsImNvbnRpbnRlZ3JhbGRpc3BsYXkiLDg3NTAsImNvbnRpbnRlZ3JhbHRleHQiLDg3NTAsImNvcHJvZHVjdGRpc3BsYXkiLDg3MjAsImNvcHJvZHVjdHRleHQiLDg3MjAsImZsb29ybGVmdEJpZyIsODk3MCwiZmxvb3JsZWZ0YmlnIiw4OTcwLCJmbG9vcmxlZnRiaWdnIiw4OTcwLCJmbG9vcmxlZnRCaWdnIiw4OTcwLCJmbG9vcnJpZ2h0YmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnIiw4OTcxLCJmbG9vcnJpZ2h0QmlnZyIsODk3MSwiZmxvb3JyaWdodGJpZ2ciLDg5NzEsImhhdHdpZGUiLDc3MCwiaGF0d2lkZXIiLDc3MCwiaGF0d2lkZXN0Iiw3NzAsImludGVyY2FsIiw3NDg4LCJpbnRlZ3JhbGRpc3BsYXkiLDg3NDcsImludGVncmFsdGV4dCIsODc0NywiaW50ZXJzZWN0aW9uZGlzcGxheSIsODg5OCwiaW50ZXJzZWN0aW9udGV4dCIsODg5OCwibG9naWNhbGFuZGRpc3BsYXkiLDg3NDMsImxvZ2ljYWxhbmR0ZXh0Iiw4NzQzLCJsb2dpY2Fsb3JkaXNwbGF5Iiw4NzQ0LCJsb2dpY2Fsb3J0ZXh0Iiw4NzQ0LCJwYXJlbmxlZnRCaWciLDQwLCJwYXJlbmxlZnRiaWciLDQwLCJwYXJlbmxlZnRCaWdnIiw0MCwicGFyZW5sZWZ0YmlnZyIsNDAsInBhcmVucmlnaHRCaWciLDQxLCJwYXJlbnJpZ2h0YmlnIiw0MSwicGFyZW5yaWdodEJpZ2ciLDQxLCJwYXJlbnJpZ2h0YmlnZyIsNDEsInByaW1lIiw4MjQyLCJwcm9kdWN0ZGlzcGxheSIsODcxOSwicHJvZHVjdHRleHQiLDg3MTksInJhZGljYWxiaWciLDg3MzAsInJhZGljYWxCaWciLDg3MzAsInJhZGljYWxCaWdnIiw4NzMwLCJyYWRpY2FsYmlnZyIsODczMCwicmFkaWNhbGJ0Iiw4NzMwLCJyYWRpY2FsdHAiLDg3MzAsInJhZGljYWx2ZXJ0ZXgiLDg3MzAsInNsYXNoYmlnIiw0Nywic2xhc2hCaWciLDQ3LCJzbGFzaEJpZ2ciLDQ3LCJzbGFzaGJpZ2ciLDQ3LCJzdW1tYXRpb25kaXNwbGF5Iiw4NzIxLCJzdW1tYXRpb250ZXh0Iiw4NzIxLCJ0aWxkZXdpZGUiLDczMiwidGlsZGV3aWRlciIsNzMyLCJ0aWxkZXdpZGVzdCIsNzMyLCJ1bmlvbmRpc3BsYXkiLDg4OTksInVuaW9ubXVsdGlkaXNwbGF5Iiw4ODQ2LCJ1bmlvbm11bHRpdGV4dCIsODg0NiwidW5pb25zcWRpc3BsYXkiLDg4NTIsInVuaW9uc3F0ZXh0Iiw4ODUyLCJ1bmlvbnRleHQiLDg4OTksInZleHRlbmRkb3VibGUiLDg3NDEsInZleHRlbmRzaW5nbGUiLDg3MzldfSkpLGk9KDAsci5nZXRBcnJheUxvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKCl7cmV0dXJuWyJzcGFjZSIsMzIsImExIiw5OTg1LCJhMiIsOTk4NiwiYTIwMiIsOTk4NywiYTMiLDk5ODgsImE0Iiw5NzQyLCJhNSIsOTk5MCwiYTExOSIsOTk5MSwiYTExOCIsOTk5MiwiYTExNyIsOTk5MywiYTExIiw5NzU1LCJhMTIiLDk3NTgsImExMyIsOTk5NiwiYTE0Iiw5OTk3LCJhMTUiLDk5OTgsImExNiIsOTk5OSwiYTEwNSIsMWU0LCJhMTciLDEwMDAxLCJhMTgiLDEwMDAyLCJhMTkiLDEwMDAzLCJhMjAiLDEwMDA0LCJhMjEiLDEwMDA1LCJhMjIiLDEwMDA2LCJhMjMiLDEwMDA3LCJhMjQiLDEwMDA4LCJhMjUiLDEwMDA5LCJhMjYiLDEwMDEwLCJhMjciLDEwMDExLCJhMjgiLDEwMDEyLCJhNiIsMTAwMTMsImE3IiwxMDAxNCwiYTgiLDEwMDE1LCJhOSIsMTAwMTYsImExMCIsMTAwMTcsImEyOSIsMTAwMTgsImEzMCIsMTAwMTksImEzMSIsMTAwMjAsImEzMiIsMTAwMjEsImEzMyIsMTAwMjIsImEzNCIsMTAwMjMsImEzNSIsOTczMywiYTM2IiwxMDAyNSwiYTM3IiwxMDAyNiwiYTM4IiwxMDAyNywiYTM5IiwxMDAyOCwiYTQwIiwxMDAyOSwiYTQxIiwxMDAzMCwiYTQyIiwxMDAzMSwiYTQzIiwxMDAzMiwiYTQ0IiwxMDAzMywiYTQ1IiwxMDAzNCwiYTQ2IiwxMDAzNSwiYTQ3IiwxMDAzNiwiYTQ4IiwxMDAzNywiYTQ5IiwxMDAzOCwiYTUwIiwxMDAzOSwiYTUxIiwxMDA0MCwiYTUyIiwxMDA0MSwiYTUzIiwxMDA0MiwiYTU0IiwxMDA0MywiYTU1IiwxMDA0NCwiYTU2IiwxMDA0NSwiYTU3IiwxMDA0NiwiYTU4IiwxMDA0NywiYTU5IiwxMDA0OCwiYTYwIiwxMDA0OSwiYTYxIiwxMDA1MCwiYTYyIiwxMDA1MSwiYTYzIiwxMDA1MiwiYTY0IiwxMDA1MywiYTY1IiwxMDA1NCwiYTY2IiwxMDA1NSwiYTY3IiwxMDA1NiwiYTY4IiwxMDA1NywiYTY5IiwxMDA1OCwiYTcwIiwxMDA1OSwiYTcxIiw5Njc5LCJhNzIiLDEwMDYxLCJhNzMiLDk2MzIsImE3NCIsMTAwNjMsImEyMDMiLDEwMDY0LCJhNzUiLDEwMDY1LCJhMjA0IiwxMDA2NiwiYTc2Iiw5NjUwLCJhNzciLDk2NjAsImE3OCIsOTY3MCwiYTc5IiwxMDA3MCwiYTgxIiw5Njg3LCJhODIiLDEwMDcyLCJhODMiLDEwMDczLCJhODQiLDEwMDc0LCJhOTciLDEwMDc1LCJhOTgiLDEwMDc2LCJhOTkiLDEwMDc3LCJhMTAwIiwxMDA3OCwiYTEwMSIsMTAwODEsImExMDIiLDEwMDgyLCJhMTAzIiwxMDA4MywiYTEwNCIsMTAwODQsImExMDYiLDEwMDg1LCJhMTA3IiwxMDA4NiwiYTEwOCIsMTAwODcsImExMTIiLDk4MjcsImExMTEiLDk4MzAsImExMTAiLDk4MjksImExMDkiLDk4MjQsImExMjAiLDkzMTIsImExMjEiLDkzMTMsImExMjIiLDkzMTQsImExMjMiLDkzMTUsImExMjQiLDkzMTYsImExMjUiLDkzMTcsImExMjYiLDkzMTgsImExMjciLDkzMTksImExMjgiLDkzMjAsImExMjkiLDkzMjEsImExMzAiLDEwMTAyLCJhMTMxIiwxMDEwMywiYTEzMiIsMTAxMDQsImExMzMiLDEwMTA1LCJhMTM0IiwxMDEwNiwiYTEzNSIsMTAxMDcsImExMzYiLDEwMTA4LCJhMTM3IiwxMDEwOSwiYTEzOCIsMTAxMTAsImExMzkiLDEwMTExLCJhMTQwIiwxMDExMiwiYTE0MSIsMTAxMTMsImExNDIiLDEwMTE0LCJhMTQzIiwxMDExNSwiYTE0NCIsMTAxMTYsImExNDUiLDEwMTE3LCJhMTQ2IiwxMDExOCwiYTE0NyIsMTAxMTksImExNDgiLDEwMTIwLCJhMTQ5IiwxMDEyMSwiYTE1MCIsMTAxMjIsImExNTEiLDEwMTIzLCJhMTUyIiwxMDEyNCwiYTE1MyIsMTAxMjUsImExNTQiLDEwMTI2LCJhMTU1IiwxMDEyNywiYTE1NiIsMTAxMjgsImExNTciLDEwMTI5LCJhMTU4IiwxMDEzMCwiYTE1OSIsMTAxMzEsImExNjAiLDEwMTMyLCJhMTYxIiw4NTk0LCJhMTYzIiw4NTk2LCJhMTY0Iiw4NTk3LCJhMTk2IiwxMDEzNiwiYTE2NSIsMTAxMzcsImExOTIiLDEwMTM4LCJhMTY2IiwxMDEzOSwiYTE2NyIsMTAxNDAsImExNjgiLDEwMTQxLCJhMTY5IiwxMDE0MiwiYTE3MCIsMTAxNDMsImExNzEiLDEwMTQ0LCJhMTcyIiwxMDE0NSwiYTE3MyIsMTAxNDYsImExNjIiLDEwMTQ3LCJhMTc0IiwxMDE0OCwiYTE3NSIsMTAxNDksImExNzYiLDEwMTUwLCJhMTc3IiwxMDE1MSwiYTE3OCIsMTAxNTIsImExNzkiLDEwMTUzLCJhMTkzIiwxMDE1NCwiYTE4MCIsMTAxNTUsImExOTkiLDEwMTU2LCJhMTgxIiwxMDE1NywiYTIwMCIsMTAxNTgsImExODIiLDEwMTU5LCJhMjAxIiwxMDE2MSwiYTE4MyIsMTAxNjIsImExODQiLDEwMTYzLCJhMTk3IiwxMDE2NCwiYTE4NSIsMTAxNjUsImExOTQiLDEwMTY2LCJhMTk4IiwxMDE2NywiYTE4NiIsMTAxNjgsImExOTUiLDEwMTY5LCJhMTg3IiwxMDE3MCwiYTE4OCIsMTAxNzEsImExODkiLDEwMTcyLCJhMTkwIiwxMDE3MywiYTE5MSIsMTAxNzQsImE4OSIsMTAwODgsImE5MCIsMTAwODksImE5MyIsMTAwOTAsImE5NCIsMTAwOTEsImE5MSIsMTAwOTIsImE5MiIsMTAwOTMsImEyMDUiLDEwMDk0LCJhODUiLDEwMDk1LCJhMjA2IiwxMDA5NiwiYTg2IiwxMDA5NywiYTg3IiwxMDA5OCwiYTg4IiwxMDA5OSwiYTk1IiwxMDEwMCwiYTk2IiwxMDEwMSwiLm5vdGRlZiIsMF19KSl9LChlLHQsYSk9PnthLnIodCk7YS5kKHQse2NsZWFyVW5pY29kZUNhY2hlczooKT0+Y2xlYXJVbmljb2RlQ2FjaGVzLGdldENoYXJVbmljb2RlQ2F0ZWdvcnk6KCk9PmdldENoYXJVbmljb2RlQ2F0ZWdvcnksZ2V0Tm9ybWFsaXplZFVuaWNvZGVzOigpPT5zLGdldFVuaWNvZGVGb3JHbHlwaDooKT0+Z2V0VW5pY29kZUZvckdseXBoLGdldFVuaWNvZGVSYW5nZUZvcjooKT0+Z2V0VW5pY29kZVJhbmdlRm9yLG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzOigpPT5tYXBTcGVjaWFsVW5pY29kZVZhbHVlcyxyZXZlcnNlSWZSdGw6KCk9PnJldmVyc2VJZlJ0bH0pO3ZhciByPWEoNCk7Y29uc3Qgbj0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbNjM3MjFdPTE2OTtlWzYzMTkzXT0xNjk7ZVs2MzcyMF09MTc0O2VbNjMxOTRdPTE3NDtlWzYzNzIyXT04NDgyO2VbNjMxOTVdPTg0ODI7ZVs2MzcyOV09OTEyNztlWzYzNzMwXT05MTI4O2VbNjM3MzFdPTkxMjk7ZVs2Mzc0MF09OTEzMTtlWzYzNzQxXT05MTMyO2VbNjM3NDJdPTkxMzM7ZVs2MzcyNl09OTEyMTtlWzYzNzI3XT05MTIyO2VbNjM3MjhdPTkxMjM7ZVs2MzczN109OTEyNDtlWzYzNzM4XT05MTI1O2VbNjM3MzldPTkxMjY7ZVs2MzcyM109OTExNTtlWzYzNzI0XT05MTE2O2VbNjM3MjVdPTkxMTc7ZVs2MzczNF09OTExODtlWzYzNzM1XT05MTE5O2VbNjM3MzZdPTkxMjB9KSk7ZnVuY3Rpb24gbWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMoZSl7cmV0dXJuIGU+PTY1NTIwJiZlPD02NTUzNT8wOmU+PTYyOTc2JiZlPD02Mzc0Mz9uKClbZV18fGU6MTczPT09ZT80NTplfWZ1bmN0aW9uIGdldFVuaWNvZGVGb3JHbHlwaChlLHQpe2xldCBhPXRbZV07aWYodm9pZCAwIT09YSlyZXR1cm4gYTtpZighZSlyZXR1cm4tMTtpZigidSI9PT1lWzBdKXtjb25zdCB0PWUubGVuZ3RoO2xldCByO2lmKDc9PT10JiYibiI9PT1lWzFdJiYiaSI9PT1lWzJdKXI9ZS5zdWJzdHJpbmcoMyk7ZWxzZXtpZighKHQ+PTUmJnQ8PTcpKXJldHVybi0xO3I9ZS5zdWJzdHJpbmcoMSl9aWYocj09PXIudG9VcHBlckNhc2UoKSl7YT1wYXJzZUludChyLDE2KTtpZihhPj0wKXJldHVybiBhfX1yZXR1cm4tMX1jb25zdCBpPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XTtmdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IoZSl7Zm9yKGxldCB0PTAsYT1pLmxlbmd0aDt0PGE7dCsrKXtjb25zdCBhPWlbdF07aWYoZT49YS5iZWdpbiYmZTxhLmVuZClyZXR1cm4gdH1yZXR1cm4tMX1jb25zdCBzPSgwLHIuZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbigpe3JldHVyblsiwqgiLCIgzIgiLCLCryIsIiDMhCIsIsK0IiwiIMyBIiwiwrUiLCLOvCIsIsK4IiwiIMynIiwixLIiLCJJSiIsIsSzIiwiaWoiLCLEvyIsIkzCtyIsIsWAIiwibMK3IiwixYkiLCLKvG4iLCLFvyIsInMiLCLHhCIsIkTFvSIsIseFIiwiRMW+Iiwix4YiLCJkxb4iLCLHhyIsIkxKIiwix4giLCJMaiIsIseJIiwibGoiLCLHiiIsIk5KIiwix4siLCJOaiIsIseMIiwibmoiLCLHsSIsIkRaIiwix7IiLCJEeiIsIsezIiwiZHoiLCLLmCIsIiDMhiIsIsuZIiwiIMyHIiwiy5oiLCIgzIoiLCLLmyIsIiDMqCIsIsucIiwiIMyDIiwiy50iLCIgzIsiLCLNuiIsIiDNhSIsIs6EIiwiIMyBIiwiz5AiLCLOsiIsIs+RIiwizrgiLCLPkiIsIs6lIiwiz5UiLCLPhiIsIs+WIiwiz4AiLCLPsCIsIs66Iiwiz7EiLCLPgSIsIs+yIiwiz4IiLCLPtCIsIs6YIiwiz7UiLCLOtSIsIs+5IiwizqMiLCLWhyIsItWl1oIiLCLZtSIsItin2bQiLCLZtiIsItmI2bQiLCLZtyIsItuH2bQiLCLZuCIsItmK2bQiLCLguLMiLCLguY3guLIiLCLgurMiLCLgu43gurIiLCLgu5wiLCLguqvgupkiLCLgu50iLCLguqvguqEiLCLgvbciLCLgvrLgvoEiLCLgvbkiLCLgvrPgvoEiLCLhupoiLCJhyr4iLCLhvr0iLCIgzJMiLCLhvr8iLCIgzJMiLCLhv4AiLCIgzYIiLCLhv74iLCIgzJQiLCLigIIiLCIgIiwi4oCDIiwiICIsIuKAhCIsIiAiLCLigIUiLCIgIiwi4oCGIiwiICIsIuKAiCIsIiAiLCLigIkiLCIgIiwi4oCKIiwiICIsIuKAlyIsIiDMsyIsIuKApCIsIi4iLCLigKUiLCIuLiIsIuKApiIsIi4uLiIsIuKAsyIsIuKAsuKAsiIsIuKAtCIsIuKAsuKAsuKAsiIsIuKAtiIsIuKAteKAtSIsIuKAtyIsIuKAteKAteKAtSIsIuKAvCIsIiEhIiwi4oC+IiwiIMyFIiwi4oGHIiwiPz8iLCLigYgiLCI/ISIsIuKBiSIsIiE/Iiwi4oGXIiwi4oCy4oCy4oCy4oCyIiwi4oGfIiwiICIsIuKCqCIsIlJzIiwi4oSAIiwiYS9jIiwi4oSBIiwiYS9zIiwi4oSDIiwiwrBDIiwi4oSFIiwiYy9vIiwi4oSGIiwiYy91Iiwi4oSHIiwixpAiLCLihIkiLCLCsEYiLCLihJYiLCJObyIsIuKEoSIsIlRFTCIsIuKEtSIsIteQIiwi4oS2Iiwi15EiLCLihLciLCLXkiIsIuKEuCIsIteTIiwi4oS7IiwiRkFYIiwi4oWgIiwiSSIsIuKFoSIsIklJIiwi4oWiIiwiSUlJIiwi4oWjIiwiSVYiLCLihaQiLCJWIiwi4oWlIiwiVkkiLCLihaYiLCJWSUkiLCLihaciLCJWSUlJIiwi4oWoIiwiSVgiLCLihakiLCJYIiwi4oWqIiwiWEkiLCLihasiLCJYSUkiLCLihawiLCJMIiwi4oWtIiwiQyIsIuKFriIsIkQiLCLiha8iLCJNIiwi4oWwIiwiaSIsIuKFsSIsImlpIiwi4oWyIiwiaWlpIiwi4oWzIiwiaXYiLCLihbQiLCJ2Iiwi4oW1IiwidmkiLCLihbYiLCJ2aWkiLCLihbciLCJ2aWlpIiwi4oW4IiwiaXgiLCLihbkiLCJ4Iiwi4oW6IiwieGkiLCLihbsiLCJ4aWkiLCLihbwiLCJsIiwi4oW9IiwiYyIsIuKFviIsImQiLCLihb8iLCJtIiwi4oisIiwi4oir4oirIiwi4oitIiwi4oir4oir4oirIiwi4oivIiwi4oiu4oiuIiwi4oiwIiwi4oiu4oiu4oiuIiwi4pG0IiwiKDEpIiwi4pG1IiwiKDIpIiwi4pG2IiwiKDMpIiwi4pG3IiwiKDQpIiwi4pG4IiwiKDUpIiwi4pG5IiwiKDYpIiwi4pG6IiwiKDcpIiwi4pG7IiwiKDgpIiwi4pG8IiwiKDkpIiwi4pG9IiwiKDEwKSIsIuKRviIsIigxMSkiLCLikb8iLCIoMTIpIiwi4pKAIiwiKDEzKSIsIuKSgSIsIigxNCkiLCLikoIiLCIoMTUpIiwi4pKDIiwiKDE2KSIsIuKShCIsIigxNykiLCLikoUiLCIoMTgpIiwi4pKGIiwiKDE5KSIsIuKShyIsIigyMCkiLCLikogiLCIxLiIsIuKSiSIsIjIuIiwi4pKKIiwiMy4iLCLikosiLCI0LiIsIuKSjCIsIjUuIiwi4pKNIiwiNi4iLCLiko4iLCI3LiIsIuKSjyIsIjguIiwi4pKQIiwiOS4iLCLikpEiLCIxMC4iLCLikpIiLCIxMS4iLCLikpMiLCIxMi4iLCLikpQiLCIxMy4iLCLikpUiLCIxNC4iLCLikpYiLCIxNS4iLCLikpciLCIxNi4iLCLikpgiLCIxNy4iLCLikpkiLCIxOC4iLCLikpoiLCIxOS4iLCLikpsiLCIyMC4iLCLikpwiLCIoYSkiLCLikp0iLCIoYikiLCLikp4iLCIoYykiLCLikp8iLCIoZCkiLCLikqAiLCIoZSkiLCLikqEiLCIoZikiLCLikqIiLCIoZykiLCLikqMiLCIoaCkiLCLikqQiLCIoaSkiLCLikqUiLCIoaikiLCLikqYiLCIoaykiLCLikqciLCIobCkiLCLikqgiLCIobSkiLCLikqkiLCIobikiLCLikqoiLCIobykiLCLikqsiLCIocCkiLCLikqwiLCIocSkiLCLikq0iLCIocikiLCLikq4iLCIocykiLCLikq8iLCIodCkiLCLikrAiLCIodSkiLCLikrEiLCIodikiLCLikrIiLCIodykiLCLikrMiLCIoeCkiLCLikrQiLCIoeSkiLCLikrUiLCIoeikiLCLiqIwiLCLiiKviiKviiKviiKsiLCLiqbQiLCI6Oj0iLCLiqbUiLCI9PSIsIuKptiIsIj09PSIsIuK6nyIsIuavjSIsIuK7syIsIum+nyIsIuK8gCIsIuS4gCIsIuK8gSIsIuS4qCIsIuK8giIsIuS4tiIsIuK8gyIsIuS4vyIsIuK8hCIsIuS5mSIsIuK8hSIsIuS6hSIsIuK8hiIsIuS6jCIsIuK8hyIsIuS6oCIsIuK8iCIsIuS6uiIsIuK8iSIsIuWEvyIsIuK8iiIsIuWFpSIsIuK8iyIsIuWFqyIsIuK8jCIsIuWGgiIsIuK8jSIsIuWGliIsIuK8jiIsIuWGqyIsIuK8jyIsIuWHoCIsIuK8kCIsIuWHtSIsIuK8kSIsIuWIgCIsIuK8kiIsIuWKmyIsIuK8kyIsIuWLuSIsIuK8lCIsIuWMlSIsIuK8lSIsIuWMmiIsIuK8liIsIuWMuCIsIuK8lyIsIuWNgSIsIuK8mCIsIuWNnCIsIuK8mSIsIuWNqSIsIuK8miIsIuWOgiIsIuK8myIsIuWOtiIsIuK8nCIsIuWPiCIsIuK8nSIsIuWPoyIsIuK8niIsIuWblyIsIuK8nyIsIuWcnyIsIuK8oCIsIuWjqyIsIuK8oSIsIuWkgiIsIuK8oiIsIuWkiiIsIuK8oyIsIuWklSIsIuK8pCIsIuWkpyIsIuK8pSIsIuWlsyIsIuK8piIsIuWtkCIsIuK8pyIsIuWugCIsIuK8qCIsIuWvuCIsIuK8qSIsIuWwjyIsIuK8qiIsIuWwoiIsIuK8qyIsIuWwuCIsIuK8rCIsIuWxriIsIuK8rSIsIuWxsSIsIuK8riIsIuW3myIsIuK8ryIsIuW3pSIsIuK8sCIsIuW3sSIsIuK8sSIsIuW3viIsIuK8siIsIuW5siIsIuK8syIsIuW5uiIsIuK8tCIsIuW5vyIsIuK8tSIsIuW7tCIsIuK8tiIsIuW7viIsIuK8tyIsIuW8iyIsIuK8uCIsIuW8kyIsIuK8uSIsIuW9kCIsIuK8uiIsIuW9oSIsIuK8uyIsIuW9syIsIuK8vCIsIuW/gyIsIuK8vSIsIuaIiCIsIuK8viIsIuaItiIsIuK8vyIsIuaJiyIsIuK9gCIsIuaUryIsIuK9gSIsIuaUtCIsIuK9giIsIuaWhyIsIuK9gyIsIuaWlyIsIuK9hCIsIuaWpCIsIuK9hSIsIuaWuSIsIuK9hiIsIuaXoCIsIuK9hyIsIuaXpSIsIuK9iCIsIuabsCIsIuK9iSIsIuaciCIsIuK9iiIsIuacqCIsIuK9iyIsIuasoCIsIuK9jCIsIuatoiIsIuK9jSIsIuatuSIsIuK9jiIsIuausyIsIuK9jyIsIuaviyIsIuK9kCIsIuavlCIsIuK9kSIsIuavmyIsIuK9kiIsIuawjyIsIuK9kyIsIuawlCIsIuK9lCIsIuawtCIsIuK9lSIsIueBqyIsIuK9liIsIueIqiIsIuK9lyIsIueItiIsIuK9mCIsIueIuyIsIuK9mSIsIueIvyIsIuK9miIsIueJhyIsIuK9myIsIueJmSIsIuK9nCIsIueJmyIsIuK9nSIsIueKrCIsIuK9niIsIueOhCIsIuK9nyIsIueOiSIsIuK9oCIsIueTnCIsIuK9oSIsIueTpiIsIuK9oiIsIueUmCIsIuK9oyIsIueUnyIsIuK9pCIsIueUqCIsIuK9pSIsIueUsCIsIuK9piIsIueWiyIsIuK9pyIsIueWkiIsIuK9qCIsIueZtiIsIuK9qSIsIueZvSIsIuK9qiIsIueariIsIuK9qyIsIueavyIsIuK9rCIsIuebriIsIuK9rSIsIuefmyIsIuK9riIsIuefoiIsIuK9ryIsIuefsyIsIuK9sCIsIuekuiIsIuK9sSIsIuemuCIsIuK9siIsIuemviIsIuK9syIsIueptCIsIuK9tCIsIueriyIsIuK9tSIsIueruSIsIuK9tiIsIuexsyIsIuK9tyIsIuezuCIsIuK9uCIsIue8tiIsIuK9uSIsIue9kSIsIuK9uiIsIue+iiIsIuK9uyIsIue+vSIsIuK9vCIsIuiAgSIsIuK9vSIsIuiAjCIsIuK9viIsIuiAkiIsIuK9vyIsIuiAsyIsIuK+gCIsIuiBvyIsIuK+gSIsIuiCiSIsIuK+giIsIuiHoyIsIuK+gyIsIuiHqiIsIuK+hCIsIuiHsyIsIuK+hSIsIuiHvCIsIuK+hiIsIuiIjCIsIuK+hyIsIuiImyIsIuK+iCIsIuiInyIsIuK+iSIsIuiJriIsIuK+iiIsIuiJsiIsIuK+iyIsIuiJuCIsIuK+jCIsIuiZjSIsIuK+jSIsIuiZqyIsIuK+jiIsIuihgCIsIuK+jyIsIuihjCIsIuK+kCIsIuihoyIsIuK+kSIsIuilviIsIuK+kiIsIuimiyIsIuK+kyIsIuinkiIsIuK+lCIsIuiogCIsIuK+lSIsIuiwtyIsIuK+liIsIuixhiIsIuK+lyIsIuixlSIsIuK+mCIsIuixuCIsIuK+mSIsIuiynSIsIuK+miIsIui1pCIsIuK+myIsIui1sCIsIuK+nCIsIui2syIsIuK+nSIsIui6qyIsIuK+niIsIui7iiIsIuK+nyIsIui+myIsIuK+oCIsIui+sCIsIuK+oSIsIui+tSIsIuK+oiIsIumCkSIsIuK+oyIsIumFiSIsIuK+pCIsIumHhiIsIuK+pSIsIumHjCIsIuK+piIsIumHkSIsIuK+pyIsIumVtyIsIuK+qCIsIumWgCIsIuK+qSIsIumYnCIsIuK+qiIsIumatiIsIuK+qyIsIumauSIsIuK+rCIsIumbqCIsIuK+rSIsIumdkSIsIuK+riIsIumdniIsIuK+ryIsIumdoiIsIuK+sCIsIumdqSIsIuK+sSIsIumfiyIsIuK+siIsIumfrSIsIuK+syIsIumfsyIsIuK+tCIsIumggSIsIuK+tSIsIumiqCIsIuK+tiIsIumjmyIsIuK+tyIsIumjnyIsIuK+uCIsIummliIsIuK+uSIsIummmSIsIuK+uiIsIummrCIsIuK+uyIsIumqqCIsIuK+vCIsIumrmCIsIuK+vSIsIumrnyIsIuK+viIsIumspSIsIuK+vyIsIumsryIsIuK/gCIsIumssiIsIuK/gSIsIumsvCIsIuK/giIsIumtmiIsIuK/gyIsIumzpSIsIuK/hCIsIum5tSIsIuK/hSIsIum5vyIsIuK/hiIsIum6pSIsIuK/hyIsIum6uyIsIuK/iCIsIum7gyIsIuK/iSIsIum7jSIsIuK/iiIsIum7kSIsIuK/iyIsIum7uSIsIuK/jCIsIum7vSIsIuK/jSIsIum8jiIsIuK/jiIsIum8kyIsIuK/jyIsIum8oCIsIuK/kCIsIum8uyIsIuK/kSIsIum9iiIsIuK/kiIsIum9kiIsIuK/kyIsIum+jSIsIuK/lCIsIum+nCIsIuK/lSIsIum+oCIsIuOAtiIsIuOAkiIsIuOAuCIsIuWNgSIsIuOAuSIsIuWNhCIsIuOAuiIsIuWNhSIsIuOCmyIsIiDjgpkiLCLjgpwiLCIg44KaIiwi44SxIiwi4YSAIiwi44SyIiwi4YSBIiwi44SzIiwi4YaqIiwi44S0Iiwi4YSCIiwi44S1Iiwi4YasIiwi44S2Iiwi4YatIiwi44S3Iiwi4YSDIiwi44S4Iiwi4YSEIiwi44S5Iiwi4YSFIiwi44S6Iiwi4YawIiwi44S7Iiwi4YaxIiwi44S8Iiwi4YayIiwi44S9Iiwi4YazIiwi44S+Iiwi4Ya0Iiwi44S/Iiwi4Ya1Iiwi44WAIiwi4YSaIiwi44WBIiwi4YSGIiwi44WCIiwi4YSHIiwi44WDIiwi4YSIIiwi44WEIiwi4YShIiwi44WFIiwi4YSJIiwi44WGIiwi4YSKIiwi44WHIiwi4YSLIiwi44WIIiwi4YSMIiwi44WJIiwi4YSNIiwi44WKIiwi4YSOIiwi44WLIiwi4YSPIiwi44WMIiwi4YSQIiwi44WNIiwi4YSRIiwi44WOIiwi4YSSIiwi44WPIiwi4YWhIiwi44WQIiwi4YWiIiwi44WRIiwi4YWjIiwi44WSIiwi4YWkIiwi44WTIiwi4YWlIiwi44WUIiwi4YWmIiwi44WVIiwi4YWnIiwi44WWIiwi4YWoIiwi44WXIiwi4YWpIiwi44WYIiwi4YWqIiwi44WZIiwi4YWrIiwi44WaIiwi4YWsIiwi44WbIiwi4YWtIiwi44WcIiwi4YWuIiwi44WdIiwi4YWvIiwi44WeIiwi4YWwIiwi44WfIiwi4YWxIiwi44WgIiwi4YWyIiwi44WhIiwi4YWzIiwi44WiIiwi4YW0Iiwi44WjIiwi4YW1Iiwi44WkIiwi4YWgIiwi44WlIiwi4YSUIiwi44WmIiwi4YSVIiwi44WnIiwi4YeHIiwi44WoIiwi4YeIIiwi44WpIiwi4YeMIiwi44WqIiwi4YeOIiwi44WrIiwi4YeTIiwi44WsIiwi4YeXIiwi44WtIiwi4YeZIiwi44WuIiwi4YScIiwi44WvIiwi4YedIiwi44WwIiwi4YefIiwi44WxIiwi4YSdIiwi44WyIiwi4YSeIiwi44WzIiwi4YSgIiwi44W0Iiwi4YSiIiwi44W1Iiwi4YSjIiwi44W2Iiwi4YSnIiwi44W3Iiwi4YSpIiwi44W4Iiwi4YSrIiwi44W5Iiwi4YSsIiwi44W6Iiwi4YStIiwi44W7Iiwi4YSuIiwi44W8Iiwi4YSvIiwi44W9Iiwi4YSyIiwi44W+Iiwi4YS2Iiwi44W/Iiwi4YWAIiwi44aAIiwi4YWHIiwi44aBIiwi4YWMIiwi44aCIiwi4YexIiwi44aDIiwi4YeyIiwi44aEIiwi4YWXIiwi44aFIiwi4YWYIiwi44aGIiwi4YWZIiwi44aHIiwi4YaEIiwi44aIIiwi4YaFIiwi44aJIiwi4YaIIiwi44aKIiwi4YaRIiwi44aLIiwi4YaSIiwi44aMIiwi4YaUIiwi44aNIiwi4YaeIiwi44aOIiwi4YahIiwi44iAIiwiKOGEgCkiLCLjiIEiLCIo4YSCKSIsIuOIgiIsIijhhIMpIiwi44iDIiwiKOGEhSkiLCLjiIQiLCIo4YSGKSIsIuOIhSIsIijhhIcpIiwi44iGIiwiKOGEiSkiLCLjiIciLCIo4YSLKSIsIuOIiCIsIijhhIwpIiwi44iJIiwiKOGEjikiLCLjiIoiLCIo4YSPKSIsIuOIiyIsIijhhJApIiwi44iMIiwiKOGEkSkiLCLjiI0iLCIo4YSSKSIsIuOIjiIsIijhhIDhhaEpIiwi44iPIiwiKOGEguGFoSkiLCLjiJAiLCIo4YSD4YWhKSIsIuOIkSIsIijhhIXhhaEpIiwi44iSIiwiKOGEhuGFoSkiLCLjiJMiLCIo4YSH4YWhKSIsIuOIlCIsIijhhInhhaEpIiwi44iVIiwiKOGEi+GFoSkiLCLjiJYiLCIo4YSM4YWhKSIsIuOIlyIsIijhhI7hhaEpIiwi44iYIiwiKOGEj+GFoSkiLCLjiJkiLCIo4YSQ4YWhKSIsIuOImiIsIijhhJHhhaEpIiwi44ibIiwiKOGEkuGFoSkiLCLjiJwiLCIo4YSM4YWuKSIsIuOInSIsIijhhIvhhanhhIzhhaXhhqspIiwi44ieIiwiKOGEi+GFqeGEkuGFrikiLCLjiKAiLCIo5LiAKSIsIuOIoSIsIijkuowpIiwi44iiIiwiKOS4iSkiLCLjiKMiLCIo5ZubKSIsIuOIpCIsIijkupQpIiwi44ilIiwiKOWFrSkiLCLjiKYiLCIo5LiDKSIsIuOIpyIsIijlhaspIiwi44ioIiwiKOS5nSkiLCLjiKkiLCIo5Y2BKSIsIuOIqiIsIijmnIgpIiwi44irIiwiKOeBqykiLCLjiKwiLCIo5rC0KSIsIuOIrSIsIijmnKgpIiwi44iuIiwiKOmHkSkiLCLjiK8iLCIo5ZyfKSIsIuOIsCIsIijml6UpIiwi44ixIiwiKOagqikiLCLjiLIiLCIo5pyJKSIsIuOIsyIsIijnpL4pIiwi44i0IiwiKOWQjSkiLCLjiLUiLCIo54m5KSIsIuOItiIsIijosqEpIiwi44i3IiwiKOelnSkiLCLjiLgiLCIo5Yq0KSIsIuOIuSIsIijku6MpIiwi44i6IiwiKOWRvCkiLCLjiLsiLCIo5a2mKSIsIuOIvCIsIijnm6MpIiwi44i9IiwiKOS8gSkiLCLjiL4iLCIo6LOHKSIsIuOIvyIsIijljZQpIiwi44mAIiwiKOelrSkiLCLjiYEiLCIo5LyRKSIsIuOJgiIsIijoh6opIiwi44mDIiwiKOiHsykiLCLji4AiLCIx5pyIIiwi44uBIiwiMuaciCIsIuOLgiIsIjPmnIgiLCLji4MiLCI05pyIIiwi44uEIiwiNeaciCIsIuOLhSIsIjbmnIgiLCLji4YiLCI35pyIIiwi44uHIiwiOOaciCIsIuOLiCIsIjnmnIgiLCLji4kiLCIxMOaciCIsIuOLiiIsIjEx5pyIIiwi44uLIiwiMTLmnIgiLCLjjZgiLCIw54K5Iiwi442ZIiwiMeeCuSIsIuONmiIsIjLngrkiLCLjjZsiLCIz54K5Iiwi442cIiwiNOeCuSIsIuONnSIsIjXngrkiLCLjjZ4iLCI254K5Iiwi442fIiwiN+eCuSIsIuONoCIsIjjngrkiLCLjjaEiLCI554K5Iiwi442iIiwiMTDngrkiLCLjjaMiLCIxMeeCuSIsIuONpCIsIjEy54K5Iiwi442lIiwiMTPngrkiLCLjjaYiLCIxNOeCuSIsIuONpyIsIjE154K5Iiwi442oIiwiMTbngrkiLCLjjakiLCIxN+eCuSIsIuONqiIsIjE454K5Iiwi442rIiwiMTnngrkiLCLjjawiLCIyMOeCuSIsIuONrSIsIjIx54K5Iiwi442uIiwiMjLngrkiLCLjja8iLCIyM+eCuSIsIuONsCIsIjI054K5Iiwi44+gIiwiMeaXpSIsIuOPoSIsIjLml6UiLCLjj6IiLCIz5pelIiwi44+jIiwiNOaXpSIsIuOPpCIsIjXml6UiLCLjj6UiLCI25pelIiwi44+mIiwiN+aXpSIsIuOPpyIsIjjml6UiLCLjj6giLCI55pelIiwi44+pIiwiMTDml6UiLCLjj6oiLCIxMeaXpSIsIuOPqyIsIjEy5pelIiwi44+sIiwiMTPml6UiLCLjj60iLCIxNOaXpSIsIuOPriIsIjE15pelIiwi44+vIiwiMTbml6UiLCLjj7AiLCIxN+aXpSIsIuOPsSIsIjE45pelIiwi44+yIiwiMTnml6UiLCLjj7MiLCIyMOaXpSIsIuOPtCIsIjIx5pelIiwi44+1IiwiMjLml6UiLCLjj7YiLCIyM+aXpSIsIuOPtyIsIjI05pelIiwi44+4IiwiMjXml6UiLCLjj7kiLCIyNuaXpSIsIuOPuiIsIjI35pelIiwi44+7IiwiMjjml6UiLCLjj7wiLCIyOeaXpSIsIuOPvSIsIjMw5pelIiwi44++IiwiMzHml6UiLCLvrIAiLCJmZiIsIu+sgSIsImZpIiwi76yCIiwiZmwiLCLvrIMiLCJmZmkiLCLvrIQiLCJmZmwiLCLvrIUiLCLFv3QiLCLvrIYiLCJzdCIsIu+skyIsItW01bYiLCLvrJQiLCLVtNWlIiwi76yVIiwi1bTVqyIsIu+sliIsItW+1bYiLCLvrJciLCLVtNWtIiwi762PIiwi15DXnCIsIu+tkCIsItmxIiwi762RIiwi2bEiLCLvrZIiLCLZuyIsIu+tkyIsItm7Iiwi762UIiwi2bsiLCLvrZUiLCLZuyIsIu+tliIsItm+Iiwi762XIiwi2b4iLCLvrZgiLCLZviIsIu+tmSIsItm+Iiwi762aIiwi2oAiLCLvrZsiLCLagCIsIu+tnCIsItqAIiwi762dIiwi2oAiLCLvrZ4iLCLZuiIsIu+tnyIsItm6Iiwi762gIiwi2boiLCLvraEiLCLZuiIsIu+toiIsItm/Iiwi762jIiwi2b8iLCLvraQiLCLZvyIsIu+tpSIsItm/Iiwi762mIiwi2bkiLCLvraciLCLZuSIsIu+tqCIsItm5Iiwi762pIiwi2bkiLCLvraoiLCLapCIsIu+tqyIsItqkIiwi762sIiwi2qQiLCLvra0iLCLapCIsIu+triIsItqmIiwi762vIiwi2qYiLCLvrbAiLCLapiIsIu+tsSIsItqmIiwi762yIiwi2oQiLCLvrbMiLCLahCIsIu+ttCIsItqEIiwi7621Iiwi2oQiLCLvrbYiLCLagyIsIu+ttyIsItqDIiwi7624Iiwi2oMiLCLvrbkiLCLagyIsIu+tuiIsItqGIiwi7627Iiwi2oYiLCLvrbwiLCLahiIsIu+tvSIsItqGIiwi762+Iiwi2ociLCLvrb8iLCLahyIsIu+ugCIsItqHIiwi766BIiwi2ociLCLvroIiLCLajSIsIu+ugyIsItqNIiwi766EIiwi2owiLCLvroUiLCLajCIsIu+uhiIsItqOIiwi766HIiwi2o4iLCLvrogiLCLaiCIsIu+uiSIsItqIIiwi766KIiwi2pgiLCLvrosiLCLamCIsIu+ujCIsItqRIiwi766NIiwi2pEiLCLvro4iLCLaqSIsIu+ujyIsItqpIiwi766QIiwi2qkiLCLvrpEiLCLaqSIsIu+ukiIsItqvIiwi766TIiwi2q8iLCLvrpQiLCLaryIsIu+ulSIsItqvIiwi766WIiwi2rMiLCLvrpciLCLasyIsIu+umCIsItqzIiwi766ZIiwi2rMiLCLvrpoiLCLasSIsIu+umyIsItqxIiwi766cIiwi2rEiLCLvrp0iLCLasSIsIu+uniIsItq6Iiwi766fIiwi2roiLCLvrqAiLCLauyIsIu+uoSIsItq7Iiwi766iIiwi2rsiLCLvrqMiLCLauyIsIu+upCIsItuAIiwi766lIiwi24AiLCLvrqYiLCLbgSIsIu+upyIsItuBIiwi766oIiwi24EiLCLvrqkiLCLbgSIsIu+uqiIsItq+Iiwi766rIiwi2r4iLCLvrqwiLCLaviIsIu+urSIsItq+Iiwi766uIiwi25IiLCLvrq8iLCLbkiIsIu+usCIsItuTIiwi766xIiwi25MiLCLvr5MiLCLarSIsIu+vlCIsItqtIiwi76+VIiwi2q0iLCLvr5YiLCLarSIsIu+vlyIsItuHIiwi76+YIiwi24ciLCLvr5kiLCLbhiIsIu+vmiIsItuGIiwi76+bIiwi24giLCLvr5wiLCLbiCIsIu+vnSIsItm3Iiwi76+eIiwi24siLCLvr58iLCLbiyIsIu+voCIsItuFIiwi76+hIiwi24UiLCLvr6IiLCLbiSIsIu+voyIsItuJIiwi76+kIiwi25AiLCLvr6UiLCLbkCIsIu+vpiIsItuQIiwi76+nIiwi25AiLCLvr6giLCLZiSIsIu+vqSIsItmJIiwi76+qIiwi2KbYpyIsIu+vqyIsItim2KciLCLvr6wiLCLYptuVIiwi76+tIiwi2KbblSIsIu+vriIsItim2YgiLCLvr68iLCLYptmIIiwi76+wIiwi2KbbhyIsIu+vsSIsItim24ciLCLvr7IiLCLYptuGIiwi76+zIiwi2KbbhiIsIu+vtCIsItim24giLCLvr7UiLCLYptuIIiwi76+2Iiwi2KbbkCIsIu+vtyIsItim25AiLCLvr7giLCLYptuQIiwi76+5Iiwi2KbZiSIsIu+vuiIsItim2YkiLCLvr7siLCLYptmJIiwi76+8Iiwi24wiLCLvr70iLCLbjCIsIu+vviIsItuMIiwi76+/Iiwi24wiLCLvsIAiLCLYptisIiwi77CBIiwi2KbYrSIsIu+wgiIsItim2YUiLCLvsIMiLCLYptmJIiwi77CEIiwi2KbZiiIsIu+whSIsItio2KwiLCLvsIYiLCLYqNitIiwi77CHIiwi2KjYriIsIu+wiCIsItio2YUiLCLvsIkiLCLYqNmJIiwi77CKIiwi2KjZiiIsIu+wiyIsItiq2KwiLCLvsIwiLCLYqtitIiwi77CNIiwi2KrYriIsIu+wjiIsItiq2YUiLCLvsI8iLCLYqtmJIiwi77CQIiwi2KrZiiIsIu+wkSIsItir2KwiLCLvsJIiLCLYq9mFIiwi77CTIiwi2KvZiSIsIu+wlCIsItir2YoiLCLvsJUiLCLYrNitIiwi77CWIiwi2KzZhSIsIu+wlyIsItit2KwiLCLvsJgiLCLYrdmFIiwi77CZIiwi2K7YrCIsIu+wmiIsItiu2K0iLCLvsJsiLCLYrtmFIiwi77CcIiwi2LPYrCIsIu+wnSIsItiz2K0iLCLvsJ4iLCLYs9iuIiwi77CfIiwi2LPZhSIsIu+woCIsIti12K0iLCLvsKEiLCLYtdmFIiwi77CiIiwi2LbYrCIsIu+woyIsIti22K0iLCLvsKQiLCLYttiuIiwi77ClIiwi2LbZhSIsIu+wpiIsIti32K0iLCLvsKciLCLYt9mFIiwi77CoIiwi2LjZhSIsIu+wqSIsIti52KwiLCLvsKoiLCLYudmFIiwi77CrIiwi2LrYrCIsIu+wrCIsIti62YUiLCLvsK0iLCLZgdisIiwi77CuIiwi2YHYrSIsIu+wryIsItmB2K4iLCLvsLAiLCLZgdmFIiwi77CxIiwi2YHZiSIsIu+wsiIsItmB2YoiLCLvsLMiLCLZgtitIiwi77C0Iiwi2YLZhSIsIu+wtSIsItmC2YkiLCLvsLYiLCLZgtmKIiwi77C3Iiwi2YPYpyIsIu+wuCIsItmD2KwiLCLvsLkiLCLZg9itIiwi77C6Iiwi2YPYriIsIu+wuyIsItmD2YQiLCLvsLwiLCLZg9mFIiwi77C9Iiwi2YPZiSIsIu+wviIsItmD2YoiLCLvsL8iLCLZhNisIiwi77GAIiwi2YTYrSIsIu+xgSIsItmE2K4iLCLvsYIiLCLZhNmFIiwi77GDIiwi2YTZiSIsIu+xhCIsItmE2YoiLCLvsYUiLCLZhdisIiwi77GGIiwi2YXYrSIsIu+xhyIsItmF2K4iLCLvsYgiLCLZhdmFIiwi77GJIiwi2YXZiSIsIu+xiiIsItmF2YoiLCLvsYsiLCLZhtisIiwi77GMIiwi2YbYrSIsIu+xjSIsItmG2K4iLCLvsY4iLCLZhtmFIiwi77GPIiwi2YbZiSIsIu+xkCIsItmG2YoiLCLvsZEiLCLZh9isIiwi77GSIiwi2YfZhSIsIu+xkyIsItmH2YkiLCLvsZQiLCLZh9mKIiwi77GVIiwi2YrYrCIsIu+xliIsItmK2K0iLCLvsZciLCLZitiuIiwi77GYIiwi2YrZhSIsIu+xmSIsItmK2YkiLCLvsZoiLCLZitmKIiwi77GbIiwi2LDZsCIsIu+xnCIsItix2bAiLCLvsZ0iLCLZidmwIiwi77GeIiwiINmM2ZEiLCLvsZ8iLCIg2Y3ZkSIsIu+xoCIsIiDZjtmRIiwi77GhIiwiINmP2ZEiLCLvsaIiLCIg2ZDZkSIsIu+xoyIsIiDZkdmwIiwi77GkIiwi2KbYsSIsIu+xpSIsItim2LIiLCLvsaYiLCLYptmFIiwi77GnIiwi2KbZhiIsIu+xqCIsItim2YkiLCLvsakiLCLYptmKIiwi77GqIiwi2KjYsSIsIu+xqyIsItio2LIiLCLvsawiLCLYqNmFIiwi77GtIiwi2KjZhiIsIu+xriIsItio2YkiLCLvsa8iLCLYqNmKIiwi77GwIiwi2KrYsSIsIu+xsSIsItiq2LIiLCLvsbIiLCLYqtmFIiwi77GzIiwi2KrZhiIsIu+xtCIsItiq2YkiLCLvsbUiLCLYqtmKIiwi77G2Iiwi2KvYsSIsIu+xtyIsItir2LIiLCLvsbgiLCLYq9mFIiwi77G5Iiwi2KvZhiIsIu+xuiIsItir2YkiLCLvsbsiLCLYq9mKIiwi77G8Iiwi2YHZiSIsIu+xvSIsItmB2YoiLCLvsb4iLCLZgtmJIiwi77G/Iiwi2YLZiiIsIu+ygCIsItmD2KciLCLvsoEiLCLZg9mEIiwi77KCIiwi2YPZhSIsIu+ygyIsItmD2YkiLCLvsoQiLCLZg9mKIiwi77KFIiwi2YTZhSIsIu+yhiIsItmE2YkiLCLvsociLCLZhNmKIiwi77KIIiwi2YXYpyIsIu+yiSIsItmF2YUiLCLvsooiLCLZhtixIiwi77KLIiwi2YbYsiIsIu+yjCIsItmG2YUiLCLvso0iLCLZhtmGIiwi77KOIiwi2YbZiSIsIu+yjyIsItmG2YoiLCLvspAiLCLZidmwIiwi77KRIiwi2YrYsSIsIu+ykiIsItmK2LIiLCLvspMiLCLZitmFIiwi77KUIiwi2YrZhiIsIu+ylSIsItmK2YkiLCLvspYiLCLZitmKIiwi77KXIiwi2KbYrCIsIu+ymCIsItim2K0iLCLvspkiLCLYptiuIiwi77KaIiwi2KbZhSIsIu+ymyIsItim2YciLCLvspwiLCLYqNisIiwi77KdIiwi2KjYrSIsIu+yniIsItio2K4iLCLvsp8iLCLYqNmFIiwi77KgIiwi2KjZhyIsIu+yoSIsItiq2KwiLCLvsqIiLCLYqtitIiwi77KjIiwi2KrYriIsIu+ypCIsItiq2YUiLCLvsqUiLCLYqtmHIiwi77KmIiwi2KvZhSIsIu+ypyIsItis2K0iLCLvsqgiLCLYrNmFIiwi77KpIiwi2K3YrCIsIu+yqiIsItit2YUiLCLvsqsiLCLYrtisIiwi77KsIiwi2K7ZhSIsIu+yrSIsItiz2KwiLCLvsq4iLCLYs9itIiwi77KvIiwi2LPYriIsIu+ysCIsItiz2YUiLCLvsrEiLCLYtditIiwi77KyIiwi2LXYriIsIu+ysyIsIti12YUiLCLvsrQiLCLYttisIiwi77K1Iiwi2LbYrSIsIu+ytiIsIti22K4iLCLvsrciLCLYttmFIiwi77K4Iiwi2LfYrSIsIu+yuSIsIti42YUiLCLvsroiLCLYudisIiwi77K7Iiwi2LnZhSIsIu+yvCIsIti62KwiLCLvsr0iLCLYutmFIiwi77K+Iiwi2YHYrCIsIu+yvyIsItmB2K0iLCLvs4AiLCLZgdiuIiwi77OBIiwi2YHZhSIsIu+zgiIsItmC2K0iLCLvs4MiLCLZgtmFIiwi77OEIiwi2YPYrCIsIu+zhSIsItmD2K0iLCLvs4YiLCLZg9iuIiwi77OHIiwi2YPZhCIsIu+ziCIsItmD2YUiLCLvs4kiLCLZhNisIiwi77OKIiwi2YTYrSIsIu+ziyIsItmE2K4iLCLvs4wiLCLZhNmFIiwi77ONIiwi2YTZhyIsIu+zjiIsItmF2KwiLCLvs48iLCLZhditIiwi77OQIiwi2YXYriIsIu+zkSIsItmF2YUiLCLvs5IiLCLZhtisIiwi77OTIiwi2YbYrSIsIu+zlCIsItmG2K4iLCLvs5UiLCLZhtmFIiwi77OWIiwi2YbZhyIsIu+zlyIsItmH2KwiLCLvs5giLCLZh9mFIiwi77OZIiwi2YfZsCIsIu+zmiIsItmK2KwiLCLvs5siLCLZititIiwi77OcIiwi2YrYriIsIu+znSIsItmK2YUiLCLvs54iLCLZitmHIiwi77OfIiwi2KbZhSIsIu+zoCIsItim2YciLCLvs6EiLCLYqNmFIiwi77OiIiwi2KjZhyIsIu+zoyIsItiq2YUiLCLvs6QiLCLYqtmHIiwi77OlIiwi2KvZhSIsIu+zpiIsItir2YciLCLvs6ciLCLYs9mFIiwi77OoIiwi2LPZhyIsIu+zqSIsIti02YUiLCLvs6oiLCLYtNmHIiwi77OrIiwi2YPZhCIsIu+zrCIsItmD2YUiLCLvs60iLCLZhNmFIiwi77OuIiwi2YbZhSIsIu+zryIsItmG2YciLCLvs7AiLCLZitmFIiwi77OxIiwi2YrZhyIsIu+zsiIsItmA2Y7ZkSIsIu+zsyIsItmA2Y/ZkSIsIu+ztCIsItmA2ZDZkSIsIu+ztSIsIti32YkiLCLvs7YiLCLYt9mKIiwi77O3Iiwi2LnZiSIsIu+zuCIsIti52YoiLCLvs7kiLCLYutmJIiwi77O6Iiwi2LrZiiIsIu+zuyIsItiz2YkiLCLvs7wiLCLYs9mKIiwi77O9Iiwi2LTZiSIsIu+zviIsIti02YoiLCLvs78iLCLYrdmJIiwi77SAIiwi2K3ZiiIsIu+0gSIsItis2YkiLCLvtIIiLCLYrNmKIiwi77SDIiwi2K7ZiSIsIu+0hCIsItiu2YoiLCLvtIUiLCLYtdmJIiwi77SGIiwi2LXZiiIsIu+0hyIsIti22YkiLCLvtIgiLCLYttmKIiwi77SJIiwi2LTYrCIsIu+0iiIsIti02K0iLCLvtIsiLCLYtNiuIiwi77SMIiwi2LTZhSIsIu+0jSIsIti02LEiLCLvtI4iLCLYs9ixIiwi77SPIiwi2LXYsSIsIu+0kCIsIti22LEiLCLvtJEiLCLYt9mJIiwi77SSIiwi2LfZiiIsIu+0kyIsIti52YkiLCLvtJQiLCLYudmKIiwi77SVIiwi2LrZiSIsIu+0liIsIti62YoiLCLvtJciLCLYs9mJIiwi77SYIiwi2LPZiiIsIu+0mSIsIti02YkiLCLvtJoiLCLYtNmKIiwi77SbIiwi2K3ZiSIsIu+0nCIsItit2YoiLCLvtJ0iLCLYrNmJIiwi77SeIiwi2KzZiiIsIu+0nyIsItiu2YkiLCLvtKAiLCLYrtmKIiwi77ShIiwi2LXZiSIsIu+0oiIsIti12YoiLCLvtKMiLCLYttmJIiwi77SkIiwi2LbZiiIsIu+0pSIsIti02KwiLCLvtKYiLCLYtNitIiwi77SnIiwi2LTYriIsIu+0qCIsIti02YUiLCLvtKkiLCLYtNixIiwi77SqIiwi2LPYsSIsIu+0qyIsIti12LEiLCLvtKwiLCLYttixIiwi77StIiwi2LTYrCIsIu+0riIsIti02K0iLCLvtK8iLCLYtNiuIiwi77SwIiwi2LTZhSIsIu+0sSIsItiz2YciLCLvtLIiLCLYtNmHIiwi77SzIiwi2LfZhSIsIu+0tCIsItiz2KwiLCLvtLUiLCLYs9itIiwi77S2Iiwi2LPYriIsIu+0tyIsIti02KwiLCLvtLgiLCLYtNitIiwi77S5Iiwi2LTYriIsIu+0uiIsIti32YUiLCLvtLsiLCLYuNmFIiwi77S8Iiwi2KfZiyIsIu+0vSIsItin2YsiLCLvtZAiLCLYqtis2YUiLCLvtZEiLCLYqtit2KwiLCLvtZIiLCLYqtit2KwiLCLvtZMiLCLYqtit2YUiLCLvtZQiLCLYqtiu2YUiLCLvtZUiLCLYqtmF2KwiLCLvtZYiLCLYqtmF2K0iLCLvtZciLCLYqtmF2K4iLCLvtZgiLCLYrNmF2K0iLCLvtZkiLCLYrNmF2K0iLCLvtZoiLCLYrdmF2YoiLCLvtZsiLCLYrdmF2YkiLCLvtZwiLCLYs9it2KwiLCLvtZ0iLCLYs9is2K0iLCLvtZ4iLCLYs9is2YkiLCLvtZ8iLCLYs9mF2K0iLCLvtaAiLCLYs9mF2K0iLCLvtaEiLCLYs9mF2KwiLCLvtaIiLCLYs9mF2YUiLCLvtaMiLCLYs9mF2YUiLCLvtaQiLCLYtdit2K0iLCLvtaUiLCLYtdit2K0iLCLvtaYiLCLYtdmF2YUiLCLvtaciLCLYtNit2YUiLCLvtagiLCLYtNit2YUiLCLvtakiLCLYtNis2YoiLCLvtaoiLCLYtNmF2K4iLCLvtasiLCLYtNmF2K4iLCLvtawiLCLYtNmF2YUiLCLvta0iLCLYtNmF2YUiLCLvta4iLCLYttit2YkiLCLvta8iLCLYttiu2YUiLCLvtbAiLCLYttiu2YUiLCLvtbEiLCLYt9mF2K0iLCLvtbIiLCLYt9mF2K0iLCLvtbMiLCLYt9mF2YUiLCLvtbQiLCLYt9mF2YoiLCLvtbUiLCLYudis2YUiLCLvtbYiLCLYudmF2YUiLCLvtbciLCLYudmF2YUiLCLvtbgiLCLYudmF2YkiLCLvtbkiLCLYutmF2YUiLCLvtboiLCLYutmF2YoiLCLvtbsiLCLYutmF2YkiLCLvtbwiLCLZgdiu2YUiLCLvtb0iLCLZgdiu2YUiLCLvtb4iLCLZgtmF2K0iLCLvtb8iLCLZgtmF2YUiLCLvtoAiLCLZhNit2YUiLCLvtoEiLCLZhNit2YoiLCLvtoIiLCLZhNit2YkiLCLvtoMiLCLZhNis2KwiLCLvtoQiLCLZhNis2KwiLCLvtoUiLCLZhNiu2YUiLCLvtoYiLCLZhNiu2YUiLCLvtociLCLZhNmF2K0iLCLvtogiLCLZhNmF2K0iLCLvtokiLCLZhdit2KwiLCLvtooiLCLZhdit2YUiLCLvtosiLCLZhdit2YoiLCLvtowiLCLZhdis2K0iLCLvto0iLCLZhdis2YUiLCLvto4iLCLZhdiu2KwiLCLvto8iLCLZhdiu2YUiLCLvtpIiLCLZhdis2K4iLCLvtpMiLCLZh9mF2KwiLCLvtpQiLCLZh9mF2YUiLCLvtpUiLCLZhtit2YUiLCLvtpYiLCLZhtit2YkiLCLvtpciLCLZhtis2YUiLCLvtpgiLCLZhtis2YUiLCLvtpkiLCLZhtis2YkiLCLvtpoiLCLZhtmF2YoiLCLvtpsiLCLZhtmF2YkiLCLvtpwiLCLZitmF2YUiLCLvtp0iLCLZitmF2YUiLCLvtp4iLCLYqNiu2YoiLCLvtp8iLCLYqtis2YoiLCLvtqAiLCLYqtis2YkiLCLvtqEiLCLYqtiu2YoiLCLvtqIiLCLYqtiu2YkiLCLvtqMiLCLYqtmF2YoiLCLvtqQiLCLYqtmF2YkiLCLvtqUiLCLYrNmF2YoiLCLvtqYiLCLYrNit2YkiLCLvtqciLCLYrNmF2YkiLCLvtqgiLCLYs9iu2YkiLCLvtqkiLCLYtdit2YoiLCLvtqoiLCLYtNit2YoiLCLvtqsiLCLYttit2YoiLCLvtqwiLCLZhNis2YoiLCLvtq0iLCLZhNmF2YoiLCLvtq4iLCLZitit2YoiLCLvtq8iLCLZitis2YoiLCLvtrAiLCLZitmF2YoiLCLvtrEiLCLZhdmF2YoiLCLvtrIiLCLZgtmF2YoiLCLvtrMiLCLZhtit2YoiLCLvtrQiLCLZgtmF2K0iLCLvtrUiLCLZhNit2YUiLCLvtrYiLCLYudmF2YoiLCLvtrciLCLZg9mF2YoiLCLvtrgiLCLZhtis2K0iLCLvtrkiLCLZhdiu2YoiLCLvtroiLCLZhNis2YUiLCLvtrsiLCLZg9mF2YUiLCLvtrwiLCLZhNis2YUiLCLvtr0iLCLZhtis2K0iLCLvtr4iLCLYrNit2YoiLCLvtr8iLCLYrdis2YoiLCLvt4AiLCLZhdis2YoiLCLvt4EiLCLZgdmF2YoiLCLvt4IiLCLYqNit2YoiLCLvt4MiLCLZg9mF2YUiLCLvt4QiLCLYudis2YUiLCLvt4UiLCLYtdmF2YUiLCLvt4YiLCLYs9iu2YoiLCLvt4ciLCLZhtis2YoiLCLvuYkiLCLigL4iLCLvuYoiLCLigL4iLCLvuYsiLCLigL4iLCLvuYwiLCLigL4iLCLvuY0iLCJfIiwi77mOIiwiXyIsIu+5jyIsIl8iLCLvuoAiLCLYoSIsIu+6gSIsItiiIiwi77qCIiwi2KIiLCLvuoMiLCLYoyIsIu+6hCIsItijIiwi77qFIiwi2KQiLCLvuoYiLCLYpCIsIu+6hyIsItilIiwi77qIIiwi2KUiLCLvuokiLCLYpiIsIu+6iiIsItimIiwi77qLIiwi2KYiLCLvuowiLCLYpiIsIu+6jSIsItinIiwi77qOIiwi2KciLCLvuo8iLCLYqCIsIu+6kCIsItioIiwi77qRIiwi2KgiLCLvupIiLCLYqCIsIu+6kyIsItipIiwi77qUIiwi2KkiLCLvupUiLCLYqiIsIu+6liIsItiqIiwi77qXIiwi2KoiLCLvupgiLCLYqiIsIu+6mSIsItirIiwi77qaIiwi2KsiLCLvupsiLCLYqyIsIu+6nCIsItirIiwi77qdIiwi2KwiLCLvup4iLCLYrCIsIu+6nyIsItisIiwi77qgIiwi2KwiLCLvuqEiLCLYrSIsIu+6oiIsItitIiwi77qjIiwi2K0iLCLvuqQiLCLYrSIsIu+6pSIsItiuIiwi77qmIiwi2K4iLCLvuqciLCLYriIsIu+6qCIsItiuIiwi77qpIiwi2K8iLCLvuqoiLCLYryIsIu+6qyIsItiwIiwi77qsIiwi2LAiLCLvuq0iLCLYsSIsIu+6riIsItixIiwi77qvIiwi2LIiLCLvurAiLCLYsiIsIu+6sSIsItizIiwi77qyIiwi2LMiLCLvurMiLCLYsyIsIu+6tCIsItizIiwi77q1Iiwi2LQiLCLvurYiLCLYtCIsIu+6tyIsIti0Iiwi77q4Iiwi2LQiLCLvurkiLCLYtSIsIu+6uiIsIti1Iiwi77q7Iiwi2LUiLCLvurwiLCLYtSIsIu+6vSIsIti2Iiwi77q+Iiwi2LYiLCLvur8iLCLYtiIsIu+7gCIsIti2Iiwi77uBIiwi2LciLCLvu4IiLCLYtyIsIu+7gyIsIti3Iiwi77uEIiwi2LciLCLvu4UiLCLYuCIsIu+7hiIsIti4Iiwi77uHIiwi2LgiLCLvu4giLCLYuCIsIu+7iSIsIti5Iiwi77uKIiwi2LkiLCLvu4siLCLYuSIsIu+7jCIsIti5Iiwi77uNIiwi2LoiLCLvu44iLCLYuiIsIu+7jyIsIti6Iiwi77uQIiwi2LoiLCLvu5EiLCLZgSIsIu+7kiIsItmBIiwi77uTIiwi2YEiLCLvu5QiLCLZgSIsIu+7lSIsItmCIiwi77uWIiwi2YIiLCLvu5ciLCLZgiIsIu+7mCIsItmCIiwi77uZIiwi2YMiLCLvu5oiLCLZgyIsIu+7myIsItmDIiwi77ucIiwi2YMiLCLvu50iLCLZhCIsIu+7niIsItmEIiwi77ufIiwi2YQiLCLvu6AiLCLZhCIsIu+7oSIsItmFIiwi77uiIiwi2YUiLCLvu6MiLCLZhSIsIu+7pCIsItmFIiwi77ulIiwi2YYiLCLvu6YiLCLZhiIsIu+7pyIsItmGIiwi77uoIiwi2YYiLCLvu6kiLCLZhyIsIu+7qiIsItmHIiwi77urIiwi2YciLCLvu6wiLCLZhyIsIu+7rSIsItmIIiwi77uuIiwi2YgiLCLvu68iLCLZiSIsIu+7sCIsItmJIiwi77uxIiwi2YoiLCLvu7IiLCLZiiIsIu+7syIsItmKIiwi77u0Iiwi2YoiLCLvu7UiLCLZhNiiIiwi77u2Iiwi2YTYoiIsIu+7tyIsItmE2KMiLCLvu7giLCLZhNijIiwi77u5Iiwi2YTYpSIsIu+7uiIsItmE2KUiLCLvu7siLCLZhNinIiwi77u8Iiwi2YTYpyJdfSkpO2Z1bmN0aW9uIHJldmVyc2VJZlJ0bChlKXtjb25zdCB0PWUubGVuZ3RoO2lmKHQ8PTF8fCFmdW5jdGlvbiBpc1JUTFJhbmdlRm9yKGUpe2xldCB0PWlbMTNdO2lmKGU+PXQuYmVnaW4mJmU8dC5lbmQpcmV0dXJuITA7dD1pWzExXTtyZXR1cm4gZT49dC5iZWdpbiYmZTx0LmVuZH0oZS5jaGFyQ29kZUF0KDApKSlyZXR1cm4gZTtjb25zdCBhPVtdO2ZvcihsZXQgcj10LTE7cj49MDtyLS0pYS5wdXNoKGVbcl0pO3JldHVybiBhLmpvaW4oIiIpfWNvbnN0IG89bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLGM9bmV3IE1hcDtmdW5jdGlvbiBnZXRDaGFyVW5pY29kZUNhdGVnb3J5KGUpe2NvbnN0IHQ9Yy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBhPWUubWF0Y2gobykscj17aXNXaGl0ZXNwYWNlOiEoIWF8fCFhWzFdKSxpc1plcm9XaWR0aERpYWNyaXRpYzohKCFhfHwhYVsyXSksaXNJbnZpc2libGVGb3JtYXRNYXJrOiEoIWF8fCFhWzNdKX07Yy5zZXQoZSxyKTtyZXR1cm4gcn1mdW5jdGlvbiBjbGVhclVuaWNvZGVDYWNoZXMoKXtjLmNsZWFyKCl9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuZ2V0U2VyaWZGb250cz10LmdldE5vblN0ZEZvbnRNYXA9dC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM9dC5nZXRGb250TmFtZVRvRmlsZU1hcD12b2lkIDA7dC5nZXRTdGFuZGFyZEZvbnROYW1lPWZ1bmN0aW9uIGdldFN0YW5kYXJkRm9udE5hbWUoZSl7Y29uc3QgdD0oMCxuLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gaSgpW3RdfTt0LmdldFN5bWJvbHNGb250cz10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldFN0ZEZvbnRNYXA9dm9pZCAwO3ZhciByPWEoNCksbj1hKDM2KTtjb25zdCBpPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsiVGltZXMtUm9tYW4iXT0iVGltZXMtUm9tYW4iO2UuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiO2UuQ291cmllcj0iQ291cmllciI7ZS5TeW1ib2w9IlN5bWJvbCI7ZVsiVGltZXMtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJIZWx2ZXRpY2EtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQ291cmllci1Cb2xkIl09IkNvdXJpZXItQm9sZCI7ZS5aYXBmRGluZ2JhdHM9IlphcGZEaW5nYmF0cyI7ZVsiVGltZXMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyI7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkNvdXJpZXItT2JsaXF1ZSJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlLkFyaWFsTmFycm93PSJIZWx2ZXRpY2EiO2VbIkFyaWFsTmFycm93LUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbE5hcnJvdy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxCbGFjaz0iSGVsdmV0aWNhIjtlWyJBcmlhbEJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJBcmlhbC1CbGFjayJdPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJsYWNrLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1CbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWw9IkhlbHZldGljYSI7ZVsiQXJpYWwtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbE1UPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxVbmljb2RlTVM9IkhlbHZldGljYSI7ZVsiQXJpYWxVbmljb2RlTVMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWxVbmljb2RlTVMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQ291cmllci1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXItSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSI7ZS5Db3VyaWVyTmV3PSJDb3VyaWVyIjtlWyJDb3VyaWVyTmV3LUJvbGQiXT0iQ291cmllci1Cb2xkIjtlWyJDb3VyaWVyTmV3LUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllck5ldy1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIjtlWyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXJOZXdQUy1Cb2xkTVQiXT0iQ291cmllci1Cb2xkIjtlWyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXT0iQ291cmllci1PYmxpcXVlIjtlLkNvdXJpZXJOZXdQU01UPSJDb3VyaWVyIjtlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIlN5bWJvbC1Cb2xkIl09IlN5bWJvbCI7ZVsiU3ltYm9sLUJvbGRJdGFsaWMiXT0iU3ltYm9sIjtlWyJTeW1ib2wtSXRhbGljIl09IlN5bWJvbCI7ZS5UaW1lc05ld1JvbWFuPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hbi1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiO2UuVGltZXNOZXdSb21hblBTPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZE1UIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXT0iVGltZXMtSXRhbGljIjtlLlRpbWVzTmV3Um9tYW5QU01UPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QU01ULUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMifSkpO3QuZ2V0U3RkRm9udE1hcD1pO2NvbnN0IHM9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNvdXJpZXI9IkZveGl0Rml4ZWQucGZiIjtlWyJDb3VyaWVyLUJvbGQiXT0iRm94aXRGaXhlZEJvbGQucGZiIjtlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09IkZveGl0Rml4ZWRCb2xkSXRhbGljLnBmYiI7ZVsiQ291cmllci1PYmxpcXVlIl09IkZveGl0Rml4ZWRJdGFsaWMucGZiIjtlLkhlbHZldGljYT0iRm94aXRTYW5zLnBmYiI7ZVsiSGVsdmV0aWNhLUJvbGQiXT0iRm94aXRTYW5zQm9sZC5wZmIiO2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSJGb3hpdFNhbnNCb2xkSXRhbGljLnBmYiI7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iRm94aXRTYW5zSXRhbGljLnBmYiI7ZVsiVGltZXMtUm9tYW4iXT0iRm94aXRTZXJpZi5wZmIiO2VbIlRpbWVzLUJvbGQiXT0iRm94aXRTZXJpZkJvbGQucGZiIjtlWyJUaW1lcy1Cb2xkSXRhbGljIl09IkZveGl0U2VyaWZCb2xkSXRhbGljLnBmYiI7ZVsiVGltZXMtSXRhbGljIl09IkZveGl0U2VyaWZJdGFsaWMucGZiIjtlLlN5bWJvbD0iRm94aXRTeW1ib2wucGZiIjtlLlphcGZEaW5nYmF0cz0iRm94aXREaW5nYmF0cy5wZmIiO2VbIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiXT0iTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUJvbGQiXT0iTGliZXJhdGlvblNhbnMtQm9sZC50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIjtlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIl09IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIn0pKTt0LmdldEZvbnROYW1lVG9GaWxlTWFwPXM7Y29uc3Qgbz0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ2FsaWJyaT0iSGVsdmV0aWNhIjtlWyJDYWxpYnJpLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkNhbGlicmktSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkNlbnR1cnlHb3RoaWM9IkhlbHZldGljYSI7ZVsiQ2VudHVyeUdvdGhpYy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJDZW50dXJ5R290aGljLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJDZW50dXJ5R290aGljLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5Db21pY1NhbnNNUz0iQ29taWMgU2FucyBNUyI7ZVsiQ29taWNTYW5zTVMtQm9sZCJdPSJDb21pYyBTYW5zIE1TLUJvbGQiO2VbIkNvbWljU2Fuc01TLUJvbGRJdGFsaWMiXT0iQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljIjtlWyJDb21pY1NhbnNNUy1JdGFsaWMiXT0iQ29taWMgU2FucyBNUy1JdGFsaWMiO2VbIkl0Y1N5bWJvbC1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJJdGNTeW1ib2wtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkl0Y1N5bWJvbC1Cb29rIl09IkhlbHZldGljYSI7ZVsiSXRjU3ltYm9sLUJvb2tJdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkl0Y1N5bWJvbC1NZWRpdW0iXT0iSGVsdmV0aWNhIjtlWyJJdGNTeW1ib2wtTWVkaXVtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkx1Y2lkYUNvbnNvbGU9IkNvdXJpZXIiO2VbIkx1Y2lkYUNvbnNvbGUtQm9sZCJdPSJDb3VyaWVyLUJvbGQiO2VbIkx1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJMdWNpZGFDb25zb2xlLUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIkx1Y2lkYVNhbnMtRGVtaSJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiTVMtR290aGljIl09Ik1TIEdvdGhpYyI7ZVsiTVMtR290aGljLUJvbGQiXT0iTVMgR290aGljLUJvbGQiO2VbIk1TLUdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIEdvdGhpYy1Cb2xkSXRhbGljIjtlWyJNUy1Hb3RoaWMtSXRhbGljIl09Ik1TIEdvdGhpYy1JdGFsaWMiO2VbIk1TLU1pbmNobyJdPSJNUyBNaW5jaG8iO2VbIk1TLU1pbmNoby1Cb2xkIl09Ik1TIE1pbmNoby1Cb2xkIjtlWyJNUy1NaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBNaW5jaG8tQm9sZEl0YWxpYyI7ZVsiTVMtTWluY2hvLUl0YWxpYyJdPSJNUyBNaW5jaG8tSXRhbGljIjtlWyJNUy1QR290aGljIl09Ik1TIFBHb3RoaWMiO2VbIk1TLVBHb3RoaWMtQm9sZCJdPSJNUyBQR290aGljLUJvbGQiO2VbIk1TLVBHb3RoaWMtQm9sZEl0YWxpYyJdPSJNUyBQR290aGljLUJvbGRJdGFsaWMiO2VbIk1TLVBHb3RoaWMtSXRhbGljIl09Ik1TIFBHb3RoaWMtSXRhbGljIjtlWyJNUy1QTWluY2hvIl09Ik1TIFBNaW5jaG8iO2VbIk1TLVBNaW5jaG8tQm9sZCJdPSJNUyBQTWluY2hvLUJvbGQiO2VbIk1TLVBNaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBQTWluY2hvLUJvbGRJdGFsaWMiO2VbIk1TLVBNaW5jaG8tSXRhbGljIl09Ik1TIFBNaW5jaG8tSXRhbGljIjtlLk51cHRpYWxTY3JpcHQ9IlRpbWVzLUl0YWxpYyI7ZS5TZWdvZVVJU3ltYm9sPSJIZWx2ZXRpY2EiO2UuV2luZ2RpbmdzPSJaYXBmRGluZ2JhdHMiO2VbIldpbmdkaW5ncy1SZWd1bGFyIl09IlphcGZEaW5nYmF0cyJ9KSk7dC5nZXROb25TdGRGb250TWFwPW87Y29uc3QgYz0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwO2VbIkFkb2JlIFRleHQiXT0hMDtlLkFsYmVydHVzPSEwO2UuQWxkdXM9ITA7ZS5BbGV4YW5kcmlhPSEwO2UuQWxnZXJpYW49ITA7ZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwO2UuQW50aXF1YT0hMDtlLkFwZXg9ITA7ZS5Bcm5vPSEwO2UuQXN0ZXI9ITA7ZS5BdXJvcmE9ITA7ZS5CYXNrZXJ2aWxsZT0hMDtlLkJlbGw9ITA7ZS5CZW1ibz0hMDtlWyJCZW1ibyBTY2hvb2xib29rIl09ITA7ZS5CZW5ndWlhdD0hMDtlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMDtlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMDtlWyJCZXJ0aG9sZCBDaXR5Il09ITA7ZS5Cb2Rvbmk9ITA7ZVsiQmF1ZXIgQm9kb25pIl09ITA7ZVsiQm9vayBBbnRpcXVhIl09ITA7ZS5Cb29rbWFuPSEwO2VbIkJvcmRlYXV4IFJvbWFuIl09ITA7ZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMDtlLkNhbGlzdG89ITA7ZS5DYWx2ZXJ0PSEwO2UuQ2FwaXRhbHM9ITA7ZS5DYW1icmlhPSEwO2UuQ2FydGllcj0hMDtlLkNhc2xvbj0hMDtlLkNhdHVsbD0hMDtlLkNlbnRhdXI9ITA7ZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMDtlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMDtlLkNoYXBhcnJhbD0hMDtlWyJDaGFyaXMgU0lMIl09ITA7ZS5DaGVsdGVuaGFtPSEwO2VbIkNob2xsYSBTbGFiIl09ITA7ZS5DbGFyZW5kb249ITA7ZS5DbGVhcmZhY2U9ITA7ZS5Db2NoaW49ITA7ZS5Db2xvbm5hPSEwO2VbIkNvbXB1dGVyIE1vZGVybiJdPSEwO2VbIkNvbmNyZXRlIFJvbWFuIl09ITA7ZS5Db25zdGFudGlhPSEwO2VbIkNvb3BlciBCbGFjayJdPSEwO2UuQ29yb25hPSEwO2UuRWNvdHlwZT0hMDtlLkVneXB0aWVubmU9ITA7ZS5FbGVwaGFudD0hMDtlLkV4Y2Vsc2lvcj0hMDtlLkZhaXJmaWVsZD0hMDtlWyJGRiBTY2FsYSJdPSEwO2UuRm9sa2FyZD0hMDtlLkZvb3RsaWdodD0hMDtlLkZyZWVTZXJpZj0hMDtlWyJGcml6IFF1YWRyYXRhIl09ITA7ZS5HYXJhbW9uZD0hMDtlLkdlbnRpdW09ITA7ZS5HZW9yZ2lhPSEwO2UuR2xvdWNlc3Rlcj0hMDtlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMDtlWyJHb3VkeSBTY2hvb2xib29rIl09ITA7ZVsiR291ZHkgUHJvIEZvbnQiXT0hMDtlLkdyYW5qb249ITA7ZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMDtlLkhlYXRoZXI9ITA7ZS5IZXJjdWxlcz0hMDtlWyJIaWdoIFRvd2VyIFRleHQiXT0hMDtlLkhpcm9zaGlnZT0hMDtlWyJIb2VmbGVyIFRleHQiXT0hMDtlWyJIdW1hbmEgU2VyaWYiXT0hMDtlLkltcHJpbnQ9ITA7ZVsiSW9uaWMgTm8uIDUiXT0hMDtlLkphbnNvbj0hMDtlLkpvYW5uYT0hMDtlLktvcmlubmE9ITA7ZS5MZXhpY29uPSEwO2UuTGliZXJhdGlvblNlcmlmPSEwO2VbIkxpYmVyYXRpb24gU2VyaWYiXT0hMDtlWyJMaW51eCBMaWJlcnRpbmUiXT0hMDtlLkxpdGVyYXR1cm5heWE9ITA7ZS5MdWNpZGE9ITA7ZVsiTHVjaWRhIEJyaWdodCJdPSEwO2UuTWVsaW9yPSEwO2UuTWVtcGhpcz0hMDtlLk1pbGxlcj0hMDtlLk1pbmlvbj0hMDtlLk1vZGVybj0hMDtlWyJNb25hIExpc2EiXT0hMDtlWyJNcnMgRWF2ZXMiXT0hMDtlWyJNUyBTZXJpZiJdPSEwO2VbIk11c2VvIFNsYWIiXT0hMDtlWyJOZXcgWW9yayJdPSEwO2VbIk5pbWJ1cyBSb21hbiJdPSEwO2VbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwO2UuTnVwdGlhbFNjcmlwdD0hMDtlLlBhbGF0aW5vPSEwO2UuUGVycGV0dWE9ITA7ZS5QbGFudGluPSEwO2VbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwO2UuUGxheWJpbGw9ITA7ZVsiUG9vciBSaWNoYXJkIl09ITA7ZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMDtlLlJlbmF1bHQ9ITA7ZS5SZXF1aWVtPSEwO2UuUm9ja3dlbGw9ITA7ZS5Sb21hbj0hMDtlWyJSb3RpcyBTZXJpZiJdPSEwO2UuU2Fib249ITA7ZS5TY2FsYT0hMDtlLlNlYWd1bGw9ITA7ZS5TaXN0aW5hPSEwO2UuU291dmVuaXI9ITA7ZS5TVElYPSEwO2VbIlN0b25lIEluZm9ybWFsIl09ITA7ZVsiU3RvbmUgU2VyaWYiXT0hMDtlLlN5bGZhZW49ITA7ZS5UaW1lcz0hMDtlLlRyYWphbj0hMDtlWyJUcmluaXTDqSJdPSEwO2VbIlRydW1wIE1lZGlhZXZhbCJdPSEwO2UuVXRvcGlhPSEwO2VbIlZhbGUgVHlwZSJdPSEwO2VbIkJpdHN0cmVhbSBWZXJhIl09ITA7ZVsiVmVyYSBTZXJpZiJdPSEwO2UuVmVyc2FpbGxlcz0hMDtlLldhbnRlZD0hMDtlLldlaXNzPSEwO2VbIldpZGUgTGF0aW4iXT0hMDtlLldpbmRzb3I9ITA7ZS5YSVRTPSEwfSkpO3QuZ2V0U2VyaWZGb250cz1jO2NvbnN0IGw9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkRpbmdiYXRzPSEwO2UuU3ltYm9sPSEwO2UuWmFwZkRpbmdiYXRzPSEwfSkpO3QuZ2V0U3ltYm9sc0ZvbnRzPWw7Y29uc3QgaD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMl09MTA7ZVszXT0zMjtlWzRdPTMzO2VbNV09MzQ7ZVs2XT0zNTtlWzddPTM2O2VbOF09Mzc7ZVs5XT0zODtlWzEwXT0zOTtlWzExXT00MDtlWzEyXT00MTtlWzEzXT00MjtlWzE0XT00MztlWzE1XT00NDtlWzE2XT00NTtlWzE3XT00NjtlWzE4XT00NztlWzE5XT00ODtlWzIwXT00OTtlWzIxXT01MDtlWzIyXT01MTtlWzIzXT01MjtlWzI0XT01MztlWzI1XT01NDtlWzI2XT01NTtlWzI3XT01NjtlWzI4XT01NztlWzI5XT01ODtlWzMwXT04OTQ7ZVszMV09NjA7ZVszMl09NjE7ZVszM109NjI7ZVszNF09NjM7ZVszNV09NjQ7ZVszNl09NjU7ZVszN109NjY7ZVszOF09Njc7ZVszOV09Njg7ZVs0MF09Njk7ZVs0MV09NzA7ZVs0Ml09NzE7ZVs0M109NzI7ZVs0NF09NzM7ZVs0NV09NzQ7ZVs0Nl09NzU7ZVs0N109NzY7ZVs0OF09Nzc7ZVs0OV09Nzg7ZVs1MF09Nzk7ZVs1MV09ODA7ZVs1Ml09ODE7ZVs1M109ODI7ZVs1NF09ODM7ZVs1NV09ODQ7ZVs1Nl09ODU7ZVs1N109ODY7ZVs1OF09ODc7ZVs1OV09ODg7ZVs2MF09ODk7ZVs2MV09OTA7ZVs2Ml09OTE7ZVs2M109OTI7ZVs2NF09OTM7ZVs2NV09OTQ7ZVs2Nl09OTU7ZVs2N109OTY7ZVs2OF09OTc7ZVs2OV09OTg7ZVs3MF09OTk7ZVs3MV09MTAwO2VbNzJdPTEwMTtlWzczXT0xMDI7ZVs3NF09MTAzO2VbNzVdPTEwNDtlWzc2XT0xMDU7ZVs3N109MTA2O2VbNzhdPTEwNztlWzc5XT0xMDg7ZVs4MF09MTA5O2VbODFdPTExMDtlWzgyXT0xMTE7ZVs4M109MTEyO2VbODRdPTExMztlWzg1XT0xMTQ7ZVs4Nl09MTE1O2VbODddPTExNjtlWzg4XT0xMTc7ZVs4OV09MTE4O2VbOTBdPTExOTtlWzkxXT0xMjA7ZVs5Ml09MTIxO2VbOTNdPTEyMjtlWzk0XT0xMjM7ZVs5NV09MTI0O2VbOTZdPTEyNTtlWzk3XT0xMjY7ZVs5OF09MTk2O2VbOTldPTE5NztlWzEwMF09MTk5O2VbMTAxXT0yMDE7ZVsxMDJdPTIwOTtlWzEwM109MjE0O2VbMTA0XT0yMjA7ZVsxMDVdPTIyNTtlWzEwNl09MjI0O2VbMTA3XT0yMjY7ZVsxMDhdPTIyODtlWzEwOV09MjI3O2VbMTEwXT0yMjk7ZVsxMTFdPTIzMTtlWzExMl09MjMzO2VbMTEzXT0yMzI7ZVsxMTRdPTIzNDtlWzExNV09MjM1O2VbMTE2XT0yMzc7ZVsxMTddPTIzNjtlWzExOF09MjM4O2VbMTE5XT0yMzk7ZVsxMjBdPTI0MTtlWzEyMV09MjQzO2VbMTIyXT0yNDI7ZVsxMjNdPTI0NDtlWzEyNF09MjQ2O2VbMTI1XT0yNDU7ZVsxMjZdPTI1MDtlWzEyN109MjQ5O2VbMTI4XT0yNTE7ZVsxMjldPTI1MjtlWzEzMF09ODIyNDtlWzEzMV09MTc2O2VbMTMyXT0xNjI7ZVsxMzNdPTE2MztlWzEzNF09MTY3O2VbMTM1XT04MjI2O2VbMTM2XT0xODI7ZVsxMzddPTIyMztlWzEzOF09MTc0O2VbMTM5XT0xNjk7ZVsxNDBdPTg0ODI7ZVsxNDFdPTE4MDtlWzE0Ml09MTY4O2VbMTQzXT04ODAwO2VbMTQ0XT0xOTg7ZVsxNDVdPTIxNjtlWzE0Nl09ODczNDtlWzE0N109MTc3O2VbMTQ4XT04ODA0O2VbMTQ5XT04ODA1O2VbMTUwXT0xNjU7ZVsxNTFdPTE4MTtlWzE1Ml09ODcwNjtlWzE1M109ODcyMTtlWzE1NF09ODcxOTtlWzE1Nl09ODc0NztlWzE1N109MTcwO2VbMTU4XT0xODY7ZVsxNTldPTg0ODY7ZVsxNjBdPTIzMDtlWzE2MV09MjQ4O2VbMTYyXT0xOTE7ZVsxNjNdPTE2MTtlWzE2NF09MTcyO2VbMTY1XT04NzMwO2VbMTY2XT00MDI7ZVsxNjddPTg3NzY7ZVsxNjhdPTg3MTA7ZVsxNjldPTE3MTtlWzE3MF09MTg3O2VbMTcxXT04MjMwO2VbMTc5XT04MjIwO2VbMTgwXT04MjIxO2VbMTgxXT04MjE2O2VbMTgyXT04MjE3O2VbMjAwXT0xOTM7ZVsyMDNdPTIwNTtlWzIxMF09MjE4O2VbMjIzXT03MTE7ZVsyMjRdPTMyMTtlWzIyNV09MzIyO2VbMjI2XT0zNTI7ZVsyMjddPTM1MztlWzIyOF09MzgxO2VbMjI5XT0zODI7ZVsyMzNdPTIyMTtlWzIzNF09MjUzO2VbMjUyXT0yNjM7ZVsyNTNdPTI2ODtlWzI1NF09MjY5O2VbMjU4XT0yNTg7ZVsyNjBdPTI2MDtlWzI2MV09MjYxO2VbMjY1XT0yODA7ZVsyNjZdPTI4MTtlWzI2N109MjgyO2VbMjY4XT0yODM7ZVsyNjldPTMxMztlWzI3NV09MzIzO2VbMjc2XT0zMjQ7ZVsyNzhdPTMyODtlWzI4M109MzQ0O2VbMjg0XT0zNDU7ZVsyODVdPTM0NjtlWzI4Nl09MzQ3O2VbMjkyXT0zNjc7ZVsyOTVdPTM3NztlWzI5Nl09Mzc4O2VbMjk4XT0zODA7ZVszMDVdPTk2MztlWzMwNl09OTY0O2VbMzA3XT05NjY7ZVszMDhdPTgyMTU7ZVszMDldPTgyNTI7ZVszMTBdPTgzMTk7ZVszMTFdPTgzNTk7ZVszMTJdPTg1OTI7ZVszMTNdPTg1OTM7ZVszMzddPTk1NTI7ZVs0OTNdPTEwMzk7ZVs0OTRdPTEwNDA7ZVs2NzJdPTE0ODg7ZVs2NzNdPTE0ODk7ZVs2NzRdPTE0OTA7ZVs2NzVdPTE0OTE7ZVs2NzZdPTE0OTI7ZVs2NzddPTE0OTM7ZVs2NzhdPTE0OTQ7ZVs2NzldPTE0OTU7ZVs2ODBdPTE0OTY7ZVs2ODFdPTE0OTc7ZVs2ODJdPTE0OTg7ZVs2ODNdPTE0OTk7ZVs2ODRdPTE1MDA7ZVs2ODVdPTE1MDE7ZVs2ODZdPTE1MDI7ZVs2ODddPTE1MDM7ZVs2ODhdPTE1MDQ7ZVs2ODldPTE1MDU7ZVs2OTBdPTE1MDY7ZVs2OTFdPTE1MDc7ZVs2OTJdPTE1MDg7ZVs2OTNdPTE1MDk7ZVs2OTRdPTE1MTA7ZVs2OTVdPTE1MTE7ZVs2OTZdPTE1MTI7ZVs2OTddPTE1MTM7ZVs2OThdPTE1MTQ7ZVs3MDVdPTE1MjQ7ZVs3MDZdPTgzNjI7ZVs3MTBdPTY0Mjg4O2VbNzExXT02NDI5ODtlWzc1OV09MTYxNztlWzc2MV09MTc3NjtlWzc2M109MTc3ODtlWzc3NV09MTY1MjtlWzc3N109MTc2NDtlWzc3OF09MTc4MDtlWzc3OV09MTc4MTtlWzc4MF09MTc4MjtlWzc4Ml09NzcxO2VbNzgzXT02NDcyNjtlWzc4Nl09ODM2MztlWzc4OF09ODUzMjtlWzc5MF09NzY4O2VbNzkxXT03Njk7ZVs3OTJdPTc2ODtlWzc5NV09ODAzO2VbNzk3XT02NDMzNjtlWzc5OF09NjQzMzc7ZVs3OTldPTY0MzQyO2VbODAwXT02NDM0MztlWzgwMV09NjQzNDQ7ZVs4MDJdPTY0MzQ1O2VbODAzXT02NDM2MjtlWzgwNF09NjQzNjM7ZVs4MDVdPTY0MzY0O2VbMjQyNF09NzgyMTtlWzI0MjVdPTc4MjI7ZVsyNDI2XT03ODIzO2VbMjQyN109NzgyNDtlWzI0MjhdPTc4MjU7ZVsyNDI5XT03ODI2O2VbMjQzMF09NzgyNztlWzI0MzNdPTc2ODI7ZVsyNjc4XT04MDQ1O2VbMjY3OV09ODA0NjtlWzI4MzBdPTE1NTI7ZVsyODM4XT02ODY7ZVsyODQwXT03NTE7ZVsyODQyXT03NTM7ZVsyODQzXT03NTQ7ZVsyODQ0XT03NTU7ZVsyODQ2XT03NTc7ZVsyODU2XT03Njc7ZVsyODU3XT04NDg7ZVsyODU4XT04NDk7ZVsyODYyXT04NTM7ZVsyODYzXT04NTQ7ZVsyODY0XT04NTU7ZVsyODY1XT04NjE7ZVsyODY2XT04NjI7ZVsyOTA2XT03NDYwO2VbMjkwOF09NzQ2MjtlWzI5MDldPTc0NjM7ZVsyOTEwXT03NDY0O2VbMjkxMl09NzQ2NjtlWzI5MTNdPTc0Njc7ZVsyOTE0XT03NDY4O2VbMjkxNl09NzQ3MDtlWzI5MTddPTc0NzE7ZVsyOTE4XT03NDcyO2VbMjkyMF09NzQ3NDtlWzI5MjFdPTc0NzU7ZVsyOTIyXT03NDc2O2VbMjkyNF09NzQ3ODtlWzI5MjVdPTc0Nzk7ZVsyOTI2XT03NDgwO2VbMjkyOF09NzQ4MjtlWzI5MjldPTc0ODM7ZVsyOTMwXT03NDg0O2VbMjkzMl09NzQ4NjtlWzI5MzNdPTc0ODc7ZVsyOTM0XT03NDg4O2VbMjkzNl09NzQ5MDtlWzI5MzddPTc0OTE7ZVsyOTM4XT03NDkyO2VbMjk0MF09NzQ5NDtlWzI5NDFdPTc0OTU7ZVsyOTQyXT03NDk2O2VbMjk0NF09NzQ5ODtlWzI5NDZdPTc1MDA7ZVsyOTQ4XT03NTAyO2VbMjk1MF09NzUwNDtlWzI5NTFdPTc1MDU7ZVsyOTUyXT03NTA2O2VbMjk1NF09NzUwODtlWzI5NTVdPTc1MDk7ZVsyOTU2XT03NTEwO2VbMjk1OF09NzUxMjtlWzI5NTldPTc1MTM7ZVsyOTYwXT03NTE0O2VbMjk2Ml09NzUxNjtlWzI5NjNdPTc1MTc7ZVsyOTY0XT03NTE4O2VbMjk2Nl09NzUyMDtlWzI5NjddPTc1MjE7ZVsyOTY4XT03NTIyO2VbMjk3MF09NzUyNDtlWzI5NzFdPTc1MjU7ZVsyOTcyXT03NTI2O2VbMjk3NF09NzUyODtlWzI5NzVdPTc1Mjk7ZVsyOTc2XT03NTMwO2VbMjk3OF09MTUzNztlWzI5NzldPTE1Mzg7ZVsyOTgwXT0xNTM5O2VbMjk4Ml09MTU0OTtlWzI5ODNdPTE1NTE7ZVsyOTg0XT0xNTUyO2VbMjk4Nl09MTU1NDtlWzI5ODddPTE1NTU7ZVsyOTg4XT0xNTU2O2VbMjk5MF09MTYyMztlWzI5OTFdPTE2MjQ7ZVsyOTk1XT0xNzc1O2VbMjk5OV09MTc5MTtlWzMwMDJdPTY0MjkwO2VbMzAwM109NjQyOTE7ZVszMDA0XT02NDI5MjtlWzMwMDZdPTY0Mjk0O2VbMzAwN109NjQyOTU7ZVszMDA4XT02NDI5NjtlWzMwMTFdPTE5MDA7ZVszMDE0XT04MjIzO2VbMzAxNV09ODI0NDtlWzMwMTddPTc1MzI7ZVszMDE4XT03NTMzO2VbMzAxOV09NzUzNDtlWzMwNzVdPTc1OTA7ZVszMDc2XT03NTkxO2VbMzA3OV09NzU5NDtlWzMwODBdPTc1OTU7ZVszMDgzXT03NTk4O2VbMzA4NF09NzU5OTtlWzMwODddPTc2MDI7ZVszMDg4XT03NjAzO2VbMzA5MV09NzYwNjtlWzMwOTJdPTc2MDc7ZVszMDk1XT03NjEwO2VbMzA5Nl09NzYxMTtlWzMwOTldPTc2MTQ7ZVszMTAwXT03NjE1O2VbMzEwM109NzYxODtlWzMxMDRdPTc2MTk7ZVszMTA3XT04MzM3O2VbMzEwOF09ODMzODtlWzMxMTZdPTE4ODQ7ZVszMTE5XT0xODg1O2VbMzEyMF09MTg4NTtlWzMxMjNdPTE4ODY7ZVszMTI0XT0xODg2O2VbMzEyN109MTg4NztlWzMxMjhdPTE4ODc7ZVszMTMxXT0xODg4O2VbMzEzMl09MTg4ODtlWzMxMzVdPTE4ODk7ZVszMTM2XT0xODg5O2VbMzEzOV09MTg5MDtlWzMxNDBdPTE4OTA7ZVszMTQzXT0xODkxO2VbMzE0NF09MTg5MTtlWzMxNDddPTE4OTI7ZVszMTQ4XT0xODkyO2VbMzE1M109NTgwO2VbMzE1NF09NTgxO2VbMzE1N109NTg0O2VbMzE1OF09NTg1O2VbMzE2MV09NTg4O2VbMzE2Ml09NTg5O2VbMzE2NV09ODkxO2VbMzE2Nl09ODkyO2VbMzE2OV09MTI3NDtlWzMxNzBdPTEyNzU7ZVszMTczXT0xMjc4O2VbMzE3NF09MTI3OTtlWzMxODFdPTc2MjI7ZVszMTgyXT03NjIzO2VbMzI4Ml09MTE3OTk7ZVszMzE2XT01Nzg7ZVszMzc5XT00Mjc4NTtlWzMzOTNdPTExNTk7ZVszNDE2XT04Mzc3fSkpO3QuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPWg7Y29uc3QgdT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjI7ZVsyNjRdPTI2MTtlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPXU7Y29uc3QgZD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMV09MzI7ZVs0XT02NTtlWzVdPTE5MjtlWzZdPTE5MztlWzldPTE5NjtlWzE3XT02NjtlWzE4XT02NztlWzIxXT0yNjg7ZVsyNF09Njg7ZVsyOF09Njk7ZVsyOV09MjAwO2VbMzBdPTIwMTtlWzMyXT0yODI7ZVszOF09NzA7ZVszOV09NzE7ZVs0NF09NzI7ZVs0N109NzM7ZVs0OF09MjA0O2VbNDldPTIwNTtlWzU4XT03NDtlWzYwXT03NTtlWzYyXT03NjtlWzY4XT03NztlWzY5XT03ODtlWzc1XT03OTtlWzc2XT0yMTA7ZVs4MF09MjE0O2VbODddPTgwO2VbODldPTgxO2VbOTBdPTgyO2VbOTJdPTM0NDtlWzk0XT04MztlWzk3XT0zNTI7ZVsxMDBdPTg0O2VbMTA0XT04NTtlWzEwOV09MjIwO2VbMTE1XT04NjtlWzExNl09ODc7ZVsxMjFdPTg4O2VbMTIyXT04OTtlWzEyNF09MjIxO2VbMTI3XT05MDtlWzEyOV09MzgxO2VbMjU4XT05NztlWzI1OV09MjI0O2VbMjYwXT0yMjU7ZVsyNjNdPTIyODtlWzI2OF09MjYxO2VbMjcxXT05ODtlWzI3Ml09OTk7ZVsyNzNdPTI2MztlWzI3NV09MjY5O2VbMjgyXT0xMDA7ZVsyODZdPTEwMTtlWzI4N109MjMyO2VbMjg4XT0yMzM7ZVsyOTBdPTI4MztlWzI5NV09MjgxO2VbMjk2XT0xMDI7ZVszMzZdPTEwMztlWzM0Nl09MTA0O2VbMzQ5XT0xMDU7ZVszNTBdPTIzNjtlWzM1MV09MjM3O2VbMzYxXT0xMDY7ZVszNjRdPTEwNztlWzM2N109MTA4O2VbMzcxXT0zMjI7ZVszNzNdPTEwOTtlWzM3NF09MTEwO2VbMzgxXT0xMTE7ZVszODJdPTI0MjtlWzM4M109MjQzO2VbMzg2XT0yNDY7ZVszOTNdPTExMjtlWzM5NV09MTEzO2VbMzk2XT0xMTQ7ZVszOThdPTM0NTtlWzQwMF09MTE1O2VbNDAxXT0zNDc7ZVs0MDNdPTM1MztlWzQxMF09MTE2O2VbNDM3XT0xMTc7ZVs0NDJdPTI1MjtlWzQ0OF09MTE4O2VbNDQ5XT0xMTk7ZVs0NTRdPTEyMDtlWzQ1NV09MTIxO2VbNDU3XT0yNTM7ZVs0NjBdPTEyMjtlWzQ2Ml09MzgyO2VbNDYzXT0zODA7ZVs4NTNdPTQ0O2VbODU1XT01ODtlWzg1Nl09NDY7ZVs4NzZdPTQ3O2VbODc4XT00NTtlWzg4Ml09NDU7ZVs4OTRdPTQwO2VbODk1XT00MTtlWzg5Nl09OTE7ZVs4OTddPTkzO2VbOTIzXT02NDtlWzEwMDRdPTQ4O2VbMTAwNV09NDk7ZVsxMDA2XT01MDtlWzEwMDddPTUxO2VbMTAwOF09NTI7ZVsxMDA5XT01MztlWzEwMTBdPTU0O2VbMTAxMV09NTU7ZVsxMDEyXT01NjtlWzEwMTNdPTU3O2VbMTA4MV09Mzc7ZVsxMDg1XT00MztlWzEwODZdPTQ1fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpPWR9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Ub1VuaWNvZGVNYXA9dC5JZGVudGl0eVRvVW5pY29kZU1hcD12b2lkIDA7dmFyIHI9YSgyKTt0LlRvVW5pY29kZU1hcD1jbGFzcyBUb1VuaWNvZGVNYXB7Y29uc3RydWN0b3IoZT1bXSl7dGhpcy5fbWFwPWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofWZvckVhY2goZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLl9tYXBbdF0uY2hhckNvZGVBdCgwKSl9aGFzKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19Z2V0KGUpe3JldHVybiB0aGlzLl9tYXBbZV19Y2hhckNvZGVPZihlKXtjb25zdCB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IoY29uc3QgYSBpbiB0KWlmKHRbYV09PT1lKXJldHVybiAwfGE7cmV0dXJuLTF9YW1lbmQoZSl7Zm9yKGNvbnN0IHQgaW4gZSl0aGlzLl9tYXBbdF09ZVt0XX19O3QuSWRlbnRpdHlUb1VuaWNvZGVNYXA9Y2xhc3MgSWRlbnRpdHlUb1VuaWNvZGVNYXB7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZpcnN0Q2hhcj1lO3RoaXMubGFzdENoYXI9dH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMubGFzdENoYXIrMS10aGlzLmZpcnN0Q2hhcn1mb3JFYWNoKGUpe2ZvcihsZXQgdD10aGlzLmZpcnN0Q2hhcixhPXRoaXMubGFzdENoYXI7dDw9YTt0KyspZSh0LHQpfWhhcyhlKXtyZXR1cm4gdGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXJ9Z2V0KGUpe2lmKHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfWNoYXJDb2RlT2YoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9YW1lbmQoZSl7KDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNGRkZvbnQ9dm9pZCAwO3ZhciByPWEoMzMpLG49YSgzNiksaT1hKDIpO3QuQ0ZGRm9udD1jbGFzcyBDRkZGb250e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wcm9wZXJ0aWVzPXQ7Y29uc3QgYT1uZXcgci5DRkZQYXJzZXIoZSx0LG4uU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1hLnBhcnNlKCk7dGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO2NvbnN0IHM9bmV3IHIuQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO3RoaXMuc2VhY3M9dGhpcy5jZmYuc2VhY3M7dHJ5e3RoaXMuZGF0YT1zLmNvbXBpbGUoKX1jYXRjaChhKXsoMCxpLndhcm4pKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrdC5sb2FkZWROYW1lKTt0aGlzLmRhdGE9ZX10aGlzLl9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50fWdldENoYXJzZXQoKXtyZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0fWdldEdseXBoTWFwcGluZygpe2NvbnN0IGU9dGhpcy5jZmYsdD10aGlzLnByb3BlcnRpZXMse2NpZFRvR2lkTWFwOmEsY01hcDpyfT10LGk9ZS5jaGFyc2V0LmNoYXJzZXQ7bGV0IHMsbztpZih0LmNvbXBvc2l0ZSl7bGV0IHQsbjtpZihhJiZhLmxlbmd0aD4wKXt0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPTAscj1hLmxlbmd0aDtlPHI7ZSsrKXtjb25zdCByPWFbZV07dm9pZCAwIT09ciYmKHRbcl09ZSl9fXM9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlLmlzQ0lERm9udClmb3Iobz0wO288aS5sZW5ndGg7bysrKXtjb25zdCBlPWlbb107bj1yLmNoYXJDb2RlT2YoZSk7dCYmdm9pZCAwIT09dFtuXSYmKG49dFtuXSk7c1tuXT1vfWVsc2UgZm9yKG89MDtvPGUuY2hhclN0cmluZ3MuY291bnQ7bysrKXtuPXIuY2hhckNvZGVPZihvKTtzW25dPW99cmV0dXJuIHN9bGV0IGM9ZS5lbmNvZGluZz9lLmVuY29kaW5nLmVuY29kaW5nOm51bGw7dC5pc0ludGVybmFsRm9udCYmKGM9dC5kZWZhdWx0RW5jb2RpbmcpO3M9KDAsbi50eXBlMUZvbnRHbHlwaE1hcHBpbmcpKHQsYyxpKTtyZXR1cm4gc31oYXNHbHlwaElkKGUpe3JldHVybiB0aGlzLmNmZi5oYXNHbHlwaElkKGUpfV9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKXtjb25zdHtjaGFyc2V0OmUsZW5jb2Rpbmc6dH09dGhpcy5jZmY7aWYoIWV8fCF0KXJldHVybjtjb25zdCBhPWUuY2hhcnNldCxyPXQuZW5jb2Rpbmcsbj1bXTtmb3IoY29uc3QgZSBpbiByKXtjb25zdCB0PXJbZV07aWYodD49MCl7Y29uc3Qgcj1hW3RdO3ImJihuW2VdPXIpfX1uLmxlbmd0aD4wJiYodGhpcy5wcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZz1uKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMzMpLGk9YSgzNykscz1hKDM1KSxvPWEoOCk7ZnVuY3Rpb24gZ2V0VWludDMyKGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXSk+Pj4wfWZ1bmN0aW9uIGdldFVpbnQxNihlLHQpe3JldHVybiBlW3RdPDw4fGVbdCsxXX1mdW5jdGlvbiBnZXRJbnQxNihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2KT4+MTZ9ZnVuY3Rpb24gZ2V0SW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9ZnVuY3Rpb24gZ2V0RmxvYXQyMTQoZSx0KXtyZXR1cm4gZ2V0SW50MTYoZSx0KS8xNjM4NH1mdW5jdGlvbiBnZXRTdWJyb3V0aW5lQmlhcyhlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBhPTMyNzY4O3Q8MTI0MD9hPTEwNzp0PDMzOTAwJiYoYT0xMTMxKTtyZXR1cm4gYX1mdW5jdGlvbiBwYXJzZUNtYXAoZSx0LGEpe2NvbnN0IG49MT09PWdldFVpbnQxNihlLHQrMik/Z2V0VWludDMyKGUsdCs4KTpnZXRVaW50MzIoZSx0KzE2KSxpPWdldFVpbnQxNihlLHQrbik7bGV0IHMsbyxjO2lmKDQ9PT1pKXtnZXRVaW50MTYoZSx0K24rMik7Y29uc3QgYT1nZXRVaW50MTYoZSx0K24rNik+PjE7bz10K24rMTQ7cz1bXTtmb3IoYz0wO2M8YTtjKyssbys9MilzW2NdPXtlbmQ6Z2V0VWludDE2KGUsbyl9O28rPTI7Zm9yKGM9MDtjPGE7YysrLG8rPTIpc1tjXS5zdGFydD1nZXRVaW50MTYoZSxvKTtmb3IoYz0wO2M8YTtjKyssbys9MilzW2NdLmlkRGVsdGE9Z2V0VWludDE2KGUsbyk7Zm9yKGM9MDtjPGE7YysrLG8rPTIpe2xldCB0PWdldFVpbnQxNihlLG8pO2lmKDAhPT10KXtzW2NdLmlkcz1bXTtmb3IobGV0IGE9MCxyPXNbY10uZW5kLXNbY10uc3RhcnQrMTthPHI7YSsrKXtzW2NdLmlkc1thXT1nZXRVaW50MTYoZSxvK3QpO3QrPTJ9fX1yZXR1cm4gc31pZigxMj09PWkpe2NvbnN0IGE9Z2V0VWludDMyKGUsdCtuKzEyKTtvPXQrbisxNjtzPVtdO2ZvcihjPTA7YzxhO2MrKyl7dD1nZXRVaW50MzIoZSxvKTtzLnB1c2goe3N0YXJ0OnQsZW5kOmdldFVpbnQzMihlLG8rNCksaWREZWx0YTpnZXRVaW50MzIoZSxvKzgpLXR9KTtvKz0xMn1yZXR1cm4gc310aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgdW5zdXBwb3J0ZWQgY21hcDogJHtpfWApfWZ1bmN0aW9uIHBhcnNlQ2ZmKGUsdCxhLHIpe2NvbnN0IGk9bmV3IG4uQ0ZGUGFyc2VyKG5ldyBvLlN0cmVhbShlLHQsYS10KSx7fSxyKS5wYXJzZSgpO3JldHVybntnbHlwaHM6aS5jaGFyU3RyaW5ncy5vYmplY3RzLHN1YnJzOmkudG9wRGljdC5wcml2YXRlRGljdCYmaS50b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgmJmkudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMsZ3N1YnJzOmkuZ2xvYmFsU3VickluZGV4JiZpLmdsb2JhbFN1YnJJbmRleC5vYmplY3RzLGlzQ0ZGQ0lERm9udDppLmlzQ0lERm9udCxmZFNlbGVjdDppLmZkU2VsZWN0LGZkQXJyYXk6aS5mZEFycmF5fX1mdW5jdGlvbiBsb29rdXBDbWFwKGUsdCl7Y29uc3QgYT10LmNvZGVQb2ludEF0KDApO2xldCByPTAsbj0wLGk9ZS5sZW5ndGgtMTtmb3IoO248aTspe2NvbnN0IHQ9bitpKzE+PjE7YTxlW3RdLnN0YXJ0P2k9dC0xOm49dH1lW25dLnN0YXJ0PD1hJiZhPD1lW25dLmVuZCYmKHI9ZVtuXS5pZERlbHRhKyhlW25dLmlkcz9lW25dLmlkc1thLWVbbl0uc3RhcnRdOmEpJjY1NTM1KTtyZXR1cm57Y2hhckNvZGU6YSxnbHlwaElkOnJ9fWZ1bmN0aW9uIGNvbXBpbGVHbHlmKGUsdCxhKXtmdW5jdGlvbiBtb3ZlVG8oZSxhKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLGFdfSl9ZnVuY3Rpb24gbGluZVRvKGUsYSl7dC5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSxhXX0pfWZ1bmN0aW9uIHF1YWRyYXRpY0N1cnZlVG8oZSxhLHIsbil7dC5wdXNoKHtjbWQ6InF1YWRyYXRpY0N1cnZlVG8iLGFyZ3M6W2UsYSxyLG5dfSl9bGV0IHI9MDtjb25zdCBuPWdldEludDE2KGUscik7bGV0IGkscz0wLG89MDtyKz0xMDtpZihuPDApZG97aT1nZXRVaW50MTYoZSxyKTtjb25zdCBuPWdldFVpbnQxNihlLHIrMik7cis9NDtsZXQgYyxsO2lmKDEmaSl7aWYoMiZpKXtjPWdldEludDE2KGUscik7bD1nZXRJbnQxNihlLHIrMil9ZWxzZXtjPWdldFVpbnQxNihlLHIpO2w9Z2V0VWludDE2KGUscisyKX1yKz00fWVsc2UgaWYoMiZpKXtjPWdldEludDgoZSxyKyspO2w9Z2V0SW50OChlLHIrKyl9ZWxzZXtjPWVbcisrXTtsPWVbcisrXX1pZigyJmkpe3M9YztvPWx9ZWxzZXtzPTA7bz0wfWxldCBoPTEsdT0xLGQ9MCxmPTA7aWYoOCZpKXtoPXU9Z2V0RmxvYXQyMTQoZSxyKTtyKz0yfWVsc2UgaWYoNjQmaSl7aD1nZXRGbG9hdDIxNChlLHIpO3U9Z2V0RmxvYXQyMTQoZSxyKzIpO3IrPTR9ZWxzZSBpZigxMjgmaSl7aD1nZXRGbG9hdDIxNChlLHIpO2Q9Z2V0RmxvYXQyMTQoZSxyKzIpO2Y9Z2V0RmxvYXQyMTQoZSxyKzQpO3U9Z2V0RmxvYXQyMTQoZSxyKzYpO3IrPTh9Y29uc3QgZz1hLmdseXBoc1tuXTtpZihnKXt0LnB1c2goe2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zZm9ybSIsYXJnczpbaCxkLGYsdSxzLG9dfSk7Y29tcGlsZUdseWYoZyx0LGEpO3QucHVzaCh7Y21kOiJyZXN0b3JlIn0pfX13aGlsZSgzMiZpKTtlbHNle2NvbnN0IHQ9W107bGV0IGEsYztmb3IoYT0wO2E8bjthKyspe3QucHVzaChnZXRVaW50MTYoZSxyKSk7cis9Mn1yKz0yK2dldFVpbnQxNihlLHIpO2NvbnN0IGw9dC5hdCgtMSkrMSxoPVtdO2Zvcig7aC5sZW5ndGg8bDspe2k9ZVtyKytdO2xldCB0PTE7OCZpJiYodCs9ZVtyKytdKTtmb3IoO3QtLSA+MDspaC5wdXNoKHtmbGFnczppfSl9Zm9yKGE9MDthPGw7YSsrKXtzd2l0Y2goMTgmaFthXS5mbGFncyl7Y2FzZSAwOnMrPWdldEludDE2KGUscik7cis9MjticmVhaztjYXNlIDI6cy09ZVtyKytdO2JyZWFrO2Nhc2UgMTg6cys9ZVtyKytdfWhbYV0ueD1zfWZvcihhPTA7YTxsO2ErKyl7c3dpdGNoKDM2JmhbYV0uZmxhZ3Mpe2Nhc2UgMDpvKz1nZXRJbnQxNihlLHIpO3IrPTI7YnJlYWs7Y2FzZSA0Om8tPWVbcisrXTticmVhaztjYXNlIDM2Om8rPWVbcisrXX1oW2FdLnk9b31sZXQgdT0wO2ZvcihyPTA7cjxuO3IrKyl7Y29uc3QgZT10W3JdLG49aC5zbGljZSh1LGUrMSk7aWYoMSZuWzBdLmZsYWdzKW4ucHVzaChuWzBdKTtlbHNlIGlmKDEmbi5hdCgtMSkuZmxhZ3Mpbi51bnNoaWZ0KG4uYXQoLTEpKTtlbHNle2NvbnN0IGU9e2ZsYWdzOjEseDooblswXS54K24uYXQoLTEpLngpLzIseTooblswXS55K24uYXQoLTEpLnkpLzJ9O24udW5zaGlmdChlKTtuLnB1c2goZSl9bW92ZVRvKG5bMF0ueCxuWzBdLnkpO2ZvcihhPTEsYz1uLmxlbmd0aDthPGM7YSsrKWlmKDEmblthXS5mbGFncylsaW5lVG8oblthXS54LG5bYV0ueSk7ZWxzZSBpZigxJm5bYSsxXS5mbGFncyl7cXVhZHJhdGljQ3VydmVUbyhuW2FdLngsblthXS55LG5bYSsxXS54LG5bYSsxXS55KTthKyt9ZWxzZSBxdWFkcmF0aWNDdXJ2ZVRvKG5bYV0ueCxuW2FdLnksKG5bYV0ueCtuW2ErMV0ueCkvMiwoblthXS55K25bYSsxXS55KS8yKTt1PWUrMX19fWZ1bmN0aW9uIGNvbXBpbGVDaGFyU3RyaW5nKGUsdCxhLG4pe2Z1bmN0aW9uIG1vdmVUbyhlLGEpe3QucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2UsYV19KX1mdW5jdGlvbiBsaW5lVG8oZSxhKXt0LnB1c2goe2NtZDoibGluZVRvIixhcmdzOltlLGFdfSl9ZnVuY3Rpb24gYmV6aWVyQ3VydmVUbyhlLGEscixuLGkscyl7dC5wdXNoKHtjbWQ6ImJlemllckN1cnZlVG8iLGFyZ3M6W2UsYSxyLG4saSxzXX0pfWNvbnN0IGk9W107bGV0IG89MCxjPTAsbD0wOyFmdW5jdGlvbiBwYXJzZShlKXtsZXQgaD0wO2Zvcig7aDxlLmxlbmd0aDspe2xldCB1LGQsZixnLHAsbSxiLHksdyxTPSExLHg9ZVtoKytdO3N3aXRjaCh4KXtjYXNlIDE6Y2FzZSAzOmNhc2UgMTg6Y2FzZSAyMzpsKz1pLmxlbmd0aD4+MTtTPSEwO2JyZWFrO2Nhc2UgNDpjKz1pLnBvcCgpO21vdmVUbyhvLGMpO1M9ITA7YnJlYWs7Y2FzZSA1OmZvcig7aS5sZW5ndGg+MDspe28rPWkuc2hpZnQoKTtjKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyl9YnJlYWs7Y2FzZSA2OmZvcig7aS5sZW5ndGg+MDspe28rPWkuc2hpZnQoKTtsaW5lVG8obyxjKTtpZigwPT09aS5sZW5ndGgpYnJlYWs7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpfWJyZWFrO2Nhc2UgNzpmb3IoO2kubGVuZ3RoPjA7KXtjKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO28rPWkuc2hpZnQoKTtsaW5lVG8obyxjKX1icmVhaztjYXNlIDg6Zm9yKDtpLmxlbmd0aD4wOyl7dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZytpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyl9YnJlYWs7Y2FzZSAxMDp5PWkucG9wKCk7dz1udWxsO2lmKGEuaXNDRkZDSURGb250KXtjb25zdCBlPWEuZmRTZWxlY3QuZ2V0RkRJbmRleChuKTtpZihlPj0wJiZlPGEuZmRBcnJheS5sZW5ndGgpe2NvbnN0IHQ9YS5mZEFycmF5W2VdO2xldCByO3QucHJpdmF0ZURpY3QmJnQucHJpdmF0ZURpY3Quc3VicnNJbmRleCYmKHI9dC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMpO2lmKHIpe3krPWdldFN1YnJvdXRpbmVCaWFzKHIpO3c9clt5XX19ZWxzZSgwLHIud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWVsc2Ugdz1hLnN1YnJzW3krYS5zdWJyc0JpYXNdO3cmJnBhcnNlKHcpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6eD1lW2grK107c3dpdGNoKHgpe2Nhc2UgMzQ6dT1vK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO3A9YytpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsYyxkLHAsbyxwKTt1PW8raS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUscCxkLGMsbyxjKTticmVhaztjYXNlIDM1OnU9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO3U9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2kucG9wKCk7YnJlYWs7Y2FzZSAzNjp1PW8raS5zaGlmdCgpO3A9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTttPXAraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LHAsZCxtLG8sbSk7dT1vK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2I9bStpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsbSxkLGIsbyxjKTticmVhaztjYXNlIDM3OmNvbnN0IGU9byx0PWM7dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZytpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQ7Yz1nO01hdGguYWJzKG8tZSk+TWF0aC5hYnMoYy10KT9vKz1pLnNoaWZ0KCk6Yys9aS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6IDEyICR7eH1gKX1icmVhaztjYXNlIDE0OmlmKGkubGVuZ3RoPj00KXtjb25zdCBlPWkucG9wKCkscj1pLnBvcCgpO2M9aS5wb3AoKTtvPWkucG9wKCk7dC5wdXNoKHtjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2xhdGUiLGFyZ3M6W28sY119KTtsZXQgbj1sb29rdXBDbWFwKGEuY21hcCxTdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2x5cGhOYW1lTWFwW3MuU3RhbmRhcmRFbmNvZGluZ1tlXV0pKTtjb21waWxlQ2hhclN0cmluZyhhLmdseXBoc1tuLmdseXBoSWRdLHQsYSxuLmdseXBoSWQpO3QucHVzaCh7Y21kOiJyZXN0b3JlIn0pO249bG9va3VwQ21hcChhLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShhLmdseXBoTmFtZU1hcFtzLlN0YW5kYXJkRW5jb2Rpbmdbcl1dKSk7Y29tcGlsZUNoYXJTdHJpbmcoYS5nbHlwaHNbbi5nbHlwaElkXSx0LGEsbi5nbHlwaElkKX1yZXR1cm47Y2FzZSAxOTpjYXNlIDIwOmwrPWkubGVuZ3RoPj4xO2grPWwrNz4+MztTPSEwO2JyZWFrO2Nhc2UgMjE6Yys9aS5wb3AoKTtvKz1pLnBvcCgpO21vdmVUbyhvLGMpO1M9ITA7YnJlYWs7Y2FzZSAyMjpvKz1pLnBvcCgpO21vdmVUbyhvLGMpO1M9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO2kubGVuZ3RoPjI7KXt1PW8raS5zaGlmdCgpO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1vKz1pLnNoaWZ0KCk7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpO2JyZWFrO2Nhc2UgMjU6Zm9yKDtpLmxlbmd0aD42Oyl7bys9aS5zaGlmdCgpO2MrPWkuc2hpZnQoKTtsaW5lVG8obyxjKX11PW8raS5zaGlmdCgpO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKTticmVhaztjYXNlIDI2OmkubGVuZ3RoJTImJihvKz1pLnNoaWZ0KCkpO2Zvcig7aS5sZW5ndGg+MDspe3U9bztmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQ7Yz1nK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztjYXNlIDI3OmkubGVuZ3RoJTImJihjKz1pLnNoaWZ0KCkpO2Zvcig7aS5sZW5ndGg+MDspe3U9bytpLnNoaWZ0KCk7Zj1jO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZztiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztjYXNlIDI4OmkucHVzaCgoZVtoXTw8MjR8ZVtoKzFdPDwxNik+PjE2KTtoKz0yO2JyZWFrO2Nhc2UgMjk6eT1pLnBvcCgpK2EuZ3N1YnJzQmlhczt3PWEuZ3N1YnJzW3ldO3cmJnBhcnNlKHcpO2JyZWFrO2Nhc2UgMzA6Zm9yKDtpLmxlbmd0aD4wOyl7dT1vO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nKygxPT09aS5sZW5ndGg/aS5zaGlmdCgpOjApO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2lmKDA9PT1pLmxlbmd0aClicmVhazt1PW8raS5zaGlmdCgpO2Y9YztkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtvPWQrKDE9PT1pLmxlbmd0aD9pLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyl9YnJlYWs7Y2FzZSAzMTpmb3IoO2kubGVuZ3RoPjA7KXt1PW8raS5zaGlmdCgpO2Y9YztkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtvPWQrKDE9PT1pLmxlbmd0aD9pLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO3U9bztmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZysoMT09PWkubGVuZ3RoP2kuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztkZWZhdWx0OmlmKHg8MzIpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6ICR7eH1gKTtpZih4PDI0NylpLnB1c2goeC0xMzkpO2Vsc2UgaWYoeDwyNTEpaS5wdXNoKDI1NiooeC0yNDcpK2VbaCsrXSsxMDgpO2Vsc2UgaWYoeDwyNTUpaS5wdXNoKDI1NiotKHgtMjUxKS1lW2grK10tMTA4KTtlbHNle2kucHVzaCgoZVtoXTw8MjR8ZVtoKzFdPDwxNnxlW2grMl08PDh8ZVtoKzNdKS82NTUzNik7aCs9NH19UyYmKGkubGVuZ3RoPTApfX0oZSl9Y29uc3QgYz1bXTtjbGFzcyBDb21waWxlZEZvbnR7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25zdHJ1Y3Rvcj09PUNvbXBpbGVkRm9udCYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbXBpbGVkRm9udC4iKTt0aGlzLmZvbnRNYXRyaXg9ZTt0aGlzLmNvbXBpbGVkR2x5cGhzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkPU9iamVjdC5jcmVhdGUobnVsbCl9Z2V0UGF0aEpzKGUpe2NvbnN0e2NoYXJDb2RlOnQsZ2x5cGhJZDphfT1sb29rdXBDbWFwKHRoaXMuY21hcCxlKTtsZXQgcj10aGlzLmNvbXBpbGVkR2x5cGhzW2FdO2lmKCFyKXRyeXtyPXRoaXMuY29tcGlsZUdseXBoKHRoaXMuZ2x5cGhzW2FdLGEpO3RoaXMuY29tcGlsZWRHbHlwaHNbYV09cn1jYXRjaChlKXt0aGlzLmNvbXBpbGVkR2x5cGhzW2FdPWM7dm9pZCAwPT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdJiYodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPWEpO3Rocm93IGV9dm9pZCAwPT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdJiYodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPWEpO3JldHVybiByfWNvbXBpbGVHbHlwaChlLHQpe2lmKCFlfHwwPT09ZS5sZW5ndGh8fDE0PT09ZVswXSlyZXR1cm4gYztsZXQgYT10aGlzLmZvbnRNYXRyaXg7aWYodGhpcy5pc0NGRkNJREZvbnQpe2NvbnN0IGU9dGhpcy5mZFNlbGVjdC5nZXRGREluZGV4KHQpO2lmKGU+PTAmJmU8dGhpcy5mZEFycmF5Lmxlbmd0aCl7YT10aGlzLmZkQXJyYXlbZV0uZ2V0QnlOYW1lKCJGb250TWF0cml4Iil8fHIuRk9OVF9JREVOVElUWV9NQVRSSVh9ZWxzZSgwLHIud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWNvbnN0IG49W3tjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2Zvcm0iLGFyZ3M6YS5zbGljZSgpfSx7Y21kOiJzY2FsZSIsYXJnczpbInNpemUiLCItc2l6ZSJdfV07dGhpcy5jb21waWxlR2x5cGhJbXBsKGUsbix0KTtuLnB1c2goe2NtZDoicmVzdG9yZSJ9KTtyZXR1cm4gbn1jb21waWxlR2x5cGhJbXBsKCl7KDAsci51bnJlYWNoYWJsZSkoIkNoaWxkcmVuIGNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCB0aGlzLiIpfWhhc0J1aWx0UGF0aChlKXtjb25zdHtjaGFyQ29kZTp0LGdseXBoSWQ6YX09bG9va3VwQ21hcCh0aGlzLmNtYXAsZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbYV0mJnZvaWQgMCE9PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFt0XX19Y2xhc3MgVHJ1ZVR5cGVDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoYXx8WzQ4OGUtNiwwLDAsNDg4ZS02LDAsMF0pO3RoaXMuZ2x5cGhzPWU7dGhpcy5jbWFwPXR9Y29tcGlsZUdseXBoSW1wbChlLHQpe2NvbXBpbGVHbHlmKGUsdCx0aGlzKX19Y2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsYSxyKXtzdXBlcihhfHxbLjAwMSwwLDAsLjAwMSwwLDBdKTt0aGlzLmdseXBocz1lLmdseXBoczt0aGlzLmdzdWJycz1lLmdzdWJyc3x8W107dGhpcy5zdWJycz1lLnN1YnJzfHxbXTt0aGlzLmNtYXA9dDt0aGlzLmdseXBoTmFtZU1hcD1yfHwoMCxpLmdldEdseXBoc1VuaWNvZGUpKCk7dGhpcy5nc3VicnNCaWFzPWdldFN1YnJvdXRpbmVCaWFzKHRoaXMuZ3N1YnJzKTt0aGlzLnN1YnJzQmlhcz1nZXRTdWJyb3V0aW5lQmlhcyh0aGlzLnN1YnJzKTt0aGlzLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udDt0aGlzLmZkU2VsZWN0PWUuZmRTZWxlY3Q7dGhpcy5mZEFycmF5PWUuZmRBcnJheX1jb21waWxlR2x5cGhJbXBsKGUsdCxhKXtjb21waWxlQ2hhclN0cmluZyhlLHQsdGhpcyxhKX19dC5Gb250UmVuZGVyZXJGYWN0b3J5PWNsYXNzIEZvbnRSZW5kZXJlckZhY3Rvcnl7c3RhdGljIGNyZWF0ZShlLHQpe2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKTtsZXQgbixpLHMsbyxjLGw7Y29uc3QgaD1nZXRVaW50MTYoYSw0KTtmb3IobGV0IGU9MCx1PTEyO2U8aDtlKyssdSs9MTYpe2NvbnN0IGU9KDAsci5ieXRlc1RvU3RyaW5nKShhLnN1YmFycmF5KHUsdSs0KSksaD1nZXRVaW50MzIoYSx1KzgpLGQ9Z2V0VWludDMyKGEsdSsxMik7c3dpdGNoKGUpe2Nhc2UiY21hcCI6bj1wYXJzZUNtYXAoYSxoKTticmVhaztjYXNlImdseWYiOmk9YS5zdWJhcnJheShoLGgrZCk7YnJlYWs7Y2FzZSJsb2NhIjpzPWEuc3ViYXJyYXkoaCxoK2QpO2JyZWFrO2Nhc2UiaGVhZCI6bD1nZXRVaW50MTYoYSxoKzE4KTtjPWdldFVpbnQxNihhLGgrNTApO2JyZWFrO2Nhc2UiQ0ZGICI6bz1wYXJzZUNmZihhLGgsaCtkLHQpfX1pZihpKXtjb25zdCB0PWw/WzEvbCwwLDAsMS9sLDAsMF06ZS5mb250TWF0cml4O3JldHVybiBuZXcgVHJ1ZVR5cGVDb21waWxlZChmdW5jdGlvbiBwYXJzZUdseWZUYWJsZShlLHQsYSl7bGV0IHIsbjtpZihhKXtyPTQ7bj1nZXRVaW50MzJ9ZWxzZXtyPTI7bj0oZSx0KT0+MipnZXRVaW50MTYoZSx0KX1jb25zdCBpPVtdO2xldCBzPW4odCwwKTtmb3IobGV0IGE9cjthPHQubGVuZ3RoO2ErPXIpe2NvbnN0IHI9bih0LGEpO2kucHVzaChlLnN1YmFycmF5KHMscikpO3M9cn1yZXR1cm4gaX0oaSxzLGMpLG4sdCl9cmV0dXJuIG5ldyBUeXBlMkNvbXBpbGVkKG8sbixlLmZvbnRNYXRyaXgsZS5nbHlwaE5hbWVNYXApfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5nZXRNZXRyaWNzPXQuZ2V0Rm9udEJhc2ljTWV0cmljcz12b2lkIDA7dmFyIHI9YSg0KTtjb25zdCBuPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPTYwMDtlWyJDb3VyaWVyLUJvbGQiXT02MDA7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPTYwMDtlWyJDb3VyaWVyLU9ibGlxdWUiXT02MDA7ZS5IZWx2ZXRpY2E9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0yNzg7ZS5xdW90ZWRibD0zNTU7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD02Njc7ZS5xdW90ZXJpZ2h0PTIyMjtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NTU2O2UuYXQ9MTAxNTtlLkE9NjY3O2UuQj02Njc7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTAwO2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0yNzg7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTI3ODtlLmFzY2lpY2lyY3VtPTQ2OTtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTIyMjtlLmE9NTU2O2UuYj01NTY7ZS5jPTUwMDtlLmQ9NTU2O2UuZT01NTY7ZS5mPTI3ODtlLmc9NTU2O2UuaD01NTY7ZS5pPTIyMjtlLmo9MjIyO2Uuaz01MDA7ZS5sPTIyMjtlLm09ODMzO2Uubj01NTY7ZS5vPTU1NjtlLnA9NTU2O2UucT01NTY7ZS5yPTMzMztlLnM9NTAwO2UudD0yNzg7ZS51PTU1NjtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej01MDA7ZS5icmFjZWxlZnQ9MzM0O2UuYmFyPTI2MDtlLmJyYWNlcmlnaHQ9MzM0O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTE5MTtlLnF1b3RlZGJsbGVmdD0zMzM7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTUzNztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yMjI7ZS5xdW90ZWRibGJhc2U9MzMzO2UucXVvdGVkYmxyaWdodD0zMzM7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9MjIyO2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NjY3O2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9NTAwO2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTAwO2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yMjI7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTAwO2Uuc2NlZGlsbGE9NTAwO2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTY2NztlLnJjYXJvbj0zMzM7ZS5jY2VkaWxsYT01MDA7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NjQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NjY3O2UuQWJyZXZlPTY2NztlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01MDA7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjYwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zMzM7ZS5vbWFjcm9uPTU1NjtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9MjIyO2UudGNhcm9uPTMxNztlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjY3O2UuQWRpZXJlc2lzPTY2NztlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yMjI7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTU1NjtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTUwMDtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTU2O2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTU1NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTU1NjtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTU1NjtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTI5OTtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTU1NjtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTU1NjtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT01NTY7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTU1NjtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTMzMztlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTU2O2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjY3O2UuQW9nb25laz02Njc7ZS5BcmluZz02Njc7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz01NTY7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTU1NjtlLmV0aD01NTY7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZVsiSGVsdmV0aWNhLUJvbGQiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQ3NDtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTcyMjtlLnF1b3RlcmlnaHQ9Mjc4O2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj02MTE7ZS5hdD05NzU7ZS5BPTcyMjtlLkI9NzIyO2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTU1NjtlLks9NzIyO2UuTD02MTE7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01ODQ7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yNzg7ZS5hPTU1NjtlLmI9NjExO2UuYz01NTY7ZS5kPTYxMTtlLmU9NTU2O2UuZj0zMzM7ZS5nPTYxMTtlLmg9NjExO2UuaT0yNzg7ZS5qPTI3ODtlLms9NTU2O2UubD0yNzg7ZS5tPTg4OTtlLm49NjExO2Uubz02MTE7ZS5wPTYxMTtlLnE9NjExO2Uucj0zODk7ZS5zPTU1NjtlLnQ9MzMzO2UudT02MTE7ZS52PTU1NjtlLnc9Nzc4O2UueD01NTY7ZS55PTU1NjtlLno9NTAwO2UuYnJhY2VsZWZ0PTM4OTtlLmJhcj0yODA7ZS5icmFjZXJpZ2h0PTM4OTtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0yMzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTYxMTtlLmZsPTYxMTtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01NTY7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9Mjc4O2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NjExO2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTU2O2Uuc2NvbW1hYWNjZW50PTU1NjtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTYxMTtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTU1NjtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTU1NjtlLnNjZWRpbGxhPTU1NjtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NjExO2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NTU2O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTc0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NjExO2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NjExO2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz01NTY7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTU2O2UubmFjdXRlPTYxMTtlLnVtYWNyb249NjExO2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI4MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj02MTE7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zODk7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT02MTE7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01NTY7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTYxMTtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT02MTE7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD02MTE7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD02MTE7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj00MDA7ZS5LY29tbWFhY2NlbnQ9NzIyO2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD02MTE7ZS5udGlsZGU9NjExO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NjExO2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT02MTE7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTYxMTtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTYxMTtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTU1NjtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj02MTE7ZS50Y29tbWFhY2NlbnQ9MzMzO2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NjExO2UudWRpZXJlc2lzPTYxMTtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD02MTE7ZS5ldGg9NjExO2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD02MTE7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSkpO2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDc0O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NzIyO2UucXVvdGVyaWdodD0yNzg7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTYxMTtlLmF0PTk3NTtlLkE9NzIyO2UuQj03MjI7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTU2O2UuSz03MjI7ZS5MPTYxMTtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU4NDtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTI3ODtlLmE9NTU2O2UuYj02MTE7ZS5jPTU1NjtlLmQ9NjExO2UuZT01NTY7ZS5mPTMzMztlLmc9NjExO2UuaD02MTE7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01NTY7ZS5sPTI3ODtlLm09ODg5O2Uubj02MTE7ZS5vPTYxMTtlLnA9NjExO2UucT02MTE7ZS5yPTM4OTtlLnM9NTU2O2UudD0zMzM7ZS51PTYxMTtlLnY9NTU2O2Uudz03Nzg7ZS54PTU1NjtlLnk9NTU2O2Uuej01MDA7ZS5icmFjZWxlZnQ9Mzg5O2UuYmFyPTI4MDtlLmJyYWNlcmlnaHQ9Mzg5O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTIzODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NjExO2UuZmw9NjExO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTU1NjtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yNzg7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD02MTE7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01NTY7ZS5zY29tbWFhY2NlbnQ9NTU2O2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NjExO2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTU2O2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTU2O2Uuc2NlZGlsbGE9NTU2O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD02MTE7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT01NTY7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NzQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz02MTE7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT02MTE7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTU1NjtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01NTY7ZS5uYWN1dGU9NjExO2UudW1hY3Jvbj02MTE7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjgwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTYxMTtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM4OTtlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTYxMTtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTU1NjtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NjExO2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTYxMTtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTYxMTtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTYxMTtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTQwMDtlLktjb21tYWFjY2VudD03MjI7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTYxMTtlLm50aWxkZT02MTE7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT02MTE7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTYxMTtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NjExO2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NjExO2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTU2O2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTYxMTtlLnRjb21tYWFjY2VudD0zMzM7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz02MTE7ZS51ZGllcmVzaXM9NjExO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTYxMTtlLmV0aD02MTE7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTYxMTtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTI3ODtlLnF1b3RlZGJsPTM1NTtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTY2NztlLnF1b3RlcmlnaHQ9MjIyO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj01NTY7ZS5hdD0xMDE1O2UuQT02Njc7ZS5CPTY2NztlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTcyMjtlLkk9Mjc4O2UuSj01MDA7ZS5LPTY2NztlLkw9NTU2O2UuTT04MzM7ZS5OPTcyMjtlLk89Nzc4O2UuUD02Njc7ZS5RPTc3ODtlLlI9NzIyO2UuUz02Njc7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTk0NDtlLlg9NjY3O2UuWT02Njc7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTI3ODtlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9Mjc4O2UuYXNjaWljaXJjdW09NDY5O2UudW5kZXJzY29yZT01NTY7ZS5xdW90ZWxlZnQ9MjIyO2UuYT01NTY7ZS5iPTU1NjtlLmM9NTAwO2UuZD01NTY7ZS5lPTU1NjtlLmY9Mjc4O2UuZz01NTY7ZS5oPTU1NjtlLmk9MjIyO2Uuaj0yMjI7ZS5rPTUwMDtlLmw9MjIyO2UubT04MzM7ZS5uPTU1NjtlLm89NTU2O2UucD01NTY7ZS5xPTU1NjtlLnI9MzMzO2Uucz01MDA7ZS50PTI3ODtlLnU9NTU2O2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTUwMDtlLmJyYWNlbGVmdD0zMzQ7ZS5iYXI9MjYwO2UuYnJhY2VyaWdodD0zMzQ7ZS5hc2NpaXRpbGRlPTU4NDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01NTY7ZS5zdGVybGluZz01NTY7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTU2O2UuZmxvcmluPTU1NjtlLnNlY3Rpb249NTU2O2UuY3VycmVuY3k9NTU2O2UucXVvdGVzaW5nbGU9MTkxO2UucXVvdGVkYmxsZWZ0PTMzMztlLmd1aWxsZW1vdGxlZnQ9NTU2O2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01MDA7ZS5mbD01MDA7ZS5lbmRhc2g9NTU2O2UuZGFnZ2VyPTU1NjtlLmRhZ2dlcmRibD01NTY7ZS5wZXJpb2RjZW50ZXJlZD0yNzg7ZS5wYXJhZ3JhcGg9NTM3O2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTIyMjtlLnF1b3RlZGJsYmFzZT0zMzM7ZS5xdW90ZWRibHJpZ2h0PTMzMztlLmd1aWxsZW1vdHJpZ2h0PTU1NjtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj02MTE7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTM3MDtlLkxzbGFzaD01NTY7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTM2NTtlLmFlPTg4OTtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yMjI7ZS5vc2xhc2g9NjExO2Uub2U9OTQ0O2UuZ2VybWFuZGJscz02MTE7ZS5JZGllcmVzaXM9Mjc4O2UuZWFjdXRlPTU1NjtlLmFicmV2ZT01NTY7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj01NTY7ZS5ZZGllcmVzaXM9NjY3O2UuZGl2aWRlPTU4NDtlLllhY3V0ZT02Njc7ZS5BY2lyY3VtZmxleD02Njc7ZS5hYWN1dGU9NTU2O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD01MDA7ZS5lY2lyY3VtZmxleD01NTY7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01NTY7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03Mzc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj01MDA7ZS5hcmluZz01NTY7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTIyMjtlLmFncmF2ZT01NTY7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01NTY7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj01MDA7ZS5zY2VkaWxsYT01MDA7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00NzE7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTU1NjtlLkFtYWNyb249NjY3O2UucmNhcm9uPTMzMztlLmNjZWRpbGxhPTUwMDtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjY3O2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTY2NztlLmRjYXJvbj02NDM7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzMzO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT02Njc7ZS5BYnJldmU9NjY3O2UubXVsdGlwbHk9NTg0O2UudWFjdXRlPTU1NjtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00NzY7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01NTY7ZS5lZGllcmVzaXM9NTU2O2UuY2FjdXRlPTUwMDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mjc4O2UucGx1c21pbnVzPTU4NDtlLmJyb2tlbmJhcj0yNjA7ZS5yZWdpc3RlcmVkPTczNztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTI3ODtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTMzMztlLm9tYWNyb249NTU2O2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yMjI7ZS50Y2Fyb249MzE3O2UuZW9nb25laz01NTY7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT02Njc7ZS5BZGllcmVzaXM9NjY3O2UuZWdyYXZlPTU1NjtlLnphY3V0ZT01MDA7ZS5pb2dvbmVrPTIyMjtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NTU2O2UuYW1hY3Jvbj01NTY7ZS5zYWN1dGU9NTAwO2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01NTY7ZS50d29zdXBlcmlvcj0zMzM7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NTU2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTU2O2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTU2O2UudGhyZWVxdWFydGVycz04MzQ7ZS5TY2VkaWxsYT02Njc7ZS5sY2Fyb249Mjk5O2UuS2NvbW1hYWNjZW50PTY2NztlLkxhY3V0ZT01NTY7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD01NTY7ZS5JZ3JhdmU9Mjc4O2UuSW1hY3Jvbj0yNzg7ZS5MY2Fyb249NTU2O2Uub25laGFsZj04MzQ7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTU2O2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NTU2O2UuZ2JyZXZlPTU1NjtlLm9uZXF1YXJ0ZXI9ODM0O2UuU2Nhcm9uPTY2NztlLlNjb21tYWFjY2VudD02Njc7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTU2O2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTQ1MztlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9MzMzO2UuTnRpbGRlPTcyMjtlLm90aWxkZT01NTY7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTU1NjtlLkF0aWxkZT02Njc7ZS5Bb2dvbmVrPTY2NztlLkFyaW5nPTY2NztlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTUwMDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTI3ODtlLmtjb21tYWFjY2VudD01MDA7ZS5taW51cz01ODQ7ZS5JY2lyY3VtZmxleD0yNzg7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9NTg0O2Uub2RpZXJlc2lzPTU1NjtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTU2O2UuZXRoPTU1NjtlLnpjYXJvbj01MDA7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzMzO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTU1Nn0pKTtlLlN5bWJvbD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnVuaXZlcnNhbD03MTM7ZS5udW1iZXJzaWduPTUwMDtlLmV4aXN0ZW50aWFsPTU0OTtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnN1Y2h0aGF0PTQzOTtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrbWF0aD01MDA7ZS5wbHVzPTU0OTtlLmNvbW1hPTI1MDtlLm1pbnVzPTU0OTtlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU0OTtlLmVxdWFsPTU0OTtlLmdyZWF0ZXI9NTQ5O2UucXVlc3Rpb249NDQ0O2UuY29uZ3J1ZW50PTU0OTtlLkFscGhhPTcyMjtlLkJldGE9NjY3O2UuQ2hpPTcyMjtlLkRlbHRhPTYxMjtlLkVwc2lsb249NjExO2UuUGhpPTc2MztlLkdhbW1hPTYwMztlLkV0YT03MjI7ZS5Jb3RhPTMzMztlLnRoZXRhMT02MzE7ZS5LYXBwYT03MjI7ZS5MYW1iZGE9Njg2O2UuTXU9ODg5O2UuTnU9NzIyO2UuT21pY3Jvbj03MjI7ZS5QaT03Njg7ZS5UaGV0YT03NDE7ZS5SaG89NTU2O2UuU2lnbWE9NTkyO2UuVGF1PTYxMTtlLlVwc2lsb249NjkwO2Uuc2lnbWExPTQzOTtlLk9tZWdhPTc2ODtlLlhpPTY0NTtlLlBzaT03OTU7ZS5aZXRhPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLnRoZXJlZm9yZT04NjM7ZS5icmFja2V0cmlnaHQ9MzMzO2UucGVycGVuZGljdWxhcj02NTg7ZS51bmRlcnNjb3JlPTUwMDtlLnJhZGljYWxleD01MDA7ZS5hbHBoYT02MzE7ZS5iZXRhPTU0OTtlLmNoaT01NDk7ZS5kZWx0YT00OTQ7ZS5lcHNpbG9uPTQzOTtlLnBoaT01MjE7ZS5nYW1tYT00MTE7ZS5ldGE9NjAzO2UuaW90YT0zMjk7ZS5waGkxPTYwMztlLmthcHBhPTU0OTtlLmxhbWJkYT01NDk7ZS5tdT01NzY7ZS5udT01MjE7ZS5vbWljcm9uPTU0OTtlLnBpPTU0OTtlLnRoZXRhPTUyMTtlLnJobz01NDk7ZS5zaWdtYT02MDM7ZS50YXU9NDM5O2UudXBzaWxvbj01NzY7ZS5vbWVnYTE9NzEzO2Uub21lZ2E9Njg2O2UueGk9NDkzO2UucHNpPTY4NjtlLnpldGE9NDk0O2UuYnJhY2VsZWZ0PTQ4MDtlLmJhcj0yMDA7ZS5icmFjZXJpZ2h0PTQ4MDtlLnNpbWlsYXI9NTQ5O2UuRXVybz03NTA7ZS5VcHNpbG9uMT02MjA7ZS5taW51dGU9MjQ3O2UubGVzc2VxdWFsPTU0OTtlLmZyYWN0aW9uPTE2NztlLmluZmluaXR5PTcxMztlLmZsb3Jpbj01MDA7ZS5jbHViPTc1MztlLmRpYW1vbmQ9NzUzO2UuaGVhcnQ9NzUzO2Uuc3BhZGU9NzUzO2UuYXJyb3dib3RoPTEwNDI7ZS5hcnJvd2xlZnQ9OTg3O2UuYXJyb3d1cD02MDM7ZS5hcnJvd3JpZ2h0PTk4NztlLmFycm93ZG93bj02MDM7ZS5kZWdyZWU9NDAwO2UucGx1c21pbnVzPTU0OTtlLnNlY29uZD00MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UubXVsdGlwbHk9NTQ5O2UucHJvcG9ydGlvbmFsPTcxMztlLnBhcnRpYWxkaWZmPTQ5NDtlLmJ1bGxldD00NjA7ZS5kaXZpZGU9NTQ5O2Uubm90ZXF1YWw9NTQ5O2UuZXF1aXZhbGVuY2U9NTQ5O2UuYXBwcm94ZXF1YWw9NTQ5O2UuZWxsaXBzaXM9MWUzO2UuYXJyb3d2ZXJ0ZXg9NjAzO2UuYXJyb3dob3JpemV4PTFlMztlLmNhcnJpYWdlcmV0dXJuPTY1ODtlLmFsZXBoPTgyMztlLklmcmFrdHVyPTY4NjtlLlJmcmFrdHVyPTc5NTtlLndlaWVyc3RyYXNzPTk4NztlLmNpcmNsZW11bHRpcGx5PTc2ODtlLmNpcmNsZXBsdXM9NzY4O2UuZW1wdHlzZXQ9ODIzO2UuaW50ZXJzZWN0aW9uPTc2ODtlLnVuaW9uPTc2ODtlLnByb3BlcnN1cGVyc2V0PTcxMztlLnJlZmxleHN1cGVyc2V0PTcxMztlLm5vdHN1YnNldD03MTM7ZS5wcm9wZXJzdWJzZXQ9NzEzO2UucmVmbGV4c3Vic2V0PTcxMztlLmVsZW1lbnQ9NzEzO2Uubm90ZWxlbWVudD03MTM7ZS5hbmdsZT03Njg7ZS5ncmFkaWVudD03MTM7ZS5yZWdpc3RlcnNlcmlmPTc5MDtlLmNvcHlyaWdodHNlcmlmPTc5MDtlLnRyYWRlbWFya3NlcmlmPTg5MDtlLnByb2R1Y3Q9ODIzO2UucmFkaWNhbD01NDk7ZS5kb3RtYXRoPTI1MDtlLmxvZ2ljYWxub3Q9NzEzO2UubG9naWNhbGFuZD02MDM7ZS5sb2dpY2Fsb3I9NjAzO2UuYXJyb3dkYmxib3RoPTEwNDI7ZS5hcnJvd2RibGxlZnQ9OTg3O2UuYXJyb3dkYmx1cD02MDM7ZS5hcnJvd2RibHJpZ2h0PTk4NztlLmFycm93ZGJsZG93bj02MDM7ZS5sb3plbmdlPTQ5NDtlLmFuZ2xlbGVmdD0zMjk7ZS5yZWdpc3RlcnNhbnM9NzkwO2UuY29weXJpZ2h0c2Fucz03OTA7ZS50cmFkZW1hcmtzYW5zPTc4NjtlLnN1bW1hdGlvbj03MTM7ZS5wYXJlbmxlZnR0cD0zODQ7ZS5wYXJlbmxlZnRleD0zODQ7ZS5wYXJlbmxlZnRidD0zODQ7ZS5icmFja2V0bGVmdHRwPTM4NDtlLmJyYWNrZXRsZWZ0ZXg9Mzg0O2UuYnJhY2tldGxlZnRidD0zODQ7ZS5icmFjZWxlZnR0cD00OTQ7ZS5icmFjZWxlZnRtaWQ9NDk0O2UuYnJhY2VsZWZ0YnQ9NDk0O2UuYnJhY2VleD00OTQ7ZS5hbmdsZXJpZ2h0PTMyOTtlLmludGVncmFsPTI3NDtlLmludGVncmFsdHA9Njg2O2UuaW50ZWdyYWxleD02ODY7ZS5pbnRlZ3JhbGJ0PTY4NjtlLnBhcmVucmlnaHR0cD0zODQ7ZS5wYXJlbnJpZ2h0ZXg9Mzg0O2UucGFyZW5yaWdodGJ0PTM4NDtlLmJyYWNrZXRyaWdodHRwPTM4NDtlLmJyYWNrZXRyaWdodGV4PTM4NDtlLmJyYWNrZXRyaWdodGJ0PTM4NDtlLmJyYWNlcmlnaHR0cD00OTQ7ZS5icmFjZXJpZ2h0bWlkPTQ5NDtlLmJyYWNlcmlnaHRidD00OTQ7ZS5hcHBsZT03OTB9KSk7ZVsiVGltZXMtUm9tYW4iXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQwODtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NjQ7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTY0O2UuZXF1YWw9NTY0O2UuZ3JlYXRlcj01NjQ7ZS5xdWVzdGlvbj00NDQ7ZS5hdD05MjE7ZS5BPTcyMjtlLkI9NjY3O2UuQz02Njc7ZS5EPTcyMjtlLkU9NjExO2UuRj01NTY7ZS5HPTcyMjtlLkg9NzIyO2UuST0zMzM7ZS5KPTM4OTtlLks9NzIyO2UuTD02MTE7ZS5NPTg4OTtlLk49NzIyO2UuTz03MjI7ZS5QPTU1NjtlLlE9NzIyO2UuUj02Njc7ZS5TPTU1NjtlLlQ9NjExO2UuVT03MjI7ZS5WPTcyMjtlLlc9OTQ0O2UuWD03MjI7ZS5ZPTcyMjtlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT00Njk7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTQ0NDtlLmI9NTAwO2UuYz00NDQ7ZS5kPTUwMDtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTAwO2UuaT0yNzg7ZS5qPTI3ODtlLms9NTAwO2UubD0yNzg7ZS5tPTc3ODtlLm49NTAwO2Uubz01MDA7ZS5wPTUwMDtlLnE9NTAwO2Uucj0zMzM7ZS5zPTM4OTtlLnQ9Mjc4O2UudT01MDA7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NDQ0O2UuYnJhY2VsZWZ0PTQ4MDtlLmJhcj0yMDA7ZS5icmFjZXJpZ2h0PTQ4MDtlLmFzY2lpdGlsZGU9NTQxO2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0xODA7ZS5xdW90ZWRibGxlZnQ9NDQ0O2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD00NTM7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTQ0NDtlLnF1b3RlZGJscmlnaHQ9NDQ0O2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTQ0NDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9ODg5O2Uub3JkZmVtaW5pbmU9Mjc2O2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03MjI7ZS5PRT04ODk7ZS5vcmRtYXNjdWxpbmU9MzEwO2UuYWU9NjY3O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTUwMDtlLklkaWVyZXNpcz0zMzM7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTQ0NDtlLnVodW5nYXJ1bWxhdXQ9NTAwO2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz03MjI7ZS5kaXZpZGU9NTY0O2UuWWFjdXRlPTcyMjtlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT00NDQ7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTQ0NDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTUwMDtlLkVkaWVyZXNpcz02MTE7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc2MDtlLkVtYWNyb249NjExO2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTQ0NDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTQ0NDtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NjY3O2UuYXRpbGRlPTQ0NDtlLkVkb3RhY2NlbnQ9NjExO2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj02Njc7ZS5HY29tbWFhY2NlbnQ9NzIyO2UudWNpcmN1bWZsZXg9NTAwO2UuYWNpcmN1bWZsZXg9NDQ0O2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249MzMzO2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj01NTY7ZS5PbWFjcm9uPTcyMjtlLlJhY3V0ZT02Njc7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTU4ODtlLlVtYWNyb249NzIyO2UudXJpbmc9NTAwO2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9NzIyO2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01NjQ7ZS51YWN1dGU9NTAwO2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjExO2UuYWRpZXJlc2lzPTQ0NDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTUwMDtlLnVtYWNyb249NTAwO2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zMzM7ZS5wbHVzbWludXM9NTY0O2UuYnJva2VuYmFyPTIwMDtlLnJlZ2lzdGVyZWQ9NzYwO2UuR2JyZXZlPTcyMjtlLklkb3RhY2NlbnQ9MzMzO2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02MTE7ZS5yYWN1dGU9MzMzO2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NjY3O2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zMjY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTQ0NDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTcyMjtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTQ0NDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9NzIyO2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTUwMDtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03MjI7ZS5tdT01MDA7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTYxMTtlLmRjcm9hdD01MDA7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zNDQ7ZS5LY29tbWFhY2NlbnQ9NzIyO2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz05ODA7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zMzM7ZS5JbWFjcm9uPTMzMztlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTAwO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjExO2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9NzIyO2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NjY3O2UudWdyYXZlPTUwMDtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zMzM7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD02Njc7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTcyMjtlLnpkb3RhY2NlbnQ9NDQ0O2UuRWNhcm9uPTYxMTtlLklvZ29uZWs9MzMzO2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTU2NDtlLkljaXJjdW1mbGV4PTMzMztlLm5jYXJvbj01MDA7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD01NjQ7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTUwMDtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTQ0NDtlLm5jb21tYWFjY2VudD01MDA7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2VbIlRpbWVzLUJvbGQiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTU1NTtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9MWUzO2UuYW1wZXJzYW5kPTgzMztlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NzA7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTcwO2UuZXF1YWw9NTcwO2UuZ3JlYXRlcj01NzA7ZS5xdWVzdGlvbj01MDA7ZS5hdD05MzA7ZS5BPTcyMjtlLkI9NjY3O2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9Nzc4O2UuST0zODk7ZS5KPTUwMDtlLks9Nzc4O2UuTD02Njc7ZS5NPTk0NDtlLk49NzIyO2UuTz03Nzg7ZS5QPTYxMTtlLlE9Nzc4O2UuUj03MjI7ZS5TPTU1NjtlLlQ9NjY3O2UuVT03MjI7ZS5WPTcyMjtlLlc9MWUzO2UuWD03MjI7ZS5ZPTcyMjtlLlo9NjY3O2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01ODE7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTUwMDtlLmI9NTU2O2UuYz00NDQ7ZS5kPTU1NjtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTU2O2UuaT0yNzg7ZS5qPTMzMztlLms9NTU2O2UubD0yNzg7ZS5tPTgzMztlLm49NTU2O2Uubz01MDA7ZS5wPTU1NjtlLnE9NTU2O2Uucj00NDQ7ZS5zPTM4OTtlLnQ9MzMzO2UudT01NTY7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NDQ0O2UuYnJhY2VsZWZ0PTM5NDtlLmJhcj0yMjA7ZS5icmFjZXJpZ2h0PTM5NDtlLmFzY2lpdGlsZGU9NTIwO2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0yNzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD01NDA7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTUwMDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzAwO2UuTHNsYXNoPTY2NztlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzMwO2UuYWU9NzIyO2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTU1NjtlLklkaWVyZXNpcz0zODk7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTUwMDtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz03MjI7ZS5kaXZpZGU9NTcwO2UuWWFjdXRlPTcyMjtlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT01MDA7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTUwMDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc0NztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTUwMDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTUwMDtlLlRjb21tYWFjY2VudD02Njc7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTUwMDtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTAwO2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249NDQ0O2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02Njc7ZS5UaG9ybj02MTE7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTY3MjtlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01NzA7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTY2NztlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTUwMDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zODk7ZS5wbHVzbWludXM9NTcwO2UuYnJva2VuYmFyPTIyMDtlLnJlZ2lzdGVyZWQ9NzQ3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mzg5O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9NDQ0O2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjY3O2UuWmNhcm9uPTY2NztlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj00MTY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTQ0NDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTUwMDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTU1NjtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03Nzg7ZS5tdT01NTY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01NTY7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zOTQ7ZS5LY29tbWFhY2NlbnQ9Nzc4O2UuTGFjdXRlPTY2NztlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zODk7ZS5JbWFjcm9uPTM4OTtlLkxjYXJvbj02Njc7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD00NDQ7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NjY3O2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NDQ0O2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mzg5O2Uua2NvbW1hYWNjZW50PTU1NjtlLm1pbnVzPTU3MDtlLkljaXJjdW1mbGV4PTM4OTtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9MzMzO2UubG9naWNhbG5vdD01NzA7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTQ0NDtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTM4OTtlLnF1b3RlZGJsPTU1NTtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz01NzA7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTcwO2UuZXF1YWw9NTcwO2UuZ3JlYXRlcj01NzA7ZS5xdWVzdGlvbj01MDA7ZS5hdD04MzI7ZS5BPTY2NztlLkI9NjY3O2UuQz02Njc7ZS5EPTcyMjtlLkU9NjY3O2UuRj02Njc7ZS5HPTcyMjtlLkg9Nzc4O2UuST0zODk7ZS5KPTUwMDtlLks9NjY3O2UuTD02MTE7ZS5NPTg4OTtlLk49NzIyO2UuTz03MjI7ZS5QPTYxMTtlLlE9NzIyO2UuUj02Njc7ZS5TPTU1NjtlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9ODg5O2UuWD02Njc7ZS5ZPTYxMTtlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01NzA7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTUwMDtlLmI9NTAwO2UuYz00NDQ7ZS5kPTUwMDtlLmU9NDQ0O2UuZj0zMzM7ZS5nPTUwMDtlLmg9NTU2O2UuaT0yNzg7ZS5qPTI3ODtlLms9NTAwO2UubD0yNzg7ZS5tPTc3ODtlLm49NTU2O2Uubz01MDA7ZS5wPTUwMDtlLnE9NTAwO2Uucj0zODk7ZS5zPTM4OTtlLnQ9Mjc4O2UudT01NTY7ZS52PTQ0NDtlLnc9NjY3O2UueD01MDA7ZS55PTQ0NDtlLno9Mzg5O2UuYnJhY2VsZWZ0PTM0ODtlLmJhcj0yMjA7ZS5icmFjZXJpZ2h0PTM0ODtlLmFzY2lpdGlsZGU9NTcwO2UuZXhjbGFtZG93bj0zODk7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0yNzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTU1NjtlLmZsPTU1NjtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD01MDA7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTUwMDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9OTQ0O2Uub3JkZmVtaW5pbmU9MjY2O2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03MjI7ZS5PRT05NDQ7ZS5vcmRtYXNjdWxpbmU9MzAwO2UuYWU9NzIyO2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT03MjI7ZS5nZXJtYW5kYmxzPTUwMDtlLklkaWVyZXNpcz0zODk7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTUwMDtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz02MTE7ZS5kaXZpZGU9NTcwO2UuWWFjdXRlPTYxMTtlLkFjaXJjdW1mbGV4PTY2NztlLmFhY3V0ZT01MDA7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NDQ0O2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTUwMDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc0NztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTUwMDtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTUwMDtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NjY3O2UuYXRpbGRlPTUwMDtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj02Njc7ZS5HY29tbWFhY2NlbnQ9NzIyO2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTAwO2UuQW1hY3Jvbj02Njc7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02MTE7ZS5PbWFjcm9uPTcyMjtlLlJhY3V0ZT02Njc7ZS5TYWN1dGU9NTU2O2UuZGNhcm9uPTYwODtlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9NzIyO2UuQWdyYXZlPTY2NztlLkFicmV2ZT02Njc7ZS5tdWx0aXBseT01NzA7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz00NDQ7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTUwMDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0zODk7ZS5wbHVzbWludXM9NTcwO2UuYnJva2VuYmFyPTIyMDtlLnJlZ2lzdGVyZWQ9NzQ3O2UuR2JyZXZlPTcyMjtlLklkb3RhY2NlbnQ9Mzg5O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NjY3O2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zNjY7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTY2NztlLkFkaWVyZXNpcz02Njc7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTM4OTtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTcyMjtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTUwMDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9NzIyO2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTUwMDtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03MjI7ZS5tdT01NzY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01MDA7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTU1NjtlLmxjYXJvbj0zODI7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zODk7ZS5JbWFjcm9uPTM4OTtlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTU2O2UuU2NvbW1hYWNjZW50PTU1NjtlLk9odW5nYXJ1bWxhdXQ9NzIyO2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NjY3O2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD02Njc7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTY2NztlLkFvZ29uZWs9NjY3O2UuQXJpbmc9NjY3O2UuT3RpbGRlPTcyMjtlLnpkb3RhY2NlbnQ9Mzg5O2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mzg5O2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTYwNjtlLkljaXJjdW1mbGV4PTM4OTtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD02MDY7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTM4OTtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2VbIlRpbWVzLUl0YWxpYyJdPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDIwO2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTY3NTtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz02NzU7ZS5lcXVhbD02NzU7ZS5ncmVhdGVyPTY3NTtlLnF1ZXN0aW9uPTUwMDtlLmF0PTkyMDtlLkE9NjExO2UuQj02MTE7ZS5DPTY2NztlLkQ9NzIyO2UuRT02MTE7ZS5GPTYxMTtlLkc9NzIyO2UuSD03MjI7ZS5JPTMzMztlLko9NDQ0O2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj02Njc7ZS5PPTcyMjtlLlA9NjExO2UuUT03MjI7ZS5SPTYxMTtlLlM9NTAwO2UuVD01NTY7ZS5VPTcyMjtlLlY9NjExO2UuVz04MzM7ZS5YPTYxMTtlLlk9NTU2O2UuWj01NTY7ZS5icmFja2V0bGVmdD0zODk7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTM4OTtlLmFzY2lpY2lyY3VtPTQyMjtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NTAwO2UuYj01MDA7ZS5jPTQ0NDtlLmQ9NTAwO2UuZT00NDQ7ZS5mPTI3ODtlLmc9NTAwO2UuaD01MDA7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz00NDQ7ZS5sPTI3ODtlLm09NzIyO2Uubj01MDA7ZS5vPTUwMDtlLnA9NTAwO2UucT01MDA7ZS5yPTM4OTtlLnM9Mzg5O2UudD0yNzg7ZS51PTUwMDtlLnY9NDQ0O2Uudz02Njc7ZS54PTQ0NDtlLnk9NDQ0O2Uuej0zODk7ZS5icmFjZWxlZnQ9NDAwO2UuYmFyPTI3NTtlLmJyYWNlcmlnaHQ9NDAwO2UuYXNjaWl0aWxkZT01NDE7ZS5leGNsYW1kb3duPTM4OTtlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTIxNDtlLnF1b3RlZGJsbGVmdD01NTY7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTUyMztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NTU2O2UucXVvdGVkYmxyaWdodD01NTY7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz04ODk7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NTAwO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD04ODk7ZS5BRT04ODk7ZS5vcmRmZW1pbmluZT0yNzY7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTcyMjtlLk9FPTk0NDtlLm9yZG1hc2N1bGluZT0zMTA7ZS5hZT02Njc7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTY2NztlLmdlcm1hbmRibHM9NTAwO2UuSWRpZXJlc2lzPTMzMztlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NTAwO2UudWh1bmdhcnVtbGF1dD01MDA7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTU1NjtlLmRpdmlkZT02NzU7ZS5ZYWN1dGU9NTU2O2UuQWNpcmN1bWZsZXg9NjExO2UuYWFjdXRlPTUwMDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT00NDQ7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTAwO2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTAwO2UuRWRpZXJlc2lzPTYxMTtlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzYwO2UuRW1hY3Jvbj02MTE7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NTAwO2UuTmNvbW1hYWNjZW50PTY2NztlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTAwO2UuVGNvbW1hYWNjZW50PTU1NjtlLkNhY3V0ZT02Njc7ZS5hdGlsZGU9NTAwO2UuRWRvdGFjY2VudD02MTE7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTYxMTtlLkdjb21tYWFjY2VudD03MjI7ZS51Y2lyY3VtZmxleD01MDA7ZS5hY2lyY3VtZmxleD01MDA7ZS5BbWFjcm9uPTYxMTtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTU1NjtlLlRob3JuPTYxMTtlLk9tYWNyb249NzIyO2UuUmFjdXRlPTYxMTtlLlNhY3V0ZT01MDA7ZS5kY2Fyb249NTQ0O2UuVW1hY3Jvbj03MjI7ZS51cmluZz01MDA7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03MjI7ZS5BZ3JhdmU9NjExO2UuQWJyZXZlPTYxMTtlLm11bHRpcGx5PTY3NTtlLnVhY3V0ZT01MDA7ZS5UY2Fyb249NTU2O2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTQ0NDtlLk5hY3V0ZT02Njc7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02MTE7ZS5hZGllcmVzaXM9NTAwO2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTAwO2UudW1hY3Jvbj01MDA7ZS5OY2Fyb249NjY3O2UuSWFjdXRlPTMzMztlLnBsdXNtaW51cz02NzU7ZS5icm9rZW5iYXI9Mjc1O2UucmVnaXN0ZXJlZD03NjA7ZS5HYnJldmU9NzIyO2UuSWRvdGFjY2VudD0zMzM7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTYxMTtlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT01NTY7ZS5aY2Fyb249NTU2O2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT02Njc7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTMwMDtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjExO2UuQWRpZXJlc2lzPTYxMTtlLmVncmF2ZT00NDQ7ZS56YWN1dGU9Mzg5O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9NzIyO2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NTAwO2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03MjI7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTAwO2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTcyMjtlLm11PTUwMDtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjExO2UuZGNyb2F0PTUwMDtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTAwO2UubGNhcm9uPTMwMDtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTk4MDtlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTMzMztlLkltYWNyb249MzMzO2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01MDA7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02MTE7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01MDA7ZS5TY29tbWFhY2NlbnQ9NTAwO2UuT2h1bmdhcnVtbGF1dD03MjI7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj02Njc7ZS51Z3JhdmU9NTAwO2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT02Njc7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTYxMTtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjExO2UuQW9nb25laz02MTE7ZS5BcmluZz02MTE7ZS5PdGlsZGU9NzIyO2UuemRvdGFjY2VudD0zODk7ZS5FY2Fyb249NjExO2UuSW9nb25laz0zMzM7ZS5rY29tbWFhY2NlbnQ9NDQ0O2UubWludXM9Njc1O2UuSWNpcmN1bWZsZXg9MzMzO2UubmNhcm9uPTUwMDtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTY3NTtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTAwO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249Mzg5O2UubmNvbW1hYWNjZW50PTUwMDtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KSk7ZS5aYXBmRGluZ2JhdHM9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmExPTk3NDtlLmEyPTk2MTtlLmEyMDI9OTc0O2UuYTM9OTgwO2UuYTQ9NzE5O2UuYTU9Nzg5O2UuYTExOT03OTA7ZS5hMTE4PTc5MTtlLmExMTc9NjkwO2UuYTExPTk2MDtlLmExMj05Mzk7ZS5hMTM9NTQ5O2UuYTE0PTg1NTtlLmExNT05MTE7ZS5hMTY9OTMzO2UuYTEwNT05MTE7ZS5hMTc9OTQ1O2UuYTE4PTk3NDtlLmExOT03NTU7ZS5hMjA9ODQ2O2UuYTIxPTc2MjtlLmEyMj03NjE7ZS5hMjM9NTcxO2UuYTI0PTY3NztlLmEyNT03NjM7ZS5hMjY9NzYwO2UuYTI3PTc1OTtlLmEyOD03NTQ7ZS5hNj00OTQ7ZS5hNz01NTI7ZS5hOD01Mzc7ZS5hOT01Nzc7ZS5hMTA9NjkyO2UuYTI5PTc4NjtlLmEzMD03ODg7ZS5hMzE9Nzg4O2UuYTMyPTc5MDtlLmEzMz03OTM7ZS5hMzQ9Nzk0O2UuYTM1PTgxNjtlLmEzNj04MjM7ZS5hMzc9Nzg5O2UuYTM4PTg0MTtlLmEzOT04MjM7ZS5hNDA9ODMzO2UuYTQxPTgxNjtlLmE0Mj04MzE7ZS5hNDM9OTIzO2UuYTQ0PTc0NDtlLmE0NT03MjM7ZS5hNDY9NzQ5O2UuYTQ3PTc5MDtlLmE0OD03OTI7ZS5hNDk9Njk1O2UuYTUwPTc3NjtlLmE1MT03Njg7ZS5hNTI9NzkyO2UuYTUzPTc1OTtlLmE1ND03MDc7ZS5hNTU9NzA4O2UuYTU2PTY4MjtlLmE1Nz03MDE7ZS5hNTg9ODI2O2UuYTU5PTgxNTtlLmE2MD03ODk7ZS5hNjE9Nzg5O2UuYTYyPTcwNztlLmE2Mz02ODc7ZS5hNjQ9Njk2O2UuYTY1PTY4OTtlLmE2Nj03ODY7ZS5hNjc9Nzg3O2UuYTY4PTcxMztlLmE2OT03OTE7ZS5hNzA9Nzg1O2UuYTcxPTc5MTtlLmE3Mj04NzM7ZS5hNzM9NzYxO2UuYTc0PTc2MjtlLmEyMDM9NzYyO2UuYTc1PTc1OTtlLmEyMDQ9NzU5O2UuYTc2PTg5MjtlLmE3Nz04OTI7ZS5hNzg9Nzg4O2UuYTc5PTc4NDtlLmE4MT00Mzg7ZS5hODI9MTM4O2UuYTgzPTI3NztlLmE4ND00MTU7ZS5hOTc9MzkyO2UuYTk4PTM5MjtlLmE5OT02Njg7ZS5hMTAwPTY2ODtlLmE4OT0zOTA7ZS5hOTA9MzkwO2UuYTkzPTMxNztlLmE5ND0zMTc7ZS5hOTE9Mjc2O2UuYTkyPTI3NjtlLmEyMDU9NTA5O2UuYTg1PTUwOTtlLmEyMDY9NDEwO2UuYTg2PTQxMDtlLmE4Nz0yMzQ7ZS5hODg9MjM0O2UuYTk1PTMzNDtlLmE5Nj0zMzQ7ZS5hMTAxPTczMjtlLmExMDI9NTQ0O2UuYTEwMz01NDQ7ZS5hMTA0PTkxMDtlLmExMDY9NjY3O2UuYTEwNz03NjA7ZS5hMTA4PTc2MDtlLmExMTI9Nzc2O2UuYTExMT01OTU7ZS5hMTEwPTY5NDtlLmExMDk9NjI2O2UuYTEyMD03ODg7ZS5hMTIxPTc4ODtlLmExMjI9Nzg4O2UuYTEyMz03ODg7ZS5hMTI0PTc4ODtlLmExMjU9Nzg4O2UuYTEyNj03ODg7ZS5hMTI3PTc4ODtlLmExMjg9Nzg4O2UuYTEyOT03ODg7ZS5hMTMwPTc4ODtlLmExMzE9Nzg4O2UuYTEzMj03ODg7ZS5hMTMzPTc4ODtlLmExMzQ9Nzg4O2UuYTEzNT03ODg7ZS5hMTM2PTc4ODtlLmExMzc9Nzg4O2UuYTEzOD03ODg7ZS5hMTM5PTc4ODtlLmExNDA9Nzg4O2UuYTE0MT03ODg7ZS5hMTQyPTc4ODtlLmExNDM9Nzg4O2UuYTE0ND03ODg7ZS5hMTQ1PTc4ODtlLmExNDY9Nzg4O2UuYTE0Nz03ODg7ZS5hMTQ4PTc4ODtlLmExNDk9Nzg4O2UuYTE1MD03ODg7ZS5hMTUxPTc4ODtlLmExNTI9Nzg4O2UuYTE1Mz03ODg7ZS5hMTU0PTc4ODtlLmExNTU9Nzg4O2UuYTE1Nj03ODg7ZS5hMTU3PTc4ODtlLmExNTg9Nzg4O2UuYTE1OT03ODg7ZS5hMTYwPTg5NDtlLmExNjE9ODM4O2UuYTE2Mz0xMDE2O2UuYTE2ND00NTg7ZS5hMTk2PTc0ODtlLmExNjU9OTI0O2UuYTE5Mj03NDg7ZS5hMTY2PTkxODtlLmExNjc9OTI3O2UuYTE2OD05Mjg7ZS5hMTY5PTkyODtlLmExNzA9ODM0O2UuYTE3MT04NzM7ZS5hMTcyPTgyODtlLmExNzM9OTI0O2UuYTE2Mj05MjQ7ZS5hMTc0PTkxNztlLmExNzU9OTMwO2UuYTE3Nj05MzE7ZS5hMTc3PTQ2MztlLmExNzg9ODgzO2UuYTE3OT04MzY7ZS5hMTkzPTgzNjtlLmExODA9ODY3O2UuYTE5OT04Njc7ZS5hMTgxPTY5NjtlLmEyMDA9Njk2O2UuYTE4Mj04NzQ7ZS5hMjAxPTg3NDtlLmExODM9NzYwO2UuYTE4ND05NDY7ZS5hMTk3PTc3MTtlLmExODU9ODY1O2UuYTE5ND03NzE7ZS5hMTk4PTg4ODtlLmExODY9OTY3O2UuYTE5NT04ODg7ZS5hMTg3PTgzMTtlLmExODg9ODczO2UuYTE4OT05Mjc7ZS5hMTkwPTk3MDtlLmExOTE9OTE4fSkpfSkpO3QuZ2V0TWV0cmljcz1uO2NvbnN0IGk9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNvdXJpZXI9e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDotNDI2fTtlWyJDb3VyaWVyLUJvbGQiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQzOX07ZVsiQ291cmllci1PYmxpcXVlIl09e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDo0MjZ9O2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn07ZS5IZWx2ZXRpY2E9e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9O2VbIkhlbHZldGljYS1Cb2xkIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9O2VbIkhlbHZldGljYS1PYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9O2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NzE4LGRlc2NlbnQ6LTIwNyxjYXBIZWlnaHQ6NzE4LHhIZWlnaHQ6NTMyfTtlWyJUaW1lcy1Sb21hbiJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjYyLHhIZWlnaHQ6NDUwfTtlWyJUaW1lcy1Cb2xkIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NzYseEhlaWdodDo0NjF9O2VbIlRpbWVzLUl0YWxpYyJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjUzLHhIZWlnaHQ6NDQxfTtlWyJUaW1lcy1Cb2xkSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjkseEhlaWdodDo0NjJ9O2UuU3ltYm9sPXthc2NlbnQ6TWF0aC5OYU4sZGVzY2VudDpNYXRoLk5hTixjYXBIZWlnaHQ6TWF0aC5OYU4seEhlaWdodDpNYXRoLk5hTn07ZS5aYXBmRGluZ2JhdHM9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfX0pKTt0LmdldEZvbnRCYXNpY01ldHJpY3M9aX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5HbHlmVGFibGU9dm9pZCAwO3QuR2x5ZlRhYmxlPWNsYXNzIEdseWZUYWJsZXtjb25zdHJ1Y3Rvcih7Z2x5ZlRhYmxlOmUsaXNHbHlwaExvY2F0aW9uc0xvbmc6dCxsb2NhVGFibGU6YSxudW1HbHlwaHM6cn0pe3RoaXMuZ2x5cGhzPVtdO2NvbnN0IG49bmV3IERhdGFWaWV3KGEuYnVmZmVyLGEuYnl0ZU9mZnNldCxhLmJ5dGVMZW5ndGgpLGk9bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLHM9dD80OjI7bGV0IG89dD9uLmdldFVpbnQzMigwKToyKm4uZ2V0VWludDE2KDApLGM9MDtmb3IobGV0IGU9MDtlPHI7ZSsrKXtjKz1zO2NvbnN0IGU9dD9uLmdldFVpbnQzMihjKToyKm4uZ2V0VWludDE2KGMpO2lmKGU9PT1vKXt0aGlzLmdseXBocy5wdXNoKG5ldyBHbHlwaCh7fSkpO2NvbnRpbnVlfWNvbnN0IGE9R2x5cGgucGFyc2UobyxpKTt0aGlzLmdseXBocy5wdXNoKGEpO289ZX19Z2V0U2l6ZSgpe3JldHVybiB0aGlzLmdseXBocy5yZWR1Y2UoKChlLHQpPT5lKyh0LmdldFNpemUoKSszJi00KSksMCl9d3JpdGUoKXtjb25zdCBlPXRoaXMuZ2V0U2l6ZSgpLHQ9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcihlKSksYT1lPjEzMTA3MCxyPWE/NDoyLG49bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigodGhpcy5nbHlwaHMubGVuZ3RoKzEpKnIpKTthP24uc2V0VWludDMyKDAsMCk6bi5zZXRVaW50MTYoMCwwKTtsZXQgaT0wLHM9MDtmb3IoY29uc3QgZSBvZiB0aGlzLmdseXBocyl7aSs9ZS53cml0ZShpLHQpO2k9aSszJi00O3MrPXI7YT9uLnNldFVpbnQzMihzLGkpOm4uc2V0VWludDE2KHMsaT4+MSl9cmV0dXJue2lzTG9jYXRpb25Mb25nOmEsbG9jYTpuZXcgVWludDhBcnJheShuLmJ1ZmZlciksZ2x5ZjpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcil9fXNjYWxlKGUpe2ZvcihsZXQgdD0wLGE9dGhpcy5nbHlwaHMubGVuZ3RoO3Q8YTt0KyspdGhpcy5nbHlwaHNbdF0uc2NhbGUoZVt0XSl9fTtjbGFzcyBHbHlwaHtjb25zdHJ1Y3Rvcih7aGVhZGVyOmU9bnVsbCxzaW1wbGU6dD1udWxsLGNvbXBvc2l0ZXM6YT1udWxsfSl7dGhpcy5oZWFkZXI9ZTt0aGlzLnNpbXBsZT10O3RoaXMuY29tcG9zaXRlcz1hfXN0YXRpYyBwYXJzZShlLHQpe2NvbnN0W2Escl09R2x5cGhIZWFkZXIucGFyc2UoZSx0KTtlKz1hO2lmKHIubnVtYmVyT2ZDb250b3VyczwwKXtjb25zdCBhPVtdO2Zvcig7Oyl7Y29uc3RbcixuXT1Db21wb3NpdGVHbHlwaC5wYXJzZShlLHQpO2UrPXI7YS5wdXNoKG4pO2lmKCEoMzImbi5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBHbHlwaCh7aGVhZGVyOnIsY29tcG9zaXRlczphfSl9Y29uc3Qgbj1TaW1wbGVHbHlwaC5wYXJzZShlLHQsci5udW1iZXJPZkNvbnRvdXJzKTtyZXR1cm4gbmV3IEdseXBoKHtoZWFkZXI6cixzaW1wbGU6bn0pfWdldFNpemUoKXtpZighdGhpcy5oZWFkZXIpcmV0dXJuIDA7Y29uc3QgZT10aGlzLnNpbXBsZT90aGlzLnNpbXBsZS5nZXRTaXplKCk6dGhpcy5jb21wb3NpdGVzLnJlZHVjZSgoKGUsdCk9PmUrdC5nZXRTaXplKCkpLDApO3JldHVybiB0aGlzLmhlYWRlci5nZXRTaXplKCkrZX13cml0ZShlLHQpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm4gMDtjb25zdCBhPWU7ZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KTtpZih0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2UgZm9yKGNvbnN0IGEgb2YgdGhpcy5jb21wb3NpdGVzKWUrPWEud3JpdGUoZSx0KTtyZXR1cm4gZS1hfXNjYWxlKGUpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm47Y29uc3QgdD0odGhpcy5oZWFkZXIueE1pbit0aGlzLmhlYWRlci54TWF4KS8yO3RoaXMuaGVhZGVyLnNjYWxlKHQsZSk7aWYodGhpcy5zaW1wbGUpdGhpcy5zaW1wbGUuc2NhbGUodCxlKTtlbHNlIGZvcihjb25zdCBhIG9mIHRoaXMuY29tcG9zaXRlcylhLnNjYWxlKHQsZSl9fWNsYXNzIEdseXBoSGVhZGVye2NvbnN0cnVjdG9yKHtudW1iZXJPZkNvbnRvdXJzOmUseE1pbjp0LHlNaW46YSx4TWF4OnIseU1heDpufSl7dGhpcy5udW1iZXJPZkNvbnRvdXJzPWU7dGhpcy54TWluPXQ7dGhpcy55TWluPWE7dGhpcy54TWF4PXI7dGhpcy55TWF4PW59c3RhdGljIHBhcnNlKGUsdCl7cmV0dXJuWzEwLG5ldyBHbHlwaEhlYWRlcih7bnVtYmVyT2ZDb250b3Vyczp0LmdldEludDE2KGUpLHhNaW46dC5nZXRJbnQxNihlKzIpLHlNaW46dC5nZXRJbnQxNihlKzQpLHhNYXg6dC5nZXRJbnQxNihlKzYpLHlNYXg6dC5nZXRJbnQxNihlKzgpfSldfWdldFNpemUoKXtyZXR1cm4gMTB9d3JpdGUoZSx0KXt0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKTt0LnNldEludDE2KGUrMix0aGlzLnhNaW4pO3Quc2V0SW50MTYoZSs0LHRoaXMueU1pbik7dC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KTt0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpO3JldHVybiAxMH1zY2FsZShlLHQpe3RoaXMueE1pbj1NYXRoLnJvdW5kKGUrKHRoaXMueE1pbi1lKSp0KTt0aGlzLnhNYXg9TWF0aC5yb3VuZChlKyh0aGlzLnhNYXgtZSkqdCl9fWNsYXNzIENvbnRvdXJ7Y29uc3RydWN0b3Ioe2ZsYWdzOmUseENvb3JkaW5hdGVzOnQseUNvb3JkaW5hdGVzOmF9KXt0aGlzLnhDb29yZGluYXRlcz10O3RoaXMueUNvb3JkaW5hdGVzPWE7dGhpcy5mbGFncz1lfX1jbGFzcyBTaW1wbGVHbHlwaHtjb25zdHJ1Y3Rvcih7Y29udG91cnM6ZSxpbnN0cnVjdGlvbnM6dH0pe3RoaXMuY29udG91cnM9ZTt0aGlzLmluc3RydWN0aW9ucz10fXN0YXRpYyBwYXJzZShlLHQsYSl7Y29uc3Qgcj1bXTtmb3IobGV0IG49MDtuPGE7bisrKXtjb25zdCBhPXQuZ2V0VWludDE2KGUpO2UrPTI7ci5wdXNoKGEpfWNvbnN0IG49clthLTFdKzEsaT10LmdldFVpbnQxNihlKTtlKz0yO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK2kpO2UrPWk7Y29uc3Qgbz1bXTtmb3IobGV0IGE9MDthPG47ZSsrLGErKyl7bGV0IHI9dC5nZXRVaW50OChlKTtvLnB1c2gocik7aWYoOCZyKXtjb25zdCBuPXQuZ2V0VWludDgoKytlKTtyXj04O2ZvcihsZXQgZT0wO2U8bjtlKyspby5wdXNoKHIpO2ErPW59fWNvbnN0IGM9W107bGV0IGw9W10saD1bXSx1PVtdO2NvbnN0IGQ9W107bGV0IGY9MCxnPTA7Zm9yKGxldCBhPTA7YTxuO2ErKyl7Y29uc3Qgbj1vW2FdO2lmKDImbil7Y29uc3QgYT10LmdldFVpbnQ4KGUrKyk7Zys9MTYmbj9hOi1hO2wucHVzaChnKX1lbHNlIGlmKDE2Jm4pbC5wdXNoKGcpO2Vsc2V7Zys9dC5nZXRJbnQxNihlKTtlKz0yO2wucHVzaChnKX1pZihyW2ZdPT09YSl7ZisrO2MucHVzaChsKTtsPVtdfX1nPTA7Zj0wO2ZvcihsZXQgYT0wO2E8bjthKyspe2NvbnN0IG49b1thXTtpZig0Jm4pe2NvbnN0IGE9dC5nZXRVaW50OChlKyspO2crPTMyJm4/YTotYTtoLnB1c2goZyl9ZWxzZSBpZigzMiZuKWgucHVzaChnKTtlbHNle2crPXQuZ2V0SW50MTYoZSk7ZSs9MjtoLnB1c2goZyl9dS5wdXNoKDEmbnw2NCZuKTtpZihyW2ZdPT09YSl7bD1jW2ZdO2YrKztkLnB1c2gobmV3IENvbnRvdXIoe2ZsYWdzOnUseENvb3JkaW5hdGVzOmwseUNvb3JkaW5hdGVzOmh9KSk7aD1bXTt1PVtdfX1yZXR1cm4gbmV3IFNpbXBsZUdseXBoKHtjb250b3VyczpkLGluc3RydWN0aW9uczpzfSl9Z2V0U2l6ZSgpe2xldCBlPTIqdGhpcy5jb250b3Vycy5sZW5ndGgrMit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgsdD0wLGE9MDtmb3IoY29uc3QgciBvZiB0aGlzLmNvbnRvdXJzKXtlKz1yLmZsYWdzLmxlbmd0aDtmb3IobGV0IG49MCxpPXIueENvb3JkaW5hdGVzLmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPXIueENvb3JkaW5hdGVzW25dLHM9ci55Q29vcmRpbmF0ZXNbbl07bGV0IG89TWF0aC5hYnMoaS10KTtvPjI1NT9lKz0yOm8+MCYmKGUrPTEpO3Q9aTtvPU1hdGguYWJzKHMtYSk7bz4yNTU/ZSs9MjpvPjAmJihlKz0xKTthPXN9fXJldHVybiBlfXdyaXRlKGUsdCl7Y29uc3QgYT1lLHI9W10sbj1bXSxpPVtdO2xldCBzPTAsbz0wO2Zvcihjb25zdCBhIG9mIHRoaXMuY29udG91cnMpe2ZvcihsZXQgZT0wLHQ9YS54Q29vcmRpbmF0ZXMubGVuZ3RoO2U8dDtlKyspe2xldCB0PWEuZmxhZ3NbZV07Y29uc3QgYz1hLnhDb29yZGluYXRlc1tlXTtsZXQgbD1jLXM7aWYoMD09PWwpe3R8PTE2O3IucHVzaCgwKX1lbHNle2NvbnN0IGU9TWF0aC5hYnMobCk7aWYoZTw9MjU1KXt0fD1sPj0wPzE4OjI7ci5wdXNoKGUpfWVsc2Ugci5wdXNoKGwpfXM9Yztjb25zdCBoPWEueUNvb3JkaW5hdGVzW2VdO2w9aC1vO2lmKDA9PT1sKXt0fD0zMjtuLnB1c2goMCl9ZWxzZXtjb25zdCBlPU1hdGguYWJzKGwpO2lmKGU8PTI1NSl7dHw9bD49MD8zNjo0O24ucHVzaChlKX1lbHNlIG4ucHVzaChsKX1vPWg7aS5wdXNoKHQpfXQuc2V0VWludDE2KGUsci5sZW5ndGgtMSk7ZSs9Mn10LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7ZSs9MjtpZih0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpe25ldyBVaW50OEFycmF5KHQuYnVmZmVyLDAsdC5idWZmZXIuYnl0ZUxlbmd0aCkuc2V0KHRoaXMuaW5zdHJ1Y3Rpb25zLGUpO2UrPXRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aH1mb3IoY29uc3QgYSBvZiBpKXQuc2V0VWludDgoZSsrLGEpO2ZvcihsZXQgYT0wLG49ci5sZW5ndGg7YTxuO2ErKyl7Y29uc3Qgbj1yW2FdLHM9aVthXTtpZigyJnMpdC5zZXRVaW50OChlKyssbik7ZWxzZSBpZighKDE2JnMpKXt0LnNldEludDE2KGUsbik7ZSs9Mn19Zm9yKGxldCBhPTAscj1uLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPW5bYV0scz1pW2FdO2lmKDQmcyl0LnNldFVpbnQ4KGUrKyxyKTtlbHNlIGlmKCEoMzImcykpe3Quc2V0SW50MTYoZSxyKTtlKz0yfX1yZXR1cm4gZS1hfXNjYWxlKGUsdCl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5jb250b3VycylpZigwIT09YS54Q29vcmRpbmF0ZXMubGVuZ3RoKWZvcihsZXQgcj0wLG49YS54Q29vcmRpbmF0ZXMubGVuZ3RoO3I8bjtyKyspYS54Q29vcmRpbmF0ZXNbcl09TWF0aC5yb3VuZChlKyhhLnhDb29yZGluYXRlc1tyXS1lKSp0KX19Y2xhc3MgQ29tcG9zaXRlR2x5cGh7Y29uc3RydWN0b3Ioe2ZsYWdzOmUsZ2x5cGhJbmRleDp0LGFyZ3VtZW50MTphLGFyZ3VtZW50MjpyLHRyYW5zZjpuLGluc3RydWN0aW9uczppfSl7dGhpcy5mbGFncz1lO3RoaXMuZ2x5cGhJbmRleD10O3RoaXMuYXJndW1lbnQxPWE7dGhpcy5hcmd1bWVudDI9cjt0aGlzLnRyYW5zZj1uO3RoaXMuaW5zdHJ1Y3Rpb25zPWl9c3RhdGljIHBhcnNlKGUsdCl7Y29uc3QgYT1lLHI9W107bGV0IG49dC5nZXRVaW50MTYoZSk7Y29uc3QgaT10LmdldFVpbnQxNihlKzIpO2UrPTQ7bGV0IHMsbztpZigxJm4pe2lmKDImbil7cz10LmdldEludDE2KGUpO289dC5nZXRJbnQxNihlKzIpfWVsc2V7cz10LmdldFVpbnQxNihlKTtvPXQuZ2V0VWludDE2KGUrMil9ZSs9NDtuXj0xfWVsc2V7aWYoMiZuKXtzPXQuZ2V0SW50OChlKTtvPXQuZ2V0SW50OChlKzEpfWVsc2V7cz10LmdldFVpbnQ4KGUpO289dC5nZXRVaW50OChlKzEpfWUrPTJ9aWYoOCZuKXtyLnB1c2godC5nZXRVaW50MTYoZSkpO2UrPTJ9ZWxzZSBpZig2NCZuKXtyLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSk7ZSs9NH1lbHNlIGlmKDEyOCZuKXtyLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSx0LmdldFVpbnQxNihlKzQpLHQuZ2V0VWludDE2KGUrNikpO2UrPTh9bGV0IGM9bnVsbDtpZigyNTYmbil7Y29uc3QgYT10LmdldFVpbnQxNihlKTtlKz0yO2M9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK2EpO2UrPWF9cmV0dXJuW2UtYSxuZXcgQ29tcG9zaXRlR2x5cGgoe2ZsYWdzOm4sZ2x5cGhJbmRleDppLGFyZ3VtZW50MTpzLGFyZ3VtZW50MjpvLHRyYW5zZjpyLGluc3RydWN0aW9uczpjfSldfWdldFNpemUoKXtsZXQgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoOzI1NiZ0aGlzLmZsYWdzJiYoZSs9Mit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7MiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KGUrPTIpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KGUrPTIpO3JldHVybiBlfXdyaXRlKGUsdCl7Y29uc3QgYT1lOzImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fCh0aGlzLmZsYWdzfD0xKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fCh0aGlzLmZsYWdzfD0xKTt0LnNldFVpbnQxNihlLHRoaXMuZmxhZ3MpO3Quc2V0VWludDE2KGUrMix0aGlzLmdseXBoSW5kZXgpO2UrPTQ7aWYoMSZ0aGlzLmZsYWdzKXtpZigyJnRoaXMuZmxhZ3Mpe3Quc2V0SW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRJbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpfWVsc2V7dC5zZXRVaW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRVaW50MTYoZSsyLHRoaXMuYXJndW1lbnQyKX1lKz00fWVsc2V7dC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKTt0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50Mik7ZSs9Mn1pZigyNTYmdGhpcy5mbGFncyl7dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7aWYodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKXtuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKTtlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGh9fXJldHVybiBlLWF9c2NhbGUoZSx0KXt9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9dm9pZCAwO3ZhciByPWEoNCksbj1hKDIpO2Z1bmN0aW9uIHdyaXRlSW50MTYoZSx0LGEpe2VbdF09YT4+OCYyNTU7ZVt0KzFdPTI1NSZhfWZ1bmN0aW9uIHdyaXRlSW50MzIoZSx0LGEpe2VbdF09YT4+MjQmMjU1O2VbdCsxXT1hPj4xNiYyNTU7ZVt0KzJdPWE+PjgmMjU1O2VbdCszXT0yNTUmYX1mdW5jdGlvbiB3cml0ZURhdGEoZSx0LGEpe2lmKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KWUuc2V0KGEsdCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEpZm9yKGxldCByPTAsbj1hLmxlbmd0aDtyPG47cisrKWVbdCsrXT0yNTUmYS5jaGFyQ29kZUF0KHIpO2Vsc2UgZm9yKGNvbnN0IHIgb2YgYSllW3QrK109MjU1JnJ9Y2xhc3MgT3BlblR5cGVGaWxlQnVpbGRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLnNmbnQ9ZTt0aGlzLnRhYmxlcz1PYmplY3QuY3JlYXRlKG51bGwpfXN0YXRpYyBnZXRTZWFyY2hQYXJhbXMoZSx0KXtsZXQgYT0xLHI9MDtmb3IoOyhhXmUpPmE7KXthPDw9MTtyKyt9Y29uc3Qgbj1hKnQ7cmV0dXJue3JhbmdlOm4sZW50cnk6cixyYW5nZVNoaWZ0OnQqZS1ufX10b0FycmF5KCl7bGV0IGU9dGhpcy5zZm50O2NvbnN0IHQ9dGhpcy50YWJsZXMsYT1PYmplY3Qua2V5cyh0KTthLnNvcnQoKTtjb25zdCBpPWEubGVuZ3RoO2xldCBzLG8sYyxsLGgsdT0xMisxNippO2NvbnN0IGQ9W3VdO2ZvcihzPTA7czxpO3MrKyl7bD10W2Fbc11dO3UrPShsLmxlbmd0aCszJi00KT4+PjA7ZC5wdXNoKHUpfWNvbnN0IGY9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKHM9MDtzPGk7cysrKXtsPXRbYVtzXV07d3JpdGVEYXRhKGYsZFtzXSxsKX0idHJ1ZSI9PT1lJiYoZT0oMCxuLnN0cmluZzMyKSg2NTUzNikpO2ZbMF09MjU1JmUuY2hhckNvZGVBdCgwKTtmWzFdPTI1NSZlLmNoYXJDb2RlQXQoMSk7ZlsyXT0yNTUmZS5jaGFyQ29kZUF0KDIpO2ZbM109MjU1JmUuY2hhckNvZGVBdCgzKTt3cml0ZUludDE2KGYsNCxpKTtjb25zdCBnPU9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKGksMTYpO3dyaXRlSW50MTYoZiw2LGcucmFuZ2UpO3dyaXRlSW50MTYoZiw4LGcuZW50cnkpO3dyaXRlSW50MTYoZiwxMCxnLnJhbmdlU2hpZnQpO3U9MTI7Zm9yKHM9MDtzPGk7cysrKXtoPWFbc107Zlt1XT0yNTUmaC5jaGFyQ29kZUF0KDApO2ZbdSsxXT0yNTUmaC5jaGFyQ29kZUF0KDEpO2ZbdSsyXT0yNTUmaC5jaGFyQ29kZUF0KDIpO2ZbdSszXT0yNTUmaC5jaGFyQ29kZUF0KDMpO2xldCBlPTA7Zm9yKG89ZFtzXSxjPWRbcysxXTtvPGM7bys9NCl7ZT1lKygwLHIucmVhZFVpbnQzMikoZixvKT4+PjB9d3JpdGVJbnQzMihmLHUrNCxlKTt3cml0ZUludDMyKGYsdSs4LGRbc10pO3dyaXRlSW50MzIoZix1KzEyLHRbaF0ubGVuZ3RoKTt1Kz0xNn1yZXR1cm4gZn1hZGRUYWJsZShlLHQpe2lmKGUgaW4gdGhpcy50YWJsZXMpdGhyb3cgbmV3IEVycm9yKCJUYWJsZSAiK2UrIiBhbHJlYWR5IGV4aXN0cyIpO3RoaXMudGFibGVzW2VdPXR9fXQuT3BlblR5cGVGaWxlQnVpbGRlcj1PcGVuVHlwZUZpbGVCdWlsZGVyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVHlwZTFGb250PXZvaWQgMDt2YXIgcj1hKDMzKSxuPWEoMiksaT1hKDM2KSxzPWEoNCksbz1hKDgpLGM9YSg0Nyk7ZnVuY3Rpb24gZmluZEJsb2NrKGUsdCxhKXtjb25zdCByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT1yLW47bGV0IG89YSxjPSExO2Zvcig7bzxpOyl7bGV0IGE9MDtmb3IoO2E8biYmZVtvK2FdPT09dFthXTspYSsrO2lmKGE+PW4pe28rPWE7Zm9yKDtvPHImJigwLHMuaXNXaGl0ZVNwYWNlKShlW29dKTspbysrO2M9ITA7YnJlYWt9bysrfXJldHVybntmb3VuZDpjLGxlbmd0aDpvfX10LlR5cGUxRm9udD1jbGFzcyBUeXBlMUZvbnR7Y29uc3RydWN0b3IoZSx0LGEpe2xldCByPWEubGVuZ3RoMSxzPWEubGVuZ3RoMixsPXQucGVla0J5dGVzKDYpO2NvbnN0IGg9MTI4PT09bFswXSYmMT09PWxbMV07aWYoaCl7dC5za2lwKDYpO3I9bFs1XTw8MjR8bFs0XTw8MTZ8bFszXTw8OHxsWzJdfWNvbnN0IHU9ZnVuY3Rpb24gZ2V0SGVhZGVyQmxvY2soZSx0KXtjb25zdCBhPVsxMDEsMTAxLDEyMCwxMDEsOTldLHI9ZS5wb3M7bGV0IGkscyxjLGw7dHJ5e2k9ZS5nZXRCeXRlcyh0KTtzPWkubGVuZ3RofWNhdGNoKGUpe31pZihzPT09dCl7Yz1maW5kQmxvY2soaSxhLHQtMiphLmxlbmd0aCk7aWYoYy5mb3VuZCYmYy5sZW5ndGg9PT10KXJldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKGkpLGxlbmd0aDp0fX0oMCxuLndhcm4pKCdJbnZhbGlkICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO2UucG9zPXI7Zm9yKDs7KXtjPWZpbmRCbG9jayhlLnBlZWtCeXRlcygyMDQ4KSxhLDApO2lmKDA9PT1jLmxlbmd0aClicmVhaztlLnBvcys9Yy5sZW5ndGg7aWYoYy5mb3VuZCl7bD1lLnBvcy1yO2JyZWFrfX1lLnBvcz1yO2lmKGwpcmV0dXJue3N0cmVhbTpuZXcgby5TdHJlYW0oZS5nZXRCeXRlcyhsKSksbGVuZ3RoOmx9OygwLG4ud2FybikoJ1VuYWJsZSB0byByZWNvdmVyICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHVzaW5nIGFzIGlzLicpO3JldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKGUuZ2V0Qnl0ZXModCkpLGxlbmd0aDp0fX0odCxyKTtuZXcgYy5UeXBlMVBhcnNlcih1LnN0cmVhbSwhMSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIoYSk7aWYoaCl7bD10LmdldEJ5dGVzKDYpO3M9bFs1XTw8MjR8bFs0XTw8MTZ8bFszXTw8OHxsWzJdfWNvbnN0IGQ9ZnVuY3Rpb24gZ2V0RWV4ZWNCbG9jayhlLHQpe2NvbnN0IGE9ZS5nZXRCeXRlcygpO2lmKDA9PT1hLmxlbmd0aCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiZ2V0RWV4ZWNCbG9jayAtIG5vIGZvbnQgcHJvZ3JhbSBmb3VuZC4iKTtyZXR1cm57c3RyZWFtOm5ldyBvLlN0cmVhbShhKSxsZW5ndGg6YS5sZW5ndGh9fSh0KSxmPW5ldyBjLlR5cGUxUGFyc2VyKGQuc3RyZWFtLCEwLGkuU0VBQ19BTkFMWVNJU19FTkFCTEVEKS5leHRyYWN0Rm9udFByb2dyYW0oYSk7Zm9yKGNvbnN0IGUgaW4gZi5wcm9wZXJ0aWVzKWFbZV09Zi5wcm9wZXJ0aWVzW2VdO2NvbnN0IGc9Zi5jaGFyc3RyaW5ncyxwPXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhnKSxtPXRoaXMuZ2V0VHlwZTJTdWJycyhmLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPWc7dGhpcy5kYXRhPXRoaXMud3JhcChlLHAsdGhpcy5jaGFyc3RyaW5ncyxtLGEpO3RoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhmLmNoYXJzdHJpbmdzKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9Z2V0Q2hhcnNldCgpe2NvbnN0IGU9WyIubm90ZGVmIl07Zm9yKGNvbnN0e2dseXBoTmFtZTp0fW9mIHRoaXMuY2hhcnN0cmluZ3MpZS5wdXNoKHQpO3JldHVybiBlfWdldEdseXBoTWFwcGluZyhlKXtjb25zdCB0PXRoaXMuY2hhcnN0cmluZ3M7aWYoZS5jb21wb3NpdGUpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe2FbZS5jTWFwLmNoYXJDb2RlT2YocildPXIrMX1yZXR1cm4gYX1jb25zdCBhPVsiLm5vdGRlZiJdO2xldCByLG47Zm9yKG49MDtuPHQubGVuZ3RoO24rKylhLnB1c2godFtuXS5nbHlwaE5hbWUpO2NvbnN0IHM9ZS5idWlsdEluRW5jb2Rpbmc7aWYocyl7cj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCBlIGluIHMpe249YS5pbmRleE9mKHNbZV0pO24+PTAmJihyW2VdPW4pfX1yZXR1cm4oMCxpLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxyLGEpfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLm51bUdseXBocylyZXR1cm4hMTtpZigwPT09ZSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5jaGFyc3RyaW5nc1tlLTFdLmNoYXJzdHJpbmcubGVuZ3RoPjB9Z2V0U2VhY3MoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZVthXTtyLnNlYWMmJih0W2ErMV09ci5zZWFjKX1yZXR1cm4gdH1nZXRUeXBlMkNoYXJzdHJpbmdzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSl0LnB1c2goYS5jaGFyc3RyaW5nKTtyZXR1cm4gdH1nZXRUeXBlMlN1YnJzKGUpe2xldCB0PTA7Y29uc3QgYT1lLmxlbmd0aDt0PWE8MTEzMz8xMDc6YTwzMzc2OT8xMTMxOjMyNzY4O2NvbnN0IHI9W107bGV0IG47Zm9yKG49MDtuPHQ7bisrKXIucHVzaChbMTFdKTtmb3Iobj0wO248YTtuKyspci5wdXNoKGVbbl0pO3JldHVybiByfXdyYXAoZSx0LGEsbixpKXtjb25zdCBzPW5ldyByLkNGRjtzLmhlYWRlcj1uZXcgci5DRkZIZWFkZXIoMSwwLDQsNCk7cy5uYW1lcz1bZV07Y29uc3Qgbz1uZXcgci5DRkZUb3BEaWN0O28uc2V0QnlOYW1lKCJ2ZXJzaW9uIiwzOTEpO28uc2V0QnlOYW1lKCJOb3RpY2UiLDM5Mik7by5zZXRCeU5hbWUoIkZ1bGxOYW1lIiwzOTMpO28uc2V0QnlOYW1lKCJGYW1pbHlOYW1lIiwzOTQpO28uc2V0QnlOYW1lKCJXZWlnaHQiLDM5NSk7by5zZXRCeU5hbWUoIkVuY29kaW5nIixudWxsKTtvLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsaS5mb250TWF0cml4KTtvLnNldEJ5TmFtZSgiRm9udEJCb3giLGkuYmJveCk7by5zZXRCeU5hbWUoImNoYXJzZXQiLG51bGwpO28uc2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIsbnVsbCk7by5zZXRCeU5hbWUoIlByaXZhdGUiLG51bGwpO3MudG9wRGljdD1vO2NvbnN0IGM9bmV3IHIuQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIik7Yy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKTtjLmFkZChlKTtjLmFkZChlKTtjLmFkZCgiTWVkaXVtIik7cy5zdHJpbmdzPWM7cy5nbG9iYWxTdWJySW5kZXg9bmV3IHIuQ0ZGSW5kZXg7Y29uc3QgbD10Lmxlbmd0aCxoPVsiLm5vdGRlZiJdO2xldCB1LGQ7Zm9yKHU9MDt1PGw7dSsrKXtjb25zdCBlPWFbdV0uZ2x5cGhOYW1lOy0xPT09ci5DRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihlKSYmYy5hZGQoZSk7aC5wdXNoKGUpfXMuY2hhcnNldD1uZXcgci5DRkZDaGFyc2V0KCExLDAsaCk7Y29uc3QgZj1uZXcgci5DRkZJbmRleDtmLmFkZChbMTM5LDE0XSk7Zm9yKHU9MDt1PGw7dSsrKWYuYWRkKHRbdV0pO3MuY2hhclN0cmluZ3M9Zjtjb25zdCBnPW5ldyByLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7Y29uc3QgcD1bIkJsdWVWYWx1ZXMiLCJPdGhlckJsdWVzIiwiRmFtaWx5Qmx1ZXMiLCJGYW1pbHlPdGhlckJsdWVzIiwiU3RlbVNuYXBIIiwiU3RlbVNuYXBWIiwiQmx1ZVNoaWZ0IiwiQmx1ZUZ1enoiLCJCbHVlU2NhbGUiLCJMYW5ndWFnZUdyb3VwIiwiRXhwYW5zaW9uRmFjdG9yIiwiRm9yY2VCb2xkIiwiU3RkSFciLCJTdGRWVyJdO2Zvcih1PTAsZD1wLmxlbmd0aDt1PGQ7dSsrKXtjb25zdCBlPXBbdV07aWYoIShlIGluIGkucHJpdmF0ZURhdGEpKWNvbnRpbnVlO2NvbnN0IHQ9aS5wcml2YXRlRGF0YVtlXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+MDtlLS0pdFtlXS09dFtlLTFdO2cuc2V0QnlOYW1lKGUsdCl9cy50b3BEaWN0LnByaXZhdGVEaWN0PWc7Y29uc3QgbT1uZXcgci5DRkZJbmRleDtmb3IodT0wLGQ9bi5sZW5ndGg7dTxkO3UrKyltLmFkZChuW3VdKTtnLnN1YnJzSW5kZXg9bTtyZXR1cm4gbmV3IHIuQ0ZGQ29tcGlsZXIocykuY29tcGlsZSgpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5UeXBlMVBhcnNlcj12b2lkIDA7dmFyIHI9YSgzNSksbj1hKDQpLGk9YSg4KSxzPWEoMik7Y29uc3Qgbz1bNF0sYz1bNV0sbD1bNl0saD1bN10sdT1bOF0sZD1bMTIsMzVdLGY9WzE0XSxnPVsyMV0scD1bMjJdLG09WzMwXSxiPVszMV07Y2xhc3MgVHlwZTFDaGFyU3RyaW5ne2NvbnN0cnVjdG9yKCl7dGhpcy53aWR0aD0wO3RoaXMubHNiPTA7dGhpcy5mbGV4aW5nPSExO3RoaXMub3V0cHV0PVtdO3RoaXMuc3RhY2s9W119Y29udmVydChlLHQsYSl7Y29uc3Qgcj1lLmxlbmd0aDtsZXQgbixpLHksdz0hMTtmb3IobGV0IFM9MDtTPHI7UysrKXtsZXQgcj1lW1NdO2lmKHI8MzIpezEyPT09ciYmKHI9KHI8PDgpK2VbKytTXSk7c3dpdGNoKHIpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA5OmNhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSAzMDc0OmNhc2UgMzEwNTp0aGlzLnN0YWNrPVtdO2JyZWFrO2Nhc2UgNDppZih0aGlzLmZsZXhpbmcpe2lmKHRoaXMuc3RhY2subGVuZ3RoPDEpe3c9ITA7YnJlYWt9Y29uc3QgZT10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCgwLGUpO2JyZWFrfXc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLG8pO2JyZWFrO2Nhc2UgNTp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixjKTticmVhaztjYXNlIDY6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsbCk7YnJlYWs7Y2FzZSA3Onc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGgpO2JyZWFrO2Nhc2UgODp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNix1KTticmVhaztjYXNlIDEwOmlmKHRoaXMuc3RhY2subGVuZ3RoPDEpe3c9ITA7YnJlYWt9eT10aGlzLnN0YWNrLnBvcCgpO2lmKCF0W3ldKXt3PSEwO2JyZWFrfXc9dGhpcy5jb252ZXJ0KHRbeV0sdCxhKTticmVhaztjYXNlIDExOnJldHVybiB3O2Nhc2UgMTM6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7dz0hMDticmVha31uPXRoaXMuc3RhY2sucG9wKCk7aT10aGlzLnN0YWNrLnBvcCgpO3RoaXMubHNiPWk7dGhpcy53aWR0aD1uO3RoaXMuc3RhY2sucHVzaChuLGkpO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgyLHApO2JyZWFrO2Nhc2UgMTQ6dGhpcy5vdXRwdXQucHVzaChmWzBdKTticmVhaztjYXNlIDIxOmlmKHRoaXMuZmxleGluZylicmVhazt3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixnKTticmVhaztjYXNlIDIyOmlmKHRoaXMuZmxleGluZyl7dGhpcy5zdGFjay5wdXNoKDApO2JyZWFrfXc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLHApO2JyZWFrO2Nhc2UgMzA6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsbSk7YnJlYWs7Y2FzZSAzMTp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxiKTticmVhaztjYXNlIDMwNzg6aWYoYSl7Y29uc3QgZT10aGlzLnN0YWNrLmF0KC01KTt0aGlzLnNlYWM9dGhpcy5zdGFjay5zcGxpY2UoLTQsNCk7dGhpcy5zZWFjWzBdKz10aGlzLmxzYi1lO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgwLGYpfWVsc2Ugdz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsZik7YnJlYWs7Y2FzZSAzMDc5OmlmKHRoaXMuc3RhY2subGVuZ3RoPDQpe3c9ITA7YnJlYWt9dGhpcy5zdGFjay5wb3AoKTtuPXRoaXMuc3RhY2sucG9wKCk7Y29uc3QgZT10aGlzLnN0YWNrLnBvcCgpO2k9dGhpcy5zdGFjay5wb3AoKTt0aGlzLmxzYj1pO3RoaXMud2lkdGg9bjt0aGlzLnN0YWNrLnB1c2gobixpLGUpO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgzLGcpO2JyZWFrO2Nhc2UgMzA4NDppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXt3PSEwO2JyZWFrfWNvbnN0IFM9dGhpcy5zdGFjay5wb3AoKSx4PXRoaXMuc3RhY2sucG9wKCk7dGhpcy5zdGFjay5wdXNoKHgvUyk7YnJlYWs7Y2FzZSAzMDg4OmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe3c9ITA7YnJlYWt9eT10aGlzLnN0YWNrLnBvcCgpO2NvbnN0IGs9dGhpcy5zdGFjay5wb3AoKTtpZigwPT09eSYmMz09PWspe2NvbnN0IGU9dGhpcy5zdGFjay5zcGxpY2UodGhpcy5zdGFjay5sZW5ndGgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChlWzJdK2VbMF0sZVszXStlWzFdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XSxlWzldLGVbMTBdLGVbMTFdLGVbMTJdLGVbMTNdLGVbMTRdKTt3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMsZCwhMCk7dGhpcy5mbGV4aW5nPSExO3RoaXMuc3RhY2sucHVzaChlWzE1XSxlWzE2XSl9ZWxzZSAxPT09eSYmMD09PWsmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0OigwLHMud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJytyKyciJyl9aWYodylicmVha31lbHNle3I8PTI0Nj9yLT0xMzk6cj1yPD0yNTA/MjU2KihyLTI0NykrZVsrK1NdKzEwODpyPD0yNTQ/LTI1Niooci0yNTEpLWVbKytTXS0xMDg6KDI1NSZlWysrU10pPDwyNHwoMjU1JmVbKytTXSk8PDE2fCgyNTUmZVsrK1NdKTw8OHwoMjU1JmVbKytTXSk8PDA7dGhpcy5zdGFjay5wdXNoKHIpfX1yZXR1cm4gd31leGVjdXRlQ29tbWFuZChlLHQsYSl7Y29uc3Qgcj10aGlzLnN0YWNrLmxlbmd0aDtpZihlPnIpcmV0dXJuITA7Y29uc3Qgbj1yLWU7Zm9yKGxldCBlPW47ZTxyO2UrKyl7bGV0IHQ9dGhpcy5zdGFja1tlXTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXRoaXMub3V0cHV0LnB1c2goMjgsdD4+OCYyNTUsMjU1JnQpO2Vsc2V7dD02NTUzNip0fDA7dGhpcy5vdXRwdXQucHVzaCgyNTUsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9fXRoaXMub3V0cHV0LnB1c2goLi4udCk7YT90aGlzLnN0YWNrLnNwbGljZShuLGUpOnRoaXMuc3RhY2subGVuZ3RoPTA7cmV0dXJuITF9fWZ1bmN0aW9uIGlzSGV4RGlnaXQoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIGRlY3J5cHQoZSx0LGEpe2lmKGE+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtsZXQgcixuLGk9MHx0O2ZvcihyPTA7cjxhO3IrKylpPTUyODQ1KihlW3JdK2kpKzIyNzE5JjY1NTM1O2NvbnN0IHM9ZS5sZW5ndGgtYSxvPW5ldyBVaW50OEFycmF5KHMpO2ZvcihyPWEsbj0wO248cztyKyssbisrKXtjb25zdCB0PWVbcl07b1tuXT10Xmk+Pjg7aT01Mjg0NSoodCtpKSsyMjcxOSY2NTUzNX1yZXR1cm4gb31mdW5jdGlvbiBpc1NwZWNpYWwoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfXQuVHlwZTFQYXJzZXI9Y2xhc3MgVHlwZTFQYXJzZXJ7Y29uc3RydWN0b3IoZSx0LGEpe2lmKHQpe2NvbnN0IHQ9ZS5nZXRCeXRlcygpLGE9ISgoaXNIZXhEaWdpdCh0WzBdKXx8KDAsbi5pc1doaXRlU3BhY2UpKHRbMF0pKSYmaXNIZXhEaWdpdCh0WzFdKSYmaXNIZXhEaWdpdCh0WzJdKSYmaXNIZXhEaWdpdCh0WzNdKSYmaXNIZXhEaWdpdCh0WzRdKSYmaXNIZXhEaWdpdCh0WzVdKSYmaXNIZXhEaWdpdCh0WzZdKSYmaXNIZXhEaWdpdCh0WzddKSk7ZT1uZXcgaS5TdHJlYW0oYT9kZWNyeXB0KHQsNTU2NjUsNCk6ZnVuY3Rpb24gZGVjcnlwdEFzY2lpKGUsdCxhKXtsZXQgcj0wfHQ7Y29uc3Qgbj1lLmxlbmd0aCxpPW5ldyBVaW50OEFycmF5KG4+Pj4xKTtsZXQgcyxvO2ZvcihzPTAsbz0wO3M8bjtzKyspe2NvbnN0IHQ9ZVtzXTtpZighaXNIZXhEaWdpdCh0KSljb250aW51ZTtzKys7bGV0IGE7Zm9yKDtzPG4mJiFpc0hleERpZ2l0KGE9ZVtzXSk7KXMrKztpZihzPG4pe2NvbnN0IGU9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZSh0LGEpLDE2KTtpW28rK109ZV5yPj44O3I9NTI4NDUqKGUrcikrMjI3MTkmNjU1MzV9fXJldHVybiBpLnNsaWNlKGEsbyl9KHQsNTU2NjUsNCkpfXRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIWE7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCl9cmVhZE51bWJlckFycmF5KCl7dGhpcy5nZXRUb2tlbigpO2NvbnN0IGU9W107Zm9yKDs7KXtjb25zdCB0PXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09dHx8Il0iPT09dHx8In0iPT09dClicmVhaztlLnB1c2gocGFyc2VGbG9hdCh0fHwwKSl9cmV0dXJuIGV9cmVhZE51bWJlcigpe2NvbnN0IGU9dGhpcy5nZXRUb2tlbigpO3JldHVybiBwYXJzZUZsb2F0KGV8fDApfXJlYWRJbnQoKXtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gMHxwYXJzZUludChlfHwwLDEwKX1yZWFkQm9vbGVhbigpe3JldHVybiJ0cnVlIj09PXRoaXMuZ2V0VG9rZW4oKT8xOjB9bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9cHJldkNoYXIoKXt0aGlzLnN0cmVhbS5za2lwKC0yKTtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9Z2V0VG9rZW4oKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZigtMT09PXQpcmV0dXJuIG51bGw7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighKDAsbi5pc1doaXRlU3BhY2UpKHQpKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfWlmKGlzU3BlY2lhbCh0KSl7dGhpcy5uZXh0Q2hhcigpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfWxldCBhPSIiO2Rve2ErPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7dD10aGlzLm5leHRDaGFyKCl9d2hpbGUodD49MCYmISgwLG4uaXNXaGl0ZVNwYWNlKSh0KSYmIWlzU3BlY2lhbCh0KSk7cmV0dXJuIGF9cmVhZENoYXJTdHJpbmdzKGUsdCl7cmV0dXJuLTE9PT10P2U6ZGVjcnlwdChlLDQzMzAsdCl9ZXh0cmFjdEZvbnRQcm9ncmFtKGUpe2NvbnN0IHQ9dGhpcy5zdHJlYW0sYT1bXSxyPVtdLG49T2JqZWN0LmNyZWF0ZShudWxsKTtuLmxlbklWPTQ7Y29uc3QgaT17c3VicnM6W10sY2hhcnN0cmluZ3M6W10scHJvcGVydGllczp7cHJpdmF0ZURhdGE6bn19O2xldCBzLG8sYyxsO2Zvcig7bnVsbCE9PShzPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PXMpe3M9dGhpcy5nZXRUb2tlbigpO3N3aXRjaChzKXtjYXNlIkNoYXJTdHJpbmdzIjp0aGlzLmdldFRva2VuKCk7dGhpcy5nZXRUb2tlbigpO3RoaXMuZ2V0VG9rZW4oKTt0aGlzLmdldFRva2VuKCk7Zm9yKDs7KXtzPXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09c3x8ImVuZCI9PT1zKWJyZWFrO2lmKCIvIiE9PXMpY29udGludWU7Y29uc3QgZT10aGlzLmdldFRva2VuKCk7bz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Yz1vPjA/dC5nZXRCeXRlcyhvKTpuZXcgVWludDhBcnJheSgwKTtsPWkucHJvcGVydGllcy5wcml2YXRlRGF0YS5sZW5JVjtjb25zdCBhPXRoaXMucmVhZENoYXJTdHJpbmdzKGMsbCk7dGhpcy5uZXh0Q2hhcigpO3M9dGhpcy5nZXRUb2tlbigpOyJub2FjY2VzcyI9PT1zP3RoaXMuZ2V0VG9rZW4oKToiLyI9PT1zJiZ0aGlzLnByZXZDaGFyKCk7ci5wdXNoKHtnbHlwaDplLGVuY29kZWQ6YX0pfWJyZWFrO2Nhc2UiU3VicnMiOnRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtmb3IoOyJkdXAiPT09dGhpcy5nZXRUb2tlbigpOyl7Y29uc3QgZT10aGlzLnJlYWRJbnQoKTtvPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtjPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApO2w9aS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO2NvbnN0IHI9dGhpcy5yZWFkQ2hhclN0cmluZ3MoYyxsKTt0aGlzLm5leHRDaGFyKCk7cz10aGlzLmdldFRva2VuKCk7Im5vYWNjZXNzIj09PXMmJnRoaXMuZ2V0VG9rZW4oKTthW2VdPXJ9YnJlYWs7Y2FzZSJCbHVlVmFsdWVzIjpjYXNlIk90aGVyQmx1ZXMiOmNhc2UiRmFtaWx5Qmx1ZXMiOmNhc2UiRmFtaWx5T3RoZXJCbHVlcyI6Y29uc3QgZT10aGlzLnJlYWROdW1iZXJBcnJheSgpO2UubGVuZ3RoPjAmJmUubGVuZ3RoLDA7YnJlYWs7Y2FzZSJTdGVtU25hcEgiOmNhc2UiU3RlbVNuYXBWIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTticmVhaztjYXNlIlN0ZEhXIjpjYXNlIlN0ZFZXIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTticmVhaztjYXNlIkJsdWVTaGlmdCI6Y2FzZSJsZW5JViI6Y2FzZSJCbHVlRnV6eiI6Y2FzZSJCbHVlU2NhbGUiOmNhc2UiTGFuZ3VhZ2VHcm91cCI6Y2FzZSJFeHBhbnNpb25GYWN0b3IiOmkucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXIoKTticmVhaztjYXNlIkZvcmNlQm9sZCI6aS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3NdPXRoaXMucmVhZEJvb2xlYW4oKX19Zm9yKGNvbnN0e2VuY29kZWQ6dCxnbHlwaDpufW9mIHIpe2NvbnN0IHI9bmV3IFR5cGUxQ2hhclN0cmluZyxzPXIuY29udmVydCh0LGEsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKTtsZXQgbz1yLm91dHB1dDtzJiYobz1bMTRdKTtjb25zdCBjPXtnbHlwaE5hbWU6bixjaGFyc3RyaW5nOm8sd2lkdGg6ci53aWR0aCxsc2I6ci5sc2Isc2VhYzpyLnNlYWN9OyIubm90ZGVmIj09PW4/aS5jaGFyc3RyaW5ncy51bnNoaWZ0KGMpOmkuY2hhcnN0cmluZ3MucHVzaChjKTtpZihlLmJ1aWx0SW5FbmNvZGluZyl7Y29uc3QgdD1lLmJ1aWx0SW5FbmNvZGluZy5pbmRleE9mKG4pO3Q+LTEmJnZvaWQgMD09PWUud2lkdGhzW3RdJiZ0Pj1lLmZpcnN0Q2hhciYmdDw9ZS5sYXN0Q2hhciYmKGUud2lkdGhzW3RdPXIud2lkdGgpfX1yZXR1cm4gaX1leHRyYWN0Rm9udEhlYWRlcihlKXtsZXQgdDtmb3IoO251bGwhPT0odD10aGlzLmdldFRva2VuKCkpOylpZigiLyI9PT10KXt0PXRoaXMuZ2V0VG9rZW4oKTtzd2l0Y2godCl7Y2FzZSJGb250TWF0cml4Ijpjb25zdCBhPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5mb250TWF0cml4PWE7YnJlYWs7Y2FzZSJFbmNvZGluZyI6Y29uc3Qgbj10aGlzLmdldFRva2VuKCk7bGV0IGk7aWYoL15cZCskLy50ZXN0KG4pKXtpPVtdO2NvbnN0IGU9MHxwYXJzZUludChuLDEwKTt0aGlzLmdldFRva2VuKCk7Zm9yKGxldCBhPTA7YTxlO2ErKyl7dD10aGlzLmdldFRva2VuKCk7Zm9yKDsiZHVwIiE9PXQmJiJkZWYiIT09dDspe3Q9dGhpcy5nZXRUb2tlbigpO2lmKG51bGw9PT10KXJldHVybn1pZigiZGVmIj09PXQpYnJlYWs7Y29uc3QgZT10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Y29uc3QgYT10aGlzLmdldFRva2VuKCk7aVtlXT1hO3RoaXMuZ2V0VG9rZW4oKX19ZWxzZSBpPSgwLHIuZ2V0RW5jb2RpbmcpKG4pO2UuYnVpbHRJbkVuY29kaW5nPWk7YnJlYWs7Y2FzZSJGb250QkJveCI6Y29uc3Qgcz10aGlzLnJlYWROdW1iZXJBcnJheSgpO2UuYXNjZW50PU1hdGgubWF4KHNbM10sc1sxXSk7ZS5kZXNjZW50PU1hdGgubWluKHNbMV0sc1szXSk7ZS5hc2NlbnRTY2FsZWQ9ITB9fX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUGF0dGVybj12b2lkIDA7dC5nZXRUaWxpbmdQYXR0ZXJuSVI9ZnVuY3Rpb24gZ2V0VGlsaW5nUGF0dGVybklSKGUsdCxhKXtjb25zdCBuPXQuZ2V0QXJyYXkoIk1hdHJpeCIpLGk9ci5VdGlsLm5vcm1hbGl6ZVJlY3QodC5nZXRBcnJheSgiQkJveCIpKSxzPXQuZ2V0KCJYU3RlcCIpLG89dC5nZXQoIllTdGVwIiksYz10LmdldCgiUGFpbnRUeXBlIiksbD10LmdldCgiVGlsaW5nVHlwZSIpO2lmKGlbMl0taVswXT09MHx8aVszXS1pWzFdPT0wKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyR7aX1dLmApO3JldHVyblsiVGlsaW5nUGF0dGVybiIsYSxlLG4saSxzLG8sYyxsXX07dmFyIHI9YSgyKSxuPWEoNSksaT1hKDEyKSxzPWEoNCk7Y29uc3Qgbz0yLGM9MyxsPTQsaD01LHU9NixkPTc7dC5QYXR0ZXJuPWNsYXNzIFBhdHRlcm57Y29uc3RydWN0b3IoKXsoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKX1zdGF0aWMgcGFyc2VTaGFkaW5nKGUsdCxhLGksZixnKXtjb25zdCBwPWUgaW5zdGFuY2VvZiBuLkJhc2VTdHJlYW0/ZS5kaWN0OmUsbT1wLmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKG0pe2Nhc2UgbzpjYXNlIGM6cmV0dXJuIG5ldyBSYWRpYWxBeGlhbFNoYWRpbmcocCx0LGEsZixnKTtjYXNlIGw6Y2FzZSBoOmNhc2UgdTpjYXNlIGQ6cmV0dXJuIG5ldyBNZXNoU2hhZGluZyhlLHQsYSxmLGcpO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK20pfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO2kuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOnIuVU5TVVBQT1JURURfRkVBVFVSRVMuc2hhZGluZ1BhdHRlcm59KTsoMCxyLndhcm4pKGUpO3JldHVybiBuZXcgRHVtbXlTaGFkaW5nfX19O2NsYXNzIEJhc2VTaGFkaW5ne3N0YXRpYyBnZXQgU01BTExfTlVNQkVSKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIlNNQUxMX05VTUJFUiIsMWUtNil9Y29uc3RydWN0b3IoKXt0aGlzLmNvbnN0cnVjdG9yPT09QmFzZVNoYWRpbmcmJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy4iKX1nZXRJUigpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldElSYCBjYWxsZWQuIil9fWNsYXNzIFJhZGlhbEF4aWFsU2hhZGluZyBleHRlbmRzIEJhc2VTaGFkaW5ne2NvbnN0cnVjdG9yKGUsdCxhLG4scyl7c3VwZXIoKTt0aGlzLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKTt0aGlzLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpO2NvbnN0IG89aS5Db2xvclNwYWNlLnBhcnNlKHtjczplLmdldFJhdygiQ1MiKXx8ZS5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOnQscmVzb3VyY2VzOmEscGRmRnVuY3Rpb25GYWN0b3J5Om4sbG9jYWxDb2xvclNwYWNlQ2FjaGU6c30pLGw9ZS5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkobCkmJjQ9PT1sLmxlbmd0aD90aGlzLmJib3g9ci5VdGlsLm5vcm1hbGl6ZVJlY3QobCk6dGhpcy5iYm94PW51bGw7bGV0IGg9MCx1PTE7aWYoZS5oYXMoIkRvbWFpbiIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkRvbWFpbiIpO2g9dFswXTt1PXRbMV19bGV0IGQ9ITEsZj0hMTtpZihlLmhhcygiRXh0ZW5kIikpe2NvbnN0IHQ9ZS5nZXRBcnJheSgiRXh0ZW5kIik7ZD10WzBdO2Y9dFsxXX1pZighKHRoaXMuc2hhZGluZ1R5cGUhPT1jfHxkJiZmKSl7Y29uc3RbZSx0LGEsbixpLHNdPXRoaXMuY29vcmRzQXJyLG89TWF0aC5oeXBvdChlLW4sdC1pKTthPD1zK28mJnM8PWErbyYmKDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgcmFkaWFsIGdyYWRpZW50LiIpfXRoaXMuZXh0ZW5kU3RhcnQ9ZDt0aGlzLmV4dGVuZEVuZD1mO2NvbnN0IGc9ZS5nZXRSYXcoIkZ1bmN0aW9uIikscD1uLmNyZWF0ZUZyb21BcnJheShnKSxtPSh1LWgpLzEwLGI9dGhpcy5jb2xvclN0b3BzPVtdO2lmKGg+PXV8fG08PTApeygwLHIuaW5mbykoIkJhZCBzaGFkaW5nIGRvbWFpbi4iKTtyZXR1cm59Y29uc3QgeT1uZXcgRmxvYXQzMkFycmF5KG8ubnVtQ29tcHMpLHc9bmV3IEZsb2F0MzJBcnJheSgxKTtsZXQgUztmb3IobGV0IGU9MDtlPD0xMDtlKyspe3dbMF09aCtlKm07cCh3LDAseSwwKTtTPW8uZ2V0UmdiKHksMCk7Y29uc3QgdD1yLlV0aWwubWFrZUhleENvbG9yKFNbMF0sU1sxXSxTWzJdKTtiLnB1c2goW2UvMTAsdF0pfWxldCB4PSJ0cmFuc3BhcmVudCI7aWYoZS5oYXMoIkJhY2tncm91bmQiKSl7Uz1vLmdldFJnYihlLmdldCgiQmFja2dyb3VuZCIpLDApO3g9ci5VdGlsLm1ha2VIZXhDb2xvcihTWzBdLFNbMV0sU1syXSl9aWYoIWQpe2IudW5zaGlmdChbMCx4XSk7YlsxXVswXSs9QmFzZVNoYWRpbmcuU01BTExfTlVNQkVSfWlmKCFmKXtiLmF0KC0xKVswXS09QmFzZVNoYWRpbmcuU01BTExfTlVNQkVSO2IucHVzaChbMSx4XSl9dGhpcy5jb2xvclN0b3BzPWJ9Z2V0SVIoKXtjb25zdCBlPXRoaXMuY29vcmRzQXJyLHQ9dGhpcy5zaGFkaW5nVHlwZTtsZXQgYSxuLGkscyxsO2lmKHQ9PT1vKXtuPVtlWzBdLGVbMV1dO2k9W2VbMl0sZVszXV07cz1udWxsO2w9bnVsbDthPSJheGlhbCJ9ZWxzZSBpZih0PT09Yyl7bj1bZVswXSxlWzFdXTtpPVtlWzNdLGVbNF1dO3M9ZVsyXTtsPWVbNV07YT0icmFkaWFsIn1lbHNlKDAsci51bnJlYWNoYWJsZSkoYGdldFBhdHRlcm4gdHlwZSB1bmtub3duOiAke3R9YCk7cmV0dXJuWyJSYWRpYWxBeGlhbCIsYSx0aGlzLmJib3gsdGhpcy5jb2xvclN0b3BzLG4saSxzLGxdfX1jbGFzcyBNZXNoU3RyZWFtUmVhZGVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZTt0aGlzLmNvbnRleHQ9dDt0aGlzLmJ1ZmZlcj0wO3RoaXMuYnVmZmVyTGVuZ3RoPTA7Y29uc3QgYT10Lm51bUNvbXBzO3RoaXMudG1wQ29tcHNCdWY9bmV3IEZsb2F0MzJBcnJheShhKTtjb25zdCByPXQuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9dC5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkocik6dGhpcy50bXBDb21wc0J1Zn1nZXQgaGFzRGF0YSgpe2lmKHRoaXMuc3RyZWFtLmVuZClyZXR1cm4gdGhpcy5zdHJlYW0ucG9zPHRoaXMuc3RyZWFtLmVuZDtpZih0aGlzLmJ1ZmZlckxlbmd0aD4wKXJldHVybiEwO2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2lmKGU8MClyZXR1cm4hMTt0aGlzLmJ1ZmZlcj1lO3RoaXMuYnVmZmVyTGVuZ3RoPTg7cmV0dXJuITB9cmVhZEJpdHMoZSl7bGV0IHQ9dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlckxlbmd0aDtpZigzMj09PWUpe2lmKDA9PT1hKXJldHVybih0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKSk+Pj4wO3Q9dDw8MjR8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwxNnx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO3RoaXMuYnVmZmVyPWUmKDE8PGEpLTE7cmV0dXJuKHQ8PDgtYXwoMjU1JmUpPj5hKT4+PjB9aWYoOD09PWUmJjA9PT1hKXJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Zm9yKDthPGU7KXt0PXQ8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2ErPTh9YS09ZTt0aGlzLmJ1ZmZlckxlbmd0aD1hO3RoaXMuYnVmZmVyPXQmKDE8PGEpLTE7cmV0dXJuIHQ+PmF9YWxpZ24oKXt0aGlzLmJ1ZmZlcj0wO3RoaXMuYnVmZmVyTGVuZ3RoPTB9cmVhZEZsYWcoKXtyZXR1cm4gdGhpcy5yZWFkQml0cyh0aGlzLmNvbnRleHQuYml0c1BlckZsYWcpfXJlYWRDb29yZGluYXRlKCl7Y29uc3QgZT10aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGUsdD10aGlzLnJlYWRCaXRzKGUpLGE9dGhpcy5yZWFkQml0cyhlKSxyPXRoaXMuY29udGV4dC5kZWNvZGUsbj1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwO3JldHVyblt0Km4qKHJbMV0tclswXSkrclswXSxhKm4qKHJbM10tclsyXSkrclsyXV19cmVhZENvbXBvbmVudHMoKXtjb25zdCBlPXRoaXMuY29udGV4dC5udW1Db21wcyx0PXRoaXMuY29udGV4dC5iaXRzUGVyQ29tcG9uZW50LGE9dDwzMj8xLygoMTw8dCktMSk6Mi4zMjgzMDY0MzY1Mzg2OTYzZS0xMCxyPXRoaXMuY29udGV4dC5kZWNvZGUsbj10aGlzLnRtcENvbXBzQnVmO2ZvcihsZXQgaT0wLHM9NDtpPGU7aSsrLHMrPTIpe2NvbnN0IGU9dGhpcy5yZWFkQml0cyh0KTtuW2ldPWUqYSoocltzKzFdLXJbc10pK3Jbc119Y29uc3QgaT10aGlzLnRtcENzQ29tcHNCdWY7dGhpcy5jb250ZXh0LmNvbG9yRm4mJnRoaXMuY29udGV4dC5jb2xvckZuKG4sMCxpLDApO3JldHVybiB0aGlzLmNvbnRleHQuY29sb3JTcGFjZS5nZXRSZ2IoaSwwKX19Y29uc3QgZj1mdW5jdGlvbiBnZXRCQ2xvc3VyZSgpe2NvbnN0IGU9W107cmV0dXJuIGZ1bmN0aW9uKHQpe2VbdF18fChlW3RdPWZ1bmN0aW9uIGJ1aWxkQihlKXtjb25zdCB0PVtdO2ZvcihsZXQgYT0wO2E8PWU7YSsrKXtjb25zdCByPWEvZSxuPTEtcjt0LnB1c2gobmV3IEZsb2F0MzJBcnJheShbbipuKm4sMypyKm4qbiwzKnIqcipuLHIqcipyXSkpfXJldHVybiB0fSh0KSk7cmV0dXJuIGVbdF19fSgpO2NsYXNzIE1lc2hTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmd7c3RhdGljIGdldCBNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCIsMyl9c3RhdGljIGdldCBNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCIsMjApfXN0YXRpYyBnZXQgVFJJQU5HTEVfREVOU0lUWSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJUUklBTkdMRV9ERU5TSVRZIiwyMCl9Y29uc3RydWN0b3IoZSx0LGEscyxvKXtzdXBlcigpO2lmKCEoZSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1lc2ggZGF0YSBpcyBub3QgYSBzdHJlYW0iKTtjb25zdCBjPWUuZGljdDt0aGlzLnNoYWRpbmdUeXBlPWMuZ2V0KCJTaGFkaW5nVHlwZSIpO2NvbnN0IGY9Yy5nZXRBcnJheSgiQkJveCIpO0FycmF5LmlzQXJyYXkoZikmJjQ9PT1mLmxlbmd0aD90aGlzLmJib3g9ci5VdGlsLm5vcm1hbGl6ZVJlY3QoZik6dGhpcy5iYm94PW51bGw7Y29uc3QgZz1pLkNvbG9yU3BhY2UucGFyc2Uoe2NzOmMuZ2V0UmF3KCJDUyIpfHxjLmdldFJhdygiQ29sb3JTcGFjZSIpLHhyZWY6dCxyZXNvdXJjZXM6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6cyxsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSk7dGhpcy5iYWNrZ3JvdW5kPWMuaGFzKCJCYWNrZ3JvdW5kIik/Zy5nZXRSZ2IoYy5nZXQoIkJhY2tncm91bmQiKSwwKTpudWxsO2NvbnN0IHA9Yy5nZXRSYXcoIkZ1bmN0aW9uIiksbT1wP3MuY3JlYXRlRnJvbUFycmF5KHApOm51bGw7dGhpcy5jb29yZHM9W107dGhpcy5jb2xvcnM9W107dGhpcy5maWd1cmVzPVtdO2NvbnN0IGI9e2JpdHNQZXJDb29yZGluYXRlOmMuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6Yy5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpjLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6Yy5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjptLGNvbG9yU3BhY2U6ZyxudW1Db21wczptPzE6Zy5udW1Db21wc30seT1uZXcgTWVzaFN0cmVhbVJlYWRlcihlLGIpO2xldCB3PSExO3N3aXRjaCh0aGlzLnNoYWRpbmdUeXBlKXtjYXNlIGw6dGhpcy5fZGVjb2RlVHlwZTRTaGFkaW5nKHkpO2JyZWFrO2Nhc2UgaDpjb25zdCBlPTB8Yy5nZXQoIlZlcnRpY2VzUGVyUm93Iik7aWYoZTwyKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7dGhpcy5fZGVjb2RlVHlwZTVTaGFkaW5nKHksZSk7YnJlYWs7Y2FzZSB1OnRoaXMuX2RlY29kZVR5cGU2U2hhZGluZyh5KTt3PSEwO2JyZWFrO2Nhc2UgZDp0aGlzLl9kZWNvZGVUeXBlN1NoYWRpbmcoeSk7dz0hMDticmVhaztkZWZhdWx0OigwLHIudW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYodyl7dGhpcy5fdXBkYXRlQm91bmRzKCk7Zm9yKGxldCBlPTAsdD10aGlzLmZpZ3VyZXMubGVuZ3RoO2U8dDtlKyspdGhpcy5fYnVpbGRGaWd1cmVGcm9tUGF0Y2goZSl9dGhpcy5fdXBkYXRlQm91bmRzKCk7dGhpcy5fcGFja0RhdGEoKX1fZGVjb2RlVHlwZTRTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxuPVtdLGk9W107bGV0IHM9MDtmb3IoO2UuaGFzRGF0YTspe2NvbnN0IG89ZS5yZWFkRmxhZygpLGM9ZS5yZWFkQ29vcmRpbmF0ZSgpLGw9ZS5yZWFkQ29tcG9uZW50cygpO2lmKDA9PT1zKXtpZighKDA8PW8mJm88PTIpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU0IGZsYWciKTtzd2l0Y2gobyl7Y2FzZSAwOnM9MzticmVhaztjYXNlIDE6aS5wdXNoKGkuYXQoLTIpLGkuYXQoLTEpKTtzPTE7YnJlYWs7Y2FzZSAyOmkucHVzaChpLmF0KC0zKSxpLmF0KC0xKSk7cz0xfW4ucHVzaChvKX1pLnB1c2godC5sZW5ndGgpO3QucHVzaChjKTthLnB1c2gobCk7cy0tO2UuYWxpZ24oKX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToidHJpYW5nbGVzIixjb29yZHM6bmV3IEludDMyQXJyYXkoaSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9X2RlY29kZVR5cGU1U2hhZGluZyhlLHQpe2NvbnN0IGE9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxuPVtdO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3QgdD1lLnJlYWRDb29yZGluYXRlKCksaT1lLnJlYWRDb21wb25lbnRzKCk7bi5wdXNoKGEubGVuZ3RoKTthLnB1c2godCk7ci5wdXNoKGkpfXRoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJsYXR0aWNlIixjb29yZHM6bmV3IEludDMyQXJyYXkobiksY29sb3JzOm5ldyBJbnQzMkFycmF5KG4pLHZlcnRpY2VzUGVyUm93OnR9KX1fZGVjb2RlVHlwZTZTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxuPW5ldyBJbnQzMkFycmF5KDE2KSxpPW5ldyBJbnQzMkFycmF5KDQpO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgcz1lLnJlYWRGbGFnKCk7aWYoISgwPD1zJiZzPD0zKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Y29uc3Qgbz10Lmxlbmd0aDtmb3IobGV0IGE9MCxyPTAhPT1zPzg6MTI7YTxyO2ErKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtjb25zdCBjPWEubGVuZ3RoO2ZvcihsZXQgdD0wLHI9MCE9PXM/Mjo0O3Q8cjt0KyspYS5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7bGV0IGwsaCx1LGQ7c3dpdGNoKHMpe2Nhc2UgMDpuWzEyXT1vKzM7blsxM109bys0O25bMTRdPW8rNTtuWzE1XT1vKzY7bls4XT1vKzI7blsxMV09bys3O25bNF09bysxO25bN109bys4O25bMF09bztuWzFdPW8rMTE7blsyXT1vKzEwO25bM109bys5O2lbMl09YysxO2lbM109YysyO2lbMF09YztpWzFdPWMrMzticmVhaztjYXNlIDE6bD1uWzEyXTtoPW5bMTNdO3U9blsxNF07ZD1uWzE1XTtuWzEyXT1kO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09dTtuWzExXT1vKzM7bls0XT1oO25bN109bys0O25bMF09bDtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtsPWlbMl07aD1pWzNdO2lbMl09aDtpWzNdPWM7aVswXT1sO2lbMV09YysxO2JyZWFrO2Nhc2UgMjpsPW5bMTVdO2g9blsxMV07blsxMl09blszXTtuWzEzXT1vKzA7blsxNF09bysxO25bMTVdPW8rMjtuWzhdPW5bN107blsxMV09byszO25bNF09aDtuWzddPW8rNDtuWzBdPWw7blsxXT1vKzc7blsyXT1vKzY7blszXT1vKzU7bD1pWzNdO2lbMl09aVsxXTtpWzNdPWM7aVswXT1sO2lbMV09YysxO2JyZWFrO2Nhc2UgMzpuWzEyXT1uWzBdO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09blsxXTtuWzExXT1vKzM7bls0XT1uWzJdO25bN109bys0O25bMF09blszXTtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtpWzJdPWlbMF07aVszXT1jO2lbMF09aVsxXTtpWzFdPWMrMX1uWzVdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbblswXV1bMF0tdFtuWzE1XV1bMF0rNioodFtuWzRdXVswXSt0W25bMV1dWzBdKS0yKih0W25bMTJdXVswXSt0W25bM11dWzBdKSszKih0W25bMTNdXVswXSt0W25bN11dWzBdKSkvOSwoLTQqdFtuWzBdXVsxXS10W25bMTVdXVsxXSs2Kih0W25bNF1dWzFdK3RbblsxXV1bMV0pLTIqKHRbblsxMl1dWzFdK3RbblszXV1bMV0pKzMqKHRbblsxM11dWzFdK3Rbbls3XV1bMV0pKS85XSk7bls2XT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W25bM11dWzBdLXRbblsxMl1dWzBdKzYqKHRbblsyXV1bMF0rdFtuWzddXVswXSktMioodFtuWzBdXVswXSt0W25bMTVdXVswXSkrMyoodFtuWzRdXVswXSt0W25bMTRdXVswXSkpLzksKC00KnRbblszXV1bMV0tdFtuWzEyXV1bMV0rNioodFtuWzJdXVsxXSt0W25bN11dWzFdKS0yKih0W25bMF1dWzFdK3RbblsxNV1dWzFdKSszKih0W25bNF1dWzFdK3RbblsxNF1dWzFdKSkvOV0pO25bOV09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFtuWzEyXV1bMF0tdFtuWzNdXVswXSs2Kih0W25bOF1dWzBdK3RbblsxM11dWzBdKS0yKih0W25bMF1dWzBdK3RbblsxNV1dWzBdKSszKih0W25bMTFdXVswXSt0W25bMV1dWzBdKSkvOSwoLTQqdFtuWzEyXV1bMV0tdFtuWzNdXVsxXSs2Kih0W25bOF1dWzFdK3RbblsxM11dWzFdKS0yKih0W25bMF1dWzFdK3RbblsxNV1dWzFdKSszKih0W25bMTFdXVsxXSt0W25bMV1dWzFdKSkvOV0pO25bMTBdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbblsxNV1dWzBdLXRbblswXV1bMF0rNioodFtuWzExXV1bMF0rdFtuWzE0XV1bMF0pLTIqKHRbblsxMl1dWzBdK3RbblszXV1bMF0pKzMqKHRbblsyXV1bMF0rdFtuWzhdXVswXSkpLzksKC00KnRbblsxNV1dWzFdLXRbblswXV1bMV0rNioodFtuWzExXV1bMV0rdFtuWzE0XV1bMV0pLTIqKHRbblsxMl1dWzFdK3RbblszXV1bMV0pKzMqKHRbblsyXV1bMV0rdFtuWzhdXVsxXSkpLzldKTt0aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShuKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoaSl9KX19X2RlY29kZVR5cGU3U2hhZGluZyhlKXtjb25zdCB0PXRoaXMuY29vcmRzLGE9dGhpcy5jb2xvcnMsbj1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtmb3IoO2UuaGFzRGF0YTspe2NvbnN0IHM9ZS5yZWFkRmxhZygpO2lmKCEoMDw9cyYmczw9MykpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTcgZmxhZyIpO2NvbnN0IG89dC5sZW5ndGg7Zm9yKGxldCBhPTAscj0wIT09cz8xMjoxNjthPHI7YSsrKXQucHVzaChlLnJlYWRDb29yZGluYXRlKCkpO2NvbnN0IGM9YS5sZW5ndGg7Zm9yKGxldCB0PTAscj0wIT09cz8yOjQ7dDxyO3QrKylhLnB1c2goZS5yZWFkQ29tcG9uZW50cygpKTtsZXQgbCxoLHUsZDtzd2l0Y2gocyl7Y2FzZSAwOm5bMTJdPW8rMztuWzEzXT1vKzQ7blsxNF09bys1O25bMTVdPW8rNjtuWzhdPW8rMjtuWzldPW8rMTM7blsxMF09bysxNDtuWzExXT1vKzc7bls0XT1vKzE7bls1XT1vKzEyO25bNl09bysxNTtuWzddPW8rODtuWzBdPW87blsxXT1vKzExO25bMl09bysxMDtuWzNdPW8rOTtpWzJdPWMrMTtpWzNdPWMrMjtpWzBdPWM7aVsxXT1jKzM7YnJlYWs7Y2FzZSAxOmw9blsxMl07aD1uWzEzXTt1PW5bMTRdO2Q9blsxNV07blsxMl09ZDtuWzEzXT1vKzA7blsxNF09bysxO25bMTVdPW8rMjtuWzhdPXU7bls5XT1vKzk7blsxMF09bysxMDtuWzExXT1vKzM7bls0XT1oO25bNV09bys4O25bNl09bysxMTtuWzddPW8rNDtuWzBdPWw7blsxXT1vKzc7blsyXT1vKzY7blszXT1vKzU7bD1pWzJdO2g9aVszXTtpWzJdPWg7aVszXT1jO2lbMF09bDtpWzFdPWMrMTticmVhaztjYXNlIDI6bD1uWzE1XTtoPW5bMTFdO25bMTJdPW5bM107blsxM109byswO25bMTRdPW8rMTtuWzE1XT1vKzI7bls4XT1uWzddO25bOV09bys5O25bMTBdPW8rMTA7blsxMV09byszO25bNF09aDtuWzVdPW8rODtuWzZdPW8rMTE7bls3XT1vKzQ7blswXT1sO25bMV09bys3O25bMl09bys2O25bM109bys1O2w9aVszXTtpWzJdPWlbMV07aVszXT1jO2lbMF09bDtpWzFdPWMrMTticmVhaztjYXNlIDM6blsxMl09blswXTtuWzEzXT1vKzA7blsxNF09bysxO25bMTVdPW8rMjtuWzhdPW5bMV07bls5XT1vKzk7blsxMF09bysxMDtuWzExXT1vKzM7bls0XT1uWzJdO25bNV09bys4O25bNl09bysxMTtuWzddPW8rNDtuWzBdPW5bM107blsxXT1vKzc7blsyXT1vKzY7blszXT1vKzU7aVsyXT1pWzBdO2lbM109YztpWzBdPWlbMV07aVsxXT1jKzF9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkobiksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fV9idWlsZEZpZ3VyZUZyb21QYXRjaChlKXtjb25zdCB0PXRoaXMuZmlndXJlc1tlXTsoMCxyLmFzc2VydCkoInBhdGNoIj09PXQudHlwZSwiVW5leHBlY3RlZCBwYXRjaCBtZXNoIGZpZ3VyZSIpO2NvbnN0IGE9dGhpcy5jb29yZHMsbj10aGlzLmNvbG9ycyxpPXQuY29vcmRzLHM9dC5jb2xvcnMsbz1NYXRoLm1pbihhW2lbMF1dWzBdLGFbaVszXV1bMF0sYVtpWzEyXV1bMF0sYVtpWzE1XV1bMF0pLGM9TWF0aC5taW4oYVtpWzBdXVsxXSxhW2lbM11dWzFdLGFbaVsxMl1dWzFdLGFbaVsxNV1dWzFdKSxsPU1hdGgubWF4KGFbaVswXV1bMF0sYVtpWzNdXVswXSxhW2lbMTJdXVswXSxhW2lbMTVdXVswXSksaD1NYXRoLm1heChhW2lbMF1dWzFdLGFbaVszXV1bMV0sYVtpWzEyXV1bMV0sYVtpWzE1XV1bMV0pO2xldCB1PU1hdGguY2VpbCgobC1vKSpNZXNoU2hhZGluZy5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1syXS10aGlzLmJvdW5kc1swXSkpO3U9TWF0aC5tYXgoTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsTWF0aC5taW4oTWVzaFNoYWRpbmcuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsdSkpO2xldCBkPU1hdGguY2VpbCgoaC1jKSpNZXNoU2hhZGluZy5UUklBTkdMRV9ERU5TSVRZLyh0aGlzLmJvdW5kc1szXS10aGlzLmJvdW5kc1sxXSkpO2Q9TWF0aC5tYXgoTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsTWF0aC5taW4oTWVzaFNoYWRpbmcuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsZCkpO2NvbnN0IGc9dSsxLHA9bmV3IEludDMyQXJyYXkoKGQrMSkqZyksbT1uZXcgSW50MzJBcnJheSgoZCsxKSpnKTtsZXQgYj0wO2NvbnN0IHk9bmV3IFVpbnQ4QXJyYXkoMyksdz1uZXcgVWludDhBcnJheSgzKSxTPW5bc1swXV0seD1uW3NbMV1dLGs9bltzWzJdXSxDPW5bc1szXV0sdj1mKGQpLEY9Zih1KTtmb3IobGV0IGU9MDtlPD1kO2UrKyl7eVswXT0oU1swXSooZC1lKStrWzBdKmUpL2R8MDt5WzFdPShTWzFdKihkLWUpK2tbMV0qZSkvZHwwO3lbMl09KFNbMl0qKGQtZSkra1syXSplKS9kfDA7d1swXT0oeFswXSooZC1lKStDWzBdKmUpL2R8MDt3WzFdPSh4WzFdKihkLWUpK0NbMV0qZSkvZHwwO3dbMl09KHhbMl0qKGQtZSkrQ1syXSplKS9kfDA7Zm9yKGxldCB0PTA7dDw9dTt0KyssYisrKXtpZighKDAhPT1lJiZlIT09ZHx8MCE9PXQmJnQhPT11KSljb250aW51ZTtsZXQgcj0wLHM9MCxvPTA7Zm9yKGxldCBuPTA7bjw9MztuKyspZm9yKGxldCBjPTA7Yzw9MztjKyssbysrKXtjb25zdCBsPXZbZV1bbl0qRlt0XVtjXTtyKz1hW2lbb11dWzBdKmw7cys9YVtpW29dXVsxXSpsfXBbYl09YS5sZW5ndGg7YS5wdXNoKFtyLHNdKTttW2JdPW4ubGVuZ3RoO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkoMyk7Y1swXT0oeVswXSoodS10KSt3WzBdKnQpL3V8MDtjWzFdPSh5WzFdKih1LXQpK3dbMV0qdCkvdXwwO2NbMl09KHlbMl0qKHUtdCkrd1syXSp0KS91fDA7bi5wdXNoKGMpfX1wWzBdPWlbMF07bVswXT1zWzBdO3BbdV09aVszXTttW3VdPXNbMV07cFtnKmRdPWlbMTJdO21bZypkXT1zWzJdO3BbZypkK3VdPWlbMTVdO21bZypkK3VdPXNbM107dGhpcy5maWd1cmVzW2VdPXt0eXBlOiJsYXR0aWNlIixjb29yZHM6cCxjb2xvcnM6bSx2ZXJ0aWNlc1BlclJvdzpnfX1fdXBkYXRlQm91bmRzKCl7bGV0IGU9dGhpcy5jb29yZHNbMF1bMF0sdD10aGlzLmNvb3Jkc1swXVsxXSxhPWUscj10O2ZvcihsZXQgbj0xLGk9dGhpcy5jb29yZHMubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9dGhpcy5jb29yZHNbbl1bMF0scz10aGlzLmNvb3Jkc1tuXVsxXTtlPWU+aT9pOmU7dD10PnM/czp0O2E9YTxpP2k6YTtyPXI8cz9zOnJ9dGhpcy5ib3VuZHM9W2UsdCxhLHJdfV9wYWNrRGF0YSgpe2xldCBlLHQsYSxyO2NvbnN0IG49dGhpcy5jb29yZHMsaT1uZXcgRmxvYXQzMkFycmF5KDIqbi5sZW5ndGgpO2ZvcihlPTAsYT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1uW2VdO2lbYSsrXT10WzBdO2lbYSsrXT10WzFdfXRoaXMuY29vcmRzPWk7Y29uc3Qgcz10aGlzLmNvbG9ycyxvPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAsYT0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1zW2VdO29bYSsrXT10WzBdO29bYSsrXT10WzFdO29bYSsrXT10WzJdfXRoaXMuY29sb3JzPW87Y29uc3QgYz10aGlzLmZpZ3VyZXM7Zm9yKGU9MCx0PWMubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9Y1tlXSxuPXQuY29vcmRzLGk9dC5jb2xvcnM7Zm9yKGE9MCxyPW4ubGVuZ3RoO2E8cjthKyspe25bYV0qPTI7aVthXSo9M319fWdldElSKCl7cmV0dXJuWyJNZXNoIix0aGlzLnNoYWRpbmdUeXBlLHRoaXMuY29vcmRzLHRoaXMuY29sb3JzLHRoaXMuZmlndXJlcyx0aGlzLmJvdW5kcyx0aGlzLmJib3gsdGhpcy5iYWNrZ3JvdW5kXX19Y2xhc3MgRHVtbXlTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmd7Z2V0SVIoKXtyZXR1cm5bIkR1bW15Il19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmdldFhmYUZvbnREaWN0PWZ1bmN0aW9uIGdldFhmYUZvbnREaWN0KGUpe2NvbnN0IHQ9ZnVuY3Rpb24gZ2V0WGZhRm9udFdpZHRocyhlKXtjb25zdCB0PWdldFhmYUZvbnROYW1lKGUpO2lmKCF0KXJldHVybiBudWxsO2NvbnN0e2Jhc2VXaWR0aHM6YSxiYXNlTWFwcGluZzpyLGZhY3RvcnM6bn09dDtsZXQgaTtpPW4/YS5tYXAoKChlLHQpPT5lKm5bdF0pKTphO2xldCBzLG89LTI7Y29uc3QgYz1bXTtmb3IoY29uc3RbZSx0XW9mIHIubWFwKCgoZSx0KT0+W2UsdF0pKS5zb3J0KCgoW2VdLFt0XSk9PmUtdCkpKWlmKC0xIT09ZSlpZihlPT09bysxKXtzLnB1c2goaVt0XSk7bys9MX1lbHNle289ZTtzPVtpW3RdXTtjLnB1c2goZSxzKX1yZXR1cm4gY30oZSksYT1uZXcgbi5EaWN0KG51bGwpO2Euc2V0KCJCYXNlRm9udCIsbi5OYW1lLmdldChlKSk7YS5zZXQoIlR5cGUiLG4uTmFtZS5nZXQoIkZvbnQiKSk7YS5zZXQoIlN1YnR5cGUiLG4uTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKTthLnNldCgiRW5jb2RpbmciLG4uTmFtZS5nZXQoIklkZW50aXR5LUgiKSk7YS5zZXQoIkNJRFRvR0lETWFwIixuLk5hbWUuZ2V0KCJJZGVudGl0eSIpKTthLnNldCgiVyIsdCk7YS5zZXQoIkZpcnN0Q2hhciIsdFswXSk7YS5zZXQoIkxhc3RDaGFyIix0LmF0KC0yKSt0LmF0KC0xKS5sZW5ndGgtMSk7Y29uc3Qgcj1uZXcgbi5EaWN0KG51bGwpO2Euc2V0KCJGb250RGVzY3JpcHRvciIscik7Y29uc3QgaT1uZXcgbi5EaWN0KG51bGwpO2kuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5Iik7aS5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKTtpLnNldCgiU3VwcGxlbWVudCIsMCk7YS5zZXQoIkNJRFN5c3RlbUluZm8iLGkpO3JldHVybiBhfTt0LmdldFhmYUZvbnROYW1lPWdldFhmYUZvbnROYW1lO3ZhciByPWEoNTApLG49YSgzKSxpPWEoNTEpLHM9YSg1Miksbz1hKDUzKSxjPWEoNTQpLGw9YSg0KSxoPWEoMzYpO2NvbnN0IHU9KDAsbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJNeXJpYWRQcm8tUmVndWxhciJdPWVbIlBkZkpTLUZhbGxiYWNrLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpvLk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9SZWd1bGFyTWV0cmljc307ZVsiTXlyaWFkUHJvLUJvbGQiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6by5NeXJpYWRQcm9Cb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm8uTXlyaWFkUHJvQm9sZE1ldHJpY3N9O2VbIk15cmlhZFByby1JdCJdPWVbIk15cmlhZFByby1JdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOm8uTXlyaWFkUHJvSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpvLk15cmlhZFByb0l0YWxpY01ldHJpY3N9O2VbIk15cmlhZFByby1Cb2xkSXQiXT1lWyJNeXJpYWRQcm8tQm9sZEl0YWxpYyJdPWVbIlBkZkpTLUZhbGxiYWNrLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpvLk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljc307ZS5BcmlhbE1UPWUuQXJpYWw9ZVsiQXJpYWwtUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZ307ZVsiQXJpYWwtQm9sZE1UIl09ZVsiQXJpYWwtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZ307ZVsiQXJpYWwtSXRhbGljTVQiXT1lWyJBcmlhbC1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmd9O2VbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPWVbIkFyaWFsLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmd9O2VbIkNhbGlicmktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOnIuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpUmVndWxhck1ldHJpY3N9O2VbIkNhbGlicmktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnIuQ2FsaWJyaUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpQm9sZE1ldHJpY3N9O2VbIkNhbGlicmktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpyLkNhbGlicmlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOnIuQ2FsaWJyaUl0YWxpY01ldHJpY3N9O2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOnIuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3N9O2VbIlNlZ29ldWktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmMuU2Vnb2V1aVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpUmVndWxhck1ldHJpY3N9O2VbIlNlZ29ldWktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZE1ldHJpY3N9O2VbIlNlZ29ldWktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUl0YWxpY01ldHJpY3N9O2VbIlNlZ29ldWktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3N9O2VbIkhlbHZldGljYS1SZWd1bGFyIl09ZS5IZWx2ZXRpY2E9e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6aS5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhUmVndWxhck1ldHJpY3N9O2VbIkhlbHZldGljYS1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6aS5IZWx2ZXRpY2FCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhQm9sZE1ldHJpY3N9O2VbIkhlbHZldGljYS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOmkuSGVsdmV0aWNhSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUl0YWxpY01ldHJpY3N9O2VbIkhlbHZldGljYS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6aS5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3N9fSkpO2Z1bmN0aW9uIGdldFhmYUZvbnROYW1lKGUpe2NvbnN0IHQ9KDAsaC5ub3JtYWxpemVGb250TmFtZSkoZSk7cmV0dXJuIHUoKVt0XX19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzPXQuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzPXQuQ2FsaWJyaUl0YWxpY01ldHJpY3M9dC5DYWxpYnJpSXRhbGljRmFjdG9ycz10LkNhbGlicmlCb2xkTWV0cmljcz10LkNhbGlicmlCb2xkSXRhbGljTWV0cmljcz10LkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycz10LkNhbGlicmlCb2xkRmFjdG9ycz12b2lkIDA7dC5DYWxpYnJpQm9sZEZhY3RvcnM9WzEuMzg3NywxLDEsMSwuOTc4MDEsLjkyNDgyLC44OTU1MiwuOTExMzMsLjgxOTg4LC45NzU2NiwuOTgxNTIsLjkzNTQ4LC45MzU0OCwxLjI3OTgsLjg1Mjg0LC45Mjc5NCwxLC45NjEzNCwxLjU0NjU3LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuODI4NDUsLjgyODQ1LC44NTI4NCwuODUyODQsLjg1Mjg0LC43NTg1OSwuOTIxMzgsLjgzOTA4LC43NzYyLC43MzI5MywuODcyODksLjczMTMzLC43NTE0LC44MTkyMSwuODczNTYsLjk1OTU4LC41OTUyNiwuNzU3MjcsLjY5MjI1LDEuMDQ5MjQsLjkxMjEsLjg2OTQzLC43OTc5NSwuODgxOTgsLjc3OTU4LC43MDg2NCwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwMTcsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTQ2NTcsLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC44ODc2MiwuODc4NSwuNzUyNDEsLjg3ODUsLjkwNTE4LC45NTAxNSwuNzc2MTgsLjg3ODUsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MTQ4OCwuODc4NSwuODgwMSwuODc4NSwuODc4NSwuOTEzNDMsLjcxNzMsMS4wNDEwNiwuODc4NSwuODUwNzUsLjk1Nzk0LC44MjYxNiwuODUxNjIsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjEyNDAxLC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjczMjkzLC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MTIxLC44Njk0MywuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg1Mjg0LC44NzUwOCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg3MTUsLjc1MjQxLC45MDUxOCwuOTA1MTgsLjkwNTE4LC45MDUxOCwuODg0MDEsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg3ODUsLjg3ODUsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjkwNzQ3LC44OTA0OSwuODc4NSwuODc4NSwuODc4NSwuODc4NSwuODUxNjIsLjg3ODUsLjg1MTYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuODM5MDgsLjg4NzYyLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjg3Mjg5LC44MzAxNiwuODg1MDYsLjkzMTI1LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsLjgxOTIxLC43NzYxOCwxLDEsLjg3MzU2LC44Nzg1LC45MTA3NSwuODk2MDgsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjIyOSwuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzk0NjgsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MTIxLC44Nzg1LDEsMSwuOTEyMSwuODc4NSwuODc4MDIsLjg4NjU2LC44Nzg1LC44Njk0MywuODgwMSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44NzQwMiwuODkyOTEsLjc3OTU4LC45MTM0MywxLDEsLjc3OTU4LC45MTM0MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC44ODc2MiwuNzc1MzksLjg3MTUsLjg3NTA4LC44OTA0OSwxLDEsLjgxMDU1LDEuMDQxMDYsMS4yMDUyOCwxLjIwNTI4LDEsMS4xNTU0MywuNzA2NzQsLjk4Mzg3LC45NDcyMSwxLjMzNDMxLDEuNDU4OTQsLjk1MTYxLDEuMDYzMDMsLjgzOTA4LC44MDM1MiwuNTcxODQsLjY5NjUsLjU2Mjg5LC44MjAwMSwuNTYwMjksLjgxMjM1LDEuMDI5ODgsLjgzOTA4LC43NzYyLC42ODE1NiwuODAzNjcsLjczMTMzLC43ODI1NywuODczNTYsLjg2OTQzLC45NTk1OCwuNzU3MjcsLjg5MDE5LDEuMDQ5MjQsLjkxMjEsLjc2NDgsLjg2OTQzLC44NzM1NiwuNzk3OTUsLjc4Mjc1LC44MTA1NSwuNzc4OTIsLjk3NjIsLjgyNTc3LC45OTgxOSwuODQ4OTYsLjk1OTU4LC43Nzg5MiwuOTYxMDgsMS4wMTQwNywuODkwNDksMS4wMjk4OCwuOTQyMTEsLjk2MTA4LC44OTM2LC44NDAyMSwuODc4NDIsLjk2Mzk5LC43OTEwOSwuODkwNDksMS4wMDgxMywxLjAyOTg4LC44NjA3NywuODc0NDUsLjkyMDk5LC44NDcyMywuODY1MTMsLjg4MDEsLjc1NjM4LC44NTcxNCwuNzgyMTYsLjc5NTg2LC44Nzk2NSwuOTQyMTEsLjk3NzQ3LC43ODI4NywuOTc5MjYsLjg0OTcxLDEuMDI5ODgsLjk0MjExLC44ODAxLC45NDIxMSwuODQ5NzEsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDI2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA1MTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTQ4LDEsMSwxLDEsMSwxLC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuOTYwMTcsLjk1Nzk0LC43Nzg5MiwuODUxNjIsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjkyNzk0LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzExNDMsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45MzgzNSwuODM0MDYsLjkxMTMzLC44NDEwNywuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTAwNiwxLjUzNzExLC45NDQzNCwxLjA4Njk2LDEsLjk1MDE4LC43NzE5MiwuODUyODQsLjkwNzQ3LDEuMTc1MzQsLjY5ODI1LC45NzE2LDEuMzcwNzcsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjA4MDA0LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNzI3LC45MDcyNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5DYWxpYnJpQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9O3QuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NjIzOSwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzE4MDUsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MDg3MiwuODU5MzgsLjc5Nzk1LC44NzA2OCwuNzc5NTgsLjY5NzY2LC44MTA1NSwuOTAzOTksLjg4NjUzLC45NjA2OCwuODI1NzcsLjc3ODkyLC43ODI1NywuOTc1MDcsMS41MjksLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC45NDkwOCwuODY0MTEsLjc0MDEyLC44NjQxMSwuODgzMjMsLjk1MDE1LC44NjQxMSwuODYzMzEsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MDM5LC44NjMzMSwuODYzMzEsLjg2NDExLC44NjQxMSwuOTA0NjQsLjcwODUyLDEuMDQxMDYsLjg2MzMxLC44NDM3MiwuOTU3OTQsLjgyNjE2LC44NDU0OCwuNzk0OTIsLjg4MzMxLDEuNjk4MDgsLjg4MzMxLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuNzgwMSwuODk1NTIsMS4yNDQ4NywxLjEzMjU0LDEuMTkxMjksLjk2ODM5LC44NTI4NCwuNjg3ODcsLjcwNjQ1LC44NTU5MiwuOTA3NDcsMS4wMTQ2NiwxLjAwODgsLjkwMzIzLDEsMS4wNzQ2MywxLC45MTA1NiwuNzU4MDYsMS4xOTExOCwuOTY4MzksLjc4ODY0LC44Mjg0NSwuODQxMzMsLjc1ODU5LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC43NzUzOSwuNzE4MDUsLjczMTMzLC43MzEzMywuNzMxMzMsLjczMTMzLC45NTk1OCwuOTU5NTgsLjk1OTU4LC45NTk1OCwuODg1MDYsLjkwODcyLC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1Mjg0LC44NzA2OCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjg1ODg3LC43NDAxMiwuODgzMjMsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC45MDc0NywuODkwNDksLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NDU0OCwuODY0MTEsLjg0NTQ4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuODM5MDgsLjk0OTA4LC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjg3Mjg5LC43OTUzOCwuODg1MDYsLjkyNzI2LC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsLjgxOTIxLC44NjQxMSwxLDEsLjg3MzU2LC44NjMzMSwuOTEwNzUsLjg3NzcsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjQ2NywuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzczMTIsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MDg3MiwuODYzMzEsMSwxLC45MDg3MiwuODYzMzEsLjg2OTA2LC44ODExNiwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg3NDAyLC44NjU0OSwuNzc5NTgsLjkwNDY0LDEsMSwuNzc5NTgsLjkwNDY0LC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjk2MDY4LC45NTc5NCwuNzc4OTIsLjg0NTQ4LC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC45NDkwOCwuNzc1MzksLjg1ODg3LC44NzA2OCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwMDg4LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjQ4Mzg3LC44MzkwOCwuODAzNTIsLjU3MTE4LC42OTY1LC41NjM0NywuNzkxNzksLjU1ODUzLC44MDM0NiwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjcxNzQsLjg2MDM2LC43MzEzMywuNzgyNTcsLjg3MzU2LC44NjQ0MSwuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MDg3MiwuNzQ4ODksLjg1OTM4LC44Nzg5MSwuNzk3OTUsLjc5NTcsLjgxMDU1LC43Nzg5MiwuOTc0NDcsLjgyNTc3LC45NzQ2NiwuODcxNzksLjk1OTU4LC43Nzg5MiwuOTQyNTIsLjk1NjEyLC44NzUzLDEuMDI5ODgsLjkyNzMzLC45NDI1MiwuODc0MTEsLjg0MDIxLC44NzI4LC45NTYxMiwuNzQwODEsLjg3NTMsMS4wMjE4OSwxLjAyOTg4LC44NDgxNCwuODc0NDUsLjkxODIyLC44NDcyMywuODU2NjgsLjg2MzMxLC44MTM0NCwuODc1ODEsLjc2NDIyLC44MjA0NiwuOTYwNTcsLjkyNzMzLC45OTM3NSwuNzgwMjIsLjk1NDUyLC44NjAxNSwxLjAyOTg4LC45MjczMywuODYzMzEsLjkyNzMzLC44NjAxNSwuNzMxMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNjMxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODMyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODUxNzQsMSwxLDEsMSwxLDEsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwxLDEsLjg5NTUyLC45MDUyNywxLC45MDM2MywuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODk4MDcsLjg3MDEyLC44NzAxMiwuODcwMTIsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC43MTA5NCwxLjA2MTUyLDEsMSwxLjAzMzcyLDEuMDMzNzIsLjk3MTcxLDEuNDk1NiwyLjI4MDcsLjkyOTcyLC44MzQwNiwuOTExMzMsLjgzMzI2LC45MTEzMywxLDEsMSwuNzIwMjEsMSwxLjIzMTA4LC44MzQ4OSwuODg1MjUsLjg4NTI1LC44MTQ5OSwuOTA2MTYsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjMxMDcsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fTt0LkNhbGlicmlJdGFsaWNGYWN0b3JzPVsxLjM4NzcsMSwxLDEsMS4xNzIyMywxLjEyOTMsLjg5NTUyLC45MTEzMywuODAzOTUsMS4wMjI2OSwxLjE1NjAxLC45MTA1NiwuOTEwNTYsMS4yNzk4LC44NTI4NCwuODk4MDcsMSwuOTA4NjEsMS4zOTU0MywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjk2MzA5LC45NjMwOSwuODUyODQsLjg1Mjg0LC44NTI4NCwuODMzMTksLjg4MDcxLC44Njc1LC44MTU1MiwuNzIzNDYsLjg1MTkzLC43MzIwNiwuNzUyMiwuODExMDUsLjg2Mjc1LC45MDY4NSwuNjM3NywuNzc4OTIsLjc1NTkzLDEuMDI2MzgsLjg5MjQ5LC44NDExOCwuNzc0NTIsLjg1Mzc0LC43NTE4NiwuNjc3ODksLjc5Nzc2LC44ODg0NCwuODUwNjYsLjk0MzA5LC43NzgxOCwuNzMwNiwuNzY2NTksMS4xMDM2OSwxLjM4MzEzLDEuMTAzNjksMS4wNjEzOSwuODk1NTIsLjg3MzksLjkyNDUsLjkyNDUsLjgzMjAzLC45MjQ1LC44NTg2NSwxLjA5ODQyLC45MjQ1LC45MjQ1LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTQ5NTksLjkyNDUsLjkyMjc0LC45MjQ1LC45MjQ1LDEuMDI5MzMsLjc3ODMyLDEuMjA1NjIsLjkyNDUsLjg5MTYsLjk4OTg2LC44NjYyMSwuODk0NTMsLjc5MDA0LC45NDE1MiwxLjc3MjU2LC45NDE1MiwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjkxNzI5LC44OTU1MiwxLjE3ODg5LDEuMTMyNTQsMS4xNjM1OSwuOTIwOTgsLjg1Mjg0LC42ODc4NywuNzEzNTMsLjg0NzM3LC45MDc0NywxLjAwODgsMS4wMDQ0LC44NzY4MywxLDEuMDkwOTEsMSwuOTIyMjksLjczOSwxLjE1NjQyLC45MjA5OCwuNzYyODgsLjgwNTA0LC44MDk3MiwuNzU4NTksLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjc2MzE4LC43MjM0NiwuNzMyMDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjkwNjg1LC44NjQ3NywuODkyNDksLjg0MTE4LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODUyODQsLjg0NTU3LC44ODg0NCwuODg4NDQsLjg4ODQ0LC44ODg0NCwuNzMwNiwuNzc0NTIsLjg2MzMxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44NDg0MywuODMyMDMsLjg1ODY1LC44NTg2NSwuODU4NjUsLjg1ODY1LC44MjYwMSwuODI2MDEsLjgyNjAxLC44MjYwMSwuOTQ0NjksLjkyNDUsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTA3NDcsLjg2NjUxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44OTQ1MywuOTI0NSwuODk0NTMsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuODUxOTMsLjg4NzUsLjg2NDc3LC45OTAzNCwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjgxMTA1LC45MjQ1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsMSwxLC44NjI3NSwuOTI0NSwuOTA4NzIsLjkzNTkxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3ODk2LDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkzNzUsLjk4MTU2LC45MzQwNywuNzcyNjEsMS4xMTQyOSwuODkyNDksLjkyNDUsMSwxLC44OTI0OSwuOTI0NSwuOTI1MzQsLjg2Njk4LC45MjQ1LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODQxMTgsLjkyMjc0LC44NjY3LC44NjI5MSwuNzUxODYsMS4wMjkzMywxLDEsLjc1MTg2LDEuMDI5MzMsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwxLDEsLjc5Nzc2LC45NzY1NSwuNzk3NzYsMS4yMzAyMywuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywuNzMwNiwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwxLjA5MjMxLC41NDg3MywuODY3NSwuOTI0NSwuNzYzMTgsLjg0ODQzLC44NDU1NywuODY2NTEsMSwxLC43OTc3NiwxLjIwNTYyLDEuMTg2MjIsMS4xODYyMiwxLDEuMTQzNywuNjcwMDksLjk2MzM0LC45MzY5NSwxLjM1MTkxLDEuNDA5MDksLjk1MTYxLDEuNDgzODcsLjg2NzUsLjkwODYxLC42MTkyLC43MzYzLC42NDgyNCwuODI0MTEsLjU2MzIxLC44NTY5NiwxLjIzNTE2LC44Njc1LC44MTU1MiwuNzI4NiwuODQxMzQsLjczMjA2LC43NjY1OSwuODYyNzUsLjg0MzY5LC45MDY4NSwuNzc4OTIsLjg1ODcxLDEuMDI2MzgsLjg5MjQ5LC43NTgyOCwuODQxMTgsLjg1OTg0LC43NzQ1MiwuNzY0NjYsLjc5Nzc2LC43MzA2LC45MDc4MiwuNzc4MTgsLjkwMywuODcyOTEsLjkwNjg1LC43MzA2LC45OTA1OCwxLjAzNjY3LC45NDYzNSwxLjIzNTE2LC45ODQ5LC45OTA1OCwuOTIzOTMsLjg5MTYsLjk0MiwxLjAzNjY3LC43NTAyNiwuOTQ2MzUsMS4wMjk3LDEuMjM1MTYsLjkwOTE4LC45NDA0OCwuOTgyMTcsLjg5NzQ2LC44NDE1MywuOTIyNzQsLjgyNTA3LC44ODgzMiwuODQ0MzgsLjg4MTc4LDEuMDM1MjUsLjk4NDksMS4wMDIyNSwuNzgwODYsLjk3MjQ4LC44OTQwNCwxLjIzNTE2LC45ODQ5LC45MjI3NCwuOTg0OSwuODk0MDQsLjczMjA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTY5MywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODU4NjUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwOTMzLDEsMSwxLDEsMSwxLC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywxLDEsLjg5NTUyLC45MDUyNywxLC45MDE4NiwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMjU2NiwxLjI1NjYsMS4yNTY2LC44OTU1MiwuODk1NTIsMS40MjI1OSwuNjg5OTQsMS4wMzgwOSwxLDEsMS4wMTc2LDEuMDE3NiwxLjExNTIzLDEuNDk1NiwyLjAxNDYyLC45Nzg1OCwuODI2MTYsLjkxMTMzLC44MzQzNywuOTExMzMsMSwxLDEsLjcwNTA4LDEsMS4yMzEwOCwuNzk4MDEsLjg0NDI2LC44NDQyNiwuNzc0LC45MDU3MiwxLjgxMDU1LC45MDc0OSwxLjgxMDU1LDEuMjg4MDksMS41NTQ2OSwuOTQ0MzQsMS4wNzgwNiwxLC45NzA5NCwuNzU4OSwuODUyODQsLjkwNzQ3LDEuMTk2NTgsLjY5ODI1LC45NzYyMiwxLjMzNTEyLC45MDc0NywuOTA3NDcsLjg1Mjg0LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wMzM2LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTg1OSwxLjA1ODU5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkNhbGlicmlJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fTt0LkNhbGlicmlSZWd1bGFyRmFjdG9ycz1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzkwMTYsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjczODM0LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTM4NSwuODUxMjIsLjc3NDUyLC44NjUwMywuNzUxODYsLjY4ODg3LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDI1OCwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zOTAxNiwxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC44NjEyOCwuOTQ0NjksLjg0NTcsLjk0NDY5LC44OTQ2NCwxLjA5ODQyLC44NDYzNiwuOTQ0NjksMS4wMzI5NywxLjA3NjkyLC45MDkxOCwxLjAzMjk3LC45NTg5NywuOTQ0NjksLjk0ODIsLjk0NDY5LC45NDQ2OSwxLjA0NjkyLC43ODIyMywxLjIwNTYyLC45NDQ2OSwuOTAzMzIsLjk4OTg2LC44NjYyMSwuOTA1MjcsLjc5MDA0LC45NDE1MiwxLjc3MjU2LC45NDE1MiwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjkxNzI5LC44OTU1MiwxLjE3ODg5LDEuMTMyNTQsMS4wODcwNywuOTIwOTgsLjg1Mjg0LC42ODc4NywuNzEzNTMsLjg0NzM3LC45MDc0NywxLjAwODgsMS4wMDQ0LC44NzY4MywxLDEuMDkwOTEsMSwuOTIyMjksLjczOSwxLjE1NjQyLC45MjA5OCwuNzYyODgsLjgwNTA0LC44MDk3MiwuNzU4NTksLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjc2MzE4LC43MzgzNCwuNzMyMDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjkwNjg1LC44NjQ3NywuODkzODUsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUyODQsLjg1MzExLC44ODg0NCwuODg4NDQsLjg4ODQ0LC44ODg0NCwuNzMwNiwuNzc0NTIsLjg2MzMxLC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjkzLC44NDU3LC44OTQ2NCwuODk0NjQsLjg5NDY0LC44OTQ2NCwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45NDQ2OSwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTA3NDcsLjg2NjUxLC45NDQ2OSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTA1MjcsLjk0NDY5LC45MDUyNywuODY3NSwuODYxMjgsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjg1MTkzLC45MjQ1NCwuODY0NzcsLjk5MjEsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwuODExMDUsLjg0NjM2LDEsMSwuODYyNzUsLjk0NDY5LC45MDg3MiwuOTU3ODYsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LDEuMDMyOTcsLjkwNjg1LC44MjYwMSwuNzc3NDEsMS4wNTYxMSwuNjM3NywxLjA3NjkyLDEsMSwuOTA5MTgsLjc1NTkzLDEuMDMyOTcsMSwxLC43NjAzMiwuOTA0NTIsLjk4MTU2LDEuMTE4NDIsLjc3MjYxLDEuMTE0MjksLjg5Mzg1LC45NDQ2OSwxLDEsLjg5Mzg1LC45NDQ2OSwuOTU4NzcsLjg2OTAxLC45NDQ2OSwuODUxMjIsLjk0ODIsLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODY2NywuOTAwMTYsLjc1MTg2LDEuMDQ2OTIsMSwxLC43NTE4NiwxLjA0NjkyLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsMSwxLC43OTc3NiwuOTIxODgsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjg2MTI4LC43NjMxOCwuODY5MywuODUzMTEsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3NzQyLC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44NjY4NiwuOTA4NjEsLjYyMjY3LC43NDM1OSwuNjU2NDksLjg1NDk4LC41Njk2MywuODgyNTQsMS4yMzUxNiwuODY3NSwuODE1NTIsLjc1NDQzLC44NDUwMywuNzMyMDYsLjc2NjU5LC44NjI3NSwuODUxMjIsLjkwNjg1LC43Nzg5MiwuODU3NDYsMS4wMjYzOCwuODkzODUsLjc1NjU3LC44NTEyMiwuODYyNzUsLjc3NDUyLC43NDE3MSwuNzk3NzYsLjczMDYsLjk1MTY1LC43NzgxOCwuODk3NzIsLjg4ODMxLC45MDY4NSwuNzMwNiwuOTgxNDIsMS4wMjE5MSwuOTY1NzYsMS4yMzUxNiwuOTkwMTgsLjk4MTQyLC45MjM2LC44OTI1OCwuOTQwMzUsMS4wMjE5MSwuNzg4NDgsLjk2NTc2LC45NTYxLDEuMjM1MTYsLjkwOTE4LC45MjU3OCwuOTU0MjQsLjg5NzQ2LC44Mzk2OSwuOTQ4MiwuODAxMTMsLjg5NDQyLC44NTIwOCwuODYxNTUsLjk4MDIyLC45OTAxOCwxLjAwNDUyLC44MTIwOSwuOTkyNDcsLjg5MTgxLDEuMjM1MTYsLjk5MDE4LC45NDgyLC45OTAxOCwuODkxODEsLjczMjA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODg0NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk0NjQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk2NzY2LDEsMSwxLDEsMSwxLC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuOTQyNTgsLjk4OTg2LC43MzA2LC45MDUyNywxLDEsLjg5NTUyLC45MDUyNywxLC45MDE4NiwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMjU2NiwxLjI1NjYsMS4yNTY2LC44OTU1MiwuODk1NTIsMS40MjI1OSwuNjkwNDMsMS4wMzgwOSwxLDEsMS4wMTc2LDEuMDE3NiwxLjExNTIzLDEuNDk1NiwyLjAxNDYyLC45OTMzMSwuODI2MTYsLjkxMTMzLC44NDI4NiwuOTExMzMsMSwxLDEsLjcwNTA4LDEsMS4yMzEwOCwuNzk4MDEsLjg0NDI2LC44NDQyNiwuNzc0LC45MDUyNywxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMjg4MDksMS41NTQ2OSwuOTQ0MzQsMS4wNzgwNiwxLC45NzA5NCwuNzU4OSwuODUyODQsLjkwNzQ3LDEuMTk2NTgsLjY5ODI1LC45NzYyMiwxLjMzNTEyLC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wMzM2LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTg1OSwxLjA1ODU5LDEsMSwxLDEuMDcxODUsLjk5NDEzLC45NjMzNCwxLjA4MDY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5DYWxpYnJpUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzPXQuSGVsdmV0aWNhUmVndWxhckZhY3RvcnM9dC5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzPXQuSGVsdmV0aWNhSXRhbGljRmFjdG9ycz10LkhlbHZldGljYUJvbGRNZXRyaWNzPXQuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3M9dC5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycz10LkhlbHZldGljYUJvbGRGYWN0b3JzPXZvaWQgMDt0LkhlbHZldGljYUJvbGRGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwuOTk5OTgsLjk5OTc0LC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3NywxLjAwMDg3LC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywxLjAwMDI2LC45OTk5LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LC45OTk3MywuOTk5NzcsMS4wMDAyNiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5OTgsMS4wMDA2LC45OTk5OCwxLjAwMDAzLC45OTk3MywuOTk5OTgsLjk5OTczLDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk5OCwxLjAwMDI2LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsMS4wMDA2LC45OTk4MiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk1OSwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3MywxLC45OTk1OSwxLjAwMDc3LC45OTk1OSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA3NywuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTczLDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjA2NDA5LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsMS4wMzM3NCwuOTk5NzcsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNDIsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAzODI4LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMS4wMDAzNCwuOTk5NzcsMSwuOTk5OTcsMS4wMDAyNiwxLjAwMDc4LDEuMDAwMzYsLjk5OTczLDEuMDAwMTMsMS4wMDA2LC45OTk3NywuOTk5NzcsLjk5OTg4LC44NTE0OCwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsMS4wMDA2OSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk4NCwxLjAwMDI2LDEuMDAwMDEsMS4wMDAyNCwxLjAwMDAxLC45OTk5LDEsMS4wMDA2LDEuMDAwMDEsMS4wMDA0MSwuOTk5NjIsMS4wMDAyNiwxLjAwMDYsLjk5OTk1LDEuMDAwNDEsLjk5OTQyLC45OTk3MywuOTk5MjcsMS4wMDA4MiwuOTk5MDIsMS4wMDAyNiwxLjAwMDg3LDEuMDAwNiwxLjAwMDY5LC45OTk3MywuOTk4NjcsLjk5OTczLC45OTkzLDEuMDAwMjYsMS4wMDA0OSwxLjAwMDU2LDEsLjk5OTg4LC45OTkzNSwuOTk5OTUsLjk5OTU0LDEuMDAwNTUsLjk5OTQ1LDEuMDAwMzIsMS4wMDA2LC45OTk5NSwxLjAwMDI2LC45OTk5NSwxLjAwMDMyLDEuMDAwMDEsMS4wMDAwOCwuOTk5NzEsMS4wMDAxOSwuOTk5NCwxLjAwMDAxLDEuMDAwNiwxLjAwMDQ0LC45OTk3MywxLjAwMDIzLDEuMDAwNDcsMSwuOTk5NDIsLjk5NTYxLC45OTk4OSwxLjAwMDM1LC45OTk3NywxLjAwMDM1LC45OTk3NywxLjAwMDE5LC45OTk0NCwxLjAwMDAxLDEuMDAwMjEsLjk5OTI2LDEuMDAwMzUsMS4wMDAzNSwuOTk5NDIsMS4wMDA0OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk4OSwxLjAwMDU3LDEuMDAwMDEsLjk5OTM2LDEuMDAwNTIsMS4wMDAxMiwuOTk5OTYsMS4wMDA0MywxLDEuMDAwMzUsLjk5OTQsLjk5OTc2LDEuMDAwMzUsLjk5OTczLDEuMDAwNTIsMS4wMDA0MSwxLjAwMTE5LDEuMDAwMzcsLjk5OTczLDEuMDAwMDIsLjk5OTg2LDEuMDAwNDEsMS4wMDA0MSwuOTk5MDIsLjk5OTYsMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwuOTk5NzMsMS4wMDA1MiwuOTk5NzMsMSwuOTk5NzMsMS4wMDA0MSwxLjAwMDc1LC45OTk0LDEuMDAwMywuOTk5OTksMSwxLjAwMDQxLC45OTk1NSwxLC45OTkxNSwuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDExOSwuOTk5NTUsLjk5OTczLDEuMDAwNiwuOTk5MTEsMS4wMDA2LDEuMDAwMjYsLjk5OTcyLDEuMDAwMjYsLjk5OTAyLDEuMDAwNDEsLjk5OTczLC45OTk5OSwxLDEsMS4wMDAzOCwxLjAwMDUsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLC45OTk3MSwxLjAwMDQ3LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTk5NzIsMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywxLjAwMDMxLDEuMDAwMTUsMSwuOTk1NjEsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsLjk5OTE1LDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTcyLC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5IZWx2ZXRpY2FCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn07dC5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDA0NCwuOTk5NzcsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDEwMTEsMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwxLjAwMDYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTMsLjk5OTgsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLDEuMDAwMTYsLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsMS4wMDAyNiwuODEyMSwxLjAwMDI2LC45OTk5OCwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDYsLjk5OTczLC45OTk3NywuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTc3LDEsMSwxLjAwMDI2LC45OTk2OSwuOTk5NzIsLjk5OTgxLC45OTk4LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsLjkxMTU1LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsLjk5OTc3LDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5NjYsMS4wMDAyMiwxLjAwMDMyLDEuMDAwMDEsLjk5OTQ0LDEuMDAwMjYsMS4wMDAwMSwuOTk5NjgsMS4wMDAwMSwxLjAwMDQ3LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTgxLDEuMDAxMDEsMS4wMDAyNiwxLjAwMDYsLjk5OTQ4LC45OTk4MSwxLjAwMDY0LC45OTk3MywuOTk5NDIsMS4wMDEwMSwxLjAwMDYxLDEuMDAwMjYsMS4wMDA2OSwxLjAwMDYsMS4wMDAxNCwuOTk5NzMsMS4wMTMyMiwuOTk5NzMsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMTIsLjk5OTIzLDEsMS4wMDA2NCwxLjAwMDc2LC45OTk0OCwxLjAwMDU1LDEuMDAwNjMsMS4wMDAwNywuOTk5NDMsMS4wMDA2LC45OTk0OCwxLjAwMDI2LC45OTk0OCwuOTk5NDMsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjksMS4wMDAzOCwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTc4LDEuMDAwMDEsMS4wMDA1NywuOTk5ODksLjk5OTY3LC45OTk2NCwuOTk5NjcsLjk5OTc3LC45OTk5OSwuOTk5NzcsMS4wMDAzOCwuOTk5NzcsMS4wMDAwMSwuOTk5NzMsMS4wMDA2NiwuOTk5NjcsLjk5OTY3LDEuMDAwNDEsLjk5OTk4LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwuOTk5NjcsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NjQsMS4wMDAzMSwxLjAwMDAxLC45OTk5OSwuOTk5OTksMSwxLjAwMDIzLDEsMSwuOTk5OTksMS4wMDAzNSwxLjAwMDAxLC45OTk5OSwuOTk5NzMsLjk5OTc3LC45OTk5OSwxLjAwMDU4LC45OTk3MywuOTk5NzMsLjk5OTU1LC45OTk1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45OTk4OSwxLjAwMDM0LC45OTk5OSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsLjQ1OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDAxLC45OTk5OSwuOTk5ODIsLjk5OTk0LC45OTk5NiwxLDEuMDAwNDIsMS4wMDA0NCwxLjAwMDI5LDEuMDAwMjMsLjk5OTczLC45OTk3MywxLjAwMDI2LC45OTk0OSwxLjAwMDAyLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzUsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMzIsLjk4Njg1LC45OTk3MywxLjAwMDI2LDEsMSwuOTk5NjYsMS4wMDA0NCwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLDEsLjk5OTczLDEsMSwuOTk5NTUsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEsMSwxLC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMTA2LC45OTk5OSwuOTk5OTgsLjk5OTk4LC45OTk5OSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTcxLC45OTk3OCwxLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwOTgsMSwxLDEsMS4wMDA0OSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zNSxsaW5lR2FwOi4yfTt0LkhlbHZldGljYUl0YWxpY0ZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjAyODgsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LC45OTk0NiwxLjAwMDM0LDEsLjk5OTI0LDEuMDAwMDEsMSwxLC45OTk3MywuOTk5MjQsLjk5OTczLC45OTkyNCwuOTk5NzMsMS4wNjMxMSwuOTk5NzMsMS4wMDAyNCwuOTk5NzMsLjk5OTI0LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNDEsLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODk1NDcsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMS4wMDAwMSwxLDEuMDAwNTQsLjk5OTc3LDEuMDAwODQsMS4wMDAwNywuOTk5NzMsMS4wMDAxMywuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLC45OTk0NSwuOTEyMjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5MzMsMS4wMDAyMiwxLjAwMDU0LDEuMDAwMDEsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMDEsMS4wMDAxLDEuMDAwMDEsMS4wMDA1MiwxLDEuMDAwNiwxLjAwMDAxLC45OTk0NSwuOTk4OTcsLjk5OTY4LC45OTkyNCwxLjAwMDM2LC45OTk0NSwuOTk5NDksMSwxLjAwMDYsLjk5ODk3LC45OTkxOCwuOTk5NjgsLjk5OTExLC45OTkyNCwxLC45OTk2MiwxLjAxNDg3LDEsMS4wMDA1LC45OTk3MywxLjAwMDEyLDEuMDAwNDMsMSwuOTk5OTUsLjk5OTk0LDEuMDAwMzYsLjk5OTQ3LDEuMDAwMTksMS4wMDA2MywxLjAwMDI1LC45OTkyNCwxLjAwMDM2LC45OTk3MywxLjAwMDM2LDEuMDAwMjUsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjcsMS4wMDAxLDEuMDAwNjgsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsMS4wMDAwOCwuOTk5NTcsLjk5OTcyLC45OTk0LC45OTk1NCwuOTk5NzUsMS4wMDA1MSwxLjAwMDAxLDEuMDAwMTksMS4wMDAwMSwxLjAwMDEsLjk5OTg2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDM4LC45OTk1NCwuOTk5NTQsLjk5OTQsMS4wMDA2NiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk3NSwxLjAwMDEsMS4wMDAwMSwuOTk5OTMsLjk5OTUsLjk5OTU1LDEuMDAwMTYsLjk5OTc4LC45OTk3NCwxLjAwMDE5LDEuMDAwMjIsLjk5OTU1LDEuMDAwNTMsLjk5OTczLDEuMDAwODksMS4wMDAwNSwuOTk5NjcsMS4wMDA0OCwuOTk5NzMsMS4wMDAwMiwxLjAwMDM0LC45OTk3MywuOTk5NzMsLjk5OTY0LDEuMDAwMDYsMS4wMDA2NiwuOTk5NDcsLjk5OTczLC45ODg5NCwuOTk5NzMsMSwuNDQ4OTgsMSwuOTk5NDYsMSwxLjAwMDM5LDEuMDAwODIsLjk5OTkxLC45OTk5MSwuOTk5ODUsMS4wMDAyMiwxLjAwMDIzLDEuMDAwNjEsMS4wMDAwNiwuOTk5NjYsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDAxOSwxLjAwMDgsMSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5ODMsMS4wMDA0NCwuOTk5NzMsLjk5OTY0LC45ODMzMiwxLC45OTk3MywxLDEsLjk5OTYyLC45OTg5NSwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywxLjAwNDIzLC45OTkyNSwuOTk5OTksMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDA0OSwxLDEuMDAyNDUsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwxLjAwMDAzLDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk1MzE3LC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn07dC5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsMS4wMDA2LDEuMDAwMDYsLjk5OTczLC45OTk3MywuOTk5ODIsMS4wMDAwMSwxLjAwMDQzLC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywuOTk5NzMsLjk5OTg3LDEuMDAwMDEsMS4wMDAwMSwuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsMSwxLjAwMDAxLC45OTk3MywuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NDksLjk5OTczLC45OTk5OCwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5MjQsLjk5OTI0LDEsLjk5OTI0LC45OTk5OSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDA2LC45OTk3MywxLC45OTk3NywxLDEsMSwxLjAwMDA1LDEuMDAwOSwxLjAwMDA1LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDksLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk4LDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsMSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjA2NDA5LDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEsLjk5OTczLDEsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEuMDQ1OTYsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LDEuMDAwMTksMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDI1NzIsLjk5OTczLDEuMDAwMDUsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5OTksLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODQ1MzMsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTI4LDEsLjk5OTc3LDEuMDAwMTMsMS4wMDA1NSwuOTk5NDcsLjk5OTQ1LC45OTk0MSwuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNCwuOTE2MjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDUsLjk5OTk5LC45OTk3NywxLjAwMDE1LDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsLjk5OTQ2LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTc4LDEuMDAwNDUsLjk5OTczLC45OTkyNCwxLjAwMDIzLC45OTk3OCwuOTk5NjYsMSwxLjAwMDY1LDEuMDAwNDUsMS4wMDAxOSwuOTk5NzMsLjk5OTczLC45OTkyNCwxLDEsLjk2NDk5LDEsMS4wMDA1NSwuOTk5NzMsMS4wMDAwOCwxLjAwMDI3LDEsLjk5OTcsLjk5OTk1LDEuMDAwMjMsLjk5OTMzLDEuMDAwMTksMS4wMDAxNSwxLjAwMDMxLC45OTkyNCwxLjAwMDIzLC45OTk3MywxLjAwMDIzLDEuMDAwMzEsMS4wMDAwMSwuOTk5MjgsMS4wMDAyOSwxLjAwMDkyLDEuMDAwMzUsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsLjk5OTg4LC45OTk3NSwxLDEuMDAwODIsLjk5NTYxLC45OTk2LDEuMDAwMzUsMS4wMDAwMSwuOTk5NjIsMS4wMDAwMSwxLjAwMDkyLC45OTk2NCwxLjAwMDAxLC45OTk2MywuOTk5OTksMS4wMDAzNSwxLjAwMDM1LDEuMDAwODIsLjk5OTYyLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDM1LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTYsLjk5OTY3LDEuMDAwMDEsMS4wMDAzNCwxLjAwMDc0LDEuMDAwNTQsMS4wMDA1MywxLjAwMDYzLC45OTk3MSwuOTk5NjIsMS4wMDAzNSwuOTk5NzUsLjk5OTc3LC45OTk3MywxLjAwMDQzLC45OTk1MywxLjAwMDcsLjk5OTE1LC45OTk3MywxLjAwMDA4LC45OTg5MiwxLjAwMDczLDEuMDAwNzMsMS4wMDExNCwuOTk5MTUsMS4wMDA3MywuOTk5NTUsLjk5OTczLDEuMDAwOTIsLjk5OTczLDEsLjk5OTk4LDEsMS4wMDAzLDEsMS4wMDA0MywxLjAwMDAxLC45OTk2OSwxLjAwMDMsMSwxLjAwMDM1LDEuMDAwMDEsLjk5OTUsMSwxLjAwMDkyLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNywuOTk5NSwxLC45OTkyNCwxLjAwMDYsLjk5OTI0LC45OTk3MiwxLjAwMDYyLC45OTk3MywxLjAwMTE0LDEuMDAwNzMsMSwuOTk5NTUsMSwxLDEuMDAwNDcsLjk5OTY4LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLDEsLjk5OTczLDEsMSwuOTk5NTUsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMjY3LC45OTk5OSwuOTk5OTgsLjk5OTk4LDEsLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLC45OTk3MSwuOTk5MjUsMS4wMDAyMywxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLDEsMSwxLDEsMSwxLC45NjMyOSwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLC44MjU0LDEuMDAwMTUsMSwxLjAwMDM1LDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmc9dC5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzPXQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZz12b2lkIDA7dC5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHM9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3MTksNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4NSw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM4NSw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDQ2NSw3MjIsMzMzLDg1Myw5MDYsNDc0LDgyNSw5MjcsODM4LDI3OCw3MjIsNzIyLDYwMSw3MTksNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjQ0LDc3OCw3MjIsNjY3LDYwMCw2MTEsNjY3LDgyMSw2NjcsODA5LDgwMiwyNzgsNjY3LDYxNSw0NTEsNjExLDI3OCw1ODIsNjE1LDYxMCw1NTYsNjA2LDQ3NSw0NjAsNjExLDU0MSwyNzgsNTU4LDU1Niw2MTIsNTU2LDQ0NSw2MTEsNzY2LDYxOSw1MjAsNjg0LDQ0Niw1ODIsNzE1LDU3Niw3NTMsODQ1LDI3OCw1ODIsNjExLDU4Miw4NDUsNjY3LDY2OSw4ODUsNTY3LDcxMSw2NjcsMjc4LDI3Niw1NTYsMTA5NCwxMDYyLDg3NSw2MTAsNzIyLDYyMiw3MTksNzIyLDcxOSw3MjIsNTY3LDcxMiw2NjcsOTA0LDYyNiw3MTksNzE5LDYxMCw3MDIsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDYyMiw4NTQsNjY3LDczMCw3MDMsMTAwNSwxMDE5LDg3MCw5NzksNzE5LDcxMSwxMDMxLDcxOSw1NTYsNjE4LDYxNSw0MTcsNjM1LDU1Niw3MDksNDk3LDYxNSw2MTUsNTAwLDYzNSw3NDAsNjA0LDYxMSw2MDQsNjExLDU1Niw0OTAsNTU2LDg3NSw1NTYsNjE1LDU4MSw4MzMsODQ0LDcyOSw4NTQsNjE1LDU1Miw4NTQsNTgzLDU1Niw1NTYsNjExLDQxNyw1NTIsNTU2LDI3OCwyODEsMjc4LDk2OSw5MDYsNjExLDUwMCw2MTUsNTU2LDYwNCw3NzgsNjExLDQ4Nyw0NDcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTA5NCw1NTYsODg1LDQ4OSwxMTE1LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM107dC5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXTt0LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocz1bMzY1LDAsMzMzLDI3OCwzMzMsNDc0LDU1Niw1NTYsODg5LDcyMiwyMzgsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMzMzLDMzMyw1ODQsNTg0LDU4NCw2MTEsOTc1LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDU1Niw3MjIsNjExLDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMzMzLDI3OCwzMzMsNTg0LDU1NiwzMzMsNTU2LDYxMSw1NTYsNjExLDU1NiwzMzMsNjExLDYxMSwyNzgsMjc4LDU1NiwyNzgsODg5LDYxMSw2MTEsNjExLDYxMSwzODksNTU2LDMzMyw2MTEsNTU2LDc3OCw1NTYsNTU2LDUwMCwzODksMjgwLDM4OSw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyODAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1NTYsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNzIyLDcyMiw3MjIsNzIyLDcyMiw3MjIsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDU0OSw2MTEsNjExLDYxMSw2MTEsNjExLDU1Niw2MTEsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDc0MCw3MjIsNjExLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDcyMiw2MTEsNzIyLDYxMSwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsNzgyLDU1Niw1NTYsMjc4LDcyMiw1NTYsNTU2LDYxMSwyNzgsNjExLDI3OCw2MTEsMzk2LDYxMSw0NzksNjExLDI3OCw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MDgsNzIzLDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSwxZTMsOTQ0LDcyMiwzODksNzIyLDM4OSw3MjIsMzg5LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjExLDMzMyw2MTEsNDc5LDYxMSwzMzMsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsOTQ0LDc3OCw2NjcsNTU2LDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyNzgsNTU2LDcyMiw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1NTYsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDcyMiwzMzMsODU0LDkwNiw0NzMsODQ0LDkzMCw4NDcsMjc4LDcyMiw3MjIsNjEwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDcyMiw2NjcsODMzLDcyMiw2NTcsNzc4LDcxOCw2NjcsNTkwLDYxMSw2NjcsODIyLDY2Nyw4MjksNzgxLDI3OCw2NjcsNjIwLDQ3OSw2MTEsMjc4LDU5MSw2MjAsNjIxLDU1Niw2MTAsNDc5LDQ5Miw2MTEsNTU4LDI3OCw1NjYsNTU2LDYwMyw1NTYsNDUwLDYxMSw3MTIsNjA1LDUzMiw2NjQsNDA5LDU5MSw3MDQsNTc4LDc3Myw4MzQsMjc4LDU5MSw2MTEsNTkxLDgzNCw2NjcsNjY3LDg4Niw2MTQsNzE5LDY2NywyNzgsMjc4LDU1NiwxMDk0LDEwNDIsODU0LDYyMiw3MTksNjc3LDcxOSw3MjIsNzA4LDcyMiw2MTQsNzIyLDY2Nyw5MjcsNjQzLDcxOSw3MTksNjE1LDY4Nyw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjc3LDc4MSw2NjcsNzI5LDcwOCw5NzksOTg5LDg1NCwxZTMsNzA4LDcxOSwxMDQyLDcyOSw1NTYsNjE5LDYwNCw1MzQsNjE4LDU1Niw3MzYsNTEwLDYxMSw2MTEsNTA3LDYyMiw3NDAsNjA0LDYxMSw2MTEsNjExLDU1Niw4ODksNTU2LDg4NSw1NTYsNjQ2LDU4Myw4ODksOTM1LDcwNyw4NTQsNTk0LDU1Miw4NjUsNTg5LDU1Niw1NTYsNjExLDQ2OSw1NjMsNTU2LDI3OCwyNzgsMjc4LDk2OSw5MDYsNjExLDUwNyw2MTksNTU2LDYxMSw3NzgsNjExLDU3NSw0NjcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTEwNCw1NTYsODg1LDUxNiwxMTQ2LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCw5OTksNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM107dC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXTt0LkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYyNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzMzLDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjgxLDU1Niw0MDAsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MTUsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzU0LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg5LDg0NiwzODksNzk0LDg2NSw3NzUsMjIyLDY2Nyw2NjcsNTcwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjcsODMzLDcyMiw2NDgsNzc4LDcyNSw2NjcsNjAwLDYxMSw2NjcsODM3LDY2Nyw4MzEsNzYxLDI3OCw2NjcsNTcwLDQzOSw1NTUsMjIyLDU1MCw1NzAsNTcxLDUwMCw1NTYsNDM5LDQ2Myw1NTUsNTQyLDIyMiw1MDAsNDkyLDU0OCw1MDAsNDQ3LDU1Niw2NzAsNTczLDQ4Niw2MDMsMzc0LDU1MCw2NTIsNTQ2LDcyOCw3NzksMjIyLDU1MCw1NTYsNTUwLDc3OSw2NjcsNjY3LDg0Myw1NDQsNzA4LDY2NywyNzgsMjc4LDUwMCwxMDY2LDk4Miw4NDQsNTg5LDcxNSw2MzksNzI0LDY2Nyw2NTEsNjY3LDU0NCw3MDQsNjY3LDkxNyw2MTQsNzE1LDcxNSw1ODksNjg2LDgzMyw3MjIsNzc4LDcyNSw2NjcsNzIyLDYxMSw2MzksNzk1LDY2Nyw3MjcsNjczLDkyMCw5MjMsODA1LDg4Niw2NTEsNjk0LDEwMjIsNjgyLDU1Niw1NjIsNTIyLDQ5Myw1NTMsNTU2LDY4OCw0NjUsNTU2LDU1Niw0NzIsNTY0LDY4Niw1NTAsNTU2LDU1Niw1NTYsNTAwLDgzMyw1MDAsODM1LDUwMCw1NzIsNTE4LDgzMCw4NTEsNjIxLDczNiw1MjYsNDkyLDc1Miw1MzQsNTU2LDU1Niw1NTYsMzc4LDQ5Niw1MDAsMjIyLDIyMiwyMjIsOTEwLDgyOCw1NTYsNDcyLDU2NSw1MDAsNTU2LDc3OCw1NTYsNDkyLDMzOSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwODMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsOTk4LDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODQsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XTt0LkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV07dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHM9WzM2NSwwLDMzMywyNzgsMjc4LDM1NSw1NTYsNTU2LDg4OSw2NjcsMTkxLDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsNTg0LDU4NCw1ODQsNTU2LDEwMTUsNjY3LDY2Nyw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTAwLDY2Nyw1NTYsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwyNzgsMjc4LDI3OCw0NjksNTU2LDMzMyw1NTYsNTU2LDUwMCw1NTYsNTU2LDI3OCw1NTYsNTU2LDIyMiwyMjIsNTAwLDIyMiw4MzMsNTU2LDU1Niw1NTYsNTU2LDMzMyw1MDAsMjc4LDU1Niw1MDAsNzIyLDUwMCw1MDAsNTAwLDMzNCwyNjAsMzM0LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI2MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDUzNywyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1MDAsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTQ5LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTAwLDU1Niw1MDAsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNjE1LDcyMiw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzIyLDU1Niw3MjIsNTU2LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyMjIsMjc4LDI3OCw3MzUsNDQ0LDUwMCwyMjIsNjY3LDUwMCw1MDAsNTU2LDIyMiw1NTYsMjIyLDU1NiwyOTIsNTU2LDMzNCw1NTYsMjIyLDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDYwNCw3MjMsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDFlMyw5NDQsNzIyLDMzMyw3MjIsMzMzLDcyMiwzMzMsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2MTEsMjc4LDYxMSwzNzUsNjExLDI3OCw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw5NDQsNzIyLDY2Nyw1MDAsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDIyMiw1NTYsNjY3LDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDUwMCw2MTEsMjc4LDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNjY3LDI3OCw3ODQsODM4LDM4NCw3NzQsODU1LDc1MiwyMjIsNjY3LDY2Nyw1NTEsNjY4LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNjY3LDY2OCw4MzMsNzIyLDY1MCw3NzgsNzIyLDY2Nyw2MTgsNjExLDY2Nyw3OTgsNjY3LDgzNSw3NDgsMjc4LDY2Nyw1NzgsNDQ2LDU1NiwyMjIsNTQ3LDU3OCw1NzUsNTAwLDU1Nyw0NDYsNDQxLDU1Niw1NTYsMjIyLDUwMCw1MDAsNTc2LDUwMCw0NDgsNTU2LDY5MCw1NjksNDgyLDYxNywzOTUsNTQ3LDY0OCw1MjUsNzEzLDc4MSwyMjIsNTQ3LDU1Niw1NDcsNzgxLDY2Nyw2NjcsODY1LDU0Miw3MTksNjY3LDI3OCwyNzgsNTAwLDEwNTcsMTAxMCw4NTQsNTgzLDcyMiw2MzUsNzE5LDY2Nyw2NTYsNjY3LDU0Miw2NzcsNjY3LDkyMyw2MDQsNzE5LDcxOSw1ODMsNjU2LDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MzUsNzYwLDY2Nyw3NDAsNjY3LDkxNyw5MzgsNzkyLDg4NSw2NTYsNzE5LDEwMTAsNzIyLDU1Niw1NzMsNTMxLDM2NSw1ODMsNTU2LDY2OSw0NTgsNTU5LDU1OSw0MzgsNTgzLDY4OCw1NTIsNTU2LDU0Miw1NTYsNTAwLDQ1OCw1MDAsODIzLDUwMCw1NzMsNTIxLDgwMiw4MjMsNjI1LDcxOSw1MjEsNTEwLDc1MCw1NDIsNTU2LDU1Niw1NTYsMzY1LDUxMCw1MDAsMjIyLDI3OCwyMjIsOTA2LDgxMiw1NTYsNDM4LDU1OSw1MDAsNTUyLDc3OCw1NTYsNDg5LDQxMSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwNzMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XTt0LkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzPXQuTXlyaWFkUHJvUmVndWxhckZhY3RvcnM9dC5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzPXQuTXlyaWFkUHJvSXRhbGljRmFjdG9ycz10Lk15cmlhZFByb0JvbGRNZXRyaWNzPXQuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3M9dC5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycz10Lk15cmlhZFByb0JvbGRGYWN0b3JzPXZvaWQgMDt0Lk15cmlhZFByb0JvbGRGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNzI3MDYsLjgwNDc5LC44MzczNCwuOTg4OTQsLjk5NzkzLC45ODk3LC45Mzg4NCwuODYyMDksLjk0MjkyLC45NDI5MiwxLjE2NjYxLDEuMDIwNTgsLjkzNTgyLC45NjY5NCwuOTM1ODIsMS4xOTEzNywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjc4MDc2LC43ODA3NiwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNzI4NTEsLjc4OTY2LC45MDgzOCwuODM2MzcsLjgyMzkxLC45NjM3NiwuODAwNjEsLjg2Mjc1LC44NzY4LC45NTQwNywxLjAyNTgsLjczOTAxLC44NTAyMiwuODM2NTUsMS4wMTU2LC45NTU0NiwuOTIxNzksLjg3MTA3LC45MjE3OSwuODIxMTQsLjgwOTYsLjg5NzEzLC45NDQzOCwuOTUzNTMsLjk0MDgzLC45MTkwNSwuOTA0MDYsLjk0NDYsLjk0MjkyLDEuMTg3NzcsLjk0MjkyLDEuMDIwNTgsLjg5OTAzLC45MDA4OCwuOTQ5MzgsLjk3ODk4LC44MTA5MywuOTc1NzEsLjk0OTM4LDEuMDI0LC45NTc3LC45NTkzMywuOTg2MjEsMS4wNDc0LC45NzQ1NSwuOTg5ODEsLjk2NzIsLjk1OTMzLC45NDQ2LC45Nzg5OCwuOTc0MDcsLjk3NjQ2LC43ODAzNiwxLjEwMjA4LC45NTQ0MiwuOTUyOTgsLjk3NTc5LC45MzMyLC45NDAzOSwuOTM4LC44MDY4NywxLjAxMTQ5LC44MDY4NywxLjAyMDU4LC44MDQ3OSwuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsMS4wMTE0OSwxLjAwODcyLC45MDA4OCwuOTE4ODIsMS4wMjEzLC44MzYxLDEuMDIwNTgsLjYyMjk1LC41NDMyNCwuODkwMjIsMS4wODU5NSwxLDEsLjkwMDg4LDEsLjk3NDU1LC45MzU4MiwuOTAwODgsMSwxLjA1Njg2LC44MzYxLC45OTY0MiwuOTk2NDIsLjk5NjQyLC43Mjg1MSwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuODY4LC44MjM5MSwuODAwNjEsLjgwMDYxLC44MDA2MSwuODAwNjEsMS4wMjU4LDEuMDI1OCwxLjAyNTgsMS4wMjU4LC45NzQ4NCwuOTU1NDYsLjkyMTc5LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwxLjAyMDU4LC45MjE3OSwuOTQ0MzgsLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjkwNDA2LC44Njk1OCwuOTgyMjUsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjkwMzEsLjgxMDkzLC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjkzOTY5LC45NTkzMywuOTQ0NiwuOTQ0NiwuOTQ0NiwuOTQ0NiwuOTQ0NiwxLjA4NTk1LC45NDQ2LC45NTQ0MiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTQwMzksLjk3ODk4LC45NDAzOSwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjkwODM4LC45NDkzOCwuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC45NjM3NiwuODQzMTMsLjk3NDg0LC45NzU3MSwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjg3NjgsLjk1NzcsLjg3NjgsLjk1NzcsLjg3NjgsLjk1NzcsMSwxLC45NTQwNywuOTU5MzMsLjk3MDY5LC45NTkzMywxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsLjg4NywxLjAxNTkxLC43MzkwMSwxLjA0NzQsMSwxLC45NzQ1NSwuODM2NTUsLjk4OTgxLDEsMSwuODM2NTUsLjczOTc3LC44MzY1NSwuNzM5MDMsLjg0NjM4LDEuMDMzLC45NTU0NiwuOTU5MzMsMSwxLC45NTU0NiwuOTU5MzMsLjgyNzEsLjk1NDE3LC45NTkzMywuOTIxNzksLjk0NDYsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTM2LC45MTk2NCwuODIxMTQsLjk3NjQ2LDEsMSwuODIxMTQsLjk3NjQ2LC44MDk2LC43ODAzNiwuODA5NiwuNzgwMzYsMSwxLC44MDk2LC43ODAzNiwxLDEsLjg5NzEzLC43NzQ1MiwuODk3MTMsMS4xMDIwOCwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQwODMsLjk3NTc5LC45MDQwNiwuOTQwMzksLjkwNDA2LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwuOTQ0NiwuOTM4LDEsLjk5NzkzLC45MDgzOCwuOTQ5MzgsLjg2OCwuOTAzMSwuOTIxNzksLjk0NDYsMSwxLC44OTcxMywxLjEwMjA4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDk4OSwuOTM1OCwuOTE5NDUsLjgzMTgxLC43NTI2MSwuODc5OTIsLjgyOTc2LC45NjAzNCwuODM2ODksLjk3MjY4LDEuMDA3OCwuOTA4MzgsLjgzNjM3LC44MDE5LC45MDE1NywuODAwNjEsLjk0NDYsLjk1NDA3LC45MjQzNiwxLjAyNTgsLjg1MDIyLC45NzE1MywxLjAxNTYsLjk1NTQ2LC44OTE5MiwuOTIxNzksLjkyMzYxLC44NzEwNywuOTYzMTgsLjg5NzEzLC45MzcwNCwuOTU2MzgsLjkxOTA1LC45MTcwOSwuOTI3OTYsMS4wMjU4LC45MzcwNCwuOTQ4MzYsMS4wMzczLC45NTkzMywxLjAwNzgsLjk1ODcxLC45NDgzNiwuOTYxNzQsLjkyNjAxLC45NDk4LC45ODYwNywuOTU3NzYsLjk1OTMzLDEuMDU0NTMsMS4wMDc4LC45ODI3NSwuOTMxNCwuOTU2MTcsLjkxNzAxLDEuMDU5OTMsLjk0NDYsLjc4MzY3LC45NTUzLDEsLjg2ODMyLDEuMDEyOCwuOTU4NzEsLjk5Mzk0LC44NzU0OCwuOTYzNjEsLjg2Nzc0LDEuMDA3OCwuOTU4NzEsLjk0NDYsLjk1ODcxLC44Njc3NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTQwODMsLjk3NTc5LC45MDQwNiwuOTQwMzksLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MzU4MiwuOTM1ODIsLjkzNTgyLDEsLjkwOCwuOTA4LC45MTgsLjk0MjE5LC45NDIxOSwuOTY1NDQsMSwxLjI4NSwxLDEsLjgxMDc5LC44MTA3OSwxLDEsLjc0ODU0LDEsMSwxLDEsLjk5NzkzLDEsMSwxLC42NSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTcxNzMsMSwuODA1MzUsLjc2MTY5LDEuMDIwNTgsMS4wNzMyLDEuMDU0ODYsMSwxLDEuMzA2OTIsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNjE2MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0Lk15cmlhZFByb0JvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfTt0Lk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNjYyMjcsLjgwNzc5LC44MTYyNSwuOTcyNzYsLjk3Mjc2LC45NzczMywuOTIyMjIsLjgzMjY2LC45NDI5MiwuOTQyOTIsMS4xNjE0OCwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTczMzcsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcxNTQxLC43NjgxMywuODU1NzYsLjgwNTkxLC44MDcyOSwuOTQyOTksLjc3NTEyLC44MzY1NSwuODY1MjMsLjkyMjIyLC45ODYyMSwuNzE3NDMsLjgxNjk4LC43OTcyNiwuOTg1NTgsLjkyMjIyLC45MDYzNywuODM4MDksLjkwNjM3LC44MDcyOSwuNzY0NjMsLjg2Mjc1LC45MDY5OSwuOTE2MDUsLjkxNTQsLjg1MzA4LC44NTQ1OCwuOTA1MzEsLjk0MjkyLDEuMjEyOTYsLjk0MjkyLDEuMDIwNTgsLjg5OTAzLDEuMTg2MTYsLjk5NjEzLC45MTY3NywuNzgyMTYsLjkxNjc3LC45MDA4MywuOTg3OTYsLjkxMzUsLjkyMTY4LC45NTM4MSwuOTg5ODEsLjk1Mjk4LC45NTM4MSwuOTM0NTksLjkyMTY4LC45MTUxMywuOTIwMDQsLjkxNjc3LC45NTA3NywuNzQ4LDEuMDQ1MDIsLjkxNjc3LC45MjA2MSwuOTQyMzYsLjg5NTQ0LC44OTM2NCwuOSwuODA2ODcsLjg1NzgsLjgwNjg3LDEuMDIwNTgsLjgwNzc5LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuODU3OCwuOTk5NzMsMS4xODYxNiwuOTEzMzksMS4wODA3NCwuODI4OTEsMS4wMjA1OCwuNTU1MDksLjcxNTI2LC44OTAyMiwxLjA4NTk1LDEsMSwxLjE4NjE2LDEsLjk2NzM2LC45MzU4MiwxLjE4NjE2LDEsMS4wNDg2NCwuODI3MTEsLjk5MDQzLC45OTA0MywuOTkwNDMsLjcxNTQxLC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NDUsLjgwNzI5LC43NzUxMiwuNzc1MTIsLjc3NTEyLC43NzUxMiwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk1OTYxLC45MjIyMiwuOTA2MzcsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LDEuMDIwNTgsLjkwMjUxLC45MDY5OSwuOTA2OTksLjkwNjk5LC45MDY5OSwuODU0NTgsLjgzNjU5LC45NDk1MSwuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuODU4MTEsLjc4MjE2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuOTUzODEsLjk1MzgxLC45NTM4MSwuOTUzODEsLjkxMzUsLjkyMTY4LC45MTUxMywuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsMS4wODU5NSwuOTE2NzcsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC44OTM2NCwuOTIzMzIsLjg5MzY0LC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODU1NzYsLjk5NjEzLC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjk0Mjk5LC43Njc4MywuOTU5NjEsLjkxNjc3LC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuODY1MjMsLjkxMzUsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwxLDEsLjkyMjIyLC45MjE2OCwuOTIyMjIsLjkyMTY4LC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuODYwMzYsLjk3MDk2LC43MTc0MywuOTg5ODEsMSwxLC45NTI5OCwuNzk3MjYsLjk1MzgxLDEsMSwuNzk3MjYsLjY4OTQsLjc5NzI2LC43NDMyMSwuODE2OTEsMS4wMDA2LC45MjIyMiwuOTIxNjgsMSwxLC45MjIyMiwuOTIxNjgsLjc5NDY0LC45MjA5OCwuOTIxNjgsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDYzNywuOTE1MTMsLjkwOSwuODc1MTQsLjgwNzI5LC45NTA3NywxLDEsLjgwNzI5LC45NTA3NywuNzY0NjMsLjc0OCwuNzY0NjMsLjc0OCwxLDEsLjc2NDYzLC43NDgsMSwxLC44NjI3NSwuNzI2NTEsLjg2Mjc1LDEuMDQ1MDIsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjg1NDU4LC45MDUzMSwuOSwuOTA1MzEsLjksLjkwNTMxLC45LDEsLjk3Mjc2LC44NTU3NiwuOTk2MTMsLjg0NSwuODU4MTEsLjkwMjUxLC45MTY3NywxLDEsLjg2Mjc1LDEuMDQ1MDIsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4wMDg5OSwxLjMwNjI4LC44NTU3NiwuODAxNzgsLjY2ODYyLC43OTI3LC42OTMyMywuODgxMjcsLjcyNDU5LC44OTcxMSwuOTUzODEsLjg1NTc2LC44MDU5MSwuNzgwNSwuOTQ3MjksLjc3NTEyLC45MDUzMSwuOTIyMjIsLjkwNjM3LC45ODYyMSwuODE2OTgsLjkyNjU1LC45ODU1OCwuOTIyMjIsLjg1MzU5LC45MDYzNywuOTA5NzYsLjgzODA5LC45NDUyMywuODYyNzUsLjgzNTA5LC45MzE1NywuODUzMDgsLjgzMzkyLC45MjM0NiwuOTg2MjEsLjgzNTA5LC45Mjg4NiwuOTEzMjQsLjkyMTY4LC45NTM4MSwuOTA2NDYsLjkyODg2LC45MDU1NywuODY4NDcsLjkwMjc2LC45MTMyNCwuODY4NDIsLjkyMTY4LC45OTUzMSwuOTUzODEsLjkyMjQsLjg1NDA4LC45MjY5OSwuODY4NDcsMS4wMDUxLC45MTUxMywuODA0ODcsLjkzNDgxLDEsLjg4MTU5LDEuMDUyMTQsLjkwNjQ2LC45NzM1NSwuODE1MzksLjg5Mzk4LC44NTkyMywuOTUzODEsLjkwNjQ2LC45MTUxMywuOTA2NDYsLjg1OTIzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkxNTQsLjk0MjM2LC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjg1NDU4LC44OTM2NCwuOTY2OTQsMSwuODk5MDMsMSwxLDEsLjkxNzgyLC45MTc4MiwuOTE3ODIsMSwuODk2LC44OTYsLjg5NiwuOTMzMiwuOTMzMiwuOTU5NzMsMSwxLjI2LDEsMSwuODA0NzksLjgwMTc4LDEsMSwuODU2MzMsMSwxLDEsMSwuOTcyNzYsMSwxLDEsLjY5OCwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTQ1NDIsMSwuNzkxOTksLjc4Njk0LDEuMDIwNTgsMS4wMzQ5MywxLjA1NDg2LDEsMSwxLjIzMDI2LDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMjAwMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn07dC5NeXJpYWRQcm9JdGFsaWNGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNjU1MDcsLjg0OTQzLC44NTYzOSwuODg0NjUsLjg4NDY1LC44NjkzNiwuODgzMDcsLjg2OTQ4LC44NTI4MywuODUyODMsMS4wNjM4MywxLjAyMDU4LC43NTk0NSwuOTIxOSwuNzU5NDUsMS4xNzMzNywuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjc1OTQ1LC43NTk0NSwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNjkwNDYsLjcwOTI2LC44NTE1OCwuNzc4MTIsLjc2ODUyLC44OTU5MSwuNzA0NjYsLjc2MTI1LC44MDA5NCwuODY4MjIsLjgzODY0LC43MjgsLjc3MjEyLC43OTQ3NSwuOTM2MzcsLjg3NTE0LC44NTg4LC43NjAxMywuODU4OCwuNzI0MjEsLjY5ODY2LC43NzU5OCwuODU5OTEsLjgwODExLC44NzgzMiwuNzgxMTIsLjc3NTEyLC44NTYyLDEuMDIyMiwxLjE4NDE3LDEuMDIyMiwxLjI3MDE0LC44OTkwMywxLjE1MDEyLC45Mzg1OSwuOTQzOTksLjg0NiwuOTQzOTksLjgxNDUzLDEuMDE4NiwuOTQyMTksLjk2MDE3LDEuMDMwNzUsMS4wMjE3NSwuOTEyLDEuMDMwNzUsLjk2OTk4LC45NjAxNywuOTM4NTksLjk0Mzk5LC45NDM5OSwuOTU0OTMsLjc0NiwxLjEyNjU4LC45NDU3OCwuOTEsLjk3OSwuODgyLC44ODIsLjgzLC44NTAzNCwuODM1MzcsLjg1MDM0LDEuMDIwNTgsLjcwODY5LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODM1MzcsLjkwMDgzLDEuMTUwMTIsLjkxNjEsLjk0NTY1LC43MzU0MSwxLjAyMDU4LC41MzYwOSwuNjkzNTMsLjc5NTE5LDEuMDg1OTUsMSwxLDEuMTUwMTIsMSwuOTE5NzQsLjc1OTQ1LDEuMTUwMTIsMSwuOTQ0NiwuNzMzNjEsLjkwMDUsLjkwMDUsLjkwMDUsLjYyODY0LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC43NzMsLjc2ODUyLC43MDQ2NiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuODM4NjQsLjgzODY0LC44Mzg2NCwuODM4NjQsLjkwNTYxLC44NzUxNCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwxLjAyMDU4LC44NTc1MSwuODU5OTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjc3NTEyLC43NjAxMywuODgwNzUsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjgwNzUsLjg0NiwuODE0NTMsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgyNDI0LC44MjQyNCwuODI0MjQsLjgyNDI0LC45Mjc4LC45NjAxNywuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LDEuMDg1OTUsLjg1NjIsLjk0NTc4LC45NDU3OCwuOTQ1NzgsLjk0NTc4LC44ODIsLjk0NTc4LC44ODIsLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC44NTE1OCwuOTM4NTksLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjg5NTkxLC44NTQ0LC45MDU2MSwuOTQzOTksLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwuODAwOTQsLjk0MjE5LDEsMSwuODY4MjIsLjk2MDE3LC44NjgyMiwuOTYwMTcsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwuODI0MjQsLjgzODY0LDEuMDMwNzUsLjgzODY0LC44MjQyNCwuODE0MDIsMS4wMjczOCwuNzI4LDEuMDIxNzUsMSwxLC45MTIsLjc5NDc1LDEuMDMwNzUsMSwxLC43OTQ3NSwuODM5MTEsLjc5NDc1LC42NjI2NiwuODA1NTMsMS4wNjY3NiwuODc1MTQsLjk2MDE3LDEsMSwuODc1MTQsLjk2MDE3LC44Njg2NSwuODczOTYsLjk2MDE3LC44NTg4LC45Mzg1OSwuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NjcsLjg0NzU5LC43MjQyMSwuOTU0OTMsMSwxLC43MjQyMSwuOTU0OTMsLjY5ODY2LC43NDYsLjY5ODY2LC43NDYsMSwxLC42OTg2NiwuNzQ2LDEsMSwuNzc1OTgsLjg4NDE3LC43NzU5OCwxLjEyNjU4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC43NzUxMiwuODU2MiwuODMsLjg1NjIsLjgzLC44NTYyLC44MywxLC44ODQ2NSwuODUxNTgsLjkzODU5LC43NzMsLjgwNzUsLjg1NzUxLC44NTYyLDEsMSwuNzc1OTgsMS4xMjY1OCwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTMxMywxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjA4MTA2LDEuMDM5MDEsLjg1MTU4LC43NzAyNSwuNjIyNjQsLjc2NDYsLjY1MzUxLC44NjAyNiwuNjk0NjEsLjg5OTQ3LDEuMDMwNzUsLjg1MTU4LC43NzgxMiwuNzY0NDksLjg4ODM2LC43MDQ2NiwuODU2MiwuODY4MjIsLjg1ODgsLjgzODY0LC43NzIxMiwuODUzMDgsLjkzNjM3LC44NzUxNCwuODIzNTIsLjg1ODgsLjg1NzAxLC43NjAxMywuODkwNTgsLjc3NTk4LC44MTU2LC44MjU2NSwuNzgxMTIsLjc3ODk5LC44OTM4NiwuODM4NjQsLjgxNTYsLjk0ODYsLjkyMzg4LC45NjE4NiwxLjAzMDc1LC45MTEyMywuOTQ4NiwuOTMyOTgsLjg3OCwuOTM5NDIsLjkyMzg4LC44NDU5NiwuOTYxODYsLjk1MTE5LDEuMDMwNzUsLjkyMiwuODg3ODcsLjk1ODI5LC44OCwuOTM1NTksLjkzODU5LC43ODgxNSwuOTM3NTgsMSwuODkyMTcsMS4wMzczNywuOTExMjMsLjkzOTY5LC43NzQ4NywuODU3NjksLjg2Nzk5LDEuMDMwNzUsLjkxMTIzLC45Mzg1OSwuOTExMjMsLjg2Nzk5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjc3NTEyLC44ODIsLjkyMTksMSwuODk5MDMsMSwxLDEsLjg3MzIxLC44NzMyMSwuODczMjEsMSwxLjAyNywxLjAyNywxLjAyNywuODY4NDcsLjg2ODQ3LC43OTEyMSwxLDEuMTI0LDEsMSwuNzM1NzIsLjczNTcyLDEsMSwuODUwMzQsMSwxLDEsMSwuODg0NjUsMSwxLDEsLjY2OSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQ4MjgsMSwuNzQ5NDgsLjc1MTg3LDEuMDIwNTgsLjk4MzkxLDEuMDIxMTksMSwxLDEuMDYyMzMsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTIzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0Lk15cmlhZFByb0l0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9O3QuTXlyaWFkUHJvUmVndWxhckZhY3RvcnM9WzEuMzY4OTgsMSwxLC43NjMwNSwuODI3ODQsLjk0OTM1LC44OTM2NCwuOTIyNDEsLjg5MDczLC45MDcwNiwuOTg0NzIsLjg1MjgzLC44NTI4MywxLjA2NjQsMS4wMjA1OCwuNzQ1MDUsLjkyMTksLjc0NTA1LDEuMjM0NTYsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC43NDUwNSwuNzQ1MDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjczMDAyLC43MjYwMSwuOTE3NTUsLjgxMjYsLjgwMzE0LC45MjIyMiwuNzM3NjQsLjc5NzI2LC44MzA1MSwuOTAyODQsLjg2MDIzLC43NCwuODEyNiwuODQ4NjksLjk2NTE4LC45MTExNSwuODg1OCwuNzk3NjEsLjg4NTgsLjc0NDk4LC43MzkxNCwuODEzNjMsLjg5NTkxLC44MzY1OSwuODk2MzMsLjg1NjA4LC44MTExLC45MDUzMSwxLjAyMjIsMS4yMjczNiwxLjAyMjIsMS4yNzAxNCwuODk5MDMsLjkwMDg4LC44NjY2NywxLjAyMzEsLjg5NiwxLjAxNDExLC45MDA4MywxLjA1MDk5LDEuMDA1MTIsLjk5NzkzLDEuMDUzMjYsMS4wOTM3NywuOTM4LDEuMDYyMjYsMS4wMDExOSwuOTk3OTMsLjk4NzE0LDEuMDIzMSwxLjAxMjMxLC45ODE5NiwuNzkyLDEuMTkxMzcsLjk5MDc0LC45NjIsMS4wMTkxNSwuOTI2LC45NDIsLjg1NiwuODUwMzQsLjkyMDA2LC44NTAzNCwxLjAyMDU4LC42OTA2NywuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMDA2LC45MzMyLC45MDA4OCwuOTE4ODIsLjkzNDg0LC43NTMzOSwxLjAyMDU4LC41Njg2NiwuNTQzMjQsLjc5NTE5LDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NTMyNSwuNzQ1MDUsLjkwMDg4LDEsLjk3MTk4LC43NTMzOSwuOTEwMDksLjkxMDA5LC45MTAwOSwuNjY0NjYsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjc4OCwuODAzMTQsLjczNzY0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC44NjAyMywuODYwMjMsLjg2MDIzLC44NjAyMywuOTI5MTUsLjkxMTE1LC44ODU4LC44ODU4LC44ODU4LC44ODU4LC44ODU4LDEuMDIwNTgsLjg4NTgsLjg5NTkxLC44OTU5MSwuODk1OTEsLjg5NTkxLC44MTExLC43OTYxMSwuODk3MTMsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2OTM2LC44OTYsLjkwMDgzLC45MDA4MywuOTAwODMsLjkwMDgzLC44NDIyNCwuODQyMjQsLjg0MjI0LC44NDIyNCwuOTcyNzYsLjk5NzkzLC45ODcxNCwuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsMS4wODU5NSwuODk4NzYsLjk5MDc0LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45NDIsMS4wMjMxLC45NDIsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC45MTc1NSwuODY2NjcsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjkyMjIyLC45MzM3MiwuOTI5MTUsMS4wMTQxMSwuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsMSwxLC45MDI4NCwuOTk3OTMsLjkwOTc2LC45OTc5MywuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLC44NDIyNCwuODYwMjMsMS4wNTMyNiwuODYwMjMsLjg0MjI0LC44Mjg3MywxLjA3NDY5LC43NCwxLjA5Mzc3LDEsMSwuOTM4LC44NDg2OSwxLjA2MjI2LDEsMSwuODQ4NjksLjgzNzA0LC44NDg2OSwuODE0NDEsLjg1NTg4LDEuMDg5MjcsLjkxMTE1LC45OTc5MywxLDEsLjkxMTE1LC45OTc5MywuOTE4ODcsLjkwOTkxLC45OTc5MywuODg1OCwuOTg3MTQsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODk0LC45MTQzNCwuNzQ0OTgsLjk4MTk2LDEsMSwuNzQ0OTgsLjk4MTk2LC43MzkxNCwuNzkyLC43MzkxNCwuNzkyLDEsMSwuNzM5MTQsLjc5MiwxLDEsLjgxMzYzLC45MDQsLjgxMzYzLDEuMTkxMzcsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuODExMSwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwxLC45MjI0MSwuOTE3NTUsLjg2NjY3LC43ODgsLjg2OTM2LC44ODU4LC44OTg3NiwxLDEsLjgxMzYzLDEuMTkxMzcsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMzg4LDEuMDM5MDEsLjkyMTM4LC43ODEwNSwuNzE1NCwuODYxNjksLjgwNTEzLC45NDAwNywuODI1MjgsLjk4NjEyLDEuMDYyMjYsLjkxNzU1LC44MTI2LC44MTg4NCwuOTI4MTksLjczNzY0LC45MDUzMSwuOTAyODQsLjg4NTgsLjg2MDIzLC44MTI2LC45MTE3MiwuOTY1MTgsLjkxMTE1LC44MzA4OSwuODg1OCwuODc3OTEsLjc5NzYxLC44OTI5NywuODEzNjMsLjg4MTU3LC44OTk5MiwuODU2MDgsLjgxOTkyLC45NDMwNywuODYwMjMsLjg4MTU3LC45NTMwOCwuOTg2OTksLjk5NzkzLDEuMDYyMjYsLjk1ODE3LC45NTMwOCwuOTczNTgsLjkyOCwuOTgwODgsLjk4Njk5LC45Mjc2MSwuOTk3OTMsLjk2MDE3LDEuMDYyMjYsLjk4NiwuOTQ0LC45NTk3OCwuOTM4LC45NjcwNSwuOTg3MTQsLjgwNDQyLC45ODk3MiwxLC44OTc2MiwxLjA0NTUyLC45NTgxNywuOTkwMDcsLjg3MDY0LC45MTg3OSwuODg4ODgsMS4wNjIyNiwuOTU4MTcsLjk4NzE0LC45NTgxNywuODg4ODgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODExMSwuOTQyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC45MzE3MywuOTMxNzMsLjkzMTczLDEsMS4wNjMwNCwxLjA2MzA0LDEuMDY5MDQsLjg5OTAzLC44OTkwMywuODA1NDksMSwxLjE1NiwxLDEsLjc2NTc1LC43NjU3NSwxLDEsLjcyNDU4LDEsMSwxLDEsLjkyMjQxLDEsMSwxLC42MTksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA3MjU3LDEsLjc0NzA1LC43MTExOSwxLjAyMDU4LDEuMDI0LDEuMDIxMTksMSwxLDEuMTUzNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1NjM4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuTXlyaWFkUHJvUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlNlZ29ldWlSZWd1bGFyTWV0cmljcz10LlNlZ29ldWlSZWd1bGFyRmFjdG9ycz10LlNlZ29ldWlJdGFsaWNNZXRyaWNzPXQuU2Vnb2V1aUl0YWxpY0ZhY3RvcnM9dC5TZWdvZXVpQm9sZE1ldHJpY3M9dC5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3M9dC5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnM9dC5TZWdvZXVpQm9sZEZhY3RvcnM9dm9pZCAwO3QuU2Vnb2V1aUJvbGRGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTkyOTcsLjk4MjQsMS4wNDAxNiwxLjA2NDk3LDEuMDM0MjQsLjk3NTI5LDEuMTc2NDcsMS4yMzIwMywxLjEwODUsMS4xMDg1LDEuMTY5MzksMS4yMTA3LC45NzU0LDEuMjE0MDgsLjk3NTQsMS41OTU3OCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LC44MTM3OCwuODEzNzgsMS4yMTA3LDEuMjEwNywxLjIxMDcsLjcxNzAzLC45Nzg0NywuOTczNjMsLjg4Nzc2LC44NjQxLDEuMDIwOTYsLjc5Nzk1LC44NTEzMiwuOTE0LDEuMDYwODUsMS4xNDA2LC44MDA3LC44OTg1OCwuODM2OTMsMS4xNDg4OSwxLjA5Mzk4LC45NzQ4OSwuOTIwOTQsLjk3NDg5LC45MDM5OSwuODQwNDEsLjk1OTIzLDEuMDAxMzUsMSwxLjA2NDY3LC45ODI0MywuOTA5OTYsLjk5MzYxLDEuMTA4NSwxLjU2OTQyLDEuMTA4NSwxLjIxMDcsLjc0NjI3LC45NDI4MiwuOTY3NTIsMS4wMTUxOSwuODYzMDQsMS4wMTM1OSwuOTcyNzgsMS4xNTEwMywxLjAxMzU5LC45ODU2MSwxLjAyMjg1LDEuMDIyODUsMS4wMDUyNywxLjAyMjg1LDEuMDMwMiwuOTkwNDEsMS4wMDA4LDEuMDE1MTksMS4wMTM1OSwxLjAyMjU4LC43OTEwNCwxLjE2ODYyLC45OTA0MSwuOTc0NTQsMS4wMjUxMSwuOTkyOTgsLjk2NzUyLC45NTgwMSwuOTQ4NTYsMS4xNjU3OSwuOTQ4NTYsMS4yMTA3LC45ODI0LDEuMDM0MjQsMS4wMzQyNCwxLDEuMDM0MjQsMS4xNjU3OSwuODcyNywxLjM4NzEsMS4xODYyMiwxLjEwODE4LDEuMDQ0NzgsMS4yMTA3LDEuMTg2MjIsLjc1MTU1LC45NDk5NCwxLjI4ODI2LDEuMjE0MDgsMS4yMTQwOCwuOTEwNTYsMSwuOTE1NzIsLjk3NTQsLjY0NjYzLDEuMTgzMjgsMS4yNDg2NiwxLjA0NDc4LDEuMTQxNjksMS4xNTc0OSwxLjE3Mzg5LC43MTcwMywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTM1MDYsLjg2NDEsLjc5Nzk1LC43OTc5NSwuNzk3OTUsLjc5Nzk1LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjAyMDk2LDEuMDkzOTgsLjk3NDI2LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwxLjIxMDcsLjk3NDg5LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsLjkwOTk2LC45MjA5NCwxLjAyNzk4LC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45MzEzNiwuODYzMDQsLjk3Mjc4LC45NzI3OCwuOTcyNzgsLjk3Mjc4LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LDEuMDIyODUsLjk3MTIyLC45OTA0MSwxLDEsMSwxLDEsMS4yODgyNiwxLjAwMDgsLjk5MDQxLC45OTA0MSwuOTkwNDEsLjk5MDQxLC45Njc1MiwxLjAxNTE5LC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjk3MzYzLC45Njc1MiwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsMS4wMjA5NiwxLjAzMDU3LDEuMDIwOTYsMS4wMzUxNywuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjkxNCwxLjAxMzU5LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksMSwxLDEuMDYwODUsLjk4NTYxLDEuMDYwODUsMS4wMDg3OSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwuOTcxMzgsMS4wODY5MiwuODAwNywxLjAyMjg1LDEsMSwxLjAwNTI3LC44MzY5MywxLjAyMjg1LDEsMSwuODM2OTMsLjk0NTUsLjgzNjkzLC45MDQxOCwuODM2OTMsMS4xMzAwNSwxLjA5Mzk4LC45OTA0MSwxLDEsMS4wOTM5OCwuOTkwNDEsLjk2NjkyLDEuMDkyNTEsLjk5MDQxLC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTc0ODksMS4wMDA4LC45Mzk5NCwuOTc5MzEsLjkwMzk5LDEuMDIyNTgsMSwxLC45MDM5OSwxLjAyMjU4LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsMSwxLC45NTkyMywxLjA3MDM0LC45NTkyMywxLjE2ODYyLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLC45MDk5NiwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsLjk5MzYxLC45NTgwMSwxLjA3NzMzLDEuMDM0MjQsLjk3MzYzLC45Njc1MiwuOTM1MDYsLjkzMTM2LC45NzQ4OSwxLjAwMDgsMSwxLC45NTkyMywxLjE2ODYyLDEuMTUxMDMsMS4xNTEwMywxLjAxMTczLDEuMDM5NTksLjc1OTUzLC44MTM3OCwuNzk5MTIsMS4xNTEwMywxLjIxOTk0LC45NTE2MSwuODc4MTUsMS4wMTE0OSwuODE1MjUsLjc2NzYsLjk4MTY3LDEuMDExMzQsMS4wMjU0NiwuODQwOTcsMS4wMzA4OSwxLjE4MTAyLC45NzM2MywuODg3NzYsLjg1MTM0LC45NzgyNiwuNzk3OTUsLjk5MzYxLDEuMDYwODUsLjk3NDg5LDEuMTQwNiwuODk4NTgsMS4wMzg4LDEuMTQ4ODksMS4wOTM5OCwuODYwMzksLjk3NDg5LDEuMDU5NSwuOTIwOTQsLjk0NzkzLC45NTkyMywuOTA5OTYsLjk5MzQ2LC45ODI0MywxLjAyMTEyLC45NTQ5MywxLjE0MDYsLjkwOTk2LDEuMDM1NzQsMS4wMjU5NywxLjAwMDgsMS4xODEwMiwxLjA2NjI4LDEuMDM1NzQsMS4wMTkyLDEuMDE5MzIsMS4wMDg4NiwuOTc1MzEsMS4wMTA2LDEuMDAwOCwxLjEzMTg5LDEuMTgxMDIsMS4wMjI3NywuOTg2ODMsMS4wMDE2LC45OTU2MSwxLjA3MjM3LDEuMDAwOCwuOTA0MzQsLjk5OTIxLC45MzgwMywuODk2NSwxLjIzMDg1LDEuMDY2MjgsMS4wNDk4MywuOTYyNjgsMS4wNDk5LC45ODQzOSwxLjE4MTAyLDEuMDY2MjgsMS4wMDA4LDEuMDY2MjgsLjk4NDM5LC43OTc5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA5NDY2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NzI3OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAyMDY1LDEsMSwxLDEsMSwxLDEuMDY0NjcsMS4wMjUxMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLC45MDk5NiwuOTY3NTIsMSwxLjIxNDA4LC44OTkwMywxLDEsLjc1MTU1LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LDEuMDQzOTQsLjk4NjMzLC45ODYzMywuOTg2MzMsLjczMDQ3LC43MzA0NywxLjIwNjQyLC45MTIxMSwxLjI1NjM1LDEuMjIyLDEuMDI5NTYsMS4wMzM3MiwxLjAzMzcyLC45NjAzOSwxLjI0NjMzLDEsMS4xMjQ1NCwuOTM1MDMsMS4wMzQyNCwxLjE5Njg3LDEuMDM0MjQsMSwxLDEsLjc3MSwxLDEsMS4xNTc0OSwxLjE1NzQ5LDEuMTU3NDksMS4xMDk0OCwuODYyNzksLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MTgyLDEsMSwxLjE2ODk3LDEsLjk2MDg1LC45MDEzNywxLjIxMDcsMS4xODQxNiwxLjEzOTczLC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMTcyLDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg4NzQsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjA5MTkzLDEuMDkxOTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuU2Vnb2V1aUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfTt0LlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4OTQ2LDEuMDM5NTksMS4wNDAxNiwxLjAyODA5LDEuMDM2LC45NzYzOSwxLjEwOTUzLDEuMjMyMDMsMS4xMTE0NCwxLjExMTQ0LDEuMTY5MzksMS4yMTIzNywuOTc1NCwxLjIxMjYxLC45NzU0LDEuNTk3NTQsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsLjgxMzc4LC44MTM3OCwxLjIxMjM3LDEuMjEyMzcsMS4yMTIzNywuNzM1NDEsLjk3ODQ3LC45NzM2MywuODk3MjMsLjg3ODk3LDEuMDQyNiwuNzk0MjksLjg1MjkyLC45MTE0OSwxLjA1ODE1LDEuMTQwNiwuNzk2MzEsLjkwMTI4LC44Mzg1MywxLjA0Mzk2LDEuMTA2MTUsLjk3NTUyLC45NDQzNiwuOTc1NTIsLjg4NjQxLC44MDUyNywuOTYwODMsMS4wMDEzNSwxLDEuMDY3NzcsLjk4MTcsLjkxMTQyLC45OTM2MSwxLjExMTQ0LDEuNTcyOTMsMS4xMTE0NCwxLjIxMjM3LC43NDYyNywxLjMxODE4LDEuMDY1ODUsLjk3MDQyLC44MzA1NSwuOTcwNDIsLjkzNTAzLDEuMTI2MSwuOTcwNDIsLjk3OTIyLDEuMTQyMzYsLjk0NTUyLDEuMDEwNTQsMS4xNDIzNiwxLjAyNDcxLC45NzkyMiwuOTQxNjUsLjk3MDQyLC45NzA0MiwxLjAyNzYsLjc4OTI5LDEuMTI2MSwuOTc5MjIsLjk1ODc0LDEuMDIxOTcsLjk4NTA3LC45Njc1MiwuOTcxNjgsLjk1MTA3LDEuMTY1NzksLjk1MTA3LDEuMjEyMzcsMS4wMzk1OSwxLjAzNiwxLjAzNiwxLDEuMDM2LDEuMTY1NzksLjg3MzU3LDEuMzE4MTgsMS4xODc1NCwxLjI2NzgxLDEuMDUzNTYsMS4yMTIzNywxLjE4NjIyLC43OTQ4NywuOTQ5OTQsMS4yOTAwNCwxLjI0MDQ3LDEuMjQwNDcsMS4zMTgxOCwxLC45MTQ4NCwuOTc1NCwxLjMxODE4LDEuMTM0OSwxLjI0ODY2LDEuMDUzNTYsMS4xMzkzNCwxLjE1NTc0LDEuMTczODksLjczNTQxLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NDM4NSwuODc4OTcsLjc5NDI5LC43OTQyOSwuNzk0MjksLjc5NDI5LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjA0MjYsMS4xMDYxNSwuOTc1NTIsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLDEuMjEyMzcsLjk3NTUyLDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsLjkxMTQyLC45NDQzNiwuOTg3MjEsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsLjk2NzA1LC44MzA1NSwuOTM1MDMsLjkzNTAzLC45MzUwMywuOTM1MDMsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsMS4xNDIzNiwuOTMxMjUsLjk3OTIyLC45NDE2NSwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsMS4yOTAwNCwuOTQxNjUsLjk3OTIyLC45NzkyMiwuOTc5MjIsLjk3OTIyLC45Njc1MiwuOTcwNDIsLjk2NzUyLC45NzM2MywxLjA2NTg1LC45NzM2MywxLjA2NTg1LC45NzM2MywxLjA2NTg1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsMS4wNDI2LDEuMDAzMywxLjA0MjYsLjk3MDQyLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsLjkxMTQ5LC45NzA0MiwxLDEsMS4wNTgxNSwuOTc5MjIsMS4wNTgxNSwuOTc5MjIsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsLjk3NDQxLDEuMDQzMDIsLjc5NjMxLDEuMDE1ODIsMSwxLDEuMDEwNTQsLjgzODUzLDEuMTQyMzYsMSwxLC44Mzg1MywxLjA5MTI1LC44Mzg1MywuOTA0MTgsLjgzODUzLDEuMTk1MDgsMS4xMDYxNSwuOTc5MjIsMSwxLDEuMTA2MTUsLjk3OTIyLDEuMDEwMzQsMS4xMDQ2NiwuOTc5MjIsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45NzU1MiwuOTQxNjUsLjkxNjAyLC45MTk4MSwuODg2NDEsMS4wMjc2LDEsMSwuODg2NDEsMS4wMjc2LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksMSwxLC45NjA4MywxLjA1NDAzLC45NTkyMywxLjE2ODYyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLC45MTE0MiwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsLjk5MzYxLC45NzE2OCwxLjIzMTk5LDEuMDM2LC45NzM2MywxLjA2NTg1LC45NDM4NSwuOTY3MDUsLjk3NTUyLC45NDE2NSwxLDEsLjk2MDgzLDEuMTI2MSwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwuOTUxNjEsMS4yNzEyNiwxLjAwODExLC44MzI4NCwuNzc3MDIsLjk5MTM3LC45NTI1MywxLjAzNDcsLjg2MTQyLDEuMDcyMDUsMS4xNDIzNiwuOTczNjMsLjg5NzIzLC44Njg2OSwxLjA5ODE4LC43OTQyOSwuOTkzNjEsMS4wNTgxNSwuOTc1NTIsMS4xNDA2LC45MDEyOCwxLjA2NjYyLDEuMDQzOTYsMS4xMDYxNSwuODQ5MTgsLjk3NTUyLDEuMDQ2OTQsLjk0NDM2LC45ODAxNSwuOTYwODMsLjkxMTQyLDEuMDAzNTYsLjk4MTcsMS4wMTk0NSwuOTg5OTksMS4xNDA2LC45MTE0MiwxLjA0OTYxLC45ODk4LDEuMDA2MzksMS4xNDIzNiwxLjA3NTE0LDEuMDQ5NjEsLjk5NjA3LDEuMDI4OTcsMS4wMDgsLjk4OTgsLjk1MTM0LDEuMDA2MzksMS4xMTEyMSwxLjE0MjM2LDEuMDA1MTgsLjk3OTgxLDEuMDIxODYsMSwxLjA4NTc4LC45NDE2NSwuOTkzMTQsLjk4Mzg3LC45MzAyOCwuOTMzNzcsMS4zNTEyNSwxLjA3NTE0LDEuMTA2ODcsLjkzNDkxLDEuMDQyMzIsMS4wMDM1MSwxLjE0MjM2LDEuMDc1MTQsLjk0MTY1LDEuMDc1MTQsMS4wMDM1MSwuNzk0MjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTA5NywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTM1MDMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk2NjA5LDEsMSwxLDEsMSwxLDEuMDY3NzcsMS4wMjE5NywxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LC45MTE0MiwuOTY3NTIsMSwxLjIxMjYxLC44OTkwMywxLDEsLjc1MTU1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0NzQ1LDEuMDQzOTQsLjk4NjMzLC45ODYzMywuOTg2MzMsLjcyOTU5LC43Mjk1OSwxLjIwNTAyLC45MTQwNiwxLjI2NTE0LDEuMjIyLDEuMDI5NTYsMS4wMzM3MiwxLjAzMzcyLC45NjAzOSwxLjI0NjMzLDEsMS4wOTEyNSwuOTMzMjcsMS4wMzMzNiwxLjE2NTQxLDEuMDM2LDEsMSwxLC43NzEsMSwxLDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LDEuMTU1NzQsLjg2MzY0LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjIyNCwxLDEsMS4xNjc5OCwxLC45NjA4NSwuOTAwNjgsMS4yMTIzNywxLjE4NDE2LDEuMTM5MDQsLjY5ODI1LC45NzE2LDIuMTAzMzksMS4yOTAwNCwxLjI5MDA0LDEuMjEzMzksMS4yOTAwNCwxLjI5MDA0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODc3NSwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTMyNjksMS4xMzI2OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9O3QuU2Vnb2V1aUl0YWxpY0ZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjE0NzYzLDEuMDUzNjUsMS4wNjIzNCwuOTY5MjcsLjkyNTg2LDEuMTUzNzMsMS4xODQxNCwuOTEzNDksLjkxMzQ5LDEuMDc0MDMsMS4xNzMwOCwuNzgzODMsMS4yMDA4OCwuNzgzODMsMS40MjUzMSwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MzgzLC43ODM4MywxLjE3MzA4LDEuMTczMDgsMS4xNzMwOCwuNzczNDksLjk0NTY1LC45NDcyOSwuODU5NDQsLjg4NTA2LC45ODU4LC43NDgxNywuODAwMTYsLjg4NDQ5LC45ODAzOSwuOTU3ODIsLjY5MjM4LC44OTg5OCwuODMyMzEsLjk4MTgzLDEuMDM5ODksLjk2OTI0LC44NjIzNywuOTY5MjQsLjgwNTk1LC43NDUyNCwuODYwOTEsLjk1NDAyLC45NDE0MywuOTg0NDgsLjg4NTgsLjgzMDg5LC45MzI4NSwxLjA5NDksMS4zOTAxNiwxLjA5NDksMS40NTk5NCwuNzQ2MjcsMS4wNDgzOSwuOTc0NTQsLjk3NDU0LC44NzIwNywuOTc0NTQsLjg3NTMzLDEuMDYxNTEsLjk3NDU0LDEuMDAxNzYsMS4xNjQ4NCwxLjA4MTMyLC45ODA0NywxLjE2NDg0LDEuMDI5ODksMS4wMTA1NCwuOTYyMjUsLjk3NDU0LC45NzQ1NCwxLjA2NTk4LC43OTAwNCwxLjE2MzQ0LDEuMDAzNTEsLjk0NjI5LC45OTczLC45MTAxNiwuOTY3NzcsLjkwNDMsLjkxMDgyLC45MjQ4MSwuOTEwODIsMS4xNzMwOCwuOTU3NDgsLjk2OTI3LC45NjkyNywxLC45NjkyNywuOTI0ODEsLjgwNTk3LDEuMDQ4MzksMS4yMzM5MywxLjE3ODEsLjkyNDUsMS4xNzMwOCwxLjIwODA4LC42MzIxOCwuOTQyNjEsMS4yNDgyMiwxLjA5OTcxLDEuMDk5NzEsMS4wNDgzOSwxLC44NTI3MywuNzgwMzIsMS4wNDgzOSwxLjA5OTcxLDEuMjIzMjYsLjkyNDUsMS4wOTgzNiwxLjEzNTI1LDEuMTUyMjIsLjcwNDI0LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC44NTQ5OCwuODg1MDYsLjc0ODE3LC43NDgxNywuNzQ4MTcsLjc0ODE3LC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTg1OCwxLjAzOTg5LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsMS4xNzMwOCwuOTY5MjQsLjk1NDAyLC45NTQwMiwuOTU0MDIsLjk1NDAyLC44MzA4OSwuODYyMzcsLjg4NDA5LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45MjkxNiwuODcyMDcsLjg3NTMzLC44NzUzMywuODc1MzMsLjg3NTMzLC45MzE0NiwuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTM4NTQsMS4wMTA1NCwuOTYyMjUsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LDEuMjQ4MjIsLjg3NjEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsMS4wMDM1MSwuOTY3NzcsLjk3NDU0LC45Njc3NywuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjk0NzI5LC45NzQ1NCwuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC45ODU4LC45NTM5MSwuOTg1OCwuOTc0NTQsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwuODg0NDksLjk3NDU0LDEsMSwuOTgwMzksMS4wMDE3NiwuOTgwMzksMS4wMDE3NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLC45MzE0NiwuOTU3ODIsMS4xNjQ4NCwuOTU3ODIsLjkzMTQ2LC44NDQyMSwxLjEyNzYxLC42OTIzOCwxLjA4MTMyLDEsMSwuOTgwNDcsLjgzMjMxLDEuMTY0ODQsMSwxLC44NDcyMywxLjA0ODYxLC44NDcyMywuNzg3NTUsLjgzMjMxLDEuMjM3MzYsMS4wMzk4OSwxLjAxMDU0LDEsMSwxLjAzOTg5LDEuMDEwNTQsLjk4NTcsMS4wMzg0OSwxLjAxMDU0LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTY5MjQsLjk2MjI1LC45MjM4MywuOTAxNzEsLjgwNTk1LDEuMDY1OTgsMSwxLC44MDU5NSwxLjA2NTk4LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsMSwxLC44NjA5MSwxLjAyNzU5LC44NTc3MSwxLjE2MzQ0LC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LC44MzA4OSwuOTMyODUsLjkwNDMsLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywxLjMxODY4LC45NjkyNywuOTQ3MjksLjk3NDU0LC44NTQ5OCwuOTI5MTYsLjk2OTI0LC44NzYxLDEsMSwuODYwOTEsMS4xNjM0NCwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwuODE5NjUsLjgxOTY1LC45NDcyOSwuNzgwMzIsLjcxMDIyLC45MDg4MywuODQxNzEsLjk5ODc3LC43NzU5NiwxLjA1NzM0LDEuMiwuOTQ3MjksLjg1OTQ0LC44Mjc5MSwuOTYwNywuNzQ4MTcsLjkzMjg1LC45ODAzOSwuOTY5MjQsLjk1NzgyLC44OTg5OCwuOTgzMTYsLjk4MTgzLDEuMDM5ODksLjc4NjE0LC45NjkyNCwuOTc2NDIsLjg2MjM3LC44NjA3NSwuODYwOTEsLjgzMDg5LC45MDA4MiwuODg1OCwuOTcyOTYsMS4wMTI4NCwuOTU3ODIsLjgzMDg5LDEuMDk3NiwxLjA0LDEuMDMzNDIsMS4yLDEuMDY3NSwxLjA5NzYsLjk4MjA1LDEuMDM4MDksMS4wNTA5NywxLjA0LC45NTM2NCwxLjAzMzQyLDEuMDU0MDEsMS4yLDEuMDIxNDgsMS4wMTE5LDEuMDQ3MjQsMS4wMTI3LDEuMDI3MzIsLjk2MjI1LC44OTY1LC45Nzc4MywuOTM1NzQsLjk0ODE4LDEuMzA2NzksMS4wNjc1LDEuMTE4MjYsLjk5ODIxLDEuMDU1NywxLjAzMjYsMS4yLDEuMDY3NSwuOTYyMjUsMS4wNjc1LDEuMDMyNiwuNzQ4MTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzc1NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODc1MzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk4NzA1LDEsMSwxLDEsMSwxLC45ODQ0OCwuOTk3MywuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC44MzA4OSwuOTY3NzcsMSwxLjIwMDg4LC44OTkwMywxLDEsLjc1MTU1LC45NDk0NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwxLjEyMzE3LDEuMTIzMTcsMS4xMjMxNywuNjc2MDMsLjY3NjAzLDEuMTU2MjEsLjczNTg0LDEuMjExOTEsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44NzcwOSwuOTY5MjcsMS4wMTQ3MywuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjA5ODM2LDEuMDk4MzYsMS4wOTgzNiwxLjAxNTIyLC44NjMyMSwuOTQ0MzQsLjg2NDksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NDM4LDEuMTczMDgsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njc5MSwxLjI0ODIyLDEuMjQ4MjIsMS4xNzMwOCwxLjI0ODIyLDEuMjQ4MjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE3OTg0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMDc0MiwxLjEwNzQyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LlNlZ29ldWlJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfTt0LlNlZ29ldWlSZWd1bGFyRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4NTk0LDEuMDIyODUsMS4xMDQ1NCwxLjA2MjM0LC45NjkyNywuOTIwMzcsMS4xOTk4NSwxLjIwNDYsLjkwNjE2LC45MDYxNiwxLjA3MTUyLDEuMTcxNCwuNzgwMzIsMS4yMDA4OCwuNzgwMzIsMS40MDI0NiwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MDMyLC43ODAzMiwxLjE3MTQsMS4xNzE0LDEuMTcxNCwuODA1OTcsLjk0MDg0LC45NjcwNiwuODU5NDQsLjg1NzM0LC45NzA5MywuNzU4NDIsLjc5OTM2LC44ODE5OCwuOTgzMSwuOTU3ODIsLjcxMzg3LC44Njk2OSwuODQ2MzYsMS4wNzc5NiwxLjAzNTg0LC45NjkyNCwuODM5NjgsLjk2OTI0LC44MjgyNiwuNzk2NDksLjg1NzcxLC45NTEzMiwuOTMxMTksLjk4OTY1LC44ODQzMywuODI4NywuOTMzNjUsMS4wODYxMiwxLjM2MzgsMS4wODYxMiwxLjQ1Nzg2LC43NDYyNywuODA0OTksLjkxNDg0LDEuMDU3MDcsLjkyMzgzLDEuMDU4ODIsLjk0MDMsMS4xMjY1NCwxLjA1ODgyLDEuMDE3NTYsMS4wOTAxMSwxLjA5MDExLC45OTQxNCwxLjA5MDExLDEuMDM0LDEuMDE3NTYsMS4wNTM1NiwxLjA1NzA3LDEuMDU4ODIsMS4wNDM5OSwuODQ4NjMsMS4yMTk2OCwxLjAxNzU2LC45NTgwMSwxLjAwMDY4LC45MTc5NywuOTY3NzcsLjkwNDMsLjkwMzUxLC45MjEwNSwuOTAzNTEsMS4xNzE0LC44NTMzNywuOTY5MjcsLjk2OTI3LC45OTkxMiwuOTY5MjcsLjkyMTA1LC44MDU5NywxLjI0MzQsMS4yMDgwOCwxLjA1OTM3LC45MDk1NywxLjE3MTQsMS4yMDgwOCwuNzUxNTUsLjk0MjYxLDEuMjQ2NDQsMS4wOTk3MSwxLjA5OTcxLC44NDc1MSwxLC44NTI3MywuNzgwMzIsLjYxNTg0LDEuMDU0MjUsMS4xNzkxNCwuOTA5NTcsMS4wODY2NSwxLjExNTkzLDEuMTQxNjksLjczMzgxLC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC44NjAzNSwuODU3MzQsLjc1ODQyLC43NTg0MiwuNzU4NDIsLjc1ODQyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTcwOTMsMS4wMzU4NCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTcxNCwuOTY5MjQsLjk1MTMyLC45NTEzMiwuOTUxMzIsLjk1MTMyLC44Mjg3LC44Mzk2OCwuODkwNDksLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkzNTc1LC45MjM4MywuOTQwMywuOTQwMywuOTQwMywuOTQwMywuODcxNywuODcxNywuODcxNywuODcxNywxLjAwNTI3LDEuMDE3NTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMjQ2NDQsLjk1OTIzLDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LDEuMDE3NTYsLjk2Nzc3LDEuMDU3MDcsLjk2Nzc3LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuOTY3MDYsLjkxNDg0LC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjk3MDkzLDEuMDk2OSwuOTcwOTMsMS4wNTg4MiwuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLDEsMSwuOTgzMSwxLjAxNzU2LC45ODMxLDEuMDE3NTYsLjk1NzgyLC44NzE3LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLDEuMDkwMTEsLjk1NzgyLC44NzE3LC44NDc4NCwxLjExNTUxLC43MTM4NywxLjA5MDExLDEsMSwuOTk0MTQsLjg0NjM2LDEuMDkwMTEsMSwxLC44NDYzNiwxLjA1MzYsLjg0NjM2LC45NDI5OCwuODQ2MzYsMS4yMzI5NywxLjAzNTg0LDEuMDE3NTYsMSwxLDEuMDM1ODQsMS4wMTc1NiwxLjAwMzIzLDEuMDM0NDQsMS4wMTc1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTMwNjYsLjk4MjkzLC44MjgyNiwxLjA0Mzk5LDEsMSwuODI4MjYsMS4wNDM5OSwuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLDEsMSwuODU3NzEsMS4xNzMxOCwuODU3NzEsMS4yMTk2OCwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTg5NjUsMS4wMDA2OCwuODI4NywuOTY3NzcsLjgyODcsLjkzMzY1LC45MDQzLC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsMS4wODU3MSwuOTY5MjcsLjk2NzA2LC45MTQ4NCwuODYwMzUsLjkzNTc1LC45NjkyNCwuOTU5MjMsMSwxLC44NTc3MSwxLjIxOTY4LDEuMTE0MzcsMS4xMTQzNywuOTMxMDksLjkxMjAyLC42MDQxMSwuODQxNjQsLjU1NTcyLDEuMDExNzMsLjk3MzYxLC44MTgxOCwuODE4MTgsLjk2NjM1LC43ODAzMiwuNzI3MjcsLjkyMzY2LC45ODYwMSwxLjAzNDA1LC43Nzk2OCwxLjA5Nzk5LDEuMiwuOTY3MDYsLjg1OTQ0LC44NTYzOCwuOTY0OTEsLjc1ODQyLC45MzM2NSwuOTgzMSwuOTY5MjQsLjk1NzgyLC44Njk2OSwuOTQxNTIsMS4wNzc5NiwxLjAzNTg0LC43ODQzNywuOTY5MjQsLjk4NzE1LC44Mzk2OCwuODM0OTEsLjg1NzcxLC44Mjg3LC45NDQ5MiwuODg0MzMsLjkyODcsMS4wMDk4LC45NTc4MiwuODI4NywxLjA2MjUsLjk4MjQ4LDEuMDM0MjQsMS4yLDEuMDEwNzEsMS4wNjI1LC45NTI0NiwxLjAzODA5LDEuMDQ5MTIsLjk4MjQ4LDEuMDAyMjEsMS4wMzQyNCwxLjA1NDQzLDEuMiwxLjA0Nzg1LC45OTYwOSwxLjAwMTY5LDEuMDUxNzYsLjk5MzQ2LDEuMDUzNTYsLjkwODcsMS4wMzAwNCwuOTU1NDIsLjkzMTE3LDEuMjMzNjIsMS4wMTA3MSwxLjA3ODMxLDEuMDI1MTIsMS4wNTIwNSwxLjAzNTAyLDEuMiwxLjAxMDcxLDEuMDUzNTYsMS4wMTA3MSwxLjAzNTAyLC43NTg0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAzNzE5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NDAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQwMjEsMSwxLDEsMSwxLDEsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjAzMDc3LDEuMTMxOTYsMS4xMzE5NiwxLjEzMTk2LC42NzQyOCwuNjc0MjgsMS4xNjAzOSwuNzMyOTEsMS4yMDk5NiwxLjIyMTM1LDEuMDY0ODMsLjk0ODY4LC45NDg2OCwuOTU5OTYsMS4yNDYzMywxLDEuMDc0OTcsLjg3Nzk2LC45NjkyNywxLjAxNTE4LC45NjkyNywxLDEsMSwuNzcyOTUsMSwxLDEuMTA1MzksMS4xMDUzOSwxLjExMzU4LDEuMDY5NjcsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NTA3LDEuMTcxNCwxLjE4NDE2LDEuMTQ1ODksLjY5ODI1LC45NzYyMiwxLjk2OTcsMS4yNDgyMiwxLjI0ODIyLDEuMTcyMzgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODA4MywxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA5MzgsMS4xMDkzOCwxLDEsMSwxLjA1NDI1LDEuMDk5NzEsMS4wOTk3MSwxLjA5OTcxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5TZWdvZXVpUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUG9zdFNjcmlwdEV2YWx1YXRvcj10LlBvc3RTY3JpcHRDb21waWxlcj10LlBERkZ1bmN0aW9uRmFjdG9yeT12b2lkIDA7dC5pc1BERkZ1bmN0aW9uPWZ1bmN0aW9uIGlzUERGRnVuY3Rpb24oZSl7bGV0IHQ7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiByLkRpY3QpdD1lO2Vsc2V7aWYoIShlIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtKSlyZXR1cm4hMTt0PWUuZGljdH1yZXR1cm4gdC5oYXMoIkZ1bmN0aW9uVHlwZSIpfTt2YXIgcj1hKDMpLG49YSgyKSxpPWEoNTYpLHM9YSg1KSxvPWEoNTcpO3QuUERGRnVuY3Rpb25GYWN0b3J5PWNsYXNzIFBERkZ1bmN0aW9uRmFjdG9yeXtjb25zdHJ1Y3Rvcih7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0PSEwfSl7dGhpcy54cmVmPWU7dGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT10fWNyZWF0ZShlKXtjb25zdCB0PXRoaXMuZ2V0Q2FjaGVkKGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3QgYT1QREZGdW5jdGlvbi5wYXJzZSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMuaXNFdmFsU3VwcG9ydGVkLGZuOmUgaW5zdGFuY2VvZiByLlJlZj90aGlzLnhyZWYuZmV0Y2goZSk6ZX0pO3RoaXMuX2NhY2hlKGUsYSk7cmV0dXJuIGF9Y3JlYXRlRnJvbUFycmF5KGUpe2NvbnN0IHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBhPVBERkZ1bmN0aW9uLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplIGluc3RhbmNlb2Ygci5SZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTt0aGlzLl9jYWNoZShlLGEpO3JldHVybiBhfWdldENhY2hlZChlKXtsZXQgdDtlIGluc3RhbmNlb2Ygci5SZWY/dD1lOmUgaW5zdGFuY2VvZiByLkRpY3Q/dD1lLm9iaklkOmUgaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0mJih0PWUuZGljdCYmZS5kaWN0Lm9iaklkKTtpZih0KXtjb25zdCBlPXRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5nZXRCeVJlZih0KTtpZihlKXJldHVybiBlfXJldHVybiBudWxsfV9jYWNoZShlLHQpe2lmKCF0KXRocm93IG5ldyBFcnJvcignUERGRnVuY3Rpb25GYWN0b3J5Ll9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRGdW5jdGlvbiIgYXJndW1lbnQuJyk7bGV0IGE7ZSBpbnN0YW5jZW9mIHIuUmVmP2E9ZTplIGluc3RhbmNlb2Ygci5EaWN0P2E9ZS5vYmpJZDplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYoYT1lLmRpY3QmJmUuZGljdC5vYmpJZCk7YSYmdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlLnNldChudWxsLGEsdCl9Z2V0IF9sb2NhbEZ1bmN0aW9uQ2FjaGUoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX2xvY2FsRnVuY3Rpb25DYWNoZSIsbmV3IG8uTG9jYWxGdW5jdGlvbkNhY2hlKX19O2Z1bmN0aW9uIHRvTnVtYmVyQXJyYXkoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmxlbmd0aDtmb3IobGV0IGE9MDthPHQ7YSsrKWlmKCJudW1iZXIiIT10eXBlb2YgZVthXSl7Y29uc3QgYT1uZXcgQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKylhW3JdPStlW3JdO3JldHVybiBhfXJldHVybiBlfWNsYXNzIFBERkZ1bmN0aW9ue3N0YXRpYyBnZXRTYW1wbGVBcnJheShlLHQsYSxyKXtsZXQgbixpLHM9MTtmb3Iobj0wLGk9ZS5sZW5ndGg7bjxpO24rKylzKj1lW25dO3MqPXQ7Y29uc3Qgbz1uZXcgQXJyYXkocyk7bGV0IGM9MCxsPTA7Y29uc3QgaD0xLygyKiphLTEpLHU9ci5nZXRCeXRlcygocyphKzcpLzgpO2xldCBkPTA7Zm9yKG49MDtuPHM7bisrKXtmb3IoO2M8YTspe2w8PD04O2x8PXVbZCsrXTtjKz04fWMtPWE7b1tuXT0obD4+YykqaDtsJj0oMTw8YyktMX1yZXR1cm4gb31zdGF0aWMgcGFyc2Uoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphfSl7Y29uc3Qgcj1hLmRpY3R8fGE7c3dpdGNoKHIuZ2V0KCJGdW5jdGlvblR5cGUiKSl7Y2FzZSAwOnJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphLGRpY3Q6cn0pO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZGljdDpyfSk7Y2FzZSAzOnJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxkaWN0OnJ9KTtjYXNlIDQ6cmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmEsZGljdDpyfSl9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZSBvZiBmdW5jdGlvbiIpfXN0YXRpYyBwYXJzZUFycmF5KHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm5PYmo6YX0pe2lmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiB0aGlzLnBhcnNlKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46YX0pO2NvbnN0IHI9W107Zm9yKGNvbnN0IG4gb2YgYSlyLnB1c2godGhpcy5wYXJzZSh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmUuZmV0Y2hJZlJlZihuKX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0LGEsbil7Zm9yKGxldCBpPTAscz1yLmxlbmd0aDtpPHM7aSsrKXJbaV0oZSx0LGEsbitpKX19c3RhdGljIGNvbnN0cnVjdFNhbXBsZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjphLGRpY3Q6cn0pe2Z1bmN0aW9uIHRvTXVsdGlBcnJheShlKXtjb25zdCB0PWUubGVuZ3RoLGE9W107bGV0IHI9MDtmb3IobGV0IG49MDtuPHQ7bis9MilhW3IrK109W2Vbbl0sZVtuKzFdXTtyZXR1cm4gYX1mdW5jdGlvbiBpbnRlcnBvbGF0ZShlLHQsYSxyLG4pe3JldHVybiByKyhuLXIpLyhhLXQpKihlLXQpfWxldCBpPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRG9tYWluIikpLHM9dG9OdW1iZXJBcnJheShyLmdldEFycmF5KCJSYW5nZSIpKTtpZighaXx8IXMpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiBvciByYW5nZSIpO2NvbnN0IG89aS5sZW5ndGgvMixjPXMubGVuZ3RoLzI7aT10b011bHRpQXJyYXkoaSk7cz10b011bHRpQXJyYXkocyk7Y29uc3QgbD10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIlNpemUiKSksaD1yLmdldCgiQml0c1BlclNhbXBsZSIpLHU9ci5nZXQoIk9yZGVyIil8fDE7MSE9PXUmJigwLG4uaW5mbykoIk5vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiAiK3UpO2xldCBkPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRW5jb2RlIikpO2lmKGQpZD10b011bHRpQXJyYXkoZCk7ZWxzZXtkPVtdO2ZvcihsZXQgZT0wO2U8bzsrK2UpZC5wdXNoKFswLGxbZV0tMV0pfWxldCBmPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRGVjb2RlIikpO2Y9Zj90b011bHRpQXJyYXkoZik6cztjb25zdCBnPXRoaXMuZ2V0U2FtcGxlQXJyYXkobCxjLGgsYSk7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWRGbihlLHQsYSxyKXtjb25zdCBuPTE8PG8saD1uZXcgRmxvYXQ2NEFycmF5KG4pLHU9bmV3IFVpbnQzMkFycmF5KG4pO2xldCBwLG07Zm9yKG09MDttPG47bSsrKWhbbV09MTtsZXQgYj1jLHk9MTtmb3IocD0wO3A8bzsrK3Ape2NvbnN0IGE9aVtwXVswXSxyPWlbcF1bMV07bGV0IHM9aW50ZXJwb2xhdGUoTWF0aC5taW4oTWF0aC5tYXgoZVt0K3BdLGEpLHIpLGEscixkW3BdWzBdLGRbcF1bMV0pO2NvbnN0IG89bFtwXTtzPU1hdGgubWluKE1hdGgubWF4KHMsMCksby0xKTtjb25zdCBjPXM8by0xP01hdGguZmxvb3Iocyk6cy0xLGY9YysxLXMsZz1zLWMsdz1jKmIsUz13K2I7Zm9yKG09MDttPG47bSsrKWlmKG0meSl7aFttXSo9Zzt1W21dKz1TfWVsc2V7aFttXSo9Zjt1W21dKz13fWIqPW87eTw8PTF9Zm9yKG09MDttPGM7KyttKXtsZXQgZT0wO2ZvcihwPTA7cDxuO3ArKyllKz1nW3VbcF0rbV0qaFtwXTtlPWludGVycG9sYXRlKGUsMCwxLGZbbV1bMF0sZlttXVsxXSk7YVtyK21dPU1hdGgubWluKE1hdGgubWF4KGUsc1ttXVswXSksc1ttXVsxXSl9fX1zdGF0aWMgY29uc3RydWN0SW50ZXJwb2xhdGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZGljdDphfSl7Y29uc3Qgcj10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkMwIikpfHxbMF0sbj10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkMxIikpfHxbMV0saT1hLmdldCgiTiIpLHM9W107Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7KytlKXMucHVzaChuW2VdLXJbZV0pO2NvbnN0IG89cy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdEludGVycG9sYXRlZEZuKGUsdCxhLG4pe2NvbnN0IGM9MT09PWk/ZVt0XTplW3RdKippO2ZvcihsZXQgZT0wO2U8bzsrK2UpYVtuK2VdPXJbZV0rYypzW2VdfX1zdGF0aWMgY29uc3RydWN0U3RpY2hlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGRpY3Q6YX0pe2NvbnN0IHI9dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJEb21haW4iKSk7aWYoIXIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiIpO2lmKDEhPT1yLmxlbmd0aC8yKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uIik7Y29uc3QgaT1bXTtmb3IoY29uc3QgciBvZiBhLmdldCgiRnVuY3Rpb25zIikpaS5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjplLmZldGNoSWZSZWYocil9KSk7Y29uc3Qgcz10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkJvdW5kcyIpKSxvPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiRW5jb2RlIikpLGM9bmV3IEZsb2F0MzJBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZuKGUsdCxhLG4pe2NvbnN0IGw9ZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZyb21JUkNsaXAoZSx0LGEpe2U+YT9lPWE6ZTx0JiYoZT10KTtyZXR1cm4gZX0oZVt0XSxyWzBdLHJbMV0pLGg9cy5sZW5ndGg7bGV0IHU7Zm9yKHU9MDt1PGgmJiEobDxzW3VdKTsrK3UpO2xldCBkPXJbMF07dT4wJiYoZD1zW3UtMV0pO2xldCBmPXJbMV07dTxzLmxlbmd0aCYmKGY9c1t1XSk7Y29uc3QgZz1vWzIqdV0scD1vWzIqdSsxXTtjWzBdPWQ9PT1mP2c6ZysobC1kKSoocC1nKS8oZi1kKTtpW3VdKGMsMCxhLG4pfX1zdGF0aWMgY29uc3RydWN0UG9zdFNjcmlwdCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmEsZGljdDpyfSl7Y29uc3Qgcz10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIkRvbWFpbiIpKSxvPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiUmFuZ2UiKSk7aWYoIXMpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIGRvbWFpbi4iKTtpZighbyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gcmFuZ2UuIik7Y29uc3QgYz1uZXcgaS5Qb3N0U2NyaXB0TGV4ZXIoYSksbD1uZXcgaS5Qb3N0U2NyaXB0UGFyc2VyKGMpLnBhcnNlKCk7aWYodCYmbi5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpe2NvbnN0IGU9KG5ldyBQb3N0U2NyaXB0Q29tcGlsZXIpLmNvbXBpbGUobCxzLG8pO2lmKGUpcmV0dXJuIG5ldyBGdW5jdGlvbigic3JjIiwic3JjT2Zmc2V0IiwiZGVzdCIsImRlc3RPZmZzZXQiLGUpfSgwLG4uaW5mbykoIlVuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uIik7Y29uc3QgaD1vLmxlbmd0aD4+MSx1PXMubGVuZ3RoPj4xLGQ9bmV3IFBvc3RTY3JpcHRFdmFsdWF0b3IobCksZj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBnPTgxOTI7Y29uc3QgcD1uZXcgRmxvYXQzMkFycmF5KHUpO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RQb3N0U2NyaXB0Rm4oZSx0LGEscil7bGV0IG4saSxzPSIiO2NvbnN0IGM9cDtmb3Iobj0wO248dTtuKyspe2k9ZVt0K25dO2Nbbl09aTtzKz1pKyJfIn1jb25zdCBsPWZbc107aWYodm9pZCAwIT09bCl7YS5zZXQobCxyKTtyZXR1cm59Y29uc3QgbT1uZXcgRmxvYXQzMkFycmF5KGgpLGI9ZC5leGVjdXRlKGMpLHk9Yi5sZW5ndGgtaDtmb3Iobj0wO248aDtuKyspe2k9Ylt5K25dO2xldCBlPW9bMipuXTtpZihpPGUpaT1lO2Vsc2V7ZT1vWzIqbisxXTtpPmUmJihpPWUpfW1bbl09aX1pZihnPjApe2ctLTtmW3NdPW19YS5zZXQobSxyKX19fWNsYXNzIFBvc3RTY3JpcHRTdGFja3tzdGF0aWMgZ2V0IE1BWF9TVEFDS19TSVpFKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIk1BWF9TVEFDS19TSVpFIiwxMDApfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3RhY2s9ZT9BcnJheS5mcm9tKGUpOltdfXB1c2goZSl7aWYodGhpcy5zdGFjay5sZW5ndGg+PVBvc3RTY3JpcHRTdGFjay5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7dGhpcy5zdGFjay5wdXNoKGUpfXBvcCgpe2lmKHRoaXMuc3RhY2subGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayB1bmRlcmZsb3cuIik7cmV0dXJuIHRoaXMuc3RhY2sucG9wKCl9Y29weShlKXtpZih0aGlzLnN0YWNrLmxlbmd0aCtlPj1Qb3N0U2NyaXB0U3RhY2suTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO2NvbnN0IHQ9dGhpcy5zdGFjaztmb3IobGV0IGE9dC5sZW5ndGgtZSxyPWUtMTtyPj0wO3ItLSxhKyspdC5wdXNoKHRbYV0pfWluZGV4KGUpe3RoaXMucHVzaCh0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLWUtMV0pfXJvbGwoZSx0KXtjb25zdCBhPXRoaXMuc3RhY2sscj1hLmxlbmd0aC1lLG49YS5sZW5ndGgtMSxpPXIrKHQtTWF0aC5mbG9vcih0L2UpKmUpO2ZvcihsZXQgZT1yLHQ9bjtlPHQ7ZSsrLHQtLSl7Y29uc3Qgcj1hW2VdO2FbZV09YVt0XTthW3RdPXJ9Zm9yKGxldCBlPXIsdD1pLTE7ZTx0O2UrKyx0LS0pe2NvbnN0IHI9YVtlXTthW2VdPWFbdF07YVt0XT1yfWZvcihsZXQgZT1pLHQ9bjtlPHQ7ZSsrLHQtLSl7Y29uc3Qgcj1hW2VdO2FbZV09YVt0XTthW3RdPXJ9fX1jbGFzcyBQb3N0U2NyaXB0RXZhbHVhdG9ye2NvbnN0cnVjdG9yKGUpe3RoaXMub3BlcmF0b3JzPWV9ZXhlY3V0ZShlKXtjb25zdCB0PW5ldyBQb3N0U2NyaXB0U3RhY2soZSk7bGV0IGE9MDtjb25zdCByPXRoaXMub3BlcmF0b3JzLGk9ci5sZW5ndGg7bGV0IHMsbyxjO2Zvcig7YTxpOyl7cz1yW2ErK107aWYoIm51bWJlciIhPXR5cGVvZiBzKXN3aXRjaChzKXtjYXNlImp6IjpjPXQucG9wKCk7bz10LnBvcCgpO298fChhPWMpO2JyZWFrO2Nhc2UiaiI6bz10LnBvcCgpO2E9bzticmVhaztjYXNlImFicyI6bz10LnBvcCgpO3QucHVzaChNYXRoLmFicyhvKSk7YnJlYWs7Y2FzZSJhZGQiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8rYyk7YnJlYWs7Y2FzZSJhbmQiOmM9dC5wb3AoKTtvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbyYmImJvb2xlYW4iPT10eXBlb2YgYz90LnB1c2gobyYmYyk6dC5wdXNoKG8mYyk7YnJlYWs7Y2FzZSJhdGFuIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguYXRhbihvKSk7YnJlYWs7Y2FzZSJiaXRzaGlmdCI6Yz10LnBvcCgpO289dC5wb3AoKTtvPjA/dC5wdXNoKG88PGMpOnQucHVzaChvPj5jKTticmVhaztjYXNlImNlaWxpbmciOm89dC5wb3AoKTt0LnB1c2goTWF0aC5jZWlsKG8pKTticmVhaztjYXNlImNvcHkiOm89dC5wb3AoKTt0LmNvcHkobyk7YnJlYWs7Y2FzZSJjb3MiOm89dC5wb3AoKTt0LnB1c2goTWF0aC5jb3MobykpO2JyZWFrO2Nhc2UiY3ZpIjpvPTB8dC5wb3AoKTt0LnB1c2gobyk7YnJlYWs7Y2FzZSJjdnIiOmJyZWFrO2Nhc2UiZGl2IjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvL2MpO2JyZWFrO2Nhc2UiZHVwIjp0LmNvcHkoMSk7YnJlYWs7Y2FzZSJlcSI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobz09PWMpO2JyZWFrO2Nhc2UiZXhjaCI6dC5yb2xsKDIsMSk7YnJlYWs7Y2FzZSJleHAiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8qKmMpO2JyZWFrO2Nhc2UiZmFsc2UiOnQucHVzaCghMSk7YnJlYWs7Y2FzZSJmbG9vciI6bz10LnBvcCgpO3QucHVzaChNYXRoLmZsb29yKG8pKTticmVhaztjYXNlImdlIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPj1jKTticmVhaztjYXNlImd0IjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPmMpO2JyZWFrO2Nhc2UiaWRpdiI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2goby9jfDApO2JyZWFrO2Nhc2UiaW5kZXgiOm89dC5wb3AoKTt0LmluZGV4KG8pO2JyZWFrO2Nhc2UibGUiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG88PWMpO2JyZWFrO2Nhc2UibG4iOm89dC5wb3AoKTt0LnB1c2goTWF0aC5sb2cobykpO2JyZWFrO2Nhc2UibG9nIjpvPXQucG9wKCk7dC5wdXNoKE1hdGgubG9nKG8pL01hdGguTE4xMCk7YnJlYWs7Y2FzZSJsdCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobzxjKTticmVhaztjYXNlIm1vZCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobyVjKTticmVhaztjYXNlIm11bCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobypjKTticmVhaztjYXNlIm5lIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvIT09Yyk7YnJlYWs7Y2FzZSJuZWciOm89dC5wb3AoKTt0LnB1c2goLW8pO2JyZWFrO2Nhc2Uibm90IjpvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2Ygbz90LnB1c2goIW8pOnQucHVzaCh+byk7YnJlYWs7Y2FzZSJvciI6Yz10LnBvcCgpO289dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBvJiYiYm9vbGVhbiI9PXR5cGVvZiBjP3QucHVzaChvfHxjKTp0LnB1c2gob3xjKTticmVhaztjYXNlInBvcCI6dC5wb3AoKTticmVhaztjYXNlInJvbGwiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5yb2xsKG8sYyk7YnJlYWs7Y2FzZSJyb3VuZCI6bz10LnBvcCgpO3QucHVzaChNYXRoLnJvdW5kKG8pKTticmVhaztjYXNlInNpbiI6bz10LnBvcCgpO3QucHVzaChNYXRoLnNpbihvKSk7YnJlYWs7Y2FzZSJzcXJ0IjpvPXQucG9wKCk7dC5wdXNoKE1hdGguc3FydChvKSk7YnJlYWs7Y2FzZSJzdWIiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8tYyk7YnJlYWs7Y2FzZSJ0cnVlIjp0LnB1c2goITApO2JyZWFrO2Nhc2UidHJ1bmNhdGUiOm89dC5wb3AoKTtvPW88MD9NYXRoLmNlaWwobyk6TWF0aC5mbG9vcihvKTt0LnB1c2gobyk7YnJlYWs7Y2FzZSJ4b3IiOmM9dC5wb3AoKTtvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbyYmImJvb2xlYW4iPT10eXBlb2YgYz90LnB1c2gobyE9PWMpOnQucHVzaChvXmMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHtzfWApfWVsc2UgdC5wdXNoKHMpfXJldHVybiB0LnN0YWNrfX10LlBvc3RTY3JpcHRFdmFsdWF0b3I9UG9zdFNjcmlwdEV2YWx1YXRvcjtjbGFzcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUpe3RoaXMudHlwZT1lfXZpc2l0KGUpeygwLG4udW5yZWFjaGFibGUpKCJhYnN0cmFjdCBtZXRob2QiKX19Y2xhc3MgQXN0QXJndW1lbnQgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiYXJncyIpO3RoaXMuaW5kZXg9ZTt0aGlzLm1pbj10O3RoaXMubWF4PWF9dmlzaXQoZSl7ZS52aXNpdEFyZ3VtZW50KHRoaXMpfX1jbGFzcyBBc3RMaXRlcmFsIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigibGl0ZXJhbCIpO3RoaXMubnVtYmVyPWU7dGhpcy5taW49ZTt0aGlzLm1heD1lfXZpc2l0KGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1jbGFzcyBBc3RCaW5hcnlPcGVyYXRpb24gZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhLHIsbil7c3VwZXIoImJpbmFyeSIpO3RoaXMub3A9ZTt0aGlzLmFyZzE9dDt0aGlzLmFyZzI9YTt0aGlzLm1pbj1yO3RoaXMubWF4PW59dmlzaXQoZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19Y2xhc3MgQXN0TWluIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJtYXgiKTt0aGlzLmFyZz1lO3RoaXMubWluPWUubWluO3RoaXMubWF4PXR9dmlzaXQoZSl7ZS52aXNpdE1pbih0aGlzKX19Y2xhc3MgQXN0VmFyaWFibGUgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigidmFyIik7dGhpcy5pbmRleD1lO3RoaXMubWluPXQ7dGhpcy5tYXg9YX12aXNpdChlKXtlLnZpc2l0VmFyaWFibGUodGhpcyl9fWNsYXNzIEFzdFZhcmlhYmxlRGVmaW5pdGlvbiBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigiZGVmaW5pdGlvbiIpO3RoaXMudmFyaWFibGU9ZTt0aGlzLmFyZz10fXZpc2l0KGUpe2UudmlzaXRWYXJpYWJsZURlZmluaXRpb24odGhpcyl9fWNsYXNzIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcntjb25zdHJ1Y3Rvcigpe3RoaXMucGFydHM9W119dmlzaXRBcmd1bWVudChlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWF4KCIsZS5taW4sIiwgTWF0aC5taW4oIixlLm1heCwiLCBzcmNbc3JjT2Zmc2V0ICsgIixlLmluZGV4LCJdKSkiKX12aXNpdFZhcmlhYmxlKGUpe3RoaXMucGFydHMucHVzaCgidiIsZS5pbmRleCl9dmlzaXRMaXRlcmFsKGUpe3RoaXMucGFydHMucHVzaChlLm51bWJlcil9dmlzaXRCaW5hcnlPcGVyYXRpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCIoIik7ZS5hcmcxLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiICIsZS5vcCwiICIpO2UuYXJnMi52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIikiKX12aXNpdFZhcmlhYmxlRGVmaW5pdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goInZhciAiKTtlLnZhcmlhYmxlLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiID0gIik7ZS5hcmcudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCI7Iil9dmlzaXRNaW4oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1pbigiKTtlLmFyZy52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIiwgIixlLm1heCwiKSIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMucGFydHMuam9pbigiIil9fWZ1bmN0aW9uIGJ1aWxkQWRkT3BlcmF0aW9uKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBBc3RMaXRlcmFsKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIrIixlLHQsZS5taW4rdC5taW4sZS5tYXgrdC5tYXgpfWZ1bmN0aW9uIGJ1aWxkTXVsT3BlcmF0aW9uKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fWNvbnN0IGE9TWF0aC5taW4oZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpLHI9TWF0aC5tYXgoZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpO3JldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIqIixlLHQsYSxyKX1mdW5jdGlvbiBidWlsZFN1Yk9wZXJhdGlvbihlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IEFzdExpdGVyYWwoZS5udW1iZXItdC5udW1iZXIpfXJldHVybiJiaW5hcnkiPT09dC50eXBlJiYiLSI9PT10Lm9wJiYibGl0ZXJhbCI9PT1lLnR5cGUmJjE9PT1lLm51bWJlciYmImxpdGVyYWwiPT09dC5hcmcxLnR5cGUmJjE9PT10LmFyZzEubnVtYmVyP3QuYXJnMjpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCItIixlLHQsZS5taW4tdC5tYXgsZS5tYXgtdC5taW4pfWZ1bmN0aW9uIGJ1aWxkTWluT3BlcmF0aW9uKGUsdCl7cmV0dXJuIGUubWluPj10P25ldyBBc3RMaXRlcmFsKHQpOmUubWF4PD10P2U6bmV3IEFzdE1pbihlLHQpfWNsYXNzIFBvc3RTY3JpcHRDb21waWxlcntjb21waWxlKGUsdCxhKXtjb25zdCByPVtdLG49W10saT10Lmxlbmd0aD4+MSxzPWEubGVuZ3RoPj4xO2xldCBvLGMsbCxoLHUsZCxmLGcscD0wO2ZvcihsZXQgZT0wO2U8aTtlKyspci5wdXNoKG5ldyBBc3RBcmd1bWVudChlLHRbMiplXSx0WzIqZSsxXSkpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Zz1lW3RdO2lmKCJudW1iZXIiIT10eXBlb2YgZylzd2l0Y2goZyl7Y2FzZSJhZGQiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRBZGRPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJjdnIiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSJtdWwiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRNdWxPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRTdWJPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJleGNoIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO3U9ci5wb3AoKTtkPXIucG9wKCk7ci5wdXNoKHUsZCk7YnJlYWs7Y2FzZSJwb3AiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7ci5wb3AoKTticmVhaztjYXNlImluZGV4IjppZihyLmxlbmd0aDwxKXJldHVybiBudWxsO2w9ci5wb3AoKTtpZigibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7bz1sLm51bWJlcjtpZihvPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHxyLmxlbmd0aDxvKXJldHVybiBudWxsO3U9cltyLmxlbmd0aC1vLTFdO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtby0xXT1mO3IucHVzaChmKTtuLnB1c2gobmV3IEFzdFZhcmlhYmxlRGVmaW5pdGlvbihmLHUpKTticmVhaztjYXNlImR1cCI6aWYoci5sZW5ndGg8MSlyZXR1cm4gbnVsbDtpZigibnVtYmVyIj09dHlwZW9mIGVbdCsxXSYmImd0Ij09PWVbdCsyXSYmZVt0KzNdPT09dCs3JiYianoiPT09ZVt0KzRdJiYicG9wIj09PWVbdCs1XSYmZVt0KzZdPT09ZVt0KzFdKXtsPXIucG9wKCk7ci5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKGwsZVt0KzFdKSk7dCs9NjticmVha311PXIuYXQoLTEpO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtMV09ZjtyLnB1c2goZik7bi5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24oZix1KSk7YnJlYWs7Y2FzZSJyb2xsIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO2g9ci5wb3AoKTtsPXIucG9wKCk7aWYoImxpdGVyYWwiIT09aC50eXBlfHwibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7Yz1oLm51bWJlcjtvPWwubnVtYmVyO2lmKG88PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihjKXx8ci5sZW5ndGg8bylyZXR1cm4gbnVsbDtjPShjJW8rbyklbztpZigwPT09YylicmVhaztyLnB1c2goLi4uci5zcGxpY2Uoci5sZW5ndGgtbyxvLWMpKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfWVsc2Ugci5wdXNoKG5ldyBBc3RMaXRlcmFsKGcpKX1pZihyLmxlbmd0aCE9PXMpcmV0dXJuIG51bGw7Y29uc3QgbT1bXTtmb3IoY29uc3QgZSBvZiBuKXtjb25zdCB0PW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7ZS52aXNpdCh0KTttLnB1c2godC50b1N0cmluZygpKX1mb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9cltlXSxuPW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7dC52aXNpdChuKTtjb25zdCBpPWFbMiplXSxzPWFbMiplKzFdLG89W24udG9TdHJpbmcoKV07aWYoaT50Lm1pbil7by51bnNoaWZ0KCJNYXRoLm1heCgiLGksIiwgIik7by5wdXNoKCIpIil9aWYoczx0Lm1heCl7by51bnNoaWZ0KCJNYXRoLm1pbigiLHMsIiwgIik7by5wdXNoKCIpIil9by51bnNoaWZ0KCJkZXN0W2Rlc3RPZmZzZXQgKyAiLGUsIl0gPSAiKTtvLnB1c2goIjsiKTttLnB1c2goby5qb2luKCIiKSl9cmV0dXJuIG0uam9pbigiXG4iKX19dC5Qb3N0U2NyaXB0Q29tcGlsZXI9UG9zdFNjcmlwdENvbXBpbGVyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUG9zdFNjcmlwdFBhcnNlcj10LlBvc3RTY3JpcHRMZXhlcj12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDQpO3QuUG9zdFNjcmlwdFBhcnNlcj1jbGFzcyBQb3N0U2NyaXB0UGFyc2Vye2NvbnN0cnVjdG9yKGUpe3RoaXMubGV4ZXI9ZTt0aGlzLm9wZXJhdG9ycz1bXTt0aGlzLnRva2VuPW51bGw7dGhpcy5wcmV2PW51bGx9bmV4dFRva2VuKCl7dGhpcy5wcmV2PXRoaXMudG9rZW47dGhpcy50b2tlbj10aGlzLmxleGVyLmdldFRva2VuKCl9YWNjZXB0KGUpe2lmKHRoaXMudG9rZW4udHlwZT09PWUpe3RoaXMubmV4dFRva2VuKCk7cmV0dXJuITB9cmV0dXJuITF9ZXhwZWN0KGUpe2lmKHRoaXMuYWNjZXB0KGUpKXJldHVybiEwO3Rocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmV4cGVjdGVkIHN5bWJvbDogZm91bmQgJHt0aGlzLnRva2VuLnR5cGV9IGV4cGVjdGVkICR7ZX0uYCl9cGFyc2UoKXt0aGlzLm5leHRUb2tlbigpO3RoaXMuZXhwZWN0KHMuTEJSQUNFKTt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChzLlJCUkFDRSk7cmV0dXJuIHRoaXMub3BlcmF0b3JzfXBhcnNlQmxvY2soKXtmb3IoOzspaWYodGhpcy5hY2NlcHQocy5OVU1CRVIpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNlIGlmKHRoaXMuYWNjZXB0KHMuT1BFUkFUT1IpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNle2lmKCF0aGlzLmFjY2VwdChzLkxCUkFDRSkpcmV0dXJuO3RoaXMucGFyc2VDb25kaXRpb24oKX19cGFyc2VDb25kaXRpb24oKXtjb25zdCBlPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dGhpcy5wYXJzZUJsb2NrKCk7dGhpcy5leHBlY3Qocy5SQlJBQ0UpO2lmKHRoaXMuYWNjZXB0KHMuSUYpKXt0aGlzLm9wZXJhdG9yc1tlXT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifWVsc2V7aWYoIXRoaXMuYWNjZXB0KHMuTEJSQUNFKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiUFMgRnVuY3Rpb246IGVycm9yIHBhcnNpbmcgY29uZGl0aW9uYWwuIik7e2NvbnN0IHQ9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKTtjb25zdCBhPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdChzLlJCUkFDRSk7dGhpcy5leHBlY3Qocy5JRkVMU0UpO3RoaXMub3BlcmF0b3JzW3RdPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9yc1t0KzFdPSJqIjt0aGlzLm9wZXJhdG9yc1tlXT1hO3RoaXMub3BlcmF0b3JzW2UrMV09Imp6In19fX07Y29uc3Qgcz17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fTtjbGFzcyBQb3N0U2NyaXB0VG9rZW57c3RhdGljIGdldCBvcENhY2hlKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIm9wQ2FjaGUiLE9iamVjdC5jcmVhdGUobnVsbCkpfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy50eXBlPWU7dGhpcy52YWx1ZT10fXN0YXRpYyBnZXRPcGVyYXRvcihlKXtjb25zdCB0PVBvc3RTY3JpcHRUb2tlbi5vcENhY2hlW2VdO3JldHVybiB0fHwoUG9zdFNjcmlwdFRva2VuLm9wQ2FjaGVbZV09bmV3IFBvc3RTY3JpcHRUb2tlbihzLk9QRVJBVE9SLGUpKX1zdGF0aWMgZ2V0IExCUkFDRSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJMQlJBQ0UiLG5ldyBQb3N0U2NyaXB0VG9rZW4ocy5MQlJBQ0UsInsiKSl9c3RhdGljIGdldCBSQlJBQ0UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiUkJSQUNFIixuZXcgUG9zdFNjcmlwdFRva2VuKHMuUkJSQUNFLCJ9IikpfXN0YXRpYyBnZXQgSUYoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiSUYiLG5ldyBQb3N0U2NyaXB0VG9rZW4ocy5JRiwiSUYiKSl9c3RhdGljIGdldCBJRkVMU0UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiSUZFTFNFIixuZXcgUG9zdFNjcmlwdFRva2VuKHMuSUZFTFNFLCJJRkVMU0UiKSl9fXQuUG9zdFNjcmlwdExleGVyPWNsYXNzIFBvc3RTY3JpcHRMZXhlcntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0cmVhbT1lO3RoaXMubmV4dENoYXIoKTt0aGlzLnN0ckJ1Zj1bXX1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1nZXRUb2tlbigpe2xldCBlPSExLHQ9dGhpcy5jdXJyZW50Q2hhcjtmb3IoOzspe2lmKHQ8MClyZXR1cm4gbi5FT0Y7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighKDAsaS5pc1doaXRlU3BhY2UpKHQpKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4ocy5OVU1CRVIsdGhpcy5nZXROdW1iZXIoKSk7Y2FzZSAxMjM6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBQb3N0U2NyaXB0VG9rZW4uTEJSQUNFO2Nhc2UgMTI1OnRoaXMubmV4dENoYXIoKTtyZXR1cm4gUG9zdFNjcmlwdFRva2VuLlJCUkFDRX1jb25zdCBhPXRoaXMuc3RyQnVmO2EubGVuZ3RoPTA7YVswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcig7KHQ9dGhpcy5uZXh0Q2hhcigpKT49MCYmKHQ+PTY1JiZ0PD05MHx8dD49OTcmJnQ8PTEyMik7KWEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTtjb25zdCByPWEuam9pbigiIik7c3dpdGNoKHIudG9Mb3dlckNhc2UoKSl7Y2FzZSJpZiI6cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRjtjYXNlImlmZWxzZSI6cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRkVMU0U7ZGVmYXVsdDpyZXR1cm4gUG9zdFNjcmlwdFRva2VuLmdldE9wZXJhdG9yKHIpfX1nZXROdW1iZXIoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyO2NvbnN0IHQ9dGhpcy5zdHJCdWY7dC5sZW5ndGg9MDt0WzBdPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk7Zm9yKDsoZT10aGlzLm5leHRDaGFyKCkpPj0wJiYoZT49NDgmJmU8PTU3fHw0NT09PWV8fDQ2PT09ZSk7KXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtjb25zdCBhPXBhcnNlRmxvYXQodC5qb2luKCIiKSk7aWYoaXNOYU4oYSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAke2F9YCk7cmV0dXJuIGF9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPXQuTG9jYWxJbWFnZUNhY2hlPXQuTG9jYWxHU3RhdGVDYWNoZT10LkxvY2FsRnVuY3Rpb25DYWNoZT10LkxvY2FsQ29sb3JTcGFjZUNhY2hlPXQuR2xvYmFsSW1hZ2VDYWNoZT12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyk7Y2xhc3MgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VMb2NhbENhY2hlJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUxvY2FsQ2FjaGUuIik7dGhpcy5fb25seVJlZnM9ITA9PT0oZSYmZS5vbmx5UmVmcyk7aWYoIXRoaXMuX29ubHlSZWZzKXt0aGlzLl9uYW1lUmVmTWFwPW5ldyBNYXA7dGhpcy5faW1hZ2VNYXA9bmV3IE1hcH10aGlzLl9pbWFnZUNhY2hlPW5ldyBuLlJlZlNldENhY2hlfWdldEJ5TmFtZShlKXt0aGlzLl9vbmx5UmVmcyYmKDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBgZ2V0QnlOYW1lYCBtZXRob2QuIik7Y29uc3QgdD10aGlzLl9uYW1lUmVmTWFwLmdldChlKTtyZXR1cm4gdD90aGlzLmdldEJ5UmVmKHQpOnRoaXMuX2ltYWdlTWFwLmdldChlKXx8bnVsbH1nZXRCeVJlZihlKXtyZXR1cm4gdGhpcy5faW1hZ2VDYWNoZS5nZXQoZSl8fG51bGx9c2V0KGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBzZXRgIGNhbGxlZC4iKX19dC5Mb2NhbEltYWdlQ2FjaGU9Y2xhc3MgTG9jYWxJbWFnZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGUsdD1udWxsLGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsYSl9fTt0LkxvY2FsQ29sb3JTcGFjZUNhY2hlPWNsYXNzIExvY2FsQ29sb3JTcGFjZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGU9bnVsbCx0PW51bGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO251bGwhPT1lJiZ0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpO3RoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLGEpfX07dC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9Y2xhc3MgTG9jYWxGdW5jdGlvbkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGEpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxGdW5jdGlvbkNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGEpfX07dC5Mb2NhbEdTdGF0ZUNhY2hlPWNsYXNzIExvY2FsR1N0YXRlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtzZXQoZSx0PW51bGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsYSl9fTt0LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPWNsYXNzIExvY2FsVGlsaW5nUGF0dGVybkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGEpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXModCl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9fTtjbGFzcyBHbG9iYWxJbWFnZUNhY2hle3N0YXRpYyBnZXQgTlVNX1BBR0VTX1RIUkVTSE9MRCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJOVU1fUEFHRVNfVEhSRVNIT0xEIiwyKX1zdGF0aWMgZ2V0IE1JTl9JTUFHRVNfVE9fQ0FDSEUoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTUlOX0lNQUdFU19UT19DQUNIRSIsMTApfXN0YXRpYyBnZXQgTUFYX0JZVEVfU0laRSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJNQVhfQllURV9TSVpFIiw0ZTcpfWNvbnN0cnVjdG9yKCl7dGhpcy5fcmVmQ2FjaGU9bmV3IG4uUmVmU2V0Q2FjaGU7dGhpcy5faW1hZ2VDYWNoZT1uZXcgbi5SZWZTZXRDYWNoZX1nZXQgX2J5dGVTaXplKCl7bGV0IGU9MDtmb3IoY29uc3QgdCBvZiB0aGlzLl9pbWFnZUNhY2hlKWUrPXQuYnl0ZVNpemU7cmV0dXJuIGV9Z2V0IF9jYWNoZUxpbWl0UmVhY2hlZCgpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPEdsb2JhbEltYWdlQ2FjaGUuTUlOX0lNQUdFU19UT19DQUNIRSkmJiEodGhpcy5fYnl0ZVNpemU8R2xvYmFsSW1hZ2VDYWNoZS5NQVhfQllURV9TSVpFKX1zaG91bGRDYWNoZShlLHQpe2NvbnN0IGE9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO3JldHVybiEoKGE/YS5zaXplKyhhLmhhcyh0KT8wOjEpOjEpPEdsb2JhbEltYWdlQ2FjaGUuTlVNX1BBR0VTX1RIUkVTSE9MRCkmJiEoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpJiZ0aGlzLl9jYWNoZUxpbWl0UmVhY2hlZCl9YWRkUGFnZUluZGV4KGUsdCl7bGV0IGE9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO2lmKCFhKXthPW5ldyBTZXQ7dGhpcy5fcmVmQ2FjaGUucHV0KGUsYSl9YS5hZGQodCl9YWRkQnl0ZVNpemUoZSx0KXtjb25zdCBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO2EmJihhLmJ5dGVTaXplfHwoYS5ieXRlU2l6ZT10KSl9Z2V0RGF0YShlLHQpe2NvbnN0IGE9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpcmV0dXJuIG51bGw7Y29uc3Qgcj10aGlzLl9pbWFnZUNhY2hlLmdldChlKTtpZighcilyZXR1cm4gbnVsbDthLmFkZCh0KTtyZXR1cm4gcn1zZXREYXRhKGUsdCl7aWYoIXRoaXMuX3JlZkNhY2hlLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGV4cGVjdGVkICJhZGRQYWdlSW5kZXgiIHRvIGhhdmUgYmVlbiBjYWxsZWQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXMoZSl8fCh0aGlzLl9jYWNoZUxpbWl0UmVhY2hlZD8oMCxyLndhcm4pKCJHbG9iYWxJbWFnZUNhY2hlLnNldERhdGEgLSBjYWNoZSBsaW1pdCByZWFjaGVkLiIpOnRoaXMuX2ltYWdlQ2FjaGUucHV0KGUsdCkpfWNsZWFyKGU9ITEpe2V8fHRoaXMuX3JlZkNhY2hlLmNsZWFyKCk7dGhpcy5faW1hZ2VDYWNoZS5jbGVhcigpfX10Lkdsb2JhbEltYWdlQ2FjaGU9R2xvYmFsSW1hZ2VDYWNoZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmJpZGk9ZnVuY3Rpb24gYmlkaShlLHQ9LTEsYT0hMSl7bGV0IGM9ITA7Y29uc3QgbD1lLmxlbmd0aDtpZigwPT09bHx8YSlyZXR1cm4gY3JlYXRlQmlkaVRleHQoZSxjLGEpO3MubGVuZ3RoPWw7by5sZW5ndGg9bDtsZXQgaCx1LGQ9MDtmb3IoaD0wO2g8bDsrK2gpe3NbaF09ZS5jaGFyQXQoaCk7Y29uc3QgdD1lLmNoYXJDb2RlQXQoaCk7bGV0IGE9IkwiO2lmKHQ8PTI1NSlhPW5bdF07ZWxzZSBpZigxNDI0PD10JiZ0PD0xNTI0KWE9IlIiO2Vsc2UgaWYoMTUzNjw9dCYmdDw9MTc5MSl7YT1pWzI1NSZ0XTthfHwoMCxyLndhcm4pKCJCaWRpOiBpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyICIrdC50b1N0cmluZygxNikpfWVsc2UgMTc5Mjw9dCYmdDw9MjIyMCYmKGE9IkFMIik7IlIiIT09YSYmIkFMIiE9PWEmJiJBTiIhPT1hfHxkKys7b1toXT1hfWlmKDA9PT1kKXtjPSEwO3JldHVybiBjcmVhdGVCaWRpVGV4dChlLGMpfWlmKC0xPT09dClpZihkL2w8LjMmJmw+NCl7Yz0hMDt0PTB9ZWxzZXtjPSExO3Q9MX1jb25zdCBmPVtdO2ZvcihoPTA7aDxsOysraClmW2hdPXQ7Y29uc3QgZz1pc09kZCh0KT8iUiI6IkwiLHA9ZyxtPXA7bGV0IGIseT1wO2ZvcihoPTA7aDxsOysraCkiTlNNIj09PW9baF0/b1toXT15Onk9b1toXTt5PXA7Zm9yKGg9MDtoPGw7KytoKXtiPW9baF07IkVOIj09PWI/b1toXT0iQUwiPT09eT8iQU4iOiJFTiI6IlIiIT09YiYmIkwiIT09YiYmIkFMIiE9PWJ8fCh5PWIpfWZvcihoPTA7aDxsOysraCl7Yj1vW2hdOyJBTCI9PT1iJiYob1toXT0iUiIpfWZvcihoPTE7aDxsLTE7KytoKXsiRVMiPT09b1toXSYmIkVOIj09PW9baC0xXSYmIkVOIj09PW9baCsxXSYmKG9baF09IkVOIik7IkNTIiE9PW9baF18fCJFTiIhPT1vW2gtMV0mJiJBTiIhPT1vW2gtMV18fG9baCsxXSE9PW9baC0xXXx8KG9baF09b1toLTFdKX1mb3IoaD0wO2g8bDsrK2gpaWYoIkVOIj09PW9baF0pe2ZvcihsZXQgZT1oLTE7ZT49MCYmIkVUIj09PW9bZV07LS1lKW9bZV09IkVOIjtmb3IobGV0IGU9aCsxO2U8bCYmIkVUIj09PW9bZV07KytlKW9bZV09IkVOIn1mb3IoaD0wO2g8bDsrK2gpe2I9b1toXTsiV1MiIT09YiYmIkVTIiE9PWImJiJFVCIhPT1iJiYiQ1MiIT09Ynx8KG9baF09Ik9OIil9eT1wO2ZvcihoPTA7aDxsOysraCl7Yj1vW2hdOyJFTiI9PT1iP29baF09IkwiPT09eT8iTCI6IkVOIjoiUiIhPT1iJiYiTCIhPT1ifHwoeT1iKX1mb3IoaD0wO2g8bDsrK2gpaWYoIk9OIj09PW9baF0pe2NvbnN0IGU9ZmluZFVuZXF1YWwobyxoKzEsIk9OIik7bGV0IHQ9cDtoPjAmJih0PW9baC0xXSk7bGV0IGE9bTtlKzE8bCYmKGE9b1tlKzFdKTsiTCIhPT10JiYodD0iUiIpOyJMIiE9PWEmJihhPSJSIik7dD09PWEmJnNldFZhbHVlcyhvLGgsZSx0KTtoPWUtMX1mb3IoaD0wO2g8bDsrK2gpIk9OIj09PW9baF0mJihvW2hdPWcpO2ZvcihoPTA7aDxsOysraCl7Yj1vW2hdO2lzRXZlbihmW2hdKT8iUiI9PT1iP2ZbaF0rPTE6IkFOIiE9PWImJiJFTiIhPT1ifHwoZltoXSs9Mik6IkwiIT09YiYmIkFOIiE9PWImJiJFTiIhPT1ifHwoZltoXSs9MSl9bGV0IHcsUz0tMSx4PTk5O2ZvcihoPTAsdT1mLmxlbmd0aDtoPHU7KytoKXt3PWZbaF07Uzx3JiYoUz13KTt4PncmJmlzT2RkKHcpJiYoeD13KX1mb3Iodz1TO3c+PXg7LS13KXtsZXQgZT0tMTtmb3IoaD0wLHU9Zi5sZW5ndGg7aDx1OysraClpZihmW2hdPHcpe2lmKGU+PTApe3JldmVyc2VWYWx1ZXMocyxlLGgpO2U9LTF9fWVsc2UgZTwwJiYoZT1oKTtlPj0wJiZyZXZlcnNlVmFsdWVzKHMsZSxmLmxlbmd0aCl9Zm9yKGg9MCx1PXMubGVuZ3RoO2g8dTsrK2gpe2NvbnN0IGU9c1toXTsiPCIhPT1lJiYiPiIhPT1lfHwoc1toXT0iIil9cmV0dXJuIGNyZWF0ZUJpZGlUZXh0KHMuam9pbigiIiksYyl9O3ZhciByPWEoMik7Y29uc3Qgbj1bIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIlMiLCJCIiwiUyIsIldTIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCIiwiQiIsIkIiLCJTIiwiV1MiLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkVTIiwiQ1MiLCJFUyIsIkNTIiwiQ1MiLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkNTIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJDUyIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiRVQiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJPTiIsIk9OIiwiQk4iLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVOIiwiRU4iLCJPTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJFTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIl0saT1bIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIk9OIiwiT04iLCJBTCIsIkVUIiwiRVQiLCJBTCIsIkNTIiwiQUwiLCJPTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIiIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiRVQiLCJBTiIsIkFOIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiXTtmdW5jdGlvbiBpc09kZChlKXtyZXR1cm4gMCE9KDEmZSl9ZnVuY3Rpb24gaXNFdmVuKGUpe3JldHVybiAwPT0oMSZlKX1mdW5jdGlvbiBmaW5kVW5lcXVhbChlLHQsYSl7bGV0IHIsbjtmb3Iocj10LG49ZS5sZW5ndGg7cjxuOysrcilpZihlW3JdIT09YSlyZXR1cm4gcjtyZXR1cm4gcn1mdW5jdGlvbiBzZXRWYWx1ZXMoZSx0LGEscil7Zm9yKGxldCBuPXQ7bjxhOysrbillW25dPXJ9ZnVuY3Rpb24gcmV2ZXJzZVZhbHVlcyhlLHQsYSl7Zm9yKGxldCByPXQsbj1hLTE7cjxuOysrciwtLW4pe2NvbnN0IHQ9ZVtyXTtlW3JdPWVbbl07ZVtuXT10fX1mdW5jdGlvbiBjcmVhdGVCaWRpVGV4dChlLHQsYT0hMSl7bGV0IHI9Imx0ciI7YT9yPSJ0dGIiOnR8fChyPSJydGwiKTtyZXR1cm57c3RyOmUsZGlyOnJ9fWNvbnN0IHM9W10sbz1bXX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk11cm11ckhhc2gzXzY0PXZvaWQgMDt2YXIgcj1hKDIpO2NvbnN0IG49MzI4NTM3NzUyMCxpPTQyOTQ5MDE3NjAscz02NTUzNTt0Lk11cm11ckhhc2gzXzY0PWNsYXNzIE11cm11ckhhc2gzXzY0e2NvbnN0cnVjdG9yKGUpe3RoaXMuaDE9ZT80Mjk0OTY3Mjk1JmU6bjt0aGlzLmgyPWU/NDI5NDk2NzI5NSZlOm59dXBkYXRlKGUpe2xldCB0LGE7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt0PW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpO2E9MDtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHIpO2lmKG48PTI1NSl0W2ErK109bjtlbHNle3RbYSsrXT1uPj4+ODt0W2ErK109MjU1Jm59fX1lbHNle2lmKCEoMCxyLmlzQXJyYXlCdWZmZXIpKGUpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO3Q9ZS5zbGljZSgpO2E9dC5ieXRlTGVuZ3RofWNvbnN0IG49YT4+MixvPWEtNCpuLGM9bmV3IFVpbnQzMkFycmF5KHQuYnVmZmVyLDAsbik7bGV0IGw9MCxoPTAsdT10aGlzLmgxLGQ9dGhpcy5oMjtjb25zdCBmPTM0MzI5MTgzNTMsZz00NjE4NDU5MDcscD0xMTYwMSxtPTEzNzE1O2ZvcihsZXQgZT0wO2U8bjtlKyspaWYoMSZlKXtsPWNbZV07bD1sKmYmaXxsKnAmcztsPWw8PDE1fGw+Pj4xNztsPWwqZyZpfGwqbSZzO3VePWw7dT11PDwxM3x1Pj4+MTk7dT01KnUrMzg2NDI5MjE5Nn1lbHNle2g9Y1tlXTtoPWgqZiZpfGgqcCZzO2g9aDw8MTV8aD4+PjE3O2g9aCpnJml8aCptJnM7ZF49aDtkPWQ8PDEzfGQ+Pj4xOTtkPTUqZCszODY0MjkyMTk2fWw9MDtzd2l0Y2gobyl7Y2FzZSAzOmxePXRbNCpuKzJdPDwxNjtjYXNlIDI6bF49dFs0Km4rMV08PDg7Y2FzZSAxOmxePXRbNCpuXTtsPWwqZiZpfGwqcCZzO2w9bDw8MTV8bD4+PjE3O2w9bCpnJml8bCptJnM7MSZuP3VePWw6ZF49bH10aGlzLmgxPXU7dGhpcy5oMj1kfWhleGRpZ2VzdCgpe2xldCBlPXRoaXMuaDEsdD10aGlzLmgyO2VePXQ+Pj4xO2U9Mzk4MTgwNjc5NyplJml8MzYwNDUqZSZzO3Q9NDI4MzU0MzUxMSp0Jml8KDI5NTAxNjM3OTcqKHQ8PDE2fGU+Pj4xNikmaSk+Pj4xNjtlXj10Pj4+MTtlPTQ0NDk4NDQwMyplJml8NjA0OTkqZSZzO3Q9MzMwMTg4MjM2Nip0Jml8KDMxMjA0Mzc4OTMqKHQ8PDE2fGU+Pj4xNikmaSk+Pj4xNjtlXj10Pj4+MTtjb25zdCBhPShlPj4+MCkudG9TdHJpbmcoMTYpLHI9KHQ+Pj4wKS50b1N0cmluZygxNik7cmV0dXJuIGEucGFkU3RhcnQoOCwiMCIpK3IucGFkU3RhcnQoOCwiMCIpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5PcGVyYXRvckxpc3Q9dm9pZCAwO3ZhciByPWEoMik7ZnVuY3Rpb24gYWRkU3RhdGUoZSx0LGEscixuKXtsZXQgaT1lO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGgtMTtlPGE7ZSsrKXtjb25zdCBhPXRbZV07aT1pW2FdfHwoaVthXT1bXSl9aVt0LmF0KC0xKV09e2NoZWNrRm46YSxpdGVyYXRlRm46cixwcm9jZXNzRm46bn19Y29uc3Qgbj1bXTthZGRTdGF0ZShuLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxyLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbiBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LG49KHQtKGUuaUN1cnItMykpJTQ7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gYVt0XT09PXIuT1BTLnNhdmU7Y2FzZSAxOnJldHVybiBhW3RdPT09ci5PUFMudHJhbnNmb3JtO2Nhc2UgMjpyZXR1cm4gYVt0XT09PXIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke259YCl9KSwoZnVuY3Rpb24gZm91bmRJbmxpbmVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxpPWUuaUN1cnIscz1pLTMsbz1pLTIsYz1pLTEsbD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LXMpLzQpLDIwMCk7aWYobDwxMClyZXR1cm4gdC0odC1zKSU0O2xldCBoPTA7Y29uc3QgdT1bXTtsZXQgZD0wLGY9MSxnPTE7Zm9yKGxldCBlPTA7ZTxsO2UrKyl7Y29uc3QgdD1uW28rKGU8PDIpXSxhPW5bYysoZTw8MildWzBdO2lmKGYrYS53aWR0aD4xZTMpe2g9TWF0aC5tYXgoaCxmKTtnKz1kKzI7Zj0wO2Q9MH11LnB1c2goe3RyYW5zZm9ybTp0LHg6Zix5OmcsdzphLndpZHRoLGg6YS5oZWlnaHR9KTtmKz1hLndpZHRoKzI7ZD1NYXRoLm1heChkLGEuaGVpZ2h0KX1jb25zdCBwPU1hdGgubWF4KGgsZikrMSxtPWcrZCsxLGI9bmV3IFVpbnQ4QXJyYXkocCptKjQpLHk9cDw8Mjtmb3IobGV0IGU9MDtlPGw7ZSsrKXtjb25zdCB0PW5bYysoZTw8MildWzBdLmRhdGEsYT11W2VdLnc8PDI7bGV0IHI9MCxpPXVbZV0ueCt1W2VdLnkqcDw8MjtiLnNldCh0LnN1YmFycmF5KDAsYSksaS15KTtmb3IobGV0IG49MCxzPXVbZV0uaDtuPHM7bisrKXtiLnNldCh0LnN1YmFycmF5KHIscithKSxpKTtyKz1hO2krPXl9Yi5zZXQodC5zdWJhcnJheShyLWEsciksaSk7Zm9yKDtpPj0wOyl7dFtpLTRdPXRbaV07dFtpLTNdPXRbaSsxXTt0W2ktMl09dFtpKzJdO3RbaS0xXT10W2krM107dFtpK2FdPXRbaSthLTRdO3RbaSthKzFdPXRbaSthLTNdO3RbaSthKzJdPXRbaSthLTJdO3RbaSthKzNdPXRbaSthLTFdO2ktPXl9fWEuc3BsaWNlKHMsNCpsLHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXApO24uc3BsaWNlKHMsNCpsLFt7d2lkdGg6cCxoZWlnaHQ6bSxraW5kOnIuSW1hZ2VLaW5kLlJHQkFfMzJCUFAsZGF0YTpifSx1XSk7cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShuLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Qsci5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24gaXRlcmF0ZUltYWdlTWFza0dyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIGFbdF09PT1yLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogJHtufWApfSksKGZ1bmN0aW9uIGZvdW5kSW1hZ2VNYXNrR3JvdXAoZSx0KXtjb25zdCBhPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixzPWktMyxvPWktMixjPWktMTtsZXQgbD1NYXRoLmZsb29yKCh0LXMpLzQpO2lmKGw8MTApcmV0dXJuIHQtKHQtcyklNDtsZXQgaCx1LGQ9ITE7Y29uc3QgZj1uW2NdWzBdLGc9bltvXVswXSxwPW5bb11bMV0sbT1uW29dWzJdLGI9bltvXVszXTtpZihwPT09bSl7ZD0hMDtoPW8rNDtsZXQgZT1jKzQ7Zm9yKGxldCB0PTE7dDxsO3QrKyxoKz00LGUrPTQpe3U9bltoXTtpZihuW2VdWzBdIT09Znx8dVswXSE9PWd8fHVbMV0hPT1wfHx1WzJdIT09bXx8dVszXSE9PWIpe3Q8MTA/ZD0hMTpsPXQ7YnJlYWt9fX1pZihkKXtsPU1hdGgubWluKGwsMWUzKTtjb25zdCBlPW5ldyBGbG9hdDMyQXJyYXkoMipsKTtoPW87Zm9yKGxldCB0PTA7dDxsO3QrKyxoKz00KXt1PW5baF07ZVt0PDwxXT11WzRdO2VbMSsodDw8MSldPXVbNV19YS5zcGxpY2Uocyw0Kmwsci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KTtuLnNwbGljZShzLDQqbCxbZixnLHAsbSxiLGVdKX1lbHNle2w9TWF0aC5taW4obCwxMDApO2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDxsO3QrKyl7dT1uW28rKHQ8PDIpXTtjb25zdCBhPW5bYysodDw8MildWzBdO2UucHVzaCh7ZGF0YTphLmRhdGEsd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsaW50ZXJwb2xhdGU6YS5pbnRlcnBvbGF0ZSxjb3VudDphLmNvdW50LHRyYW5zZm9ybTp1fSl9YS5zcGxpY2Uocyw0Kmwsci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXApO24uc3BsaWNlKHMsNCpsLFtlXSl9cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShuLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludEltYWdlWE9iamVjdCxyLk9QUy5yZXN0b3JlXSwoZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmFyZ3NBcnJheSxhPWUuaUN1cnItMjtyZXR1cm4gMD09PXRbYV1bMV0mJjA9PT10W2FdWzJdfSksKGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxpPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIGFbdF09PT1yLk9QUy5zYXZlO2Nhc2UgMTppZihhW3RdIT09ci5PUFMudHJhbnNmb3JtKXJldHVybiExO2NvbnN0IGk9ZS5pQ3Vyci0yLHM9bltpXVswXSxvPW5baV1bM107cmV0dXJuIG5bdF1bMF09PT1zJiYwPT09blt0XVsxXSYmMD09PW5bdF1bMl0mJm5bdF1bM109PT1vO2Nhc2UgMjppZihhW3RdIT09ci5PUFMucGFpbnRJbWFnZVhPYmplY3QpcmV0dXJuITE7Y29uc3QgYz1uW2UuaUN1cnItMV1bMF07cmV0dXJuIG5bdF1bMF09PT1jO2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke2l9YCl9KSwoZnVuY3Rpb24oZSx0KXtjb25zdCBhPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixzPWktMyxvPWktMixjPW5baS0xXVswXSxsPW5bb11bMF0saD1uW29dWzNdLHU9TWF0aC5taW4oTWF0aC5mbG9vcigodC1zKS80KSwxZTMpO2lmKHU8MylyZXR1cm4gdC0odC1zKSU0O2NvbnN0IGQ9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2xldCBmPW87Zm9yKGxldCBlPTA7ZTx1O2UrKyxmKz00KXtjb25zdCB0PW5bZl07ZFtlPDwxXT10WzRdO2RbMSsoZTw8MSldPXRbNV19Y29uc3QgZz1bYyxsLGgsZF07YS5zcGxpY2Uocyw0KnUsci5PUFMucGFpbnRJbWFnZVhPYmplY3RSZXBlYXQpO24uc3BsaWNlKHMsNCp1LGcpO3JldHVybiBzKzF9KSk7YWRkU3RhdGUobixbci5PUFMuYmVnaW5UZXh0LHIuT1BTLnNldEZvbnQsci5PUFMuc2V0VGV4dE1hdHJpeCxyLk9QUy5zaG93VGV4dCxyLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbiBpdGVyYXRlU2hvd1RleHRHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LG49ZS5hcmdzQXJyYXksaT0odC0oZS5pQ3Vyci00KSklNTtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuYmVnaW5UZXh0O2Nhc2UgMTpyZXR1cm4gYVt0XT09PXIuT1BTLnNldEZvbnQ7Y2FzZSAyOnJldHVybiBhW3RdPT09ci5PUFMuc2V0VGV4dE1hdHJpeDtjYXNlIDM6aWYoYVt0XSE9PXIuT1BTLnNob3dUZXh0KXJldHVybiExO2NvbnN0IGk9ZS5pQ3Vyci0zLHM9bltpXVswXSxvPW5baV1bMV07cmV0dXJuIG5bdF1bMF09PT1zJiZuW3RdWzFdPT09bztjYXNlIDQ6cmV0dXJuIGFbdF09PT1yLk9QUy5lbmRUZXh0fXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZVNob3dUZXh0R3JvdXAgLSBpbnZhbGlkIHBvczogJHtpfWApfSksKGZ1bmN0aW9uKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXkscj1lLmFyZ3NBcnJheSxuPWUuaUN1cnIsaT1uLTQscz1uLTMsbz1uLTIsYz1uLTEsbD1uLGg9cltzXVswXSx1PXJbc11bMV07bGV0IGQ9TWF0aC5taW4oTWF0aC5mbG9vcigodC1pKS81KSwxZTMpO2lmKGQ8MylyZXR1cm4gdC0odC1pKSU1O2xldCBmPWk7aWYoaT49NCYmYVtpLTRdPT09YVtzXSYmYVtpLTNdPT09YVtvXSYmYVtpLTJdPT09YVtjXSYmYVtpLTFdPT09YVtsXSYmcltpLTRdWzBdPT09aCYmcltpLTRdWzFdPT09dSl7ZCsrO2YtPTV9bGV0IGc9Zis0O2ZvcihsZXQgZT0xO2U8ZDtlKyspe2Euc3BsaWNlKGcsMyk7ci5zcGxpY2UoZywzKTtnKz0yfXJldHVybiBnKzF9KSk7Y2xhc3MgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXVlPWV9X29wdGltaXplKCl7fXB1c2goZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKTt0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpO3RoaXMuX29wdGltaXplKCl9Zmx1c2goKXt9cmVzZXQoKXt9fWNsYXNzIFF1ZXVlT3B0aW1pemVyIGV4dGVuZHMgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLnN0YXRlPW51bGw7dGhpcy5jb250ZXh0PXtpQ3VycjowLGZuQXJyYXk6ZS5mbkFycmF5LGFyZ3NBcnJheTplLmFyZ3NBcnJheX07dGhpcy5tYXRjaD1udWxsO3RoaXMubGFzdFByb2Nlc3NlZD0wfV9vcHRpbWl6ZSgpe2NvbnN0IGU9dGhpcy5xdWV1ZS5mbkFycmF5O2xldCB0PXRoaXMubGFzdFByb2Nlc3NlZCxhPWUubGVuZ3RoLHI9dGhpcy5zdGF0ZSxpPXRoaXMubWF0Y2g7aWYoIXImJiFpJiZ0KzE9PT1hJiYhbltlW3RdXSl7dGhpcy5sYXN0UHJvY2Vzc2VkPWE7cmV0dXJufWNvbnN0IHM9dGhpcy5jb250ZXh0O2Zvcig7dDxhOyl7aWYoaSl7aWYoKDAsaS5pdGVyYXRlRm4pKHMsdCkpe3QrKztjb250aW51ZX10PSgwLGkucHJvY2Vzc0ZuKShzLHQrMSk7YT1lLmxlbmd0aDtpPW51bGw7cj1udWxsO2lmKHQ+PWEpYnJlYWt9cj0ocnx8bilbZVt0XV07aWYociYmIUFycmF5LmlzQXJyYXkocikpe3MuaUN1cnI9dDt0Kys7aWYoIXIuY2hlY2tGbnx8KDAsci5jaGVja0ZuKShzKSl7aT1yO3I9bnVsbH1lbHNlIHI9bnVsbH1lbHNlIHQrK310aGlzLnN0YXRlPXI7dGhpcy5tYXRjaD1pO3RoaXMubGFzdFByb2Nlc3NlZD10fWZsdXNoKCl7Zm9yKDt0aGlzLm1hdGNoOyl7Y29uc3QgZT10aGlzLnF1ZXVlLmZuQXJyYXkubGVuZ3RoO3RoaXMubGFzdFByb2Nlc3NlZD0oMCx0aGlzLm1hdGNoLnByb2Nlc3NGbikodGhpcy5jb250ZXh0LGUpO3RoaXMubWF0Y2g9bnVsbDt0aGlzLnN0YXRlPW51bGw7dGhpcy5fb3B0aW1pemUoKX19cmVzZXQoKXt0aGlzLnN0YXRlPW51bGw7dGhpcy5tYXRjaD1udWxsO3RoaXMubGFzdFByb2Nlc3NlZD0wfX1jbGFzcyBPcGVyYXRvckxpc3R7c3RhdGljIGdldCBDSFVOS19TSVpFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkNIVU5LX1NJWkUiLDFlMyl9c3RhdGljIGdldCBDSFVOS19TSVpFX0FCT1VUKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkNIVU5LX1NJWkVfQUJPVVQiLHRoaXMuQ0hVTktfU0laRS01KX1jb25zdHJ1Y3RvcihlPTAsdCl7dGhpcy5fc3RyZWFtU2luaz10O3RoaXMuZm5BcnJheT1bXTt0aGlzLmFyZ3NBcnJheT1bXTshdHx8ZSZyLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUP3RoaXMub3B0aW1pemVyPW5ldyBOdWxsT3B0aW1pemVyKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBRdWV1ZU9wdGltaXplcih0aGlzKTt0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0O3RoaXMuX3RvdGFsTGVuZ3RoPTA7dGhpcy53ZWlnaHQ9MDt0aGlzLl9yZXNvbHZlZD10P251bGw6UHJvbWlzZS5yZXNvbHZlKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fWdldCB0b3RhbExlbmd0aCgpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH1hZGRPcChlLHQpe3RoaXMub3B0aW1pemVyLnB1c2goZSx0KTt0aGlzLndlaWdodCsrO3RoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49T3BlcmF0b3JMaXN0LkNIVU5LX1NJWkV8fHRoaXMud2VpZ2h0Pj1PcGVyYXRvckxpc3QuQ0hVTktfU0laRV9BQk9VVCYmKGU9PT1yLk9QUy5yZXN0b3JlfHxlPT09ci5PUFMuZW5kVGV4dCkpJiZ0aGlzLmZsdXNoKCl9YWRkSW1hZ2VPcHMoZSx0LGEpe3ZvaWQgMCE9PWEmJnRoaXMuYWRkT3Aoci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsYV0pO3RoaXMuYWRkT3AoZSx0KTt2b2lkIDAhPT1hJiZ0aGlzLmFkZE9wKHIuT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pfWFkZERlcGVuZGVuY3koZSl7aWYoIXRoaXMuZGVwZW5kZW5jaWVzLmhhcyhlKSl7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKGUpO3RoaXMuYWRkT3Aoci5PUFMuZGVwZW5kZW5jeSxbZV0pfX1hZGREZXBlbmRlbmNpZXMoZSl7Zm9yKGNvbnN0IHQgb2YgZSl0aGlzLmFkZERlcGVuZGVuY3kodCl9YWRkT3BMaXN0KGUpe2lmKGUgaW5zdGFuY2VvZiBPcGVyYXRvckxpc3Qpe2Zvcihjb25zdCB0IG9mIGUuZGVwZW5kZW5jaWVzKXRoaXMuZGVwZW5kZW5jaWVzLmFkZCh0KTtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0KyspdGhpcy5hZGRPcChlLmZuQXJyYXlbdF0sZS5hcmdzQXJyYXlbdF0pfWVsc2UoMCxyLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX1nZXRJUigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX1nZXQgX3RyYW5zZmVycygpe2NvbnN0IGU9W10se2ZuQXJyYXk6dCxhcmdzQXJyYXk6YSxsZW5ndGg6bn09dGhpcztmb3IobGV0IGk9MDtpPG47aSsrKXN3aXRjaCh0W2ldKXtjYXNlIHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OmNhc2Ugci5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDpjYXNlIHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDpjb25zdCB0PWFbaV1bMF07IXQuY2FjaGVkJiZ0LmRhdGEmJnQuZGF0YS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmZS5wdXNoKHQuZGF0YS5idWZmZXIpfXJldHVybiBlfWZsdXNoKGU9ITEsdD1udWxsKXt0aGlzLm9wdGltaXplci5mbHVzaCgpO2NvbnN0IGE9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPWE7dGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGFzdENodW5rOmUsc2VwYXJhdGVBbm5vdHM6dCxsZW5ndGg6YX0sMSx0aGlzLl90cmFuc2ZlcnMpO3RoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCk7dGhpcy5mbkFycmF5Lmxlbmd0aD0wO3RoaXMuYXJnc0FycmF5Lmxlbmd0aD0wO3RoaXMud2VpZ2h0PTA7dGhpcy5vcHRpbWl6ZXIucmVzZXQoKX19dC5PcGVyYXRvckxpc3Q9T3BlcmF0b3JMaXN0fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUERGSW1hZ2U9dm9pZCAwO3ZhciByPWEoMiksbj1hKDYyKSxpPWEoNSkscz1hKDEyKSxvPWEoMTcpLGM9YSgyNSksbD1hKDI4KSxoPWEoMyk7ZnVuY3Rpb24gZGVjb2RlQW5kQ2xhbXAoZSx0LGEscil7KGU9dCtlKmEpPDA/ZT0wOmU+ciYmKGU9cik7cmV0dXJuIGV9ZnVuY3Rpb24gcmVzaXplSW1hZ2VNYXNrKGUsdCxhLHIsbixpKXtjb25zdCBzPW4qaTtsZXQgbztvPXQ8PTg/bmV3IFVpbnQ4QXJyYXkocyk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KHMpOm5ldyBVaW50MzJBcnJheShzKTtjb25zdCBjPWEvbixsPXIvaTtsZXQgaCx1LGQsZixnPTA7Y29uc3QgcD1uZXcgVWludDE2QXJyYXkobiksbT1hO2ZvcihoPTA7aDxuO2grKylwW2hdPU1hdGguZmxvb3IoaCpjKTtmb3IoaD0wO2g8aTtoKyspe2Q9TWF0aC5mbG9vcihoKmwpKm07Zm9yKHU9MDt1PG47dSsrKXtmPWQrcFt1XTtvW2crK109ZVtmXX19cmV0dXJuIG99Y2xhc3MgUERGSW1hZ2V7Y29uc3RydWN0b3Ioe3hyZWY6ZSxyZXM6dCxpbWFnZTphLGlzSW5saW5lOm49ITEsc21hc2s6bz1udWxsLG1hc2s6Yz1udWxsLGlzTWFzazp1PSExLHBkZkZ1bmN0aW9uRmFjdG9yeTpkLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KXt0aGlzLmltYWdlPWE7Y29uc3QgZz1hLmRpY3QscD1nLmdldCgiRiIsIkZpbHRlciIpO2xldCBtO2lmKHAgaW5zdGFuY2VvZiBoLk5hbWUpbT1wLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KHApKXtjb25zdCB0PWUuZmV0Y2hJZlJlZihwWzBdKTt0IGluc3RhbmNlb2YgaC5OYW1lJiYobT10Lm5hbWUpfXN3aXRjaChtKXtjYXNlIkpQWERlY29kZSI6Y29uc3QgZT1uZXcgbC5KcHhJbWFnZTtlLnBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGEuc3RyZWFtKTthLnN0cmVhbS5yZXNldCgpO2Eud2lkdGg9ZS53aWR0aDthLmhlaWdodD1lLmhlaWdodDthLmJpdHNQZXJDb21wb25lbnQ9ZS5iaXRzUGVyQ29tcG9uZW50O2EubnVtQ29tcHM9ZS5jb21wb25lbnRzQ291bnQ7YnJlYWs7Y2FzZSJKQklHMkRlY29kZSI6YS5iaXRzUGVyQ29tcG9uZW50PTE7YS5udW1Db21wcz0xfWxldCBiPWcuZ2V0KCJXIiwiV2lkdGgiKSx5PWcuZ2V0KCJIIiwiSGVpZ2h0Iik7aWYoTnVtYmVyLmlzSW50ZWdlcihhLndpZHRoKSYmYS53aWR0aD4wJiZOdW1iZXIuaXNJbnRlZ2VyKGEuaGVpZ2h0KSYmYS5oZWlnaHQ+MCYmKGEud2lkdGghPT1ifHxhLmhlaWdodCE9PXkpKXsoMCxyLndhcm4pKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpO2I9YS53aWR0aDt5PWEuaGVpZ2h0fWlmKGI8MXx8eTwxKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGltYWdlIHdpZHRoOiAke2J9IG9yIGhlaWdodDogJHt5fWApO3RoaXMud2lkdGg9Yjt0aGlzLmhlaWdodD15O3RoaXMuaW50ZXJwb2xhdGU9Zy5nZXQoIkkiLCJJbnRlcnBvbGF0ZSIpO3RoaXMuaW1hZ2VNYXNrPWcuZ2V0KCJJTSIsIkltYWdlTWFzayIpfHwhMTt0aGlzLm1hdHRlPWcuZ2V0KCJNYXR0ZSIpfHwhMTtsZXQgdz1hLmJpdHNQZXJDb21wb25lbnQ7aWYoIXcpe3c9Zy5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKTtpZighdyl7aWYoIXRoaXMuaW1hZ2VNYXNrKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBCaXRzIHBlciBjb21wb25lbnQgbWlzc2luZyBpbiBpbWFnZTogJHt0aGlzLmltYWdlTWFza31gKTt3PTF9fXRoaXMuYnBjPXc7aWYoIXRoaXMuaW1hZ2VNYXNrKXtsZXQgaT1nLmdldFJhdygiQ1MiKXx8Zy5nZXRSYXcoIkNvbG9yU3BhY2UiKTtpZighaSl7KDAsci5pbmZvKSgiSlBYIGltYWdlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgY29sb3Igc3BhY2VzKSIpO3N3aXRjaChhLm51bUNvbXBzKXtjYXNlIDE6aT1oLk5hbWUuZ2V0KCJEZXZpY2VHcmF5Iik7YnJlYWs7Y2FzZSAzOmk9aC5OYW1lLmdldCgiRGV2aWNlUkdCIik7YnJlYWs7Y2FzZSA0Omk9aC5OYW1lLmdldCgiRGV2aWNlQ01ZSyIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBKUFggaW1hZ2VzIHdpdGggJHthLm51bUNvbXBzfSBjb2xvciBjb21wb25lbnRzIG5vdCBzdXBwb3J0ZWQuYCl9fXRoaXMuY29sb3JTcGFjZT1zLkNvbG9yU3BhY2UucGFyc2Uoe2NzOmkseHJlZjplLHJlc291cmNlczpuP3Q6bnVsbCxwZGZGdW5jdGlvbkZhY3Rvcnk6ZCxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSk7dGhpcy5udW1Db21wcz10aGlzLmNvbG9yU3BhY2UubnVtQ29tcHN9dGhpcy5kZWNvZGU9Zy5nZXRBcnJheSgiRCIsIkRlY29kZSIpO3RoaXMubmVlZHNEZWNvZGU9ITE7aWYodGhpcy5kZWNvZGUmJih0aGlzLmNvbG9yU3BhY2UmJiF0aGlzLmNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLHcpfHx1JiYhcy5Db2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSwxKSkpe3RoaXMubmVlZHNEZWNvZGU9ITA7Y29uc3QgZT0oMTw8dyktMTt0aGlzLmRlY29kZUNvZWZmaWNpZW50cz1bXTt0aGlzLmRlY29kZUFkZGVuZHM9W107Y29uc3QgdD10aGlzLmNvbG9yU3BhY2UmJiJJbmRleGVkIj09PXRoaXMuY29sb3JTcGFjZS5uYW1lO2ZvcihsZXQgYT0wLHI9MDthPHRoaXMuZGVjb2RlLmxlbmd0aDthKz0yLCsrcil7Y29uc3Qgbj10aGlzLmRlY29kZVthXSxpPXRoaXMuZGVjb2RlW2ErMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbcl09dD8oaS1uKS9lOmktbjt0aGlzLmRlY29kZUFkZGVuZHNbcl09dD9uOmUqbn19aWYobyl0aGlzLnNtYXNrPW5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOm8saXNJbmxpbmU6bixwZGZGdW5jdGlvbkZhY3Rvcnk6ZCxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSk7ZWxzZSBpZihjKWlmKGMgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2MuZGljdC5nZXQoIklNIiwiSW1hZ2VNYXNrIik/dGhpcy5tYXNrPW5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOmMsaXNJbmxpbmU6bixpc01hc2s6ITAscGRmRnVuY3Rpb25GYWN0b3J5OmQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pOigwLHIud2FybikoIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay4iKX1lbHNlIHRoaXMubWFzaz1jfXN0YXRpYyBhc3luYyBidWlsZEltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6YSxpc0lubGluZTpuPSExLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KXtjb25zdCBjPWE7bGV0IGw9bnVsbCxoPW51bGw7Y29uc3QgdT1hLmRpY3QuZ2V0KCJTTWFzayIpLGQ9YS5kaWN0LmdldCgiTWFzayIpO3U/dSBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9sPXU6KDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgL1NNYXNrIGZvcm1hdC4iKTpkJiYoZCBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShkKT9oPWQ6KDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgL01hc2sgZm9ybWF0LiIpKTtyZXR1cm4gbmV3IFBERkltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6Yyxpc0lubGluZTpuLHNtYXNrOmwsbWFzazpoLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KX1zdGF0aWMgY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6ZSx3aWR0aDp0LGhlaWdodDphLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnIsaW52ZXJzZURlY29kZTpuLGludGVycG9sYXRlOml9KXtjb25zdCBzPSh0Kzc+PjMpKmEsbz1lLmJ5dGVMZW5ndGg7bGV0IGMsbDtpZighcnx8biYmIShzPT09bykpaWYobil7Yz1uZXcgVWludDhBcnJheShzKTtjLnNldChlKTtjLmZpbGwoMjU1LG8pfWVsc2UgYz1uZXcgVWludDhBcnJheShlKTtlbHNlIGM9ZTtpZihuKWZvcihsPTA7bDxvO2wrKyljW2xdXj0yNTU7cmV0dXJue2RhdGE6Yyx3aWR0aDp0LGhlaWdodDphLGludGVycG9sYXRlOml9fXN0YXRpYyBjcmVhdGVNYXNrKHtpbWdBcnJheTplLHdpZHRoOnQsaGVpZ2h0OmEsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06aSxpbnZlcnNlRGVjb2RlOnMsaW50ZXJwb2xhdGU6byxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpjPSEwfSl7Y29uc3QgbD0xPT09dCYmMT09PWEmJnM9PT0oMD09PWUubGVuZ3RofHwhISgxMjgmZVswXSkpO2lmKGwpcmV0dXJue2lzU2luZ2xlT3BhcXVlUGl4ZWw6bH07aWYoYyYmci5GZWF0dXJlVGVzdC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7Y29uc3Qgcj1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsYSksaT1yLmdldENvbnRleHQoIjJkIix7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZX0pLGM9aS5jcmVhdGVJbWFnZURhdGEodCxhKTsoMCxuLmFwcGx5TWFza0ltYWdlRGF0YSkoe3NyYzplLGRlc3Q6Yy5kYXRhLHdpZHRoOnQsaGVpZ2h0OmEsaW52ZXJzZURlY29kZTpzfSk7aS5wdXRJbWFnZURhdGEoYywwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6dCxoZWlnaHQ6YSxpbnRlcnBvbGF0ZTpvLGJpdG1hcDpyLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpfX1yZXR1cm4gdGhpcy5jcmVhdGVSYXdNYXNrKHtpbWdBcnJheTplLHdpZHRoOnQsaGVpZ2h0OmEsaW52ZXJzZURlY29kZTpzLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOmksaW50ZXJwb2xhdGU6b30pfWdldCBkcmF3V2lkdGgoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLndpZHRofHwwLHRoaXMubWFzayYmdGhpcy5tYXNrLndpZHRofHwwKX1nZXQgZHJhd0hlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmhlaWdodCx0aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLmhlaWdodHx8MCx0aGlzLm1hc2smJnRoaXMubWFzay5oZWlnaHR8fDApfWRlY29kZUJ1ZmZlcihlKXtjb25zdCB0PXRoaXMuYnBjLGE9dGhpcy5udW1Db21wcyxyPXRoaXMuZGVjb2RlQWRkZW5kcyxuPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLGk9KDE8PHQpLTE7bGV0IHMsbztpZigxPT09dCl7Zm9yKHM9MCxvPWUubGVuZ3RoO3M8bztzKyspZVtzXT0rIWVbc107cmV0dXJufWxldCBjPTA7Zm9yKHM9MCxvPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7czxvO3MrKylmb3IobGV0IHQ9MDt0PGE7dCsrKXtlW2NdPWRlY29kZUFuZENsYW1wKGVbY10sclt0XSxuW3RdLGkpO2MrK319Z2V0Q29tcG9uZW50cyhlKXtjb25zdCB0PXRoaXMuYnBjO2lmKDg9PT10KXJldHVybiBlO2NvbnN0IGE9dGhpcy53aWR0aCxyPXRoaXMuaGVpZ2h0LG49dGhpcy5udW1Db21wcyxpPWEqcipuO2xldCBzLG89MDtzPXQ8PTg/bmV3IFVpbnQ4QXJyYXkoaSk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KGkpOm5ldyBVaW50MzJBcnJheShpKTtjb25zdCBjPWEqbixsPSgxPDx0KS0xO2xldCBoLHUsZD0wO2lmKDE9PT10KXtsZXQgdCxhLG47Zm9yKGxldCBpPTA7aTxyO2krKyl7YT1kKygtOCZjKTtuPWQrYztmb3IoO2Q8YTspe3U9ZVtvKytdO3NbZF09dT4+NyYxO3NbZCsxXT11Pj42JjE7c1tkKzJdPXU+PjUmMTtzW2QrM109dT4+NCYxO3NbZCs0XT11Pj4zJjE7c1tkKzVdPXU+PjImMTtzW2QrNl09dT4+MSYxO3NbZCs3XT0xJnU7ZCs9OH1pZihkPG4pe3U9ZVtvKytdO3Q9MTI4O2Zvcig7ZDxuOyl7c1tkKytdPSshISh1JnQpO3Q+Pj0xfX19fWVsc2V7bGV0IGE9MDt1PTA7Zm9yKGQ9MCxoPWk7ZDxoOysrZCl7aWYoZCVjPT0wKXt1PTA7YT0wfWZvcig7YTx0Oyl7dT11PDw4fGVbbysrXTthKz04fWNvbnN0IHI9YS10O2xldCBuPXU+PnI7bjwwP249MDpuPmwmJihuPWwpO3NbZF09bjt1Jj0oMTw8ciktMTthPXJ9fXJldHVybiBzfWZpbGxPcGFjaXR5KGUsdCxhLG4saSl7Y29uc3Qgcz10aGlzLnNtYXNrLG89dGhpcy5tYXNrO2xldCBjLGwsaCx1LGQsZjtpZihzKXtsPXMud2lkdGg7aD1zLmhlaWdodDtjPW5ldyBVaW50OENsYW1wZWRBcnJheShsKmgpO3MuZmlsbEdyYXlCdWZmZXIoYyk7bD09PXQmJmg9PT1hfHwoYz1yZXNpemVJbWFnZU1hc2soYyxzLmJwYyxsLGgsdCxhKSl9ZWxzZSBpZihvKWlmKG8gaW5zdGFuY2VvZiBQREZJbWFnZSl7bD1vLndpZHRoO2g9by5oZWlnaHQ7Yz1uZXcgVWludDhDbGFtcGVkQXJyYXkobCpoKTtvLm51bUNvbXBzPTE7by5maWxsR3JheUJ1ZmZlcihjKTtmb3IodT0wLGQ9bCpoO3U8ZDsrK3UpY1t1XT0yNTUtY1t1XTtsPT09dCYmaD09PWF8fChjPXJlc2l6ZUltYWdlTWFzayhjLG8uYnBjLGwsaCx0LGEpKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KG8pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIG1hc2sgZm9ybWF0LiIpO3tjPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEpO2NvbnN0IGU9dGhpcy5udW1Db21wcztmb3IodT0wLGQ9dCphO3U8ZDsrK3Upe2xldCB0PTA7Y29uc3QgYT11KmU7Zm9yKGY9MDtmPGU7KytmKXtjb25zdCBlPWlbYStmXSxyPTIqZjtpZihlPG9bcl18fGU+b1tyKzFdKXt0PTI1NTticmVha319Y1t1XT10fX19aWYoYylmb3IodT0wLGY9MyxkPXQqbjt1PGQ7Kyt1LGYrPTQpZVtmXT1jW3VdO2Vsc2UgZm9yKHU9MCxmPTMsZD10Km47dTxkOysrdSxmKz00KWVbZl09MjU1fXVuZG9QcmVibGVuZChlLHQsYSl7Y29uc3Qgcj10aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLm1hdHRlO2lmKCFyKXJldHVybjtjb25zdCBuPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IociwwKSxpPW5bMF0scz1uWzFdLG89blsyXSxjPXQqYSo0O2ZvcihsZXQgdD0wO3Q8Yzt0Kz00KXtjb25zdCBhPWVbdCszXTtpZigwPT09YSl7ZVt0XT0yNTU7ZVt0KzFdPTI1NTtlW3QrMl09MjU1O2NvbnRpbnVlfWNvbnN0IHI9MjU1L2E7ZVt0XT0oZVt0XS1pKSpyK2k7ZVt0KzFdPShlW3QrMV0tcykqcitzO2VbdCsyXT0oZVt0KzJdLW8pKnIrb319Y3JlYXRlSW1hZ2VEYXRhKGU9ITEpe2NvbnN0IHQ9dGhpcy5kcmF3V2lkdGgsYT10aGlzLmRyYXdIZWlnaHQsbj17d2lkdGg6dCxoZWlnaHQ6YSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlLGtpbmQ6MCxkYXRhOm51bGx9LGk9dGhpcy5udW1Db21wcyxzPXRoaXMud2lkdGgsbz10aGlzLmhlaWdodCxsPXRoaXMuYnBjLGg9cyppKmwrNz4+MztpZighZSl7bGV0IGU7IkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT1sP2U9ci5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PWx8fHRoaXMubmVlZHNEZWNvZGV8fChlPXIuSW1hZ2VLaW5kLlJHQl8yNEJQUCk7aWYoZSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJnQ9PT1zJiZhPT09byl7bi5raW5kPWU7bi5kYXRhPXRoaXMuZ2V0SW1hZ2VCeXRlcyhvKmgse30pO2lmKHRoaXMubmVlZHNEZWNvZGUpeygwLHIuYXNzZXJ0KShlPT09ci5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2NvbnN0IHQ9bi5kYXRhO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKyl0W2VdXj0yNTV9cmV0dXJuIG59aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIGMuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2spe2xldCBlPW8qaDtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6ZSo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpuLmtpbmQ9ci5JbWFnZUtpbmQuUkdCXzI0QlBQO24uZGF0YT10aGlzLmdldEltYWdlQnl0ZXMoZSx7ZHJhd1dpZHRoOnQsZHJhd0hlaWdodDphLGZvcmNlUkdCOiEwfSk7cmV0dXJuIG59fX1jb25zdCB1PXRoaXMuZ2V0SW1hZ2VCeXRlcyhvKmgse2ludGVybmFsOiEwfSksZD0wfHUubGVuZ3RoL2gqYS9vLGY9dGhpcy5nZXRDb21wb25lbnRzKHUpO2xldCBnLHA7aWYoZXx8dGhpcy5zbWFza3x8dGhpcy5tYXNrKXtuLmtpbmQ9ci5JbWFnZUtpbmQuUkdCQV8zMkJQUDtuLmRhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqYSo0KTtnPTE7cD0hMDt0aGlzLmZpbGxPcGFjaXR5KG4uZGF0YSx0LGEsZCxmKX1lbHNle24ua2luZD1yLkltYWdlS2luZC5SR0JfMjRCUFA7bi5kYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEqMyk7Zz0wO3A9ITF9dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIoZik7dGhpcy5jb2xvclNwYWNlLmZpbGxSZ2Iobi5kYXRhLHMsbyx0LGEsZCxsLGYsZyk7cCYmdGhpcy51bmRvUHJlYmxlbmQobi5kYXRhLHQsZCk7cmV0dXJuIG59ZmlsbEdyYXlCdWZmZXIoZSl7Y29uc3QgdD10aGlzLm51bUNvbXBzO2lmKDEhPT10KXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBSZWFkaW5nIGdyYXkgc2NhbGUgZnJvbSBhIGNvbG9yIGltYWdlOiAke3R9YCk7Y29uc3QgYT10aGlzLndpZHRoLG49dGhpcy5oZWlnaHQsaT10aGlzLmJwYyxzPWEqdCppKzc+PjMsbz10aGlzLmdldEltYWdlQnl0ZXMobipzLHtpbnRlcm5hbDohMH0pLGM9dGhpcy5nZXRDb21wb25lbnRzKG8pO2xldCBsLGg7aWYoMT09PWkpe2g9YSpuO2lmKHRoaXMubmVlZHNEZWNvZGUpZm9yKGw9MDtsPGg7KytsKWVbbF09Y1tsXS0xJjI1NTtlbHNlIGZvcihsPTA7bDxoOysrbCllW2xdPTI1NSYtY1tsXTtyZXR1cm59dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIoYyk7aD1hKm47Y29uc3QgdT0yNTUvKCgxPDxpKS0xKTtmb3IobD0wO2w8aDsrK2wpZVtsXT11KmNbbF19Z2V0SW1hZ2VCeXRlcyhlLHtkcmF3V2lkdGg6dCxkcmF3SGVpZ2h0OmEsZm9yY2VSR0I6bj0hMSxpbnRlcm5hbDppPSExfSl7dGhpcy5pbWFnZS5yZXNldCgpO3RoaXMuaW1hZ2UuZHJhd1dpZHRoPXR8fHRoaXMud2lkdGg7dGhpcy5pbWFnZS5kcmF3SGVpZ2h0PWF8fHRoaXMuaGVpZ2h0O3RoaXMuaW1hZ2UuZm9yY2VSR0I9ISFuO2NvbnN0IHM9dGhpcy5pbWFnZS5nZXRCeXRlcyhlKTtpZihpfHx0aGlzLmltYWdlIGluc3RhbmNlb2Ygby5EZWNvZGVTdHJlYW0pcmV0dXJuIHM7KDAsci5hc3NlcnQpKHMgaW5zdGFuY2VvZiBVaW50OEFycmF5LCdQREZJbWFnZS5nZXRJbWFnZUJ5dGVzOiBVbnN1cHBvcnRlZCAiaW1hZ2VCeXRlcyIgdHlwZS4nKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocyl9fXQuUERGSW1hZ2U9UERGSW1hZ2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5hcHBseU1hc2tJbWFnZURhdGE9ZnVuY3Rpb24gYXBwbHlNYXNrSW1hZ2VEYXRhKHtzcmM6ZSxzcmNQb3M6dD0wLGRlc3Q6YSxkZXN0UG9zOm49MCx3aWR0aDppLGhlaWdodDpzLGludmVyc2VEZWNvZGU6bz0hMX0pe2NvbnN0IGM9ci5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSxbbCxoXT1vP1swLGNdOltjLDBdLHU9aT4+MyxkPTcmaSxmPWUubGVuZ3RoO2E9bmV3IFVpbnQzMkFycmF5KGEuYnVmZmVyKTtmb3IobGV0IHI9MDtyPHM7cisrKXtmb3IoY29uc3Qgcj10K3U7dDxyO3QrKyl7Y29uc3Qgcj10PGY/ZVt0XToyNTU7YVtuKytdPTEyOCZyP2g6bDthW24rK109NjQmcj9oOmw7YVtuKytdPTMyJnI/aDpsO2FbbisrXT0xNiZyP2g6bDthW24rK109OCZyP2g6bDthW24rK109NCZyP2g6bDthW24rK109MiZyP2g6bDthW24rK109MSZyP2g6bH1pZigwPT09ZCljb250aW51ZTtjb25zdCByPXQ8Zj9lW3QrK106MjU1O2ZvcihsZXQgZT0wO2U8ZDtlKyspYVtuKytdPXImMTw8Ny1lP2g6bH1yZXR1cm57c3JjUG9zOnQsZGVzdFBvczpufX07dmFyIHI9YSgyKX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmluY3JlbWVudGFsVXBkYXRlPWZ1bmN0aW9uIGluY3JlbWVudGFsVXBkYXRlKHtvcmlnaW5hbERhdGE6ZSx4cmVmSW5mbzp0LG5ld1JlZnM6YSx4cmVmOm89bnVsbCxoYXNYZmE6bD0hMSx4ZmFEYXRhc2V0c1JlZjpoPW51bGwsaGFzWGZhRGF0YXNldHNFbnRyeTp1PSExLGFjcm9Gb3JtUmVmOmQ9bnVsbCxhY3JvRm9ybTpmPW51bGwseGZhRGF0YTpnPW51bGx9KXtsJiZmdW5jdGlvbiB1cGRhdGVYRkEoe3hmYURhdGE6ZSx4ZmFEYXRhc2V0c1JlZjp0LGhhc1hmYURhdGFzZXRzRW50cnk6YSxhY3JvRm9ybVJlZjpuLGFjcm9Gb3JtOm8sbmV3UmVmczpjLHhyZWY6bCx4cmVmSW5mbzpofSl7aWYobnVsbD09PWwpcmV0dXJuO2lmKCFhKXtpZighbil7KDAsci53YXJuKSgiWEZBIC0gQ2Fubm90IHNhdmUgaXQiKTtyZXR1cm59Y29uc3QgZT1vLmdldCgiWEZBIiksYT1lLnNsaWNlKCk7YS5zcGxpY2UoMiwwLCJkYXRhc2V0cyIpO2Euc3BsaWNlKDMsMCx0KTtvLnNldCgiWEZBIixhKTtjb25zdCBpPWwuZW5jcnlwdDtsZXQgcz1udWxsO2kmJihzPWkuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKG4ubnVtLG4uZ2VuKSk7Y29uc3QgaD1bYCR7bi5udW19ICR7bi5nZW59IG9ialxuYF07d3JpdGVEaWN0KG8saCxzKTtoLnB1c2goIlxuIik7by5zZXQoIlhGQSIsZSk7Yy5wdXNoKHtyZWY6bixkYXRhOmguam9pbigiIil9KX1pZihudWxsPT09ZSl7ZT1mdW5jdGlvbiB3cml0ZVhGQURhdGFGb3JBY3JvZm9ybShlLHQpe2NvbnN0IGE9bmV3IHMuU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO2Zvcihjb25zdHt4ZmE6ZX1vZiB0KXtpZighZSljb250aW51ZTtjb25zdHtwYXRoOnQsdmFsdWU6bn09ZTtpZighdCljb250aW51ZTtjb25zdCBvPWEuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUoKDAsaS5wYXJzZVhGQVBhdGgpKHQpLDApO28/QXJyYXkuaXNBcnJheShuKT9vLmNoaWxkTm9kZXM9bi5tYXAoKGU9Pm5ldyBzLlNpbXBsZURPTU5vZGUoInZhbHVlIixlKSkpOm8uY2hpbGROb2Rlcz1bbmV3IHMuU2ltcGxlRE9NTm9kZSgiI3RleHQiLG4pXTooMCxyLndhcm4pKGBOb2RlIG5vdCBmb3VuZCBmb3IgcGF0aDogJHt0fWApfWNvbnN0IG49W107YS5kb2N1bWVudEVsZW1lbnQuZHVtcChuKTtyZXR1cm4gbi5qb2luKCIiKX0obC5mZXRjaElmUmVmKHQpLmdldFN0cmluZygpLGMpfWNvbnN0IHU9bC5lbmNyeXB0O2lmKHUpe2U9dS5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odC5udW0sdC5nZW4pLmVuY3J5cHRTdHJpbmcoZSl9Y29uc3QgZD1gJHt0Lm51bX0gJHt0Lmdlbn0gb2JqXG48PCAvVHlwZSAvRW1iZWRkZWRGaWxlIC9MZW5ndGggJHtlLmxlbmd0aH0+Plxuc3RyZWFtXG5gK2UrIlxuZW5kc3RyZWFtXG5lbmRvYmpcbiI7Yy5wdXNoKHtyZWY6dCxkYXRhOmR9KX0oe3hmYURhdGE6Zyx4ZmFEYXRhc2V0c1JlZjpoLGhhc1hmYURhdGFzZXRzRW50cnk6dSxhY3JvRm9ybVJlZjpkLGFjcm9Gb3JtOmYsbmV3UmVmczphLHhyZWY6byx4cmVmSW5mbzp0fSk7Y29uc3QgcD1uZXcgbi5EaWN0KG51bGwpLG09dC5uZXdSZWY7bGV0IGIseTtjb25zdCB3PWUuYXQoLTEpO2lmKDEwPT09d3x8MTM9PT13KXtiPVtdO3k9ZS5sZW5ndGh9ZWxzZXtiPVsiXG4iXTt5PWUubGVuZ3RoKzF9cC5zZXQoIlNpemUiLG0ubnVtKzEpO3Auc2V0KCJQcmV2Iix0LnN0YXJ0WFJlZik7cC5zZXQoIlR5cGUiLG4uTmFtZS5nZXQoIlhSZWYiKSk7bnVsbCE9PXQucm9vdFJlZiYmcC5zZXQoIlJvb3QiLHQucm9vdFJlZik7bnVsbCE9PXQuaW5mb1JlZiYmcC5zZXQoIkluZm8iLHQuaW5mb1JlZik7bnVsbCE9PXQuZW5jcnlwdFJlZiYmcC5zZXQoIkVuY3J5cHQiLHQuZW5jcnlwdFJlZik7YS5wdXNoKHtyZWY6bSxkYXRhOiIifSk7YT1hLnNvcnQoKChlLHQpPT5lLnJlZi5udW0tdC5yZWYubnVtKSk7Y29uc3QgUz1bWzAsMSw2NTUzNV1dLHg9WzAsMV07bGV0IGs9MDtmb3IoY29uc3R7cmVmOmUsZGF0YTp0fW9mIGEpe2s9TWF0aC5tYXgoayx5KTtTLnB1c2goWzEseSxNYXRoLm1pbihlLmdlbiw2NTUzNSldKTt5Kz10Lmxlbmd0aDt4LnB1c2goZS5udW0sMSk7Yi5wdXNoKHQpfXAuc2V0KCJJbmRleCIseCk7aWYoQXJyYXkuaXNBcnJheSh0LmZpbGVJZHMpJiZ0LmZpbGVJZHMubGVuZ3RoPjApe2NvbnN0IGU9ZnVuY3Rpb24gY29tcHV0ZU1ENShlLHQpe2NvbnN0IGE9TWF0aC5mbG9vcihEYXRlLm5vdygpLzFlMyksbj10LmZpbGVuYW1lfHwiIixpPVthLnRvU3RyaW5nKCksbixlLnRvU3RyaW5nKCldO2xldCBzPWkucmVkdWNlKCgoZSx0KT0+ZSt0Lmxlbmd0aCksMCk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyh0LmluZm8pKXtpLnB1c2goZSk7cys9ZS5sZW5ndGh9Y29uc3Qgbz1uZXcgVWludDhBcnJheShzKTtsZXQgbD0wO2Zvcihjb25zdCBlIG9mIGkpe3dyaXRlU3RyaW5nKGUsbCxvKTtsKz1lLmxlbmd0aH1yZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKCgwLGMuY2FsY3VsYXRlTUQ1KShvKSl9KHksdCk7cC5zZXQoIklEIixbdC5maWxlSWRzWzBdLGVdKX1jb25zdCBDPVsxLE1hdGguY2VpbChNYXRoLmxvZzIoaykvOCksMl0sdj0oQ1swXStDWzFdK0NbMl0pKlMubGVuZ3RoO3Auc2V0KCJXIixDKTtwLnNldCgiTGVuZ3RoIix2KTtiLnB1c2goYCR7bS5udW19ICR7bS5nZW59IG9ialxuYCk7d3JpdGVEaWN0KHAsYixudWxsKTtiLnB1c2goIiBzdHJlYW1cbiIpO2NvbnN0IEY9Yi5yZWR1Y2UoKChlLHQpPT5lK3QubGVuZ3RoKSwwKSxPPWBcbmVuZHN0cmVhbVxuZW5kb2JqXG5zdGFydHhyZWZcbiR7eX1cbiUlRU9GXG5gLFQ9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrRit2K08ubGVuZ3RoKTtULnNldChlKTtsZXQgTT1lLmxlbmd0aDtmb3IoY29uc3QgZSBvZiBiKXt3cml0ZVN0cmluZyhlLE0sVCk7TSs9ZS5sZW5ndGh9Zm9yKGNvbnN0W2UsdCxhXW9mIFMpe009d3JpdGVJbnQoZSxDWzBdLE0sVCk7TT13cml0ZUludCh0LENbMV0sTSxUKTtNPXdyaXRlSW50KGEsQ1syXSxNLFQpfXdyaXRlU3RyaW5nKE8sTSxUKTtyZXR1cm4gVH07dC53cml0ZURpY3Q9d3JpdGVEaWN0O3Qud3JpdGVPYmplY3Q9ZnVuY3Rpb24gd3JpdGVPYmplY3QoZSx0LGEscil7YS5wdXNoKGAke2UubnVtfSAke2UuZ2VufSBvYmpcbmApO3QgaW5zdGFuY2VvZiBuLkRpY3Q/d3JpdGVEaWN0KHQsYSxyKTp0IGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtJiZ3cml0ZVN0cmVhbSh0LGEscik7YS5wdXNoKCJcbmVuZG9ialxuIil9O3ZhciByPWEoMiksbj1hKDMpLGk9YSg0KSxzPWEoNjQpLG89YSg1KSxjPWEoNjUpO2Z1bmN0aW9uIHdyaXRlRGljdChlLHQsYSl7dC5wdXNoKCI8PCIpO2Zvcihjb25zdCByIG9mIGUuZ2V0S2V5cygpKXt0LnB1c2goYCAvJHsoMCxpLmVzY2FwZVBERk5hbWUpKHIpfSBgKTt3cml0ZVZhbHVlKGUuZ2V0UmF3KHIpLHQsYSl9dC5wdXNoKCI+PiIpfWZ1bmN0aW9uIHdyaXRlU3RyZWFtKGUsdCxhKXt3cml0ZURpY3QoZS5kaWN0LHQsYSk7dC5wdXNoKCIgc3RyZWFtXG4iKTtsZXQgcj1lLmdldFN0cmluZygpO251bGwhPT1hJiYocj1hLmVuY3J5cHRTdHJpbmcocikpO3QucHVzaChyLCJcbmVuZHN0cmVhbVxuIil9ZnVuY3Rpb24gd3JpdGVWYWx1ZShlLHQsYSl7aWYoZSBpbnN0YW5jZW9mIG4uTmFtZSl0LnB1c2goYC8keygwLGkuZXNjYXBlUERGTmFtZSkoZS5uYW1lKX1gKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBuLlJlZil0LnB1c2goYCR7ZS5udW19ICR7ZS5nZW59IFJgKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpIWZ1bmN0aW9uIHdyaXRlQXJyYXkoZSx0LGEpe3QucHVzaCgiWyIpO2xldCByPSEwO2Zvcihjb25zdCBuIG9mIGUpe3I/cj0hMTp0LnB1c2goIiAiKTt3cml0ZVZhbHVlKG4sdCxhKX10LnB1c2goIl0iKX0oZSx0LGEpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKXtudWxsIT09YSYmKGU9YS5lbmNyeXB0U3RyaW5nKGUpKTt0LnB1c2goYCgkeygwLHIuZXNjYXBlU3RyaW5nKShlKX0pYCl9ZWxzZSJudW1iZXIiPT10eXBlb2YgZT90LnB1c2goKDAsaS5udW1iZXJUb1N0cmluZykoZSkpOiJib29sZWFuIj09dHlwZW9mIGU/dC5wdXNoKGUudG9TdHJpbmcoKSk6ZSBpbnN0YW5jZW9mIG4uRGljdD93cml0ZURpY3QoZSx0LGEpOmUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0/d3JpdGVTdHJlYW0oZSx0LGEpOm51bGw9PT1lP3QucHVzaCgibnVsbCIpOigwLHIud2FybikoYFVuaGFuZGxlZCB2YWx1ZSBpbiB3cml0ZXI6ICR7dHlwZW9mIGV9LCBwbGVhc2UgZmlsZSBhIGJ1Zy5gKX1mdW5jdGlvbiB3cml0ZUludChlLHQsYSxyKXtmb3IobGV0IG49dCthLTE7bj5hLTE7bi0tKXtyW25dPTI1NSZlO2U+Pj04fXJldHVybiBhK3R9ZnVuY3Rpb24gd3JpdGVTdHJpbmcoZSx0LGEpe2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylhW3Qrcl09MjU1JmUuY2hhckNvZGVBdChyKX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YTUxQYXJzZXJFcnJvckNvZGU9dC5YTUxQYXJzZXJCYXNlPXQuU2ltcGxlWE1MUGFyc2VyPXQuU2ltcGxlRE9NTm9kZT12b2lkIDA7dmFyIHI9YSg0KTtjb25zdCBuPXtOb0Vycm9yOjAsRW5kT2ZEb2N1bWVudDotMSxVbnRlcm1pbmF0ZWRDZGF0Oi0yLFVudGVybWluYXRlZFhtbERlY2xhcmF0aW9uOi0zLFVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbjotNCxVbnRlcm1pbmF0ZWRDb21tZW50Oi01LE1hbGZvcm1lZEVsZW1lbnQ6LTYsT3V0T2ZNZW1vcnk6LTcsVW50ZXJtaW5hdGVkQXR0cmlidXRlVmFsdWU6LTgsVW50ZXJtaW5hdGVkRWxlbWVudDotOSxFbGVtZW50TmV2ZXJCZWd1bjotMTB9O3QuWE1MUGFyc2VyRXJyb3JDb2RlPW47ZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGUsdCl7Y29uc3QgYT1lW3RdO3JldHVybiIgIj09PWF8fCJcbiI9PT1hfHwiXHIiPT09YXx8Ilx0Ij09PWF9Y2xhc3MgWE1MUGFyc2VyQmFzZXtfcmVzb2x2ZUVudGl0aWVzKGUpe3JldHVybiBlLnJlcGxhY2UoLyYoW147XSspOy9nLCgoZSx0KT0+e2lmKCIjeCI9PT10LnN1YnN0cmluZygwLDIpKXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpO2lmKCIjIj09PXQuc3Vic3RyaW5nKDAsMSkpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHQuc3Vic3RyaW5nKDEpLDEwKSk7c3dpdGNoKHQpe2Nhc2UibHQiOnJldHVybiI8IjtjYXNlImd0IjpyZXR1cm4iPiI7Y2FzZSJhbXAiOnJldHVybiImIjtjYXNlInF1b3QiOnJldHVybiciJztjYXNlImFwb3MiOnJldHVybiInIn1yZXR1cm4gdGhpcy5vblJlc29sdmVFbnRpdHkodCl9KSl9X3BhcnNlQ29udGVudChlLHQpe2NvbnN0IGE9W107bGV0IHI9dDtmdW5jdGlvbiBza2lwV3MoKXtmb3IoO3I8ZS5sZW5ndGgmJmlzV2hpdGVzcGFjZShlLHIpOykrK3J9Zm9yKDtyPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUscikmJiI+IiE9PWVbcl0mJiIvIiE9PWVbcl07KSsrcjtjb25zdCBuPWUuc3Vic3RyaW5nKHQscik7c2tpcFdzKCk7Zm9yKDtyPGUubGVuZ3RoJiYiPiIhPT1lW3JdJiYiLyIhPT1lW3JdJiYiPyIhPT1lW3JdOyl7c2tpcFdzKCk7bGV0IHQ9IiIsbj0iIjtmb3IoO3I8ZS5sZW5ndGgmJiFpc1doaXRlc3BhY2UoZSxyKSYmIj0iIT09ZVtyXTspe3QrPWVbcl07KytyfXNraXBXcygpO2lmKCI9IiE9PWVbcl0pcmV0dXJuIG51bGw7KytyO3NraXBXcygpO2NvbnN0IGk9ZVtyXTtpZignIichPT1pJiYiJyIhPT1pKXJldHVybiBudWxsO2NvbnN0IHM9ZS5pbmRleE9mKGksKytyKTtpZihzPDApcmV0dXJuIG51bGw7bj1lLnN1YnN0cmluZyhyLHMpO2EucHVzaCh7bmFtZTp0LHZhbHVlOnRoaXMuX3Jlc29sdmVFbnRpdGllcyhuKX0pO3I9cysxO3NraXBXcygpfXJldHVybntuYW1lOm4sYXR0cmlidXRlczphLHBhcnNlZDpyLXR9fV9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHQpe2xldCBhPXQ7Zm9yKDthPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUsYSkmJiI+IiE9PWVbYV0mJiI/IiE9PWVbYV0mJiIvIiE9PWVbYV07KSsrYTtjb25zdCByPWUuc3Vic3RyaW5nKHQsYSk7IWZ1bmN0aW9uIHNraXBXcygpe2Zvcig7YTxlLmxlbmd0aCYmaXNXaGl0ZXNwYWNlKGUsYSk7KSsrYX0oKTtjb25zdCBuPWE7Zm9yKDthPGUubGVuZ3RoJiYoIj8iIT09ZVthXXx8Ij4iIT09ZVthKzFdKTspKythO3JldHVybntuYW1lOnIsdmFsdWU6ZS5zdWJzdHJpbmcobixhKSxwYXJzZWQ6YS10fX1wYXJzZVhtbChlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aDspe2xldCBhPXQ7aWYoIjwiPT09ZVt0XSl7KythO2xldCB0O3N3aXRjaChlW2FdKXtjYXNlIi8iOisrYTt0PWUuaW5kZXhPZigiPiIsYSk7aWYodDwwKXt0aGlzLm9uRXJyb3Iobi5VbnRlcm1pbmF0ZWRFbGVtZW50KTtyZXR1cm59dGhpcy5vbkVuZEVsZW1lbnQoZS5zdWJzdHJpbmcoYSx0KSk7YT10KzE7YnJlYWs7Y2FzZSI/IjorK2E7Y29uc3Qgcj10aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLGEpO2lmKCI/PiIhPT1lLnN1YnN0cmluZyhhK3IucGFyc2VkLGErci5wYXJzZWQrMikpe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZFhtbERlY2xhcmF0aW9uKTtyZXR1cm59dGhpcy5vblBpKHIubmFtZSxyLnZhbHVlKTthKz1yLnBhcnNlZCsyO2JyZWFrO2Nhc2UiISI6aWYoIi0tIj09PWUuc3Vic3RyaW5nKGErMSxhKzMpKXt0PWUuaW5kZXhPZigiLS1ceDNlIixhKzMpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkQ29tbWVudCk7cmV0dXJufXRoaXMub25Db21tZW50KGUuc3Vic3RyaW5nKGErMyx0KSk7YT10KzN9ZWxzZSBpZigiW0NEQVRBWyI9PT1lLnN1YnN0cmluZyhhKzEsYSs4KSl7dD1lLmluZGV4T2YoIl1dPiIsYSs4KTtpZih0PDApe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZENkYXQpO3JldHVybn10aGlzLm9uQ2RhdGEoZS5zdWJzdHJpbmcoYSs4LHQpKTthPXQrM31lbHNle2lmKCJET0NUWVBFIiE9PWUuc3Vic3RyaW5nKGErMSxhKzgpKXt0aGlzLm9uRXJyb3Iobi5NYWxmb3JtZWRFbGVtZW50KTtyZXR1cm59e2NvbnN0IHI9ZS5pbmRleE9mKCJbIixhKzgpO2xldCBpPSExO3Q9ZS5pbmRleE9mKCI+IixhKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uKTtyZXR1cm59aWYocj4wJiZ0PnIpe3Q9ZS5pbmRleE9mKCJdPiIsYSs4KTtpZih0PDApe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7cmV0dXJufWk9ITB9Y29uc3Qgcz1lLnN1YnN0cmluZyhhKzgsdCsoaT8xOjApKTt0aGlzLm9uRG9jdHlwZShzKTthPXQrKGk/MjoxKX19YnJlYWs7ZGVmYXVsdDpjb25zdCBpPXRoaXMuX3BhcnNlQ29udGVudChlLGEpO2lmKG51bGw9PT1pKXt0aGlzLm9uRXJyb3Iobi5NYWxmb3JtZWRFbGVtZW50KTtyZXR1cm59bGV0IHM9ITE7aWYoIi8+Ij09PWUuc3Vic3RyaW5nKGEraS5wYXJzZWQsYStpLnBhcnNlZCsyKSlzPSEwO2Vsc2UgaWYoIj4iIT09ZS5zdWJzdHJpbmcoYStpLnBhcnNlZCxhK2kucGFyc2VkKzEpKXt0aGlzLm9uRXJyb3Iobi5VbnRlcm1pbmF0ZWRFbGVtZW50KTtyZXR1cm59dGhpcy5vbkJlZ2luRWxlbWVudChpLm5hbWUsaS5hdHRyaWJ1dGVzLHMpO2ErPWkucGFyc2VkKyhzPzI6MSl9fWVsc2V7Zm9yKDthPGUubGVuZ3RoJiYiPCIhPT1lW2FdOylhKys7Y29uc3Qgcj1lLnN1YnN0cmluZyh0LGEpO3RoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyhyKSl9dD1hfX1vblJlc29sdmVFbnRpdHkoZSl7cmV0dXJuYCYke2V9O2B9b25QaShlLHQpe31vbkNvbW1lbnQoZSl7fW9uQ2RhdGEoZSl7fW9uRG9jdHlwZShlKXt9b25UZXh0KGUpe31vbkJlZ2luRWxlbWVudChlLHQsYSl7fW9uRW5kRWxlbWVudChlKXt9b25FcnJvcihlKXt9fXQuWE1MUGFyc2VyQmFzZT1YTUxQYXJzZXJCYXNlO2NsYXNzIFNpbXBsZURPTU5vZGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLm5vZGVOYW1lPWU7dGhpcy5ub2RlVmFsdWU9dDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicGFyZW50Tm9kZSIse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlc1swXX1nZXQgbmV4dFNpYmxpbmcoKXtjb25zdCBlPXRoaXMucGFyZW50Tm9kZS5jaGlsZE5vZGVzO2lmKCFlKXJldHVybjtjb25zdCB0PWUuaW5kZXhPZih0aGlzKTtyZXR1cm4tMSE9PXQ/ZVt0KzFdOnZvaWQgMH1nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzP3RoaXMuY2hpbGROb2Rlcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRleHRDb250ZW50fSkpLmpvaW4oIiIpOnRoaXMubm9kZVZhbHVlfHwiIn1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfHxbXX1oYXNDaGlsZE5vZGVzKCl7cmV0dXJuIHRoaXMuY2hpbGROb2RlcyYmdGhpcy5jaGlsZE5vZGVzLmxlbmd0aD4wfXNlYXJjaE5vZGUoZSx0KXtpZih0Pj1lLmxlbmd0aClyZXR1cm4gdGhpcztjb25zdCBhPWVbdF0scj1bXTtsZXQgbj10aGlzO2Zvcig7Oyl7aWYoYS5uYW1lPT09bi5ub2RlTmFtZSl7aWYoMCE9PWEucG9zKXtpZigwPT09ci5sZW5ndGgpcmV0dXJuIG51bGw7e2NvbnN0W2ldPXIucG9wKCk7bGV0IHM9MDtmb3IoY29uc3QgciBvZiBpLmNoaWxkTm9kZXMpaWYoYS5uYW1lPT09ci5ub2RlTmFtZSl7aWYocz09PWEucG9zKXJldHVybiByLnNlYXJjaE5vZGUoZSx0KzEpO3MrK31yZXR1cm4gbi5zZWFyY2hOb2RlKGUsdCsxKX19e2NvbnN0IGE9bi5zZWFyY2hOb2RlKGUsdCsxKTtpZihudWxsIT09YSlyZXR1cm4gYX19aWYobi5jaGlsZE5vZGVzJiYwIT09bi5jaGlsZE5vZGVzLmxlbmd0aCl7ci5wdXNoKFtuLDBdKTtuPW4uY2hpbGROb2Rlc1swXX1lbHNle2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IoOzAhPT1yLmxlbmd0aDspe2NvbnN0W2UsdF09ci5wb3AoKSxhPXQrMTtpZihhPGUuY2hpbGROb2Rlcy5sZW5ndGgpe3IucHVzaChbZSxhXSk7bj1lLmNoaWxkTm9kZXNbYV07YnJlYWt9fWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbH19fWR1bXAoZSl7aWYoIiN0ZXh0IiE9PXRoaXMubm9kZU5hbWUpe2UucHVzaChgPCR7dGhpcy5ub2RlTmFtZX1gKTtpZih0aGlzLmF0dHJpYnV0ZXMpZm9yKGNvbnN0IHQgb2YgdGhpcy5hdHRyaWJ1dGVzKWUucHVzaChgICR7dC5uYW1lfT0iJHsoMCxyLmVuY29kZVRvWG1sU3RyaW5nKSh0LnZhbHVlKX0iYCk7aWYodGhpcy5oYXNDaGlsZE5vZGVzKCkpe2UucHVzaCgiPiIpO2Zvcihjb25zdCB0IG9mIHRoaXMuY2hpbGROb2Rlcyl0LmR1bXAoZSk7ZS5wdXNoKGA8LyR7dGhpcy5ub2RlTmFtZX0+YCl9ZWxzZSB0aGlzLm5vZGVWYWx1ZT9lLnB1c2goYD4keygwLHIuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKX08LyR7dGhpcy5ub2RlTmFtZX0+YCk6ZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKCgwLHIuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKSl9fXQuU2ltcGxlRE9NTm9kZT1TaW1wbGVET01Ob2RlO3QuU2ltcGxlWE1MUGFyc2VyPWNsYXNzIFNpbXBsZVhNTFBhcnNlciBleHRlbmRzIFhNTFBhcnNlckJhc2V7Y29uc3RydWN0b3Ioe2hhc0F0dHJpYnV0ZXM6ZT0hMSxsb3dlckNhc2VOYW1lOnQ9ITF9KXtzdXBlcigpO3RoaXMuX2N1cnJlbnRGcmFnbWVudD1udWxsO3RoaXMuX3N0YWNrPW51bGw7dGhpcy5fZXJyb3JDb2RlPW4uTm9FcnJvcjt0aGlzLl9oYXNBdHRyaWJ1dGVzPWU7dGhpcy5fbG93ZXJDYXNlTmFtZT10fXBhcnNlRnJvbVN0cmluZyhlKXt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W107dGhpcy5fc3RhY2s9W107dGhpcy5fZXJyb3JDb2RlPW4uTm9FcnJvcjt0aGlzLnBhcnNlWG1sKGUpO2lmKHRoaXMuX2Vycm9yQ29kZSE9PW4uTm9FcnJvcilyZXR1cm47Y29uc3RbdF09dGhpcy5fY3VycmVudEZyYWdtZW50O3JldHVybiB0P3tkb2N1bWVudEVsZW1lbnQ6dH06dm9pZCAwfW9uVGV4dChlKXtpZihmdW5jdGlvbiBpc1doaXRlc3BhY2VTdHJpbmcoZSl7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCsrKWlmKCFpc1doaXRlc3BhY2UoZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0oZSkpcmV0dXJuO2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkNkYXRhKGUpe2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkJlZ2luRWxlbWVudChlLHQsYSl7dGhpcy5fbG93ZXJDYXNlTmFtZSYmKGU9ZS50b0xvd2VyQ2FzZSgpKTtjb25zdCByPW5ldyBTaW1wbGVET01Ob2RlKGUpO3IuY2hpbGROb2Rlcz1bXTt0aGlzLl9oYXNBdHRyaWJ1dGVzJiYoci5hdHRyaWJ1dGVzPXQpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHIpO2lmKCFhKXt0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCk7dGhpcy5fY3VycmVudEZyYWdtZW50PXIuY2hpbGROb2Rlc319b25FbmRFbGVtZW50KGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107Y29uc3QgdD10aGlzLl9jdXJyZW50RnJhZ21lbnQuYXQoLTEpO2lmKCF0KXJldHVybiBudWxsO2Zvcihjb25zdCBlIG9mIHQuY2hpbGROb2RlcyllLnBhcmVudE5vZGU9dDtyZXR1cm4gdH1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5jYWxjdWxhdGVTSEEyNTY9dC5jYWxjdWxhdGVNRDU9dC5QREYyMD10LlBERjE3PXQuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeT10LkFSQ0ZvdXJDaXBoZXI9dC5BRVMyNTZDaXBoZXI9dC5BRVMxMjhDaXBoZXI9dm9pZCAwO3QuY2FsY3VsYXRlU0hBMzg0PWNhbGN1bGF0ZVNIQTM4NDt0LmNhbGN1bGF0ZVNIQTUxMj12b2lkIDA7dmFyIHI9YSgyKSxuPWEoMyksaT1hKDY2KTtjbGFzcyBBUkNGb3VyQ2lwaGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuYT0wO3RoaXMuYj0wO2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KSxhPWUubGVuZ3RoO2ZvcihsZXQgZT0wO2U8MjU2OysrZSl0W2VdPWU7Zm9yKGxldCByPTAsbj0wO3I8MjU2Oysrcil7Y29uc3QgaT10W3JdO249bitpK2VbciVhXSYyNTU7dFtyXT10W25dO3Rbbl09aX10aGlzLnM9dH1lbmNyeXB0QmxvY2soZSl7bGV0IHQ9dGhpcy5hLGE9dGhpcy5iO2NvbnN0IHI9dGhpcy5zLG49ZS5sZW5ndGgsaT1uZXcgVWludDhBcnJheShuKTtmb3IobGV0IHM9MDtzPG47KytzKXt0PXQrMSYyNTU7Y29uc3Qgbj1yW3RdO2E9YStuJjI1NTtjb25zdCBvPXJbYV07clt0XT1vO3JbYV09bjtpW3NdPWVbc11ecltuK28mMjU1XX10aGlzLmE9dDt0aGlzLmI9YTtyZXR1cm4gaX1kZWNyeXB0QmxvY2soZSl7cmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGUpfWVuY3J5cHQoZSl7cmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGUpfX10LkFSQ0ZvdXJDaXBoZXI9QVJDRm91ckNpcGhlcjtjb25zdCBzPWZ1bmN0aW9uIGNhbGN1bGF0ZU1ENUNsb3N1cmUoKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFs3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjFdKSx0PW5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LC0zODk1NjQ1ODYsNjA2MTA1ODE5LC0xMDQ0NTI1MzMwLC0xNzY0MTg4OTcsMTIwMDA4MDQyNiwtMTQ3MzIzMTM0MSwtNDU3MDU5ODMsMTc3MDAzNTQxNiwtMTk1ODQxNDQxNywtNDIwNjMsLTE5OTA0MDQxNjIsMTgwNDYwMzY4MiwtNDAzNDExMDEsLTE1MDIwMDIyOTAsMTIzNjUzNTMyOSwtMTY1Nzk2NTEwLC0xMDY5NTAxNjMyLDY0MzcxNzcxMywtMzczODk3MzAyLC03MDE1NTg2OTEsMzgwMTYwODMsLTY2MDQ3ODMzNSwtNDA1NTM3ODQ4LDU2ODQ0NjQzOCwtMTAxOTgwMzY5MCwtMTg3MzYzOTYxLDExNjM1MzE1MDEsLTE0NDQ2ODE0NjcsLTUxNDAzNzg0LDE3MzUzMjg0NzMsLTE5MjY2MDc3MzQsLTM3ODU1OCwtMjAyMjU3NDQ2MywxODM5MDMwNTYyLC0zNTMwOTU1NiwtMTUzMDk5MjA2MCwxMjcyODkzMzUzLC0xNTU0OTc2MzIsLTEwOTQ3MzA2NDAsNjgxMjc5MTc0LC0zNTg1MzcyMjIsLTcyMjUyMTk3OSw3NjAyOTE4OSwtNjQwMzY0NDg3LC00MjE4MTU4MzUsNTMwNzQyNTIwLC05OTUzMzg2NTEsLTE5ODYzMDg0NCwxMTI2ODkxNDE1LC0xNDE2MzU0OTA1LC01NzQzNDA1NSwxNzAwNDg1NTcxLC0xODk0OTg2NjA2LC0xMDUxNTIzLC0yMDU0OTIyNzk5LDE4NzMzMTMzNTksLTMwNjExNzQ0LC0xNTYwMTk4MzgwLDEzMDkxNTE2NDksLTE0NTUyMzA3MCwtMTEyMDIxMDM3OSw3MTg3ODcyNTksLTM0MzQ4NTU1MV0pO3JldHVybiBmdW5jdGlvbiBoYXNoKGEscixuKXtsZXQgaT0xNzMyNTg0MTkzLHM9LTI3MTczMzg3OSxvPS0xNzMyNTg0MTk0LGM9MjcxNzMzODc4O2NvbnN0IGw9bis3MiYtNjQsaD1uZXcgVWludDhBcnJheShsKTtsZXQgdSxkO2Zvcih1PTA7dTxuOysrdSloW3VdPWFbcisrXTtoW3UrK109MTI4O2NvbnN0IGY9bC04O2Zvcig7dTxmOyloW3UrK109MDtoW3UrK109bjw8MyYyNTU7aFt1KytdPW4+PjUmMjU1O2hbdSsrXT1uPj4xMyYyNTU7aFt1KytdPW4+PjIxJjI1NTtoW3UrK109bj4+PjI5JjI1NTtoW3UrK109MDtoW3UrK109MDtoW3UrK109MDtjb25zdCBnPW5ldyBJbnQzMkFycmF5KDE2KTtmb3IodT0wO3U8bDspe2ZvcihkPTA7ZDwxNjsrK2QsdSs9NClnW2RdPWhbdV18aFt1KzFdPDw4fGhbdSsyXTw8MTZ8aFt1KzNdPDwyNDtsZXQgYSxyLG49aSxsPXMsZj1vLHA9Yztmb3IoZD0wO2Q8NjQ7KytkKXtpZihkPDE2KXthPWwmZnx+bCZwO3I9ZH1lbHNlIGlmKGQ8MzIpe2E9cCZsfH5wJmY7cj01KmQrMSYxNX1lbHNlIGlmKGQ8NDgpe2E9bF5mXnA7cj0zKmQrNSYxNX1lbHNle2E9Zl4obHx+cCk7cj03KmQmMTV9Y29uc3QgaT1wLHM9bithK3RbZF0rZ1tyXXwwLG89ZVtkXTtwPWY7Zj1sO2w9bCsoczw8b3xzPj4+MzItbyl8MDtuPWl9aT1pK258MDtzPXMrbHwwO289bytmfDA7Yz1jK3B8MH1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzI1NSZpLGk+PjgmMjU1LGk+PjE2JjI1NSxpPj4+MjQmMjU1LDI1NSZzLHM+PjgmMjU1LHM+PjE2JjI1NSxzPj4+MjQmMjU1LDI1NSZvLG8+PjgmMjU1LG8+PjE2JjI1NSxvPj4+MjQmMjU1LDI1NSZjLGM+PjgmMjU1LGM+PjE2JjI1NSxjPj4+MjQmMjU1XSl9fSgpO3QuY2FsY3VsYXRlTUQ1PXM7Y2xhc3MgV29yZDY0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5oaWdoPTB8ZTt0aGlzLmxvdz0wfHR9YW5kKGUpe3RoaXMuaGlnaCY9ZS5oaWdoO3RoaXMubG93Jj1lLmxvd314b3IoZSl7dGhpcy5oaWdoXj1lLmhpZ2g7dGhpcy5sb3dePWUubG93fW9yKGUpe3RoaXMuaGlnaHw9ZS5oaWdoO3RoaXMubG93fD1lLmxvd31zaGlmdFJpZ2h0KGUpe2lmKGU+PTMyKXt0aGlzLmxvdz10aGlzLmhpZ2g+Pj5lLTMyfDA7dGhpcy5oaWdoPTB9ZWxzZXt0aGlzLmxvdz10aGlzLmxvdz4+PmV8dGhpcy5oaWdoPDwzMi1lO3RoaXMuaGlnaD10aGlzLmhpZ2g+Pj5lfDB9fXNoaWZ0TGVmdChlKXtpZihlPj0zMil7dGhpcy5oaWdoPXRoaXMubG93PDxlLTMyO3RoaXMubG93PTB9ZWxzZXt0aGlzLmhpZ2g9dGhpcy5oaWdoPDxlfHRoaXMubG93Pj4+MzItZTt0aGlzLmxvdzw8PWV9fXJvdGF0ZVJpZ2h0KGUpe2xldCB0LGE7aWYoMzImZSl7YT10aGlzLmxvdzt0PXRoaXMuaGlnaH1lbHNle3Q9dGhpcy5sb3c7YT10aGlzLmhpZ2h9ZSY9MzE7dGhpcy5sb3c9dD4+PmV8YTw8MzItZTt0aGlzLmhpZ2g9YT4+PmV8dDw8MzItZX1ub3QoKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaDt0aGlzLmxvdz1+dGhpcy5sb3d9YWRkKGUpe2NvbnN0IHQ9KHRoaXMubG93Pj4+MCkrKGUubG93Pj4+MCk7bGV0IGE9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihhKz0xKTt0aGlzLmxvdz0wfHQ7dGhpcy5oaWdoPTB8YX1jb3B5VG8oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NTtlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTU7ZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTU7ZVt0KzNdPTI1NSZ0aGlzLmhpZ2g7ZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1O2VbdCs1XT10aGlzLmxvdz4+MTYmMjU1O2VbdCs2XT10aGlzLmxvdz4+OCYyNTU7ZVt0KzddPTI1NSZ0aGlzLmxvd31hc3NpZ24oZSl7dGhpcy5oaWdoPWUuaGlnaDt0aGlzLmxvdz1lLmxvd319Y29uc3Qgbz1mdW5jdGlvbiBjYWxjdWxhdGVTSEEyNTZDbG9zdXJlKCl7ZnVuY3Rpb24gcm90cihlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIGNoKGUsdCxhKXtyZXR1cm4gZSZ0Xn5lJmF9ZnVuY3Rpb24gbWFqKGUsdCxhKXtyZXR1cm4gZSZ0XmUmYV50JmF9ZnVuY3Rpb24gc2lnbWEoZSl7cmV0dXJuIHJvdHIoZSwyKV5yb3RyKGUsMTMpXnJvdHIoZSwyMil9ZnVuY3Rpb24gc2lnbWFQcmltZShlKXtyZXR1cm4gcm90cihlLDYpXnJvdHIoZSwxMSlecm90cihlLDI1KX1mdW5jdGlvbiBsaXR0bGVTaWdtYShlKXtyZXR1cm4gcm90cihlLDcpXnJvdHIoZSwxOCleZT4+PjN9Y29uc3QgZT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtyZXR1cm4gZnVuY3Rpb24gaGFzaCh0LGEscil7bGV0IG49MTc3OTAzMzcwMyxpPTMxNDQxMzQyNzcscz0xMDEzOTA0MjQyLG89Mjc3MzQ4MDc2MixjPTEzNTk4OTMxMTksbD0yNjAwODIyOTI0LGg9NTI4NzM0NjM1LHU9MTU0MTQ1OTIyNTtjb25zdCBkPTY0Kk1hdGguY2VpbCgocis5KS82NCksZj1uZXcgVWludDhBcnJheShkKTtsZXQgZyxwO2ZvcihnPTA7ZzxyOysrZylmW2ddPXRbYSsrXTtmW2crK109MTI4O2NvbnN0IG09ZC04O2Zvcig7ZzxtOylmW2crK109MDtmW2crK109MDtmW2crK109MDtmW2crK109MDtmW2crK109cj4+PjI5JjI1NTtmW2crK109cj4+MjEmMjU1O2ZbZysrXT1yPj4xMyYyNTU7ZltnKytdPXI+PjUmMjU1O2ZbZysrXT1yPDwzJjI1NTtjb25zdCBiPW5ldyBVaW50MzJBcnJheSg2NCk7Zm9yKGc9MDtnPGQ7KXtmb3IocD0wO3A8MTY7KytwKXtiW3BdPWZbZ108PDI0fGZbZysxXTw8MTZ8ZltnKzJdPDw4fGZbZyszXTtnKz00fWZvcihwPTE2O3A8NjQ7KytwKWJbcF09KHJvdHIoeT1iW3AtMl0sMTcpXnJvdHIoeSwxOSleeT4+PjEwKStiW3AtN10rbGl0dGxlU2lnbWEoYltwLTE1XSkrYltwLTE2XXwwO2xldCB0LGEscj1uLGQ9aSxtPXMsdz1vLFM9Yyx4PWwsaz1oLEM9dTtmb3IocD0wO3A8NjQ7KytwKXt0PUMrc2lnbWFQcmltZShTKStjaChTLHgsaykrZVtwXStiW3BdO2E9c2lnbWEocikrbWFqKHIsZCxtKTtDPWs7az14O3g9UztTPXcrdHwwO3c9bTttPWQ7ZD1yO3I9dCthfDB9bj1uK3J8MDtpPWkrZHwwO3M9cyttfDA7bz1vK3d8MDtjPWMrU3wwO2w9bCt4fDA7aD1oK2t8MDt1PXUrQ3wwfXZhciB5O3JldHVybiBuZXcgVWludDhBcnJheShbbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbixpPj4yNCYyNTUsaT4+MTYmMjU1LGk+PjgmMjU1LDI1NSZpLHM+PjI0JjI1NSxzPj4xNiYyNTUscz4+OCYyNTUsMjU1JnMsbz4+MjQmMjU1LG8+PjE2JjI1NSxvPj44JjI1NSwyNTUmbyxjPj4yNCYyNTUsYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsMjU1JmwsaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaCx1Pj4yNCYyNTUsdT4+MTYmMjU1LHU+PjgmMjU1LDI1NSZ1XSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PW87Y29uc3QgYz1mdW5jdGlvbiBjYWxjdWxhdGVTSEE1MTJDbG9zdXJlKCl7ZnVuY3Rpb24gY2goZSx0LGEscixuKXtlLmFzc2lnbih0KTtlLmFuZChhKTtuLmFzc2lnbih0KTtuLm5vdCgpO24uYW5kKHIpO2UueG9yKG4pfWZ1bmN0aW9uIG1haihlLHQsYSxyLG4pe2UuYXNzaWduKHQpO2UuYW5kKGEpO24uYXNzaWduKHQpO24uYW5kKHIpO2UueG9yKG4pO24uYXNzaWduKGEpO24uYW5kKHIpO2UueG9yKG4pfWZ1bmN0aW9uIHNpZ21hKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDI4KTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDM0KTtlLnhvcihhKTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDM5KTtlLnhvcihhKX1mdW5jdGlvbiBzaWdtYVByaW1lKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDE0KTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDE4KTtlLnhvcihhKTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDQxKTtlLnhvcihhKX1mdW5jdGlvbiBsaXR0bGVTaWdtYShlLHQsYSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgxKTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDgpO2UueG9yKGEpO2EuYXNzaWduKHQpO2Euc2hpZnRSaWdodCg3KTtlLnhvcihhKX1mdW5jdGlvbiBsaXR0bGVTaWdtYVByaW1lKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDE5KTthLmFzc2lnbih0KTthLnJvdGF0ZVJpZ2h0KDYxKTtlLnhvcihhKTthLmFzc2lnbih0KTthLnNoaWZ0UmlnaHQoNik7ZS54b3IoYSl9Y29uc3QgZT1bbmV3IFdvcmQ2NCgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLG5ldyBXb3JkNjQoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBXb3JkNjQoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxuZXcgV29yZDY0KDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksbmV3IFdvcmQ2NCg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IFdvcmQ2NCgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLG5ldyBXb3JkNjQoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxuZXcgV29yZDY0KDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IFdvcmQ2NCgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLG5ldyBXb3JkNjQoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLG5ldyBXb3JkNjQoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBXb3JkNjQoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxuZXcgV29yZDY0KDE5MjUwNzgzODgsNDA2ODE4MjM4MyksbmV3IFdvcmQ2NCgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IFdvcmQ2NCgyNjE0ODg4MTAzLDYzMzgwMzMxNyksbmV3IFdvcmQ2NCgzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgpLG5ldyBXb3JkNjQoMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgV29yZDY0KDQwMjIyMjQ3NzQsOTQ0NzExMTM5KSxuZXcgV29yZDY0KDI2NDM0NzA3OCwyMzQxMjYyNzczKSxuZXcgV29yZDY0KDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgV29yZDY0KDc3MDI1NTk4MywxNDk1OTkwOTAxKSxuZXcgV29yZDY0KDEyNDkxNTAxMjIsMTg1NjQzMTIzNSksbmV3IFdvcmQ2NCgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBXb3JkNjQoMTk5NjA2NDk4NiwyMTk4OTUwODM3KSxuZXcgV29yZDY0KDI1NTQyMjA4ODIsMzk5OTcxOTMzOSksbmV3IFdvcmQ2NCgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IFdvcmQ2NCgyOTUyOTk2ODA4LDI1NjY1OTQ4NzkpLG5ldyBXb3JkNjQoMzIxMDMxMzY3MSwzMjAzMzM3OTU2KSxuZXcgV29yZDY0KDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IFdvcmQ2NCgzNTg0NTI4NzExLDI0NjY5NDg5MDEpLG5ldyBXb3JkNjQoMTEzOTI2OTkzLDM3NTgzMjYzODMpLG5ldyBXb3JkNjQoMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IFdvcmQ2NCg2NjYzMDcyMDUsMTE4ODE3OTk2NCksbmV3IFdvcmQ2NCg3NzM1Mjk5MTIsMTU0NjA0NTczNCksbmV3IFdvcmQ2NCgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBXb3JkNjQoMTM5NjE4MjI5MSwyNjQzODMzODIzKSxuZXcgV29yZDY0KDE2OTUxODM3MDAsMjM0MzUyNzM5MCksbmV3IFdvcmQ2NCgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBXb3JkNjQoMjE3NzAyNjM1MCwxMjA2NzU5MTQyKSxuZXcgV29yZDY0KDI0NTY5NTYwMzcsMzQ0MDc3NjI3KSxuZXcgV29yZDY0KDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IFdvcmQ2NCgyODIwMzAyNDExLDMxNTg0NTQyNzMpLG5ldyBXb3JkNjQoMzI1OTczMDgwMCwzNTA1OTUyNjU3KSxuZXcgV29yZDY0KDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgV29yZDY0KDM1MTYwNjU4MTcsMzYwNjAwODM0NCksbmV3IFdvcmQ2NCgzNjAwMzUyODA0LDE0MzI3MjU3NzYpLG5ldyBXb3JkNjQoNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgV29yZDY0KDI3NTQyMzM0NCw4NTExNjk3MjApLG5ldyBXb3JkNjQoNDMwMjI3NzM0LDMxMDA4MjM3NTIpLG5ldyBXb3JkNjQoNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBXb3JkNjQoNjU5MDYwNTU2LDM3NTA2ODU1OTMpLG5ldyBXb3JkNjQoODgzOTk3ODc3LDM3ODUwNTAyODApLG5ldyBXb3JkNjQoOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBXb3JkNjQoMTMyMjgyMjIxOCwzODEyNzIzNDAzKSxuZXcgV29yZDY0KDE1MzcwMDIwNjMsMjAwMzAzNDk5NSksbmV3IFdvcmQ2NCgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBXb3JkNjQoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxuZXcgV29yZDY0KDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksbmV3IFdvcmQ2NCgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBXb3JkNjQoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLG5ldyBXb3JkNjQoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLG5ldyBXb3JkNjQoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgV29yZDY0KDMyMDQwMzE0NzksMjk5OTM1MTU3MyksbmV3IFdvcmQ2NCgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLG5ldyBXb3JkNjQoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgV29yZDY0KDM1MTUyNjcyNzEsNTY2MjgwNzExKSxuZXcgV29yZDY0KDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksbmV3IFdvcmQ2NCg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBXb3JkNjQoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLG5ldyBXb3JkNjQoMTc0MjkyNDIxLDI3MzEwNTUyNzApLG5ldyBXb3JkNjQoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBXb3JkNjQoNDYwMzkzMjY5LDMyMDYyMDMxNSksbmV3IFdvcmQ2NCg2ODU0NzE3MzMsNTg3NDk2ODM2KSxuZXcgV29yZDY0KDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgV29yZDY0KDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxuZXcgV29yZDY0KDExMjYwMDA1ODAsMjYxODI5NzY3NiksbmV3IFdvcmQ2NCgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBXb3JkNjQoMTUwMTUwNTk0OCw0MjM0NTA5ODY2KSxuZXcgV29yZDY0KDE2MDcxNjc5MTUsOTg3MTY3NDY4KSxuZXcgV29yZDY0KDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbiBoYXNoKHQsYSxyLG49ITEpe2xldCBpLHMsbyxjLGwsaCx1LGQ7aWYobil7aT1uZXcgV29yZDY0KDM0MTgwNzAzNjUsMzIzODM3MTAzMik7cz1uZXcgV29yZDY0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKTtvPW5ldyBXb3JkNjQoMjQzODUyOTM3MCw4MTI3MDI5OTkpO2M9bmV3IFdvcmQ2NCgzNTU0NjIzNjAsNDE0NDkxMjY5Nyk7bD1uZXcgV29yZDY0KDE3MzE0MDU0MTUsNDI5MDc3NTg1Nyk7aD1uZXcgV29yZDY0KDIzOTQxODAyMzEsMTc1MDYwMzAyNSk7dT1uZXcgV29yZDY0KDM2NzUwMDg1MjUsMTY5NDA3NjgzOSk7ZD1uZXcgV29yZDY0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCl9ZWxzZXtpPW5ldyBXb3JkNjQoMTc3OTAzMzcwMyw0MDg5MjM1NzIwKTtzPW5ldyBXb3JkNjQoMzE0NDEzNDI3NywyMjI3ODczNTk1KTtvPW5ldyBXb3JkNjQoMTAxMzkwNDI0Miw0MjcxMTc1NzIzKTtjPW5ldyBXb3JkNjQoMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KTtsPW5ldyBXb3JkNjQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KTtoPW5ldyBXb3JkNjQoMjYwMDgyMjkyNCw3MjU1MTExOTkpO3U9bmV3IFdvcmQ2NCg1Mjg3MzQ2MzUsNDIxNTM4OTU0Nyk7ZD1uZXcgV29yZDY0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KX1jb25zdCBmPTEyOCpNYXRoLmNlaWwoKHIrMTcpLzEyOCksZz1uZXcgVWludDhBcnJheShmKTtsZXQgcCxtO2ZvcihwPTA7cDxyOysrcClnW3BdPXRbYSsrXTtnW3ArK109MTI4O2NvbnN0IGI9Zi0xNjtmb3IoO3A8YjspZ1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPTA7Z1twKytdPXI+Pj4yOSYyNTU7Z1twKytdPXI+PjIxJjI1NTtnW3ArK109cj4+MTMmMjU1O2dbcCsrXT1yPj41JjI1NTtnW3ArK109cjw8MyYyNTU7Y29uc3QgeT1uZXcgQXJyYXkoODApO2ZvcihwPTA7cDw4MDtwKyspeVtwXT1uZXcgV29yZDY0KDAsMCk7bGV0IHc9bmV3IFdvcmQ2NCgwLDApLFM9bmV3IFdvcmQ2NCgwLDApLHg9bmV3IFdvcmQ2NCgwLDApLGs9bmV3IFdvcmQ2NCgwLDApLEM9bmV3IFdvcmQ2NCgwLDApLHY9bmV3IFdvcmQ2NCgwLDApLEY9bmV3IFdvcmQ2NCgwLDApLE89bmV3IFdvcmQ2NCgwLDApO2NvbnN0IFQ9bmV3IFdvcmQ2NCgwLDApLE09bmV3IFdvcmQ2NCgwLDApLEU9bmV3IFdvcmQ2NCgwLDApLEQ9bmV3IFdvcmQ2NCgwLDApO2xldCBOLFI7Zm9yKHA9MDtwPGY7KXtmb3IobT0wO208MTY7KyttKXt5W21dLmhpZ2g9Z1twXTw8MjR8Z1twKzFdPDwxNnxnW3ArMl08PDh8Z1twKzNdO3lbbV0ubG93PWdbcCs0XTw8MjR8Z1twKzVdPDwxNnxnW3ArNl08PDh8Z1twKzddO3ArPTh9Zm9yKG09MTY7bTw4MDsrK20pe049eVttXTtsaXR0bGVTaWdtYVByaW1lKE4seVttLTJdLEQpO04uYWRkKHlbbS03XSk7bGl0dGxlU2lnbWEoRSx5W20tMTVdLEQpO04uYWRkKEUpO04uYWRkKHlbbS0xNl0pfXcuYXNzaWduKGkpO1MuYXNzaWduKHMpO3guYXNzaWduKG8pO2suYXNzaWduKGMpO0MuYXNzaWduKGwpO3YuYXNzaWduKGgpO0YuYXNzaWduKHUpO08uYXNzaWduKGQpO2ZvcihtPTA7bTw4MDsrK20pe1QuYXNzaWduKE8pO3NpZ21hUHJpbWUoRSxDLEQpO1QuYWRkKEUpO2NoKEUsQyx2LEYsRCk7VC5hZGQoRSk7VC5hZGQoZVttXSk7VC5hZGQoeVttXSk7c2lnbWEoTSx3LEQpO21haihFLHcsUyx4LEQpO00uYWRkKEUpO049TztPPUY7Rj12O3Y9QztrLmFkZChUKTtDPWs7az14O3g9UztTPXc7Ti5hc3NpZ24oVCk7Ti5hZGQoTSk7dz1OfWkuYWRkKHcpO3MuYWRkKFMpO28uYWRkKHgpO2MuYWRkKGspO2wuYWRkKEMpO2guYWRkKHYpO3UuYWRkKEYpO2QuYWRkKE8pfWlmKG4pe1I9bmV3IFVpbnQ4QXJyYXkoNDgpO2kuY29weVRvKFIsMCk7cy5jb3B5VG8oUiw4KTtvLmNvcHlUbyhSLDE2KTtjLmNvcHlUbyhSLDI0KTtsLmNvcHlUbyhSLDMyKTtoLmNvcHlUbyhSLDQwKX1lbHNle1I9bmV3IFVpbnQ4QXJyYXkoNjQpO2kuY29weVRvKFIsMCk7cy5jb3B5VG8oUiw4KTtvLmNvcHlUbyhSLDE2KTtjLmNvcHlUbyhSLDI0KTtsLmNvcHlUbyhSLDMyKTtoLmNvcHlUbyhSLDQwKTt1LmNvcHlUbyhSLDQ4KTtkLmNvcHlUbyhSLDU2KX1yZXR1cm4gUn19KCk7dC5jYWxjdWxhdGVTSEE1MTI9YztmdW5jdGlvbiBjYWxjdWxhdGVTSEEzODQoZSx0LGEpe3JldHVybiBjKGUsdCxhLCEwKX1jbGFzcyBOdWxsQ2lwaGVye2RlY3J5cHRCbG9jayhlKXtyZXR1cm4gZX1lbmNyeXB0KGUpe3JldHVybiBlfX1jbGFzcyBBRVNCYXNlQ2lwaGVye2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUFFU0Jhc2VDaXBoZXImJigwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBBRVNCYXNlQ2lwaGVyLiIpO3RoaXMuX3M9bmV3IFVpbnQ4QXJyYXkoWzk5LDEyNCwxMTksMTIzLDI0MiwxMDcsMTExLDE5Nyw0OCwxLDEwMyw0MywyNTQsMjE1LDE3MSwxMTgsMjAyLDEzMCwyMDEsMTI1LDI1MCw4OSw3MSwyNDAsMTczLDIxMiwxNjIsMTc1LDE1NiwxNjQsMTE0LDE5MiwxODMsMjUzLDE0NywzOCw1NCw2MywyNDcsMjA0LDUyLDE2NSwyMjksMjQxLDExMywyMTYsNDksMjEsNCwxOTksMzUsMTk1LDI0LDE1MCw1LDE1NCw3LDE4LDEyOCwyMjYsMjM1LDM5LDE3OCwxMTcsOSwxMzEsNDQsMjYsMjcsMTEwLDkwLDE2MCw4Miw1OSwyMTQsMTc5LDQxLDIyNyw0NywxMzIsODMsMjA5LDAsMjM3LDMyLDI1MiwxNzcsOTEsMTA2LDIwMywxOTAsNTcsNzQsNzYsODgsMjA3LDIwOCwyMzksMTcwLDI1MSw2Nyw3Nyw1MSwxMzMsNjksMjQ5LDIsMTI3LDgwLDYwLDE1OSwxNjgsODEsMTYzLDY0LDE0MywxNDYsMTU3LDU2LDI0NSwxODgsMTgyLDIxOCwzMywxNiwyNTUsMjQzLDIxMCwyMDUsMTIsMTksMjM2LDk1LDE1MSw2OCwyMywxOTYsMTY3LDEyNiw2MSwxMDAsOTMsMjUsMTE1LDk2LDEyOSw3OSwyMjAsMzQsNDIsMTQ0LDEzNiw3MCwyMzgsMTg0LDIwLDIyMiw5NCwxMSwyMTksMjI0LDUwLDU4LDEwLDczLDYsMzYsOTIsMTk0LDIxMSwxNzIsOTgsMTQ1LDE0OSwyMjgsMTIxLDIzMSwyMDAsNTUsMTA5LDE0MSwyMTMsNzgsMTY5LDEwOCw4NiwyNDQsMjM0LDEwMSwxMjIsMTc0LDgsMTg2LDEyMCwzNyw0NiwyOCwxNjYsMTgwLDE5OCwyMzIsMjIxLDExNiwzMSw3NSwxODksMTM5LDEzOCwxMTIsNjIsMTgxLDEwMiw3MiwzLDI0NiwxNCw5Nyw1Myw4NywxODUsMTM0LDE5MywyOSwxNTgsMjI1LDI0OCwxNTIsMTcsMTA1LDIxNywxNDIsMTQ4LDE1NSwzMCwxMzUsMjMzLDIwNiw4NSw0MCwyMjMsMTQwLDE2MSwxMzcsMTMsMTkxLDIzMCw2NiwxMDQsNjUsMTUzLDQ1LDE1LDE3Niw4NCwxODcsMjJdKTt0aGlzLl9pbnZfcz1uZXcgVWludDhBcnJheShbODIsOSwxMDYsMjEzLDQ4LDU0LDE2NSw1NiwxOTEsNjQsMTYzLDE1OCwxMjksMjQzLDIxNSwyNTEsMTI0LDIyNyw1NywxMzAsMTU1LDQ3LDI1NSwxMzUsNTIsMTQyLDY3LDY4LDE5NiwyMjIsMjMzLDIwMyw4NCwxMjMsMTQ4LDUwLDE2NiwxOTQsMzUsNjEsMjM4LDc2LDE0OSwxMSw2NiwyNTAsMTk1LDc4LDgsNDYsMTYxLDEwMiw0MCwyMTcsMzYsMTc4LDExOCw5MSwxNjIsNzMsMTA5LDEzOSwyMDksMzcsMTE0LDI0OCwyNDYsMTAwLDEzNCwxMDQsMTUyLDIyLDIxMiwxNjQsOTIsMjA0LDkzLDEwMSwxODIsMTQ2LDEwOCwxMTIsNzIsODAsMjUzLDIzNywxODUsMjE4LDk0LDIxLDcwLDg3LDE2NywxNDEsMTU3LDEzMiwxNDQsMjE2LDE3MSwwLDE0MCwxODgsMjExLDEwLDI0NywyMjgsODgsNSwxODQsMTc5LDY5LDYsMjA4LDQ0LDMwLDE0MywyMDIsNjMsMTUsMiwxOTMsMTc1LDE4OSwzLDEsMTksMTM4LDEwNyw1OCwxNDUsMTcsNjUsNzksMTAzLDIyMCwyMzQsMTUxLDI0MiwyMDcsMjA2LDI0MCwxODAsMjMwLDExNSwxNTAsMTcyLDExNiwzNCwyMzEsMTczLDUzLDEzMywyMjYsMjQ5LDU1LDIzMiwyOCwxMTcsMjIzLDExMCw3MSwyNDEsMjYsMTEzLDI5LDQxLDE5NywxMzcsMTExLDE4Myw5OCwxNCwxNzAsMjQsMTkwLDI3LDI1Miw4Niw2Miw3NSwxOTgsMjEwLDEyMSwzMiwxNTQsMjE5LDE5MiwyNTQsMTIwLDIwNSw5MCwyNDQsMzEsMjIxLDE2OCw1MSwxMzYsNywxOTksNDksMTc3LDE4LDE2LDg5LDM5LDEyOCwyMzYsOTUsOTYsODEsMTI3LDE2OSwyNSwxODEsNzQsMTMsNDUsMjI5LDEyMiwxNTksMTQ3LDIwMSwxNTYsMjM5LDE2MCwyMjQsNTksNzcsMTc0LDQyLDI0NSwxNzYsMjAwLDIzNSwxODcsNjAsMTMxLDgzLDE1Myw5NywyMyw0Myw0LDEyNiwxODYsMTE5LDIxNCwzOCwyMjUsMTA1LDIwLDk5LDg1LDMzLDEyLDEyNV0pO3RoaXMuX21peD1uZXcgVWludDMyQXJyYXkoWzAsMjM1NDc0MTg3LDQ3MDk0ODM3NCwzMDM3NjUyNzcsOTQxODk2NzQ4LDkwODkzMzQxNSw2MDc1MzA1NTQsNzA4NzgwODQ5LDE4ODM3OTM0OTYsMjExODIxNDk5NSwxODE3ODY2ODMwLDE2NDk2MzkyMzcsMTIxNTA2MTEwOCwxMTgxMDQ1MTE5LDE0MTc1NjE2OTgsMTUxNzc2NzUyOSwzNzY3NTg2OTkyLDQwMDMwNjExNzksNDIzNjQyOTk5MCw0MDY5MjQ2ODkzLDM2MzU3MzM2NjAsMzYwMjc3MDMyNywzMjk5Mjc4NDc0LDM0MDA1Mjg3NjksMjQzMDEyMjIxNiwyNjY0NTQzNzE1LDIzNjIwOTAyMzgsMjE5Mzg2MjY0NSwyODM1MTIzMzk2LDI4MDExMDc0MDcsMzAzNTUzNTA1OCwzMTM1NzQwODg5LDM2NzgxMjQ5MjMsMzU3Njg3MDUxMiwzMzQxMzk0Mjg1LDMzNzQzNjE3MDIsMzgxMDQ5NjM0MywzOTc3Njc1MzU2LDQyNzkwODAyNTcsNDA0MzYxMDE4NiwyODc2NDk0NjI3LDI3NzYyOTI5MDQsMzA3NjYzOTAyOSwzMTEwNjUwOTQyLDI0NzIwMTE1MzUsMjY0MDI0MzIwNCwyNDAzNzI4NjY1LDIxNjkzMDMwNTgsMTAwMTA4OTk5NSw4OTk4MzU1ODQsNjY2NDY0NzMzLDY5OTQzMjE1MCw1OTcyNzg0NywyMjY5MDY4NjAsNTMwNDAwNzUzLDI5NDkzMDY4MiwxMjczMTY4Nzg3LDExNzI5NjcwNjQsMTQ3NTQxODUwMSwxNTA5NDMwNDE0LDE5NDI0MzU3NzUsMjExMDY2NzQ0NCwxODc2MjQxODMzLDE2NDE4MTYyMjYsMjkxMDIxOTc2NiwyNzQzMDM0MTA5LDI5NzYxNTE1MjAsMzIxMTYyMzE0NywyNTA1MjAyMTM4LDI2MDY0NTM5NjksMjMwMjY5MDI1MiwyMjY5NzI4NDU1LDM3MTE4Mjk0MjIsMzU0MzU5OTI2OSwzMjQwODk0MzkyLDM0NzUzMTMzMzEsMzg0MzY5OTA3NCwzOTQzOTA2NDQxLDQxNzgwNjIyMjgsNDE0NDA0Nzc3NSwxMzA2OTY3MzY2LDExMzk3ODE3MDksMTM3NDk4ODExMiwxNjEwNDU5NzM5LDE5NzU2ODM0MzQsMjA3NjkzNTI2NSwxNzc1Mjc2OTI0LDE3NDIzMTUxMjcsMTAzNDg2Nzk5OCw4NjY2Mzc4NDUsNTY2MDIxODk2LDgwMDQ0MDgzNSw5Mjk4NzY5OCwxOTMxOTUwNjUsNDI5NDU2MTY0LDM5NTQ0MTcxMSwxOTg0ODEyNjg1LDIwMTc3Nzg1NjYsMTc4NDY2MzE5NSwxNjgzNDA3MjQ4LDEzMTU1NjIxNDUsMTA4MDA5NDYzNCwxMzgzODU2MzExLDE1NTEwMzc4ODQsMTAxMDM5ODI5LDEzNTA1MDIwNiw0Mzc3NTcxMjMsMzM3NTUzODY0LDEwNDIzODU2NTcsODA3OTYyNjEwLDU3MzgwNDc4Myw3NDIwMzkwMTIsMjUzMTA2NzQ1MywyNTY0MDMzMzM0LDIzMjg4Mjg5NzEsMjIyNzU3MzAyNCwyOTM1NTY2ODY1LDI3MDAwOTkzNTQsMzAwMTc1NTY1NSwzMTY4OTM3MjI4LDM4Njg1NTI4MDUsMzkwMjU2MzE4Miw0MjAzMTgxMTcxLDQxMDI5Nzc5MTIsMzczNjE2NDkzNywzNTAxNzQxODkwLDMyNjU0Nzg3NTEsMzQzMzcxMjk4MCwxMTA2MDQxNTkxLDEzNDA0NjMxMDAsMTU3Njk3NjYwOSwxNDA4NzQ5MDM0LDIwNDMyMTE0ODMsMjAwOTE5NTQ3MiwxNzA4ODQ4MzMzLDE4MDkwNTQxNTAsODMyODc3MjMxLDEwNjgzNTEzOTYsNzY2OTQ1NDY1LDU5OTc2MjM1NCwxNTk0MTc5ODcsMTI2NDU0NjY0LDM2MTkyOTg3Nyw0NjMxODAxOTAsMjcwOTI2MDg3MSwyOTQzNjgyMzgwLDMxNzgxMDY5NjEsMzAwOTg3OTM4NiwyNTcyNjk3MTk1LDI1Mzg2ODExODQsMjIzNjIyODczMywyMzM2NDM0NTUwLDM1MDk4NzExMzUsMzc0NTM0NTMwMCwzNDQxODUwMzc3LDMyNzQ2NjcyNjYsMzkxMDE2MTk3MSwzODc3MTk4NjQ4LDQxMTA1Njg0ODUsNDIxMTgxODc5OCwyNTk3ODA2NDc2LDI0OTc2MDQ3NDMsMjI2MTA4OTE3OCwyMjk1MTAxMDczLDI3MzM4NTYxNjAsMjkwMjA4Nzg1MSwzMjAyNDM3MDQ2LDI5NjgwMTE0NTMsMzkzNjI5MTI4NCwzODM1MDM2ODk1LDQxMzY0NDA3NzAsNDE2OTQwODIwMSwzNTM1NDg2NDU2LDM3MDI2NjU0NTksMzQ2NzE5MjMwMiwzMjMxNzIyMjEzLDIwNTE1MTg3ODAsMTk1MTMxNzA0NywxNzE2ODkwNDEwLDE3NTA5MDIzMDUsMTExMzgxODM4NCwxMjgyMDUwMDc1LDE1ODQ1MDQ1ODIsMTM1MDA3ODk4OSwxNjg4MTA4NTIsNjc1NTY0NjMsMzcxMDQ5MzMwLDQwNDAxNjc2MSw4NDE3Mzk1OTIsMTAwODkxODU5NSw3NzU1NTA4MTQsNTQwMDgwNzI1LDM5Njk1NjIzNjksMzgwMTMzMjIzNCw0MDM1NDg5MDQ3LDQyNjk5MDc5OTYsMzU2OTI1NTIxMywzNjY5NDYyNTY2LDMzNjY3NTQ2MTksMzMzMjc0MDE0NCwyNjMxMDY1NDMzLDI0NjM4Nzk3NjIsMjE2MDExNzA3MSwyMzk1NTg4Njc2LDI3Njc2NDU1NTcsMjg2ODg5NzQwNiwzMTAyMDExNzQ3LDMwNjkwNDk5NjAsMjAyMDA4NDk3LDMzNzc4MzYyLDI3MDA0MDQ4Nyw1MDQ0NTk0MzYsODc1NDUxMjkzLDk3NTY1ODY0Niw2NzUwMzk2MjcsNjQxMDI1MTUyLDIwODQ3MDQyMzMsMTkxNzUxODU2MiwxNjE1ODYxMjQ3LDE4NTEzMzI4NTIsMTE0NzU1MDY2MSwxMjQ4ODAyNTEwLDE0ODQwMDU4NDMsMTQ1MTA0NDA1Niw5MzMzMDEzNzAsOTY3MzExNzI5LDczMzE1Njk3Miw2MzI5NTM3MDMsMjYwMzg4OTUwLDI1OTY1OTE3LDMyODY3MTgwOCw0OTY5MDYwNTksMTIwNjQ3Nzg1OCwxMjM5NDQzNzUzLDE1NDMyMDg1MDAsMTQ0MTk1MjU3NSwyMTQ0MTYxODA2LDE5MDg2OTQyNzcsMTY3NTU3Nzg4MCwxODQyNzU5NDQzLDM2MTAzNjkyMjYsMzY0NDM3OTU4NSwzNDA4MTE5NTE2LDMzMDc5MTYyNDcsNDAxMTE5MDUwMiwzNzc2NzY3NDY5LDQwNzczODQ0MzIsNDI0NTYxODY4MywyODA5NzcxMTU0LDI4NDI3MzcwNDksMzE0NDM5NjQyMCwzMDQzMTQwNDk1LDI2NzM3MDUxNTAsMjQzODIzNzYyMSwyMjAzMDMyMjMyLDIzNzAyMTM3OTVdKTt0aGlzLl9taXhDb2w9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IGU9MDtlPDI1NjtlKyspdGhpcy5fbWl4Q29sW2VdPWU8MTI4P2U8PDE6ZTw8MV4yNzt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJQb3NpdGlvbj0wfV9leHBhbmRLZXkoZSl7KDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfV9kZWNyeXB0KGUsdCl7bGV0IGEscixuO2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoMTYpO2kuc2V0KGUpO2ZvcihsZXQgZT0wLGE9dGhpcy5fa2V5U2l6ZTtlPDE2OysrZSwrK2EpaVtlXV49dFthXTtmb3IobGV0IGU9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7ZT49MTstLWUpe2E9aVsxM107aVsxM109aVs5XTtpWzldPWlbNV07aVs1XT1pWzFdO2lbMV09YTthPWlbMTRdO3I9aVsxMF07aVsxNF09aVs2XTtpWzEwXT1pWzJdO2lbNl09YTtpWzJdPXI7YT1pWzE1XTtyPWlbMTFdO249aVs3XTtpWzE1XT1pWzNdO2lbMTFdPWE7aVs3XT1yO2lbM109bjtmb3IobGV0IGU9MDtlPDE2OysrZSlpW2VdPXRoaXMuX2ludl9zW2lbZV1dO2ZvcihsZXQgYT0wLHI9MTYqZTthPDE2OysrYSwrK3IpaVthXV49dFtyXTtmb3IobGV0IGU9MDtlPDE2O2UrPTQpe2NvbnN0IHQ9dGhpcy5fbWl4W2lbZV1dLHI9dGhpcy5fbWl4W2lbZSsxXV0sbj10aGlzLl9taXhbaVtlKzJdXSxzPXRoaXMuX21peFtpW2UrM11dO2E9dF5yPj4+OF5yPDwyNF5uPj4+MTZebjw8MTZecz4+PjI0XnM8PDg7aVtlXT1hPj4+MjQmMjU1O2lbZSsxXT1hPj4xNiYyNTU7aVtlKzJdPWE+PjgmMjU1O2lbZSszXT0yNTUmYX19YT1pWzEzXTtpWzEzXT1pWzldO2lbOV09aVs1XTtpWzVdPWlbMV07aVsxXT1hO2E9aVsxNF07cj1pWzEwXTtpWzE0XT1pWzZdO2lbMTBdPWlbMl07aVs2XT1hO2lbMl09cjthPWlbMTVdO3I9aVsxMV07bj1pWzddO2lbMTVdPWlbM107aVsxMV09YTtpWzddPXI7aVszXT1uO2ZvcihsZXQgZT0wO2U8MTY7KytlKXtpW2VdPXRoaXMuX2ludl9zW2lbZV1dO2lbZV1ePXRbZV19cmV0dXJuIGl9X2VuY3J5cHQoZSx0KXtjb25zdCBhPXRoaXMuX3M7bGV0IHIsbixpO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoMTYpO3Muc2V0KGUpO2ZvcihsZXQgZT0wO2U8MTY7KytlKXNbZV1ePXRbZV07Zm9yKGxldCBlPTE7ZTx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247ZSsrKXtmb3IobGV0IGU9MDtlPDE2OysrZSlzW2VdPWFbc1tlXV07aT1zWzFdO3NbMV09c1s1XTtzWzVdPXNbOV07c1s5XT1zWzEzXTtzWzEzXT1pO2k9c1syXTtuPXNbNl07c1syXT1zWzEwXTtzWzZdPXNbMTRdO3NbMTBdPWk7c1sxNF09bjtpPXNbM107bj1zWzddO3I9c1sxMV07c1szXT1zWzE1XTtzWzddPWk7c1sxMV09bjtzWzE1XT1yO2ZvcihsZXQgZT0wO2U8MTY7ZSs9NCl7Y29uc3QgdD1zW2UrMF0sYT1zW2UrMV0sbj1zW2UrMl0saT1zW2UrM107cj10XmFebl5pO3NbZSswXV49cl50aGlzLl9taXhDb2xbdF5hXTtzW2UrMV1ePXJedGhpcy5fbWl4Q29sW2Febl07c1tlKzJdXj1yXnRoaXMuX21peENvbFtuXmldO3NbZSszXV49cl50aGlzLl9taXhDb2xbaV50XX1mb3IobGV0IGE9MCxyPTE2KmU7YTwxNjsrK2EsKytyKXNbYV1ePXRbcl19Zm9yKGxldCBlPTA7ZTwxNjsrK2Upc1tlXT1hW3NbZV1dO2k9c1sxXTtzWzFdPXNbNV07c1s1XT1zWzldO3NbOV09c1sxM107c1sxM109aTtpPXNbMl07bj1zWzZdO3NbMl09c1sxMF07c1s2XT1zWzE0XTtzWzEwXT1pO3NbMTRdPW47aT1zWzNdO249c1s3XTtyPXNbMTFdO3NbM109c1sxNV07c1s3XT1pO3NbMTFdPW47c1sxNV09cjtmb3IobGV0IGU9MCxhPXRoaXMuX2tleVNpemU7ZTwxNjsrK2UsKythKXNbZV1ePXRbYV07cmV0dXJuIHN9X2RlY3J5cHRCbG9jazIoZSx0KXtjb25zdCBhPWUubGVuZ3RoO2xldCByPXRoaXMuYnVmZmVyLG49dGhpcy5idWZmZXJQb3NpdGlvbjtjb25zdCBpPVtdO2xldCBzPXRoaXMuaXY7Zm9yKGxldCB0PTA7dDxhOysrdCl7cltuXT1lW3RdOysrbjtpZihuPDE2KWNvbnRpbnVlO2NvbnN0IGE9dGhpcy5fZGVjcnlwdChyLHRoaXMuX2tleSk7Zm9yKGxldCBlPTA7ZTwxNjsrK2UpYVtlXV49c1tlXTtzPXI7aS5wdXNoKGEpO3I9bmV3IFVpbnQ4QXJyYXkoMTYpO249MH10aGlzLmJ1ZmZlcj1yO3RoaXMuYnVmZmVyTGVuZ3RoPW47dGhpcy5pdj1zO2lmKDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7bGV0IG89MTYqaS5sZW5ndGg7aWYodCl7Y29uc3QgZT1pLmF0KC0xKTtsZXQgdD1lWzE1XTtpZih0PD0xNil7Zm9yKGxldCBhPTE1LHI9MTYtdDthPj1yOy0tYSlpZihlW2FdIT09dCl7dD0wO2JyZWFrfW8tPXQ7aVtpLmxlbmd0aC0xXT1lLnN1YmFycmF5KDAsMTYtdCl9fWNvbnN0IGM9bmV3IFVpbnQ4QXJyYXkobyk7Zm9yKGxldCBlPTAsdD0wLGE9aS5sZW5ndGg7ZTxhOysrZSx0Kz0xNiljLnNldChpW2VdLHQpO3JldHVybiBjfWRlY3J5cHRCbG9jayhlLHQsYT1udWxsKXtjb25zdCByPWUubGVuZ3RoLG49dGhpcy5idWZmZXI7bGV0IGk9dGhpcy5idWZmZXJQb3NpdGlvbjtpZihhKXRoaXMuaXY9YTtlbHNle2ZvcihsZXQgdD0wO2k8MTYmJnQ8cjsrK3QsKytpKW5baV09ZVt0XTtpZihpPDE2KXt0aGlzLmJ1ZmZlckxlbmd0aD1pO3JldHVybiBuZXcgVWludDhBcnJheSgwKX10aGlzLml2PW47ZT1lLnN1YmFycmF5KDE2KX10aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJMZW5ndGg9MDt0aGlzLmRlY3J5cHRCbG9jaz10aGlzLl9kZWNyeXB0QmxvY2syO3JldHVybiB0aGlzLmRlY3J5cHRCbG9jayhlLHQpfWVuY3J5cHQoZSx0KXtjb25zdCBhPWUubGVuZ3RoO2xldCByPXRoaXMuYnVmZmVyLG49dGhpcy5idWZmZXJQb3NpdGlvbjtjb25zdCBpPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKGxldCBzPTA7czxhOysrcyl7cltuXT1lW3NdOysrbjtpZihuPDE2KWNvbnRpbnVlO2ZvcihsZXQgZT0wO2U8MTY7KytlKXJbZV1ePXRbZV07Y29uc3QgYT10aGlzLl9lbmNyeXB0KHIsdGhpcy5fa2V5KTt0PWE7aS5wdXNoKGEpO3I9bmV3IFVpbnQ4QXJyYXkoMTYpO249MH10aGlzLmJ1ZmZlcj1yO3RoaXMuYnVmZmVyTGVuZ3RoPW47dGhpcy5pdj10O2lmKDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7Y29uc3Qgcz0xNippLmxlbmd0aCxvPW5ldyBVaW50OEFycmF5KHMpO2ZvcihsZXQgZT0wLHQ9MCxhPWkubGVuZ3RoO2U8YTsrK2UsdCs9MTYpby5zZXQoaVtlXSx0KTtyZXR1cm4gb319Y2xhc3MgQUVTMTI4Q2lwaGVyIGV4dGVuZHMgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMDt0aGlzLl9rZXlTaXplPTE2MDt0aGlzLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSk7dGhpcy5fa2V5PXRoaXMuX2V4cGFuZEtleShlKX1fZXhwYW5kS2V5KGUpe2NvbnN0IHQ9dGhpcy5fcyxhPXRoaXMuX3Jjb24scj1uZXcgVWludDhBcnJheSgxNzYpO3Iuc2V0KGUpO2ZvcihsZXQgZT0xNixuPTE7ZTwxNzY7KytuKXtsZXQgaT1yW2UtM10scz1yW2UtMl0sbz1yW2UtMV0sYz1yW2UtNF07aT10W2ldO3M9dFtzXTtvPXRbb107Yz10W2NdO2lePWFbbl07Zm9yKGxldCB0PTA7dDw0OysrdCl7cltlXT1pXj1yW2UtMTZdO2UrKztyW2VdPXNePXJbZS0xNl07ZSsrO3JbZV09b149cltlLTE2XTtlKys7cltlXT1jXj1yW2UtMTZdO2UrK319cmV0dXJuIHJ9fXQuQUVTMTI4Q2lwaGVyPUFFUzEyOENpcGhlcjtjbGFzcyBBRVMyNTZDaXBoZXIgZXh0ZW5kcyBBRVNCYXNlQ2lwaGVye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCk7dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0O3RoaXMuX2tleVNpemU9MjI0O3RoaXMuX2tleT10aGlzLl9leHBhbmRLZXkoZSl9X2V4cGFuZEtleShlKXtjb25zdCB0PXRoaXMuX3MsYT1uZXcgVWludDhBcnJheSgyNDApO2Euc2V0KGUpO2xldCByLG4saSxzLG89MTtmb3IobGV0IGU9MzIsYz0xO2U8MjQwOysrYyl7aWYoZSUzMj09MTYpe3I9dFtyXTtuPXRbbl07aT10W2ldO3M9dFtzXX1lbHNlIGlmKGUlMzI9PTApe3I9YVtlLTNdO249YVtlLTJdO2k9YVtlLTFdO3M9YVtlLTRdO3I9dFtyXTtuPXRbbl07aT10W2ldO3M9dFtzXTtyXj1vOyhvPDw9MSk+PTI1NiYmKG89MjU1JigyN15vKSl9Zm9yKGxldCB0PTA7dDw0OysrdCl7YVtlXT1yXj1hW2UtMzJdO2UrKzthW2VdPW5ePWFbZS0zMl07ZSsrO2FbZV09aV49YVtlLTMyXTtlKys7YVtlXT1zXj1hW2UtMzJdO2UrK319cmV0dXJuIGF9fXQuQUVTMjU2Q2lwaGVyPUFFUzI1NkNpcGhlcjtjbGFzcyBQREYxN3tjaGVja093bmVyUGFzc3dvcmQoZSx0LGEsbil7Y29uc3QgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKTtpLnNldCh0LGUubGVuZ3RoKTtpLnNldChhLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBzPW8oaSwwLGkubGVuZ3RoKTtyZXR1cm4oMCxyLmlzQXJyYXlFcXVhbCkocyxuKX1jaGVja1VzZXJQYXNzd29yZChlLHQsYSl7Y29uc3Qgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApO24uc2V0KHQsZS5sZW5ndGgpO2NvbnN0IGk9byhuLDAsbi5sZW5ndGgpO3JldHVybigwLHIuaXNBcnJheUVxdWFsKShpLGEpfWdldE93bmVyS2V5KGUsdCxhLHIpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO24uc2V0KGUsMCk7bi5zZXQodCxlLmxlbmd0aCk7bi5zZXQoYSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3QgaT1vKG4sMCxuLmxlbmd0aCk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIoaSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX1nZXRVc2VyS2V5KGUsdCxhKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO3Iuc2V0KGUsMCk7ci5zZXQodCxlLmxlbmd0aCk7Y29uc3Qgbj1vKHIsMCxyLmxlbmd0aCk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIobikuZGVjcnlwdEJsb2NrKGEsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19dC5QREYxNz1QREYxNztjb25zdCBsPWZ1bmN0aW9uIFBERjIwQ2xvc3VyZSgpe2Z1bmN0aW9uIGNhbGN1bGF0ZVBERjIwSGFzaChlLHQsYSl7bGV0IHI9byh0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLG49WzBdLGk9MDtmb3IoO2k8NjR8fG4uYXQoLTEpPmktMzI7KXtjb25zdCB0PWUubGVuZ3RoK3IubGVuZ3RoK2EubGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkodCk7bGV0IGw9MDtzLnNldChlLGwpO2wrPWUubGVuZ3RoO3Muc2V0KHIsbCk7bCs9ci5sZW5ndGg7cy5zZXQoYSxsKTtjb25zdCBoPW5ldyBVaW50OEFycmF5KDY0KnQpO2ZvcihsZXQgZT0wLGE9MDtlPDY0O2UrKyxhKz10KWguc2V0KHMsYSk7bj1uZXcgQUVTMTI4Q2lwaGVyKHIuc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQoaCxyLnN1YmFycmF5KDE2LDMyKSk7Y29uc3QgdT1uLnNsaWNlKDAsMTYpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCklMzswPT09dT9yPW8obiwwLG4ubGVuZ3RoKToxPT09dT9yPWNhbGN1bGF0ZVNIQTM4NChuLDAsbi5sZW5ndGgpOjI9PT11JiYocj1jKG4sMCxuLmxlbmd0aCkpO2krK31yZXR1cm4gci5zdWJhcnJheSgwLDMyKX1yZXR1cm4gY2xhc3MgUERGMjB7aGFzaChlLHQsYSl7cmV0dXJuIGNhbGN1bGF0ZVBERjIwSGFzaChlLHQsYSl9Y2hlY2tPd25lclBhc3N3b3JkKGUsdCxhLG4pe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO2kuc2V0KGUsMCk7aS5zZXQodCxlLmxlbmd0aCk7aS5zZXQoYSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3Qgcz1jYWxjdWxhdGVQREYyMEhhc2goZSxpLGEpO3JldHVybigwLHIuaXNBcnJheUVxdWFsKShzLG4pfWNoZWNrVXNlclBhc3N3b3JkKGUsdCxhKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO24uc2V0KGUsMCk7bi5zZXQodCxlLmxlbmd0aCk7Y29uc3QgaT1jYWxjdWxhdGVQREYyMEhhc2goZSxuLFtdKTtyZXR1cm4oMCxyLmlzQXJyYXlFcXVhbCkoaSxhKX1nZXRPd25lcktleShlLHQsYSxyKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtuLnNldChlLDApO24uc2V0KHQsZS5sZW5ndGgpO24uc2V0KGEsZS5sZW5ndGgrdC5sZW5ndGgpO2NvbnN0IGk9Y2FsY3VsYXRlUERGMjBIYXNoKGUsbixhKTtyZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihpKS5kZWNyeXB0QmxvY2sociwhMSxuZXcgVWludDhBcnJheSgxNikpfWdldFVzZXJLZXkoZSx0LGEpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7ci5zZXQoZSwwKTtyLnNldCh0LGUubGVuZ3RoKTtjb25zdCBuPWNhbGN1bGF0ZVBERjIwSGFzaChlLHIsW10pO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKG4pLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fX0oKTt0LlBERjIwPWw7Y2xhc3MgQ2lwaGVyVHJhbnNmb3Jte2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3Rvcj1lO3RoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I9dH1jcmVhdGVTdHJlYW0oZSx0KXtjb25zdCBhPW5ldyB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yO3JldHVybiBuZXcgaS5EZWNyeXB0U3RyZWFtKGUsdCwoZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShlLHQpe3JldHVybiBhLmRlY3J5cHRCbG9jayhlLHQpfSkpfWRlY3J5cHRTdHJpbmcoZSl7Y29uc3QgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtsZXQgYT0oMCxyLnN0cmluZ1RvQnl0ZXMpKGUpO2E9dC5kZWNyeXB0QmxvY2soYSwhMCk7cmV0dXJuKDAsci5ieXRlc1RvU3RyaW5nKShhKX1lbmNyeXB0U3RyaW5nKGUpe2NvbnN0IHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I7aWYodCBpbnN0YW5jZW9mIEFFU0Jhc2VDaXBoZXIpe2NvbnN0IGE9MTYtZS5sZW5ndGglMTY7ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShhKS5yZXBlYXQoYSk7Y29uc3Qgbj1uZXcgVWludDhBcnJheSgxNik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuKTtlbHNlIGZvcihsZXQgZT0wO2U8MTY7ZSsrKW5bZV09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7bGV0IGk9KDAsci5zdHJpbmdUb0J5dGVzKShlKTtpPXQuZW5jcnlwdChpLG4pO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoMTYraS5sZW5ndGgpO3Muc2V0KG4pO3Muc2V0KGksMTYpO3JldHVybigwLHIuYnl0ZXNUb1N0cmluZykocyl9bGV0IGE9KDAsci5zdHJpbmdUb0J5dGVzKShlKTthPXQuZW5jcnlwdChhKTtyZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKGEpfX1jb25zdCBoPWZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUZhY3RvcnlDbG9zdXJlKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHByZXBhcmVLZXlEYXRhKHQsYSxyLG4saSxvLGMsbCl7Y29uc3QgaD00MCtyLmxlbmd0aCt0Lmxlbmd0aCx1PW5ldyBVaW50OEFycmF5KGgpO2xldCBkLGYsZz0wO2lmKGEpe2Y9TWF0aC5taW4oMzIsYS5sZW5ndGgpO2Zvcig7ZzxmOysrZyl1W2ddPWFbZ119ZD0wO2Zvcig7ZzwzMjspdVtnKytdPWVbZCsrXTtmb3IoZD0wLGY9ci5sZW5ndGg7ZDxmOysrZCl1W2crK109cltkXTt1W2crK109MjU1Jmk7dVtnKytdPWk+PjgmMjU1O3VbZysrXT1pPj4xNiYyNTU7dVtnKytdPWk+Pj4yNCYyNTU7Zm9yKGQ9MCxmPXQubGVuZ3RoO2Q8ZjsrK2QpdVtnKytdPXRbZF07aWYobz49NCYmIWwpe3VbZysrXT0yNTU7dVtnKytdPTI1NTt1W2crK109MjU1O3VbZysrXT0yNTV9bGV0IHA9cyh1LDAsZyk7Y29uc3QgbT1jPj4zO2lmKG8+PTMpZm9yKGQ9MDtkPDUwOysrZClwPXMocCwwLG0pO2NvbnN0IGI9cC5zdWJhcnJheSgwLG0pO2xldCB5LHc7aWYobz49Myl7Zm9yKGc9MDtnPDMyOysrZyl1W2ddPWVbZ107Zm9yKGQ9MCxmPXQubGVuZ3RoO2Q8ZjsrK2QpdVtnKytdPXRbZF07eT1uZXcgQVJDRm91ckNpcGhlcihiKTt3PXkuZW5jcnlwdEJsb2NrKHModSwwLGcpKTtmPWIubGVuZ3RoO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZik7Zm9yKGQ9MTtkPD0xOTsrK2Qpe2ZvcihsZXQgZT0wO2U8ZjsrK2UpYVtlXT1iW2VdXmQ7eT1uZXcgQVJDRm91ckNpcGhlcihhKTt3PXkuZW5jcnlwdEJsb2NrKHcpfWZvcihkPTAsZj13Lmxlbmd0aDtkPGY7KytkKWlmKG5bZF0hPT13W2RdKXJldHVybiBudWxsfWVsc2V7eT1uZXcgQVJDRm91ckNpcGhlcihiKTt3PXkuZW5jcnlwdEJsb2NrKGUpO2ZvcihkPTAsZj13Lmxlbmd0aDtkPGY7KytkKWlmKG5bZF0hPT13W2RdKXJldHVybiBudWxsfXJldHVybiBifWNvbnN0IHQ9bi5OYW1lLmdldCgiSWRlbnRpdHkiKTtmdW5jdGlvbiBidWlsZE9iamVjdEtleShlLHQsYSxyPSExKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKzkpLGk9YS5sZW5ndGg7bGV0IG87Zm9yKG89MDtvPGk7KytvKW5bb109YVtvXTtuW28rK109MjU1JmU7bltvKytdPWU+PjgmMjU1O25bbysrXT1lPj4xNiYyNTU7bltvKytdPTI1NSZ0O25bbysrXT10Pj44JjI1NTtpZihyKXtuW28rK109MTE1O25bbysrXT02NTtuW28rK109MTA4O25bbysrXT04NH1yZXR1cm4gcyhuLDAsbykuc3ViYXJyYXkoMCxNYXRoLm1pbihhLmxlbmd0aCs1LDE2KSl9ZnVuY3Rpb24gYnVpbGRDaXBoZXJDb25zdHJ1Y3RvcihlLHQsYSxpLHMpe2lmKCEodCBpbnN0YW5jZW9mIG4uTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgY3J5cHQgZmlsdGVyIG5hbWUuIik7Y29uc3Qgbz1lLmdldCh0Lm5hbWUpO2xldCBjO251bGwhPW8mJihjPW8uZ2V0KCJDRk0iKSk7aWYoIWN8fCJOb25lIj09PWMubmFtZSlyZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JOb25lKCl7cmV0dXJuIG5ldyBOdWxsQ2lwaGVyfTtpZigiVjIiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvclYyKCl7cmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGJ1aWxkT2JqZWN0S2V5KGEsaSxzLCExKSl9O2lmKCJBRVNWMiI9PT1jLm5hbWUpcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yQUVTVjIoKXtyZXR1cm4gbmV3IEFFUzEyOENpcGhlcihidWlsZE9iamVjdEtleShhLGkscywhMCkpfTtpZigiQUVTVjMiPT09Yy5uYW1lKXJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvckFFU1YzKCl7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIocyl9O3Rocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX1yZXR1cm4gY2xhc3MgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeXtjb25zdHJ1Y3RvcihhLGksbyl7Y29uc3QgYz1hLmdldCgiRmlsdGVyIik7aWYoISgwLG4uaXNOYW1lKShjLCJTdGFuZGFyZCIpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPWMubmFtZTt0aGlzLmRpY3Q9YTtjb25zdCBoPWEuZ2V0KCJWIik7aWYoIU51bWJlci5pc0ludGVnZXIoaCl8fDEhPT1oJiYyIT09aCYmNCE9PWgmJjUhPT1oKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobSIpO3RoaXMuYWxnb3JpdGhtPWg7bGV0IHU9YS5nZXQoIkxlbmd0aCIpO2lmKCF1KWlmKGg8PTMpdT00MDtlbHNle2NvbnN0IGU9YS5nZXQoIkNGIiksdD1hLmdldCgiU3RtRiIpO2lmKGUgaW5zdGFuY2VvZiBuLkRpY3QmJnQgaW5zdGFuY2VvZiBuLk5hbWUpe2Uuc3VwcHJlc3NFbmNyeXB0aW9uPSEwO2NvbnN0IGE9ZS5nZXQodC5uYW1lKTt1PWEmJmEuZ2V0KCJMZW5ndGgiKXx8MTI4O3U8NDAmJih1PDw9Myl9fWlmKCFOdW1iZXIuaXNJbnRlZ2VyKHUpfHx1PDQwfHx1JTghPTApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpO2NvbnN0IGQ9KDAsci5zdHJpbmdUb0J5dGVzKShhLmdldCgiTyIpKS5zdWJhcnJheSgwLDMyKSxmPSgwLHIuc3RyaW5nVG9CeXRlcykoYS5nZXQoIlUiKSkuc3ViYXJyYXkoMCwzMiksZz1hLmdldCgiUCIpLHA9YS5nZXQoIlIiKSxtPSg0PT09aHx8NT09PWgpJiYhMSE9PWEuZ2V0KCJFbmNyeXB0TWV0YWRhdGEiKTt0aGlzLmVuY3J5cHRNZXRhZGF0YT1tO2NvbnN0IGI9KDAsci5zdHJpbmdUb0J5dGVzKShpKTtsZXQgeSx3O2lmKG8pe2lmKDY9PT1wKXRyeXtvPSgwLHIudXRmOFN0cmluZ1RvU3RyaW5nKShvKX1jYXRjaChlKXsoMCxyLndhcm4pKCJDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5OiBVbmFibGUgdG8gY29udmVydCBVVEY4IGVuY29kZWQgcGFzc3dvcmQuIil9eT0oMCxyLnN0cmluZ1RvQnl0ZXMpKG8pfWlmKDUhPT1oKXc9cHJlcGFyZUtleURhdGEoYix5LGQsZixnLHAsdSxtKTtlbHNle2NvbnN0IGU9KDAsci5zdHJpbmdUb0J5dGVzKShhLmdldCgiTyIpKS5zdWJhcnJheSgzMiw0MCksdD0oMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJPIikpLnN1YmFycmF5KDQwLDQ4KSxuPSgwLHIuc3RyaW5nVG9CeXRlcykoYS5nZXQoIlUiKSkuc3ViYXJyYXkoMCw0OCksaT0oMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJVIikpLnN1YmFycmF5KDMyLDQwKSxzPSgwLHIuc3RyaW5nVG9CeXRlcykoYS5nZXQoIlUiKSkuc3ViYXJyYXkoNDAsNDgpLG89KDAsci5zdHJpbmdUb0J5dGVzKShhLmdldCgiT0UiKSksYz0oMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJVRSIpKTsoMCxyLnN0cmluZ1RvQnl0ZXMpKGEuZ2V0KCJQZXJtcyIpKTt3PWZ1bmN0aW9uIGNyZWF0ZUVuY3J5cHRpb25LZXkyMChlLHQsYSxyLG4saSxzLG8sYyxoLHUsZCl7aWYodCl7Y29uc3QgZT1NYXRoLm1pbigxMjcsdC5sZW5ndGgpO3Q9dC5zdWJhcnJheSgwLGUpfWVsc2UgdD1bXTtsZXQgZjtmPTY9PT1lP25ldyBsOm5ldyBQREYxNztyZXR1cm4gZi5jaGVja1VzZXJQYXNzd29yZCh0LG8scyk/Zi5nZXRVc2VyS2V5KHQsYyx1KTp0Lmxlbmd0aCYmZi5jaGVja093bmVyUGFzc3dvcmQodCxyLGksYSk/Zi5nZXRPd25lcktleSh0LG4saSxoKTpudWxsfShwLHksZCxlLHQsbixmLGkscyxvLGMpfWlmKCF3JiYhbyl0aHJvdyBuZXcgci5QYXNzd29yZEV4Y2VwdGlvbigiTm8gcGFzc3dvcmQgZ2l2ZW4iLHIuUGFzc3dvcmRSZXNwb25zZXMuTkVFRF9QQVNTV09SRCk7aWYoIXcmJm8pe2NvbnN0IHQ9ZnVuY3Rpb24gZGVjb2RlVXNlclBhc3N3b3JkKHQsYSxyLG4pe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoMzIpO2xldCBvPTA7Y29uc3QgYz1NYXRoLm1pbigzMix0Lmxlbmd0aCk7Zm9yKDtvPGM7KytvKWlbb109dFtvXTtsZXQgbD0wO2Zvcig7bzwzMjspaVtvKytdPWVbbCsrXTtsZXQgaD1zKGksMCxvKTtjb25zdCB1PW4+PjM7aWYocj49Mylmb3IobD0wO2w8NTA7KytsKWg9cyhoLDAsaC5sZW5ndGgpO2xldCBkLGY7aWYocj49Myl7Zj1hO2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkodSk7Zm9yKGw9MTk7bD49MDtsLS0pe2ZvcihsZXQgdD0wO3Q8dTsrK3QpZVt0XT1oW3RdXmw7ZD1uZXcgQVJDRm91ckNpcGhlcihlKTtmPWQuZW5jcnlwdEJsb2NrKGYpfX1lbHNle2Q9bmV3IEFSQ0ZvdXJDaXBoZXIoaC5zdWJhcnJheSgwLHUpKTtmPWQuZW5jcnlwdEJsb2NrKGEpfXJldHVybiBmfSh5LGQscCx1KTt3PXByZXBhcmVLZXlEYXRhKGIsdCxkLGYsZyxwLHUsbSl9aWYoIXcpdGhyb3cgbmV3IHIuUGFzc3dvcmRFeGNlcHRpb24oIkluY29ycmVjdCBQYXNzd29yZCIsci5QYXNzd29yZFJlc3BvbnNlcy5JTkNPUlJFQ1RfUEFTU1dPUkQpO3RoaXMuZW5jcnlwdGlvbktleT13O2lmKGg+PTQpe2NvbnN0IGU9YS5nZXQoIkNGIik7ZSBpbnN0YW5jZW9mIG4uRGljdCYmKGUuc3VwcHJlc3NFbmNyeXB0aW9uPSEwKTt0aGlzLmNmPWU7dGhpcy5zdG1mPWEuZ2V0KCJTdG1GIil8fHQ7dGhpcy5zdHJmPWEuZ2V0KCJTdHJGIil8fHQ7dGhpcy5lZmY9YS5nZXQoIkVGRiIpfHx0aGlzLnN0bWZ9fWNyZWF0ZUNpcGhlclRyYW5zZm9ybShlLHQpe2lmKDQ9PT10aGlzLmFsZ29yaXRobXx8NT09PXRoaXMuYWxnb3JpdGhtKXJldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZix0aGlzLnN0cmYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSksYnVpbGRDaXBoZXJDb25zdHJ1Y3Rvcih0aGlzLmNmLHRoaXMuc3RtZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSk7Y29uc3QgYT1idWlsZE9iamVjdEtleShlLHQsdGhpcy5lbmNyeXB0aW9uS2V5LCExKSxyPWZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ2lwaGVyQ29uc3RydWN0b3IoKXtyZXR1cm4gbmV3IEFSQ0ZvdXJDaXBoZXIoYSl9O3JldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKHIscil9fX0oKTt0LkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk9aH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkRlY3J5cHRTdHJlYW09dm9pZCAwO3ZhciByPWEoMTcpO2NsYXNzIERlY3J5cHRTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMuZGVjcnlwdD1hO3RoaXMubmV4dENodW5rPW51bGw7dGhpcy5pbml0aWFsaXplZD0hMX1yZWFkQmxvY2soKXtsZXQgZTtpZih0aGlzLmluaXRpYWxpemVkKWU9dGhpcy5uZXh0Q2h1bms7ZWxzZXtlPXRoaXMuc3RyLmdldEJ5dGVzKDUxMik7dGhpcy5pbml0aWFsaXplZD0hMH1pZighZXx8MD09PWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59dGhpcy5uZXh0Q2h1bms9dGhpcy5zdHIuZ2V0Qnl0ZXMoNTEyKTtjb25zdCB0PXRoaXMubmV4dENodW5rJiZ0aGlzLm5leHRDaHVuay5sZW5ndGg+MDtlPSgwLHRoaXMuZGVjcnlwdCkoZSwhdCk7Y29uc3QgYT10aGlzLmJ1ZmZlckxlbmd0aCxyPWErZS5sZW5ndGg7dGhpcy5lbnN1cmVCdWZmZXIocikuc2V0KGUsYSk7dGhpcy5idWZmZXJMZW5ndGg9cn19dC5EZWNyeXB0U3RyZWFtPURlY3J5cHRTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DYXRhbG9nPXZvaWQgMDt2YXIgcj1hKDQpLG49YSgyKSxpPWEoMykscz1hKDY4KSxvPWEoNSksYz1hKDY5KSxsPWEoMTIpLGg9YSg3MCksdT1hKDU3KSxkPWEoNzEpLGY9YSg3Mik7ZnVuY3Rpb24gZmV0Y2hEZXN0aW5hdGlvbihlKXtlIGluc3RhbmNlb2YgaS5EaWN0JiYoZT1lLmdldCgiRCIpKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOm51bGx9Y2xhc3MgQ2F0YWxvZ3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMucGRmTWFuYWdlcj1lO3RoaXMueHJlZj10O3RoaXMuX2NhdERpY3Q9dC5nZXRDYXRhbG9nT2JqKCk7aWYoISh0aGlzLl9jYXREaWN0IGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQ2F0YWxvZyBvYmplY3QgaXMgbm90IGEgZGljdGlvbmFyeS4iKTt0aGlzLnRvcGxldmVsUGFnZXNEaWN0O3RoaXMuX2FjdHVhbE51bVBhZ2VzPW51bGw7dGhpcy5mb250Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGU7dGhpcy5idWlsdEluQ01hcENhY2hlPW5ldyBNYXA7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9bmV3IE1hcDt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9bmV3IHUuR2xvYmFsSW1hZ2VDYWNoZTt0aGlzLnBhZ2VLaWRzQ291bnRDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZTt0aGlzLnBhZ2VJbmRleENhY2hlPW5ldyBpLlJlZlNldENhY2hlO3RoaXMubm9uQmxlbmRNb2Rlc1NldD1uZXcgaS5SZWZTZXR9Z2V0IHZlcnNpb24oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJWZXJzaW9uIik7aWYoZSBpbnN0YW5jZW9mIGkuTmFtZSl7aWYoci5QREZfVkVSU0lPTl9SRUdFWFAudGVzdChlLm5hbWUpKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJ2ZXJzaW9uIixlLm5hbWUpOygwLG4ud2FybikoYEludmFsaWQgUERGIGNhdGFsb2cgdmVyc2lvbjogJHtlLm5hbWV9YCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZlcnNpb24iLG51bGwpfWdldCBsYW5nKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJsYW5nIiwic3RyaW5nIj09dHlwZW9mIGU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSk6bnVsbCl9Z2V0IG5lZWRzUmVuZGVyaW5nKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmVlZHNSZW5kZXJpbmciKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywibmVlZHNSZW5kZXJpbmciLCJib29sZWFuIj09dHlwZW9mIGUmJmUpfWdldCBjb2xsZWN0aW9uKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiQ29sbGVjdGlvbiIpO3QgaW5zdGFuY2VvZiBpLkRpY3QmJnQuc2l6ZT4wJiYoZT10KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4uaW5mbykoIkNhbm5vdCBmZXRjaCBDb2xsZWN0aW9uIGVudHJ5OyBhc3N1bWluZyBubyBjb2xsZWN0aW9uIGlzIHByZXNlbnQuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNvbGxlY3Rpb24iLGUpfWdldCBhY3JvRm9ybSgpe2xldCBlPW51bGw7dHJ5e2NvbnN0IHQ9dGhpcy5fY2F0RGljdC5nZXQoIkFjcm9Gb3JtIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiQ2Fubm90IGZldGNoIEFjcm9Gb3JtIGVudHJ5OyBhc3N1bWluZyBubyBmb3JtcyBhcmUgcHJlc2VudC4iKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYWNyb0Zvcm0iLGUpfWdldCBhY3JvRm9ybVJlZigpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIkFjcm9Gb3JtIik7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImFjcm9Gb3JtUmVmIixlIGluc3RhbmNlb2YgaS5SZWY/ZTpudWxsKX1nZXQgbWV0YWRhdGEoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJNZXRhZGF0YSIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuUmVmKSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywibWV0YWRhdGEiLG51bGwpO2xldCB0PW51bGw7dHJ5e2NvbnN0IGE9ISh0aGlzLnhyZWYuZW5jcnlwdCYmdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKSxyPXRoaXMueHJlZi5mZXRjaChlLGEpO2lmKHIgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJnIuZGljdCBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgZT1yLmRpY3QuZ2V0KCJUeXBlIiksYT1yLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoKDAsaS5pc05hbWUpKGUsIk1ldGFkYXRhIikmJigwLGkuaXNOYW1lKShhLCJYTUwiKSl7Y29uc3QgZT0oMCxuLnN0cmluZ1RvVVRGOFN0cmluZykoci5nZXRTdHJpbmcoKSk7ZSYmKHQ9bmV3IGQuTWV0YWRhdGFQYXJzZXIoZSkuc2VyaWFsaXphYmxlKX19fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKShgU2tpcHBpbmcgaW52YWxpZCBNZXRhZGF0YTogIiR7ZX0iLmApfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsdCl9Z2V0IG1hcmtJbmZvKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkTWFya0luZm8oKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSB0byByZWFkIG1hcmsgaW5mby4iKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywibWFya0luZm8iLGUpfV9yZWFkTWFya0luZm8oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJNYXJrSW5mbyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgdD17TWFya2VkOiExLFVzZXJQcm9wZXJ0aWVzOiExLFN1c3BlY3RzOiExfTtmb3IoY29uc3QgYSBpbiB0KXtjb25zdCByPWUuZ2V0KGEpOyJib29sZWFuIj09dHlwZW9mIHImJih0W2FdPXIpfXJldHVybiB0fWdldCBzdHJ1Y3RUcmVlUm9vdCgpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFN0cnVjdFRyZWVSb290KCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLndhcm4pKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJzdHJ1Y3RUcmVlUm9vdCIsZSl9X3JlYWRTdHJ1Y3RUcmVlUm9vdCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlN0cnVjdFRyZWVSb290Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBmLlN0cnVjdFRyZWVSb290KGUpO3QuaW5pdCgpO3JldHVybiB0fWdldCB0b3BsZXZlbFBhZ2VzRGljdCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfWdldCBkb2N1bWVudE91dGxpbmUoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9X3JlYWREb2N1bWVudE91dGxpbmUoKXtsZXQgZT10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2U9ZS5nZXRSYXcoIkZpcnN0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybiBudWxsO2NvbnN0IHQ9e2l0ZW1zOltdfSxhPVt7b2JqOmUscGFyZW50OnR9XSxyPW5ldyBpLlJlZlNldDtyLnB1dChlKTtjb25zdCBzPXRoaXMueHJlZixvPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtmb3IoO2EubGVuZ3RoPjA7KXtjb25zdCB0PWEuc2hpZnQoKSxjPXMuZmV0Y2hJZlJlZih0Lm9iaik7aWYobnVsbD09PWMpY29udGludWU7aWYoIWMuaGFzKCJUaXRsZSIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIG91dGxpbmUgaXRlbSBlbmNvdW50ZXJlZC4iKTtjb25zdCBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6YyxyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsLGRvY0F0dGFjaG1lbnRzOnRoaXMuYXR0YWNobWVudHN9KTtjb25zdCB1PWMuZ2V0KCJUaXRsZSIpLGQ9Yy5nZXQoIkYiKXx8MCxmPWMuZ2V0QXJyYXkoIkMiKSxnPWMuZ2V0KCJDb3VudCIpO2xldCBwPW87IUFycmF5LmlzQXJyYXkoZil8fDMhPT1mLmxlbmd0aHx8MD09PWZbMF0mJjA9PT1mWzFdJiYwPT09ZlsyXXx8KHA9bC5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihmLDApKTtjb25zdCBtPXthY3Rpb246aC5hY3Rpb24sYXR0YWNobWVudDpoLmF0dGFjaG1lbnQsZGVzdDpoLmRlc3QsdXJsOmgudXJsLHVuc2FmZVVybDpoLnVuc2FmZVVybCxuZXdXaW5kb3c6aC5uZXdXaW5kb3csc2V0T0NHU3RhdGU6aC5zZXRPQ0dTdGF0ZSx0aXRsZTooMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh1KSxjb2xvcjpwLGNvdW50Ok51bWJlci5pc0ludGVnZXIoZyk/Zzp2b2lkIDAsYm9sZDohISgyJmQpLGl0YWxpYzohISgxJmQpLGl0ZW1zOltdfTt0LnBhcmVudC5pdGVtcy5wdXNoKG0pO2U9Yy5nZXRSYXcoIkZpcnN0Iik7aWYoZSBpbnN0YW5jZW9mIGkuUmVmJiYhci5oYXMoZSkpe2EucHVzaCh7b2JqOmUscGFyZW50Om19KTtyLnB1dChlKX1lPWMuZ2V0UmF3KCJOZXh0Iik7aWYoZSBpbnN0YW5jZW9mIGkuUmVmJiYhci5oYXMoZSkpe2EucHVzaCh7b2JqOmUscGFyZW50OnQucGFyZW50fSk7ci5wdXQoZSl9fXJldHVybiB0Lml0ZW1zLmxlbmd0aD4wP3QuaXRlbXM6bnVsbH1nZXQgcGVybWlzc2lvbnMoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQZXJtaXNzaW9ucygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInBlcm1pc3Npb25zIixlKX1fcmVhZFBlcm1pc3Npb25zKCl7Y29uc3QgZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkVuY3J5cHQiKTtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2xldCB0PWUuZ2V0KCJQIik7aWYoIm51bWJlciIhPXR5cGVvZiB0KXJldHVybiBudWxsO3QrPTIqKjMyO2NvbnN0IGE9W107Zm9yKGNvbnN0IGUgaW4gbi5QZXJtaXNzaW9uRmxhZyl7Y29uc3Qgcj1uLlBlcm1pc3Npb25GbGFnW2VdO3QmciYmYS5wdXNoKHIpfXJldHVybiBhfWdldCBvcHRpb25hbENvbnRlbnRDb25maWcoKXtsZXQgZT1udWxsO3RyeXtjb25zdCB0PXRoaXMuX2NhdERpY3QuZ2V0KCJPQ1Byb3BlcnRpZXMiKTtpZighdClyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTtjb25zdCBhPXQuZ2V0KCJEIik7aWYoIWEpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7Y29uc3Qgcj10LmdldCgiT0NHcyIpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO2NvbnN0IHM9W10sbz1bXTtmb3IoY29uc3QgZSBvZiByKXtpZighKGUgaW5zdGFuY2VvZiBpLlJlZikpY29udGludWU7by5wdXNoKGUpO2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7cy5wdXNoKHtpZDplLnRvU3RyaW5nKCksbmFtZToic3RyaW5nIj09dHlwZW9mIHQuZ2V0KCJOYW1lIik/KDAsbi5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIk5hbWUiKSk6bnVsbCxpbnRlbnQ6InN0cmluZyI9PXR5cGVvZiB0LmdldCgiSW50ZW50Iik/KDAsbi5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIkludGVudCIpKTpudWxsfSl9ZT10aGlzLl9yZWFkT3B0aW9uYWxDb250ZW50Q29uZmlnKGEsbyk7ZS5ncm91cHM9c31jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoYFVuYWJsZSB0byByZWFkIG9wdGlvbmFsIGNvbnRlbnQgY29uZmlnOiAke2V9YCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsZSl9X3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcoZSx0KXtmdW5jdGlvbiBwYXJzZU9uT2ZmKGUpe2NvbnN0IGE9W107aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoY29uc3QgciBvZiBlKXIgaW5zdGFuY2VvZiBpLlJlZiYmdC5pbmNsdWRlcyhyKSYmYS5wdXNoKHIudG9TdHJpbmcoKSk7cmV0dXJuIGF9ZnVuY3Rpb24gcGFyc2VPcmRlcihlLGE9MCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3Qgbj1bXTtmb3IoY29uc3QgcyBvZiBlKXtpZihzIGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXMocykpe3IucHV0KHMpO24ucHVzaChzLnRvU3RyaW5nKCkpO2NvbnRpbnVlfWNvbnN0IGU9cGFyc2VOZXN0ZWRPcmRlcihzLGEpO2UmJm4ucHVzaChlKX1pZihhPjApcmV0dXJuIG47Y29uc3Qgcz1bXTtmb3IoY29uc3QgZSBvZiB0KXIuaGFzKGUpfHxzLnB1c2goZS50b1N0cmluZygpKTtzLmxlbmd0aCYmbi5wdXNoKHtuYW1lOm51bGwsb3JkZXI6c30pO3JldHVybiBufWZ1bmN0aW9uIHBhcnNlTmVzdGVkT3JkZXIoZSx0KXtpZigrK3Q+cyl7KDAsbi53YXJuKSgicGFyc2VOZXN0ZWRPcmRlciAtIHJlYWNoZWQgTUFYX05FU1RFRF9MRVZFTFMuIik7cmV0dXJuIG51bGx9Y29uc3Qgcj1hLmZldGNoSWZSZWYoZSk7aWYoIUFycmF5LmlzQXJyYXkocikpcmV0dXJuIG51bGw7Y29uc3QgaT1hLmZldGNoSWZSZWYoclswXSk7aWYoInN0cmluZyIhPXR5cGVvZiBpKXJldHVybiBudWxsO2NvbnN0IG89cGFyc2VPcmRlcihyLnNsaWNlKDEpLHQpO3JldHVybiBvJiZvLmxlbmd0aD97bmFtZTooMCxuLnN0cmluZ1RvUERGU3RyaW5nKShpKSxvcmRlcjpvfTpudWxsfWNvbnN0IGE9dGhpcy54cmVmLHI9bmV3IGkuUmVmU2V0LHM9MTA7cmV0dXJue25hbWU6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiTmFtZSIpPygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJOYW1lIikpOm51bGwsY3JlYXRvcjoic3RyaW5nIj09dHlwZW9mIGUuZ2V0KCJDcmVhdG9yIik/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIkNyZWF0b3IiKSk6bnVsbCxiYXNlU3RhdGU6ZS5nZXQoIkJhc2VTdGF0ZSIpaW5zdGFuY2VvZiBpLk5hbWU/ZS5nZXQoIkJhc2VTdGF0ZSIpLm5hbWU6bnVsbCxvbjpwYXJzZU9uT2ZmKGUuZ2V0KCJPTiIpKSxvZmY6cGFyc2VPbk9mZihlLmdldCgiT0ZGIikpLG9yZGVyOnBhcnNlT3JkZXIoZS5nZXQoIk9yZGVyIikpLGdyb3VwczpudWxsfX1zZXRBY3R1YWxOdW1QYWdlcyhlPW51bGwpe3RoaXMuX2FjdHVhbE51bVBhZ2VzPWV9Z2V0IGhhc0FjdHVhbE51bVBhZ2VzKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hY3R1YWxOdW1QYWdlc31nZXQgX3BhZ2VzQ291bnQoKXtjb25zdCBlPXRoaXMudG9wbGV2ZWxQYWdlc0RpY3QuZ2V0KCJDb3VudCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQYWdlIGNvdW50IGluIHRvcC1sZXZlbCBwYWdlcyBkaWN0aW9uYXJ5IGlzIG5vdCBhbiBpbnRlZ2VyLiIpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJfcGFnZXNDb3VudCIsZSl9Z2V0IG51bVBhZ2VzKCl7cmV0dXJuIHRoaXMuaGFzQWN0dWFsTnVtUGFnZXM/dGhpcy5fYWN0dWFsTnVtUGFnZXM6dGhpcy5fcGFnZXNDb3VudH1nZXQgZGVzdGluYXRpb25zKCl7Y29uc3QgZT10aGlzLl9yZWFkRGVzdHMoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZSBpbnN0YW5jZW9mIHMuTmFtZVRyZWUpZm9yKGNvbnN0W2Escl1vZiBlLmdldEFsbCgpKXtjb25zdCBlPWZldGNoRGVzdGluYXRpb24ocik7ZSYmKHRbKDAsbi5zdHJpbmdUb1BERlN0cmluZykoYSldPWUpfWVsc2UgZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLGEpe2NvbnN0IHI9ZmV0Y2hEZXN0aW5hdGlvbihhKTtyJiYodFtlXT1yKX0pKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZGVzdGluYXRpb25zIix0KX1nZXREZXN0aW5hdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlYWREZXN0cygpO2lmKHQgaW5zdGFuY2VvZiBzLk5hbWVUcmVlKXtjb25zdCBhPWZldGNoRGVzdGluYXRpb24odC5nZXQoZSkpO2lmKGEpcmV0dXJuIGE7Y29uc3Qgcj10aGlzLmRlc3RpbmF0aW9uc1tlXTtpZihyKXsoMCxuLndhcm4pKGBGb3VuZCAiJHtlfSIgYXQgYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGluIHRoZSBOYW1lVHJlZS5gKTtyZXR1cm4gcn19ZWxzZSBpZih0IGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBhPWZldGNoRGVzdGluYXRpb24odC5nZXQoZSkpO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9X3JlYWREZXN0cygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGUmJmUuaGFzKCJEZXN0cyIpP25ldyBzLk5hbWVUcmVlKGUuZ2V0UmF3KCJEZXN0cyIpLHRoaXMueHJlZik6dGhpcy5fY2F0RGljdC5oYXMoIkRlc3RzIik/dGhpcy5fY2F0RGljdC5nZXQoIkRlc3RzIik6dm9pZCAwfWdldCBwYWdlTGFiZWxzKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGFnZUxhYmVscygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInBhZ2VMYWJlbHMiLGUpfV9yZWFkUGFnZUxhYmVscygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VMYWJlbHMiKTtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKTtsZXQgYT1udWxsLG89IiI7Y29uc3QgYz1uZXcgcy5OdW1iZXJUcmVlKGUsdGhpcy54cmVmKS5nZXRBbGwoKTtsZXQgbD0iIixoPTE7Zm9yKGxldCBlPTAscz10aGlzLm51bVBhZ2VzO2U8cztlKyspe2NvbnN0IHM9Yy5nZXQoZSk7aWYodm9pZCAwIT09cyl7aWYoIShzIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYocy5oYXMoIlR5cGUiKSYmISgwLGkuaXNOYW1lKShzLmdldCgiVHlwZSIpLCJQYWdlTGFiZWwiKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCB0eXBlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2lmKHMuaGFzKCJTIikpe2NvbnN0IGU9cy5nZXQoIlMiKTtpZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2E9ZS5uYW1lfWVsc2UgYT1udWxsO2lmKHMuaGFzKCJQIikpe2NvbnN0IGU9cy5nZXQoIlAiKTtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgcHJlZml4IGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO289KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSl9ZWxzZSBvPSIiO2lmKHMuaGFzKCJTdCIpKXtjb25zdCBlPXMuZ2V0KCJTdCIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT49MSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgc3RhcnQgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7aD1lfWVsc2UgaD0xfXN3aXRjaChhKXtjYXNlIkQiOmw9aDticmVhaztjYXNlIlIiOmNhc2UiciI6bD0oMCxyLnRvUm9tYW5OdW1lcmFscykoaCwiciI9PT1hKTticmVhaztjYXNlIkEiOmNhc2UiYSI6Y29uc3QgZT0yNix0PTY1LGk9OTcscz0iYSI9PT1hP2k6dCxvPWgtMTtsPVN0cmluZy5mcm9tQ2hhckNvZGUocytvJWUpLnJlcGVhdChNYXRoLmZsb29yKG8vZSkrMSk7YnJlYWs7ZGVmYXVsdDppZihhKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBJbnZhbGlkIHN0eWxlICIke2F9IiBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5gKTtsPSIifXRbZV09bytsO2grK31yZXR1cm4gdH1nZXQgcGFnZUxheW91dCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VMYXlvdXQiKTtsZXQgdD0iIjtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiU2luZ2xlUGFnZSI6Y2FzZSJPbmVDb2x1bW4iOmNhc2UiVHdvQ29sdW1uTGVmdCI6Y2FzZSJUd29Db2x1bW5SaWdodCI6Y2FzZSJUd29QYWdlTGVmdCI6Y2FzZSJUd29QYWdlUmlnaHQiOnQ9ZS5uYW1lfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJwYWdlTGF5b3V0Iix0KX1nZXQgcGFnZU1vZGUoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTW9kZSIpO2xldCB0PSJVc2VOb25lIjtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiVXNlTm9uZSI6Y2FzZSJVc2VPdXRsaW5lcyI6Y2FzZSJVc2VUaHVtYnMiOmNhc2UiRnVsbFNjcmVlbiI6Y2FzZSJVc2VPQyI6Y2FzZSJVc2VBdHRhY2htZW50cyI6dD1lLm5hbWV9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInBhZ2VNb2RlIix0KX1nZXQgdmlld2VyUHJlZmVyZW5jZXMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJWaWV3ZXJQcmVmZXJlbmNlcyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZpZXdlclByZWZlcmVuY2VzIixudWxsKTtsZXQgdD1udWxsO2Zvcihjb25zdCBhIG9mIGUuZ2V0S2V5cygpKXtjb25zdCByPWUuZ2V0KGEpO2xldCBzO3N3aXRjaChhKXtjYXNlIkhpZGVUb29sYmFyIjpjYXNlIkhpZGVNZW51YmFyIjpjYXNlIkhpZGVXaW5kb3dVSSI6Y2FzZSJGaXRXaW5kb3ciOmNhc2UiQ2VudGVyV2luZG93IjpjYXNlIkRpc3BsYXlEb2NUaXRsZSI6Y2FzZSJQaWNrVHJheUJ5UERGU2l6ZSI6ImJvb2xlYW4iPT10eXBlb2YgciYmKHM9cik7YnJlYWs7Y2FzZSJOb25GdWxsU2NyZWVuUGFnZU1vZGUiOmlmKHIgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJVc2VPQyI6cz1yLm5hbWU7YnJlYWs7ZGVmYXVsdDpzPSJVc2VOb25lIn1icmVhaztjYXNlIkRpcmVjdGlvbiI6aWYociBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIkwyUiI6Y2FzZSJSMkwiOnM9ci5uYW1lO2JyZWFrO2RlZmF1bHQ6cz0iTDJSIn1icmVhaztjYXNlIlZpZXdBcmVhIjpjYXNlIlZpZXdDbGlwIjpjYXNlIlByaW50QXJlYSI6Y2FzZSJQcmludENsaXAiOmlmKHIgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJNZWRpYUJveCI6Y2FzZSJDcm9wQm94IjpjYXNlIkJsZWVkQm94IjpjYXNlIlRyaW1Cb3giOmNhc2UiQXJ0Qm94IjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9IkNyb3BCb3gifWJyZWFrO2Nhc2UiUHJpbnRTY2FsaW5nIjppZihyIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiTm9uZSI6Y2FzZSJBcHBEZWZhdWx0IjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9IkFwcERlZmF1bHQifWJyZWFrO2Nhc2UiRHVwbGV4IjppZihyIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiU2ltcGxleCI6Y2FzZSJEdXBsZXhGbGlwU2hvcnRFZGdlIjpjYXNlIkR1cGxleEZsaXBMb25nRWRnZSI6cz1yLm5hbWU7YnJlYWs7ZGVmYXVsdDpzPSJOb25lIn1icmVhaztjYXNlIlByaW50UGFnZVJhbmdlIjppZihBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCUyPT0wKXtyLmV2ZXJ5KCgoZSx0LGEpPT5OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAmJigwPT09dHx8ZT49YVt0LTFdKSYmZTw9dGhpcy5udW1QYWdlcykpJiYocz1yKX1icmVhaztjYXNlIk51bUNvcGllcyI6TnVtYmVyLmlzSW50ZWdlcihyKSYmcj4wJiYocz1yKTticmVhaztkZWZhdWx0OigwLG4ud2FybikoYElnbm9yaW5nIG5vbi1zdGFuZGFyZCBrZXkgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICR7YX0uYCk7Y29udGludWV9aWYodm9pZCAwIT09cyl7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dFthXT1zfWVsc2UoMCxuLndhcm4pKGBCYWQgdmFsdWUsIGZvciBrZXkgIiR7YX0iLCBpbiBWaWV3ZXJQcmVmZXJlbmNlczogJHtyfS5gKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLHQpfWdldCBvcGVuQWN0aW9uKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiT3BlbkFjdGlvbiIpLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBhPW5ldyBpLkRpY3QodGhpcy54cmVmKTthLnNldCgiQSIsZSk7Y29uc3Qgcj17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmEscmVzdWx0T2JqOnJ9KTtBcnJheS5pc0FycmF5KHIuZGVzdCk/dC5kZXN0PXIuZGVzdDpyLmFjdGlvbiYmKHQuYWN0aW9uPXIuYWN0aW9uKX1lbHNlIEFycmF5LmlzQXJyYXkoZSkmJih0LmRlc3Q9ZSk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm9wZW5BY3Rpb24iLCgwLG4ub2JqZWN0U2l6ZSkodCk+MD90Om51bGwpfWdldCBhdHRhY2htZW50cygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7bGV0IHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXtjb25zdCBhPW5ldyBzLk5hbWVUcmVlKGUuZ2V0UmF3KCJFbWJlZGRlZEZpbGVzIiksdGhpcy54cmVmKTtmb3IoY29uc3RbZSxyXW9mIGEuZ2V0QWxsKCkpe2NvbnN0IGE9bmV3IGguRmlsZVNwZWMocix0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpO3RbKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSldPWEuc2VyaWFsaXphYmxlfX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYXR0YWNobWVudHMiLHQpfWdldCB4ZmFJbWFnZXMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpO2xldCB0PW51bGw7aWYoZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5oYXMoIlhGQUltYWdlcyIpKXtjb25zdCBhPW5ldyBzLk5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLHJdb2YgYS5nZXRBbGwoKSl7dHx8KHQ9bmV3IGkuRGljdCh0aGlzLnhyZWYpKTt0LnNldCgoMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKSxyKX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInhmYUltYWdlcyIsdCl9X2NvbGxlY3RKYXZhU2NyaXB0KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2Z1bmN0aW9uIGFwcGVuZElmSmF2YVNjcmlwdERpY3QoZSxhKXtpZighKGEgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybjtpZighKDAsaS5pc05hbWUpKGEuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSlyZXR1cm47bGV0IHI9YS5nZXQoIkpTIik7aWYociBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSlyPXIuZ2V0U3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIHIpcmV0dXJuO251bGw9PT10JiYodD1uZXcgTWFwKTtyPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHIpLnJlcGxhY2UoL1x1MDAwMC9nLCIiKTt0LnNldChlLHIpfWlmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJKYXZhU2NyaXB0Iikpe2NvbnN0IHQ9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIkphdmFTY3JpcHQiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLGFdb2YgdC5nZXRBbGwoKSlhcHBlbmRJZkphdmFTY3JpcHREaWN0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUpLGEpfWNvbnN0IGE9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTthJiZhcHBlbmRJZkphdmFTY3JpcHREaWN0KCJPcGVuQWN0aW9uIixhKTtyZXR1cm4gdH1nZXQgamF2YVNjcmlwdCgpe2NvbnN0IGU9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiamF2YVNjcmlwdCIsZT9bLi4uZS52YWx1ZXMoKV06bnVsbCl9Z2V0IGpzQWN0aW9ucygpe2NvbnN0IGU9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtsZXQgdD0oMCxyLmNvbGxlY3RBY3Rpb25zKSh0aGlzLnhyZWYsdGhpcy5fY2F0RGljdCxuLkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlKTtpZihlKXt0fHwodD1PYmplY3QuY3JlYXRlKG51bGwpKTtmb3IoY29uc3RbYSxyXW9mIGUpYSBpbiB0P3RbYV0ucHVzaChyKTp0W2FdPVtyXX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywianNBY3Rpb25zIix0KX1hc3luYyBmb250RmFsbGJhY2soZSx0KXtjb25zdCBhPWF3YWl0IFByb21pc2UuYWxsKHRoaXMuZm9udENhY2hlKTtmb3IoY29uc3QgciBvZiBhKWlmKHIubG9hZGVkTmFtZT09PWUpe3IuZmFsbGJhY2sodCk7cmV0dXJufX1hc3luYyBjbGVhbnVwKGU9ITEpeygwLGMuY2xlYXJHbG9iYWxDYWNoZXMpKCk7dGhpcy5nbG9iYWxJbWFnZUNhY2hlLmNsZWFyKGUpO3RoaXMucGFnZUtpZHNDb3VudENhY2hlLmNsZWFyKCk7dGhpcy5wYWdlSW5kZXhDYWNoZS5jbGVhcigpO3RoaXMubm9uQmxlbmRNb2Rlc1NldC5jbGVhcigpO2NvbnN0IHQ9YXdhaXQgUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Zvcihjb25zdHtkaWN0OmV9b2YgdClkZWxldGUgZS5jYWNoZUtleTt0aGlzLmZvbnRDYWNoZS5jbGVhcigpO3RoaXMuYnVpbHRJbkNNYXBDYWNoZS5jbGVhcigpO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLmNsZWFyKCl9YXN5bmMgZ2V0UGFnZURpY3QoZSl7Y29uc3QgdD1bdGhpcy50b3BsZXZlbFBhZ2VzRGljdF0sYT1uZXcgaS5SZWZTZXQscj10aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZXMiKTtyIGluc3RhbmNlb2YgaS5SZWYmJmEucHV0KHIpO2NvbnN0IHM9dGhpcy54cmVmLG89dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsYz10aGlzLnBhZ2VJbmRleENhY2hlO2xldCBsPTA7Zm9yKDt0Lmxlbmd0aDspe2NvbnN0IHI9dC5wb3AoKTtpZihyIGluc3RhbmNlb2YgaS5SZWYpe2NvbnN0IGg9by5nZXQocik7aWYoaD49MCYmbCtoPD1lKXtsKz1oO2NvbnRpbnVlfWlmKGEuaGFzKHIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS4iKTthLnB1dChyKTtjb25zdCB1PWF3YWl0IHMuZmV0Y2hBc3luYyhyKTtpZih1IGluc3RhbmNlb2YgaS5EaWN0KXtsZXQgdD11LmdldFJhdygiVHlwZSIpO3QgaW5zdGFuY2VvZiBpLlJlZiYmKHQ9YXdhaXQgcy5mZXRjaEFzeW5jKHQpKTtpZigoMCxpLmlzTmFtZSkodCwiUGFnZSIpfHwhdS5oYXMoIktpZHMiKSl7by5oYXMocil8fG8ucHV0KHIsMSk7Yy5oYXMocil8fGMucHV0KHIsbCk7aWYobD09PWUpcmV0dXJuW3Uscl07bCsrO2NvbnRpbnVlfX10LnB1c2godSk7Y29udGludWV9aWYoIShyIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpO2NvbnN0e29iaklkOmh9PXI7bGV0IHU9ci5nZXRSYXcoIkNvdW50Iik7dSBpbnN0YW5jZW9mIGkuUmVmJiYodT1hd2FpdCBzLmZldGNoQXN5bmModSkpO2lmKE51bWJlci5pc0ludGVnZXIodSkmJnU+PTApe2gmJiFvLmhhcyhoKSYmby5wdXQoaCx1KTtpZihsK3U8PWUpe2wrPXU7Y29udGludWV9fWxldCBkPXIuZ2V0UmF3KCJLaWRzIik7ZCBpbnN0YW5jZW9mIGkuUmVmJiYoZD1hd2FpdCBzLmZldGNoQXN5bmMoZCkpO2lmKCFBcnJheS5pc0FycmF5KGQpKXtsZXQgdD1yLmdldFJhdygiVHlwZSIpO3QgaW5zdGFuY2VvZiBpLlJlZiYmKHQ9YXdhaXQgcy5mZXRjaEFzeW5jKHQpKTtpZigoMCxpLmlzTmFtZSkodCwiUGFnZSIpfHwhci5oYXMoIktpZHMiKSl7aWYobD09PWUpcmV0dXJuW3IsbnVsbF07bCsrO2NvbnRpbnVlfXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkcyBvYmplY3QgaXMgbm90IGFuIGFycmF5LiIpfWZvcihsZXQgZT1kLmxlbmd0aC0xO2U+PTA7ZS0tKXQucHVzaChkW2VdKX10aHJvdyBuZXcgRXJyb3IoYFBhZ2UgaW5kZXggJHtlfSBub3QgZm91bmQuYCl9YXN5bmMgZ2V0QWxsUGFnZURpY3RzKGU9ITEpe2NvbnN0IHQ9W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0sYT1uZXcgaS5SZWZTZXQscz10aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZXMiKTtzIGluc3RhbmNlb2YgaS5SZWYmJmEucHV0KHMpO2NvbnN0IG89bmV3IE1hcCxjPXRoaXMueHJlZixsPXRoaXMucGFnZUluZGV4Q2FjaGU7bGV0IGg9MDtmdW5jdGlvbiBhZGRQYWdlRGljdChlLHQpe3QmJiFsLmhhcyh0KSYmbC5wdXQodCxoKTtvLnNldChoKyssW2UsdF0pfWZ1bmN0aW9uIGFkZFBhZ2VFcnJvcih0KXtpZih0IGluc3RhbmNlb2Ygci5YUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IHQ7by5zZXQoaCsrLFt0LG51bGxdKX1mb3IoO3QubGVuZ3RoPjA7KXtjb25zdCBlPXQuYXQoLTEpLHtjdXJyZW50Tm9kZTpyLHBvc0luS2lkczpzfT1lO2xldCBvPXIuZ2V0UmF3KCJLaWRzIik7aWYobyBpbnN0YW5jZW9mIGkuUmVmKXRyeXtvPWF3YWl0IGMuZmV0Y2hBc3luYyhvKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9aWYoIUFycmF5LmlzQXJyYXkobykpe2FkZFBhZ2VFcnJvcihuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKSk7YnJlYWt9aWYocz49by5sZW5ndGgpe3QucG9wKCk7Y29udGludWV9Y29uc3QgbD1vW3NdO2xldCBoO2lmKGwgaW5zdGFuY2VvZiBpLlJlZil7aWYoYS5oYXMobCkpe2FkZFBhZ2VFcnJvcihuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIikpO2JyZWFrfWEucHV0KGwpO3RyeXtoPWF3YWl0IGMuZmV0Y2hBc3luYyhsKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9fWVsc2UgaD1sO2lmKCEoaCBpbnN0YW5jZW9mIGkuRGljdCkpe2FkZFBhZ2VFcnJvcihuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKTticmVha31sZXQgdT1oLmdldFJhdygiVHlwZSIpO2lmKHUgaW5zdGFuY2VvZiBpLlJlZil0cnl7dT1hd2FpdCBjLmZldGNoQXN5bmModSl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfSgwLGkuaXNOYW1lKSh1LCJQYWdlIil8fCFoLmhhcygiS2lkcyIpP2FkZFBhZ2VEaWN0KGgsbCBpbnN0YW5jZW9mIGkuUmVmP2w6bnVsbCk6dC5wdXNoKHtjdXJyZW50Tm9kZTpoLHBvc0luS2lkczowfSk7ZS5wb3NJbktpZHMrK31yZXR1cm4gb31nZXRQYWdlSW5kZXgoZSl7Y29uc3QgdD10aGlzLnBhZ2VJbmRleENhY2hlLmdldChlKTtpZih2b2lkIDAhPT10KXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7Y29uc3QgYT10aGlzLnhyZWY7bGV0IHI9MDtjb25zdCBuZXh0PXQ9PmZ1bmN0aW9uIHBhZ2VzQmVmb3JlUmVmKHQpe2xldCByLHM9MDtyZXR1cm4gYS5mZXRjaEFzeW5jKHQpLnRoZW4oKGZ1bmN0aW9uKGEpe2lmKCgwLGkuaXNSZWZzRXF1YWwpKHQsZSkmJiEoMCxpLmlzRGljdCkoYSwiUGFnZSIpJiYhKGEgaW5zdGFuY2VvZiBpLkRpY3QmJiFhLmhhcygiVHlwZSIpJiZhLmhhcygiQ29udGVudHMiKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZSByZWZlcmVuY2UgZG9lcyBub3QgcG9pbnQgdG8gYSAvUGFnZSBkaWN0aW9uYXJ5LiIpO2lmKCFhKXJldHVybiBudWxsO2lmKCEoYSBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cj1hLmdldFJhdygiUGFyZW50Iik7cmV0dXJuIGEuZ2V0QXN5bmMoIlBhcmVudCIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBhcmVudCBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtyZXR1cm4gZS5nZXRBc3luYygiS2lkcyIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2NvbnN0IG89W107bGV0IGM9ITE7Zm9yKGNvbnN0IHIgb2YgZSl7aWYoIShyIGluc3RhbmNlb2YgaS5SZWYpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS4iKTtpZigoMCxpLmlzUmVmc0VxdWFsKShyLHQpKXtjPSEwO2JyZWFrfW8ucHVzaChhLmZldGNoQXN5bmMocikudGhlbigoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiS2lkIG5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7ZS5oYXMoIkNvdW50Iik/cys9ZS5nZXQoIkNvdW50Iik6cysrfSkpKX1pZighYyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwobykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bcyxyXX0pKX0pKX0odCkudGhlbigodD0+e2lmKCF0KXt0aGlzLnBhZ2VJbmRleENhY2hlLnB1dChlLHIpO3JldHVybiByfWNvbnN0W2Esbl09dDtyKz1hO3JldHVybiBuZXh0KG4pfSkpO3JldHVybiBuZXh0KGUpfWdldCBiYXNlVXJsKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiVVJJIik7aWYoZSBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgdD1lLmdldCgiQmFzZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Y29uc3QgZT0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHQsbnVsbCx7dHJ5Q29udmVydEVuY29kaW5nOiEwfSk7aWYoZSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYmFzZVVybCIsZS5ocmVmKX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLG51bGwpfXN0YXRpYyBwYXJzZURlc3REaWN0aW9uYXJ5KGUpe2NvbnN0IHQ9ZS5kZXN0RGljdDtpZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXsoMCxuLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgZGVzdERpY3RgIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybn1jb25zdCBhPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiIT10eXBlb2YgYSl7KDAsbi53YXJuKSgicGFyc2VEZXN0RGljdGlvbmFyeTogYHJlc3VsdE9iamAgbXVzdCBiZSBhbiBvYmplY3QuIik7cmV0dXJufWNvbnN0IHM9ZS5kb2NCYXNlVXJsfHxudWxsLGM9ZS5kb2NBdHRhY2htZW50c3x8bnVsbDtsZXQgbCxoLHU9dC5nZXQoIkEiKTtpZighKHUgaW5zdGFuY2VvZiBpLkRpY3QpKWlmKHQuaGFzKCJEZXN0IikpdT10LmdldCgiRGVzdCIpO2Vsc2V7dT10LmdldCgiQUEiKTt1IGluc3RhbmNlb2YgaS5EaWN0JiYodS5oYXMoIkQiKT91PXUuZ2V0KCJEIik6dS5oYXMoIlUiKSYmKHU9dS5nZXQoIlUiKSkpfWlmKHUgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGU9dS5nZXQoIlMiKTtpZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXsoMCxuLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBJbnZhbGlkIHR5cGUgaW4gQWN0aW9uIGRpY3Rpb25hcnkuIik7cmV0dXJufWNvbnN0IHQ9ZS5uYW1lO3N3aXRjaCh0KXtjYXNlIlJlc2V0Rm9ybSI6Y29uc3QgZT11LmdldCgiRmxhZ3MiKSxzPTA9PSgxJigibnVtYmVyIj09dHlwZW9mIGU/ZTowKSksZD1bXSxmPVtdO2Zvcihjb25zdCBlIG9mIHUuZ2V0KCJGaWVsZHMiKXx8W10pZSBpbnN0YW5jZW9mIGkuUmVmP2YucHVzaChlLnRvU3RyaW5nKCkpOiJzdHJpbmciPT10eXBlb2YgZSYmZC5wdXNoKCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUpKTthLnJlc2V0Rm9ybT17ZmllbGRzOmQscmVmczpmLGluY2x1ZGU6c307YnJlYWs7Y2FzZSJVUkkiOmw9dS5nZXQoIlVSSSIpO2wgaW5zdGFuY2VvZiBpLk5hbWUmJihsPSIvIitsLm5hbWUpO2JyZWFrO2Nhc2UiR29UbyI6aD11LmdldCgiRCIpO2JyZWFrO2Nhc2UiTGF1bmNoIjpjYXNlIkdvVG9SIjpjb25zdCBnPXUuZ2V0KCJGIik7ZyBpbnN0YW5jZW9mIGkuRGljdD9sPWcuZ2V0KCJGIil8fG51bGw6InN0cmluZyI9PXR5cGVvZiBnJiYobD1nKTtsZXQgcD11LmdldCgiRCIpO2lmKHApe3AgaW5zdGFuY2VvZiBpLk5hbWUmJihwPXAubmFtZSk7aWYoInN0cmluZyI9PXR5cGVvZiBsKXtjb25zdCBlPWwuc3BsaXQoIiMiKVswXTsic3RyaW5nIj09dHlwZW9mIHA/bD1lKyIjIitwOkFycmF5LmlzQXJyYXkocCkmJihsPWUrIiMiK0pTT04uc3RyaW5naWZ5KHApKX19Y29uc3QgbT11LmdldCgiTmV3V2luZG93Iik7ImJvb2xlYW4iPT10eXBlb2YgbSYmKGEubmV3V2luZG93PW0pO2JyZWFrO2Nhc2UiR29Ub0UiOmNvbnN0IGI9dS5nZXQoIlQiKTtsZXQgeTtpZihjJiZiIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPWIuZ2V0KCJSIiksdD1iLmdldCgiTiIpOygwLGkuaXNOYW1lKShlLCJDIikmJiJzdHJpbmciPT10eXBlb2YgdCYmKHk9Y1soMCxuLnN0cmluZ1RvUERGU3RyaW5nKSh0KV0pfXk/YS5hdHRhY2htZW50PXk6KDAsbi53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuaW1wbGVtZW50ZWQgIkdvVG9FIiBhY3Rpb24uJyk7YnJlYWs7Y2FzZSJOYW1lZCI6Y29uc3Qgdz11LmdldCgiTiIpO3cgaW5zdGFuY2VvZiBpLk5hbWUmJihhLmFjdGlvbj13Lm5hbWUpO2JyZWFrO2Nhc2UiU2V0T0NHU3RhdGUiOmNvbnN0IFM9dS5nZXQoIlN0YXRlIikseD11LmdldCgiUHJlc2VydmVSQiIpO2lmKCFBcnJheS5pc0FycmF5KFMpfHwwPT09Uy5sZW5ndGgpYnJlYWs7Y29uc3Qgaz1bXTtmb3IoY29uc3QgZSBvZiBTKWlmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJPTiI6Y2FzZSJPRkYiOmNhc2UiVG9nZ2xlIjprLnB1c2goZS5uYW1lKX1lbHNlIGUgaW5zdGFuY2VvZiBpLlJlZiYmay5wdXNoKGUudG9TdHJpbmcoKSk7aWYoay5sZW5ndGghPT1TLmxlbmd0aClicmVhazthLnNldE9DR1N0YXRlPXtzdGF0ZTprLHByZXNlcnZlUkI6ImJvb2xlYW4iIT10eXBlb2YgeHx8eH07YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijpjb25zdCBDPXUuZ2V0KCJKUyIpO2xldCB2O0MgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0/dj1DLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgQyYmKHY9Qyk7Y29uc3QgRj12JiYoMCxyLnJlY292ZXJKc1VSTCkoKDAsbi5zdHJpbmdUb1BERlN0cmluZykodikpO2lmKEYpe2w9Ri51cmw7YS5uZXdXaW5kb3c9Ri5uZXdXaW5kb3c7YnJlYWt9ZGVmYXVsdDppZigiSmF2YVNjcmlwdCI9PT10fHwiU3VibWl0Rm9ybSI9PT10KWJyZWFrOygwLG4ud2FybikoYHBhcnNlRGVzdERpY3Rpb25hcnkgLSB1bnN1cHBvcnRlZCBhY3Rpb246ICIke3R9Ii5gKX19ZWxzZSB0LmhhcygiRGVzdCIpJiYoaD10LmdldCgiRGVzdCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2NvbnN0IGU9KDAsbi5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShsLHMse2FkZERlZmF1bHRQcm90b2NvbDohMCx0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtlJiYoYS51cmw9ZS5ocmVmKTthLnVuc2FmZVVybD1sfWlmKGgpe2ggaW5zdGFuY2VvZiBpLk5hbWUmJihoPWgubmFtZSk7InN0cmluZyI9PXR5cGVvZiBoP2EuZGVzdD0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShoKTpBcnJheS5pc0FycmF5KGgpJiYoYS5kZXN0PWgpfX19dC5DYXRhbG9nPUNhdGFsb2d9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5OdW1iZXJUcmVlPXQuTmFtZVRyZWU9dm9pZCAwO3ZhciByPWEoMyksbj1hKDIpO2NsYXNzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuY29uc3RydWN0b3I9PT1OYW1lT3JOdW1iZXJUcmVlJiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgTmFtZU9yTnVtYmVyVHJlZS4iKTt0aGlzLnJvb3Q9ZTt0aGlzLnhyZWY9dDt0aGlzLl90eXBlPWF9Z2V0QWxsKCl7Y29uc3QgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7Y29uc3QgdD10aGlzLnhyZWYsYT1uZXcgci5SZWZTZXQ7YS5wdXQodGhpcy5yb290KTtjb25zdCBpPVt0aGlzLnJvb3RdO2Zvcig7aS5sZW5ndGg+MDspe2NvbnN0IHM9dC5mZXRjaElmUmVmKGkuc2hpZnQoKSk7aWYoIShzIGluc3RhbmNlb2Ygci5EaWN0KSljb250aW51ZTtpZihzLmhhcygiS2lkcyIpKXtjb25zdCBlPXMuZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkoZSkpY29udGludWU7Zm9yKGNvbnN0IHQgb2YgZSl7aWYoYS5oYXModCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYER1cGxpY2F0ZSBlbnRyeSBpbiAiJHt0aGlzLl90eXBlfSIgdHJlZS5gKTtpLnB1c2godCk7YS5wdXQodCl9Y29udGludWV9Y29uc3Qgbz1zLmdldCh0aGlzLl90eXBlKTtpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgYT0wLHI9by5sZW5ndGg7YTxyO2ErPTIpZS5zZXQodC5mZXRjaElmUmVmKG9bYV0pLHQuZmV0Y2hJZlJlZihvW2ErMV0pKX1yZXR1cm4gZX1nZXQoZSl7aWYoIXRoaXMucm9vdClyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMueHJlZjtsZXQgYT10LmZldGNoSWZSZWYodGhpcy5yb290KSxyPTA7Zm9yKDthLmhhcygiS2lkcyIpOyl7aWYoKytyPjEwKXsoMCxuLndhcm4pKGBTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIiR7dGhpcy5fdHlwZX0iIHRyZWUuYCk7cmV0dXJuIG51bGx9Y29uc3QgaT1hLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBudWxsO2xldCBzPTAsbz1pLmxlbmd0aC0xO2Zvcig7czw9bzspe2NvbnN0IHI9cytvPj4xLG49dC5mZXRjaElmUmVmKGlbcl0pLGM9bi5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGNbMF0pKW89ci0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihjWzFdKSkpe2E9bjticmVha31zPXIrMX19aWYocz5vKXJldHVybiBudWxsfWNvbnN0IGk9YS5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShpKSl7bGV0IGE9MCxyPWkubGVuZ3RoLTI7Zm9yKDthPD1yOyl7Y29uc3Qgbj1hK3I+PjEscz1uKygxJm4pLG89dC5mZXRjaElmUmVmKGlbc10pO2lmKGU8bylyPXMtMjtlbHNle2lmKCEoZT5vKSlyZXR1cm4gdC5mZXRjaElmUmVmKGlbcysxXSk7YT1zKzJ9fX1yZXR1cm4gbnVsbH19dC5OYW1lVHJlZT1jbGFzcyBOYW1lVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk5hbWVzIil9fTt0Lk51bWJlclRyZWU9Y2xhc3MgTnVtYmVyVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk51bXMiKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY2xlYXJHbG9iYWxDYWNoZXM9ZnVuY3Rpb24gY2xlYXJHbG9iYWxDYWNoZXMoKXsoMCxyLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpOygwLG4uY2xlYXJVbmljb2RlQ2FjaGVzKSgpfTt2YXIgcj1hKDMpLG49YSgzOCl9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5GaWxlU3BlYz12b2lkIDA7dmFyIHI9YSgyKSxuPWEoNSksaT1hKDMpO2Z1bmN0aW9uIHBpY2tQbGF0Zm9ybUl0ZW0oZSl7cmV0dXJuIGUuaGFzKCJVRiIpP2UuZ2V0KCJVRiIpOmUuaGFzKCJGIik/ZS5nZXQoIkYiKTplLmhhcygiVW5peCIpP2UuZ2V0KCJVbml4Iik6ZS5oYXMoIk1hYyIpP2UuZ2V0KCJNYWMiKTplLmhhcygiRE9TIik/ZS5nZXQoIkRPUyIpOm51bGx9dC5GaWxlU3BlYz1jbGFzcyBGaWxlU3BlY3tjb25zdHJ1Y3RvcihlLHQpe2lmKGUgaW5zdGFuY2VvZiBpLkRpY3Qpe3RoaXMueHJlZj10O3RoaXMucm9vdD1lO2UuaGFzKCJGUyIpJiYodGhpcy5mcz1lLmdldCgiRlMiKSk7dGhpcy5kZXNjcmlwdGlvbj1lLmhhcygiRGVzYyIpPygwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJEZXNjIikpOiIiO2UuaGFzKCJSRiIpJiYoMCxyLndhcm4pKCJSZWxhdGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITA7aWYoIWUuaGFzKCJFRiIpKXt0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITE7KDAsci53YXJuKSgiTm9uLWVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKX19fWdldCBmaWxlbmFtZSgpe2lmKCF0aGlzLl9maWxlbmFtZSYmdGhpcy5yb290KXtjb25zdCBlPXBpY2tQbGF0Zm9ybUl0ZW0odGhpcy5yb290KXx8InVubmFtZWQiO3RoaXMuX2ZpbGVuYW1lPSgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGUpLnJlcGxhY2UoL1xcXFwvZywiXFwiKS5yZXBsYWNlKC9cXFwvL2csIi8iKS5yZXBsYWNlKC9cXC9nLCIvIil9cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfWdldCBjb250ZW50KCl7aWYoIXRoaXMuY29udGVudEF2YWlsYWJsZSlyZXR1cm4gbnVsbDshdGhpcy5jb250ZW50UmVmJiZ0aGlzLnJvb3QmJih0aGlzLmNvbnRlbnRSZWY9cGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QuZ2V0KCJFRiIpKSk7bGV0IGU9bnVsbDtpZih0aGlzLmNvbnRlbnRSZWYpe2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTt0IGluc3RhbmNlb2Ygbi5CYXNlU3RyZWFtP2U9dC5nZXRCeXRlcygpOigwLHIud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpfWVsc2UoMCxyLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnQiKTtyZXR1cm4gZX1nZXQgc2VyaWFsaXphYmxlKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5NZXRhZGF0YVBhcnNlcj12b2lkIDA7dmFyIHI9YSg2NCk7dC5NZXRhZGF0YVBhcnNlcj1jbGFzcyBNZXRhZGF0YVBhcnNlcntjb25zdHJ1Y3RvcihlKXtlPXRoaXMuX3JlcGFpcihlKTtjb25zdCB0PW5ldyByLlNpbXBsZVhNTFBhcnNlcih7bG93ZXJDYXNlTmFtZTohMH0pLnBhcnNlRnJvbVN0cmluZyhlKTt0aGlzLl9tZXRhZGF0YU1hcD1uZXcgTWFwO3RoaXMuX2RhdGE9ZTt0JiZ0aGlzLl9wYXJzZSh0KX1fcmVwYWlyKGUpe3JldHVybiBlLnJlcGxhY2UoL15bXjxdKy8sIiIpLnJlcGxhY2UoLz5cXDM3NlxcMzc3KFtePF0rKS9nLChmdW5jdGlvbihlLHQpe2NvbnN0IGE9dC5yZXBsYWNlKC9cXChbMC0zXSkoWzAtN10pKFswLTddKS9nLChmdW5jdGlvbihlLHQsYSxyKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSg2NCp0KzgqYSsxKnIpfSkpLnJlcGxhY2UoLyYoYW1wfGFwb3N8Z3R8bHR8cXVvdCk7L2csKGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiYW1wIjpyZXR1cm4iJiI7Y2FzZSJhcG9zIjpyZXR1cm4iJyI7Y2FzZSJndCI6cmV0dXJuIj4iO2Nhc2UibHQiOnJldHVybiI8IjtjYXNlInF1b3QiOnJldHVybiciJ310aHJvdyBuZXcgRXJyb3IoYF9yZXBhaXI6ICR7dH0gaXNuJ3QgZGVmaW5lZC5gKX0pKSxyPVtdO2ZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0O2UrPTIpe2NvbnN0IHQ9MjU2KmEuY2hhckNvZGVBdChlKSthLmNoYXJDb2RlQXQoZSsxKTt0Pj0zMiYmdDwxMjcmJjYwIT09dCYmNjIhPT10JiYzOCE9PXQ/ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpOnIucHVzaCgiJiN4IisoNjU1MzYrdCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSsiOyIpfXJldHVybiI+IityLmpvaW4oIiIpfSkpfV9nZXRTZXF1ZW5jZShlKXtjb25zdCB0PWUubm9kZU5hbWU7cmV0dXJuInJkZjpiYWciIT09dCYmInJkZjpzZXEiIT09dCYmInJkZjphbHQiIT09dD9udWxsOmUuY2hpbGROb2Rlcy5maWx0ZXIoKGU9PiJyZGY6bGkiPT09ZS5ub2RlTmFtZSkpfV9wYXJzZUFycmF5KGUpe2lmKCFlLmhhc0NoaWxkTm9kZXMoKSlyZXR1cm47Y29uc3RbdF09ZS5jaGlsZE5vZGVzLGE9dGhpcy5fZ2V0U2VxdWVuY2UodCl8fFtdO3RoaXMuX21ldGFkYXRhTWFwLnNldChlLm5vZGVOYW1lLGEubWFwKChlPT5lLnRleHRDb250ZW50LnRyaW0oKSkpKX1fcGFyc2UoZSl7bGV0IHQ9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoInJkZjpyZGYiIT09dC5ub2RlTmFtZSl7dD10LmZpcnN0Q2hpbGQ7Zm9yKDt0JiYicmRmOnJkZiIhPT10Lm5vZGVOYW1lOyl0PXQubmV4dFNpYmxpbmd9aWYodCYmInJkZjpyZGYiPT09dC5ub2RlTmFtZSYmdC5oYXNDaGlsZE5vZGVzKCkpZm9yKGNvbnN0IGUgb2YgdC5jaGlsZE5vZGVzKWlmKCJyZGY6ZGVzY3JpcHRpb24iPT09ZS5ub2RlTmFtZSlmb3IoY29uc3QgdCBvZiBlLmNoaWxkTm9kZXMpe2NvbnN0IGU9dC5ub2RlTmFtZTtzd2l0Y2goZSl7Y2FzZSIjdGV4dCI6Y29udGludWU7Y2FzZSJkYzpjcmVhdG9yIjpjYXNlImRjOnN1YmplY3QiOnRoaXMuX3BhcnNlQXJyYXkodCk7Y29udGludWV9dGhpcy5fbWV0YWRhdGFNYXAuc2V0KGUsdC50ZXh0Q29udGVudC50cmltKCkpfX1nZXQgc2VyaWFsaXphYmxlKCl7cmV0dXJue3BhcnNlZERhdGE6dGhpcy5fbWV0YWRhdGFNYXAscmF3RGF0YTp0aGlzLl9kYXRhfX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU3RydWN0VHJlZVJvb3Q9dC5TdHJ1Y3RUcmVlUGFnZT12b2lkIDA7dmFyIHI9YSgzKSxuPWEoMiksaT1hKDY4KTtjb25zdCBzPSJQQUdFX0NPTlRFTlQiLG89IlNUUkVBTV9DT05URU5UIixjPSJPQkpFQ1QiLGw9IkVMRU1FTlQiO3QuU3RydWN0VHJlZVJvb3Q9Y2xhc3MgU3RydWN0VHJlZVJvb3R7Y29uc3RydWN0b3IoZSl7dGhpcy5kaWN0PWU7dGhpcy5yb2xlTWFwPW5ldyBNYXB9aW5pdCgpe3RoaXMucmVhZFJvbGVNYXAoKX1yZWFkUm9sZU1hcCgpe2NvbnN0IGU9dGhpcy5kaWN0LmdldCgiUm9sZU1hcCIpO2UgaW5zdGFuY2VvZiByLkRpY3QmJmUuZm9yRWFjaCgoKGUsdCk9Pnt0IGluc3RhbmNlb2Ygci5OYW1lJiZ0aGlzLnJvbGVNYXAuc2V0KGUsdC5uYW1lKX0pKX19O2NsYXNzIFN0cnVjdEVsZW1lbnROb2Rle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy50cmVlPWU7dGhpcy5kaWN0PXQ7dGhpcy5raWRzPVtdO3RoaXMucGFyc2VLaWRzKCl9Z2V0IHJvbGUoKXtjb25zdCBlPXRoaXMuZGljdC5nZXQoIlMiKSx0PWUgaW5zdGFuY2VvZiByLk5hbWU/ZS5uYW1lOiIiLHtyb290OmF9PXRoaXMudHJlZTtyZXR1cm4gYS5yb2xlTWFwLmhhcyh0KT9hLnJvbGVNYXAuZ2V0KHQpOnR9cGFyc2VLaWRzKCl7bGV0IGU9bnVsbDtjb25zdCB0PXRoaXMuZGljdC5nZXRSYXcoIlBnIik7dCBpbnN0YW5jZW9mIHIuUmVmJiYoZT10LnRvU3RyaW5nKCkpO2NvbnN0IGE9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGNvbnN0IHQgb2YgYSl7Y29uc3QgYT10aGlzLnBhcnNlS2lkKGUsdCk7YSYmdGhpcy5raWRzLnB1c2goYSl9ZWxzZXtjb25zdCB0PXRoaXMucGFyc2VLaWQoZSxhKTt0JiZ0aGlzLmtpZHMucHVzaCh0KX19cGFyc2VLaWQoZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6cyxtY2lkOnQscGFnZU9iaklkOmV9KTtsZXQgYT1udWxsO3QgaW5zdGFuY2VvZiByLlJlZj9hPXRoaXMuZGljdC54cmVmLmZldGNoKHQpOnQgaW5zdGFuY2VvZiByLkRpY3QmJihhPXQpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49YS5nZXRSYXcoIlBnIik7biBpbnN0YW5jZW9mIHIuUmVmJiYoZT1uLnRvU3RyaW5nKCkpO2NvbnN0IGk9YS5nZXQoIlR5cGUiKWluc3RhbmNlb2Ygci5OYW1lP2EuZ2V0KCJUeXBlIikubmFtZTpudWxsO3JldHVybiJNQ1IiPT09aT90aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6byxyZWZPYmpJZDphLmdldFJhdygiU3RtIilpbnN0YW5jZW9mIHIuUmVmP2EuZ2V0UmF3KCJTdG0iKS50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmUsbWNpZDphLmdldCgiTUNJRCIpfSk6Ik9CSlIiPT09aT90aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6YyxyZWZPYmpJZDphLmdldFJhdygiT2JqIilpbnN0YW5jZW9mIHIuUmVmP2EuZ2V0UmF3KCJPYmoiKS50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmV9KTpuZXcgU3RydWN0RWxlbWVudCh7dHlwZTpsLGRpY3Q6YX0pfX1jbGFzcyBTdHJ1Y3RFbGVtZW50e2NvbnN0cnVjdG9yKHt0eXBlOmUsZGljdDp0PW51bGwsbWNpZDphPW51bGwscGFnZU9iaklkOnI9bnVsbCxyZWZPYmpJZDpuPW51bGx9KXt0aGlzLnR5cGU9ZTt0aGlzLmRpY3Q9dDt0aGlzLm1jaWQ9YTt0aGlzLnBhZ2VPYmpJZD1yO3RoaXMucmVmT2JqSWQ9bjt0aGlzLnBhcmVudE5vZGU9bnVsbH19dC5TdHJ1Y3RUcmVlUGFnZT1jbGFzcyBTdHJ1Y3RUcmVlUGFnZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMucm9vdD1lO3RoaXMucm9vdERpY3Q9ZT9lLmRpY3Q6bnVsbDt0aGlzLnBhZ2VEaWN0PXQ7dGhpcy5ub2Rlcz1bXX1wYXJzZSgpe2lmKCF0aGlzLnJvb3R8fCF0aGlzLnJvb3REaWN0KXJldHVybjtjb25zdCBlPXRoaXMucm9vdERpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5wYWdlRGljdC5nZXQoIlN0cnVjdFBhcmVudHMiKTtpZighTnVtYmVyLmlzSW50ZWdlcih0KSlyZXR1cm47Y29uc3QgYT1uZXcgaS5OdW1iZXJUcmVlKGUsdGhpcy5yb290RGljdC54cmVmKS5nZXQodCk7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuO2NvbnN0IG49bmV3IE1hcDtmb3IoY29uc3QgZSBvZiBhKWUgaW5zdGFuY2VvZiByLlJlZiYmdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaChlKSxuKX1hZGROb2RlKGUsdCxhPTApe2lmKGE+NDApeygwLG4ud2FybikoIlN0cnVjdFRyZWUgTUFYX0RFUFRIIHJlYWNoZWQuIik7cmV0dXJuIG51bGx9aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO2NvbnN0IGk9bmV3IFN0cnVjdEVsZW1lbnROb2RlKHRoaXMsZSk7dC5zZXQoZSxpKTtjb25zdCBzPWUuZ2V0KCJQIik7aWYoIXN8fCgwLHIuaXNOYW1lKShzLmdldCgiVHlwZSIpLCJTdHJ1Y3RUcmVlUm9vdCIpKXt0aGlzLmFkZFRvcExldmVsTm9kZShlLGkpfHx0LmRlbGV0ZShlKTtyZXR1cm4gaX1jb25zdCBvPXRoaXMuYWRkTm9kZShzLHQsYSsxKTtpZighbylyZXR1cm4gaTtsZXQgYz0hMTtmb3IoY29uc3QgdCBvZiBvLmtpZHMpaWYodC50eXBlPT09bCYmdC5kaWN0PT09ZSl7dC5wYXJlbnROb2RlPWk7Yz0hMH1jfHx0LmRlbGV0ZShlKTtyZXR1cm4gaX1hZGRUb3BMZXZlbE5vZGUoZSx0KXtjb25zdCBhPXRoaXMucm9vdERpY3QuZ2V0KCJLIik7aWYoIWEpcmV0dXJuITE7aWYoYSBpbnN0YW5jZW9mIHIuRGljdCl7aWYoYS5vYmpJZCE9PWUub2JqSWQpcmV0dXJuITE7dGhpcy5ub2Rlc1swXT10O3JldHVybiEwfWlmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiEwO2xldCBuPSExO2ZvcihsZXQgcj0wO3I8YS5sZW5ndGg7cisrKXtjb25zdCBpPWFbcl07aWYoaSYmaS50b1N0cmluZygpPT09ZS5vYmpJZCl7dGhpcy5ub2Rlc1tyXT10O249ITB9fXJldHVybiBufWdldCBzZXJpYWxpemFibGUoKXtmdW5jdGlvbiBub2RlVG9TZXJpYWxpemFibGUoZSx0LGE9MCl7aWYoYT40MCl7KDAsbi53YXJuKSgiU3RydWN0VHJlZSB0b28gZGVlcCB0byBiZSBmdWxseSBzZXJpYWxpemVkLiIpO3JldHVybn1jb25zdCByPU9iamVjdC5jcmVhdGUobnVsbCk7ci5yb2xlPWUucm9sZTtyLmNoaWxkcmVuPVtdO3QuY2hpbGRyZW4ucHVzaChyKTtjb25zdCBpPWUuZGljdC5nZXQoIkFsdCIpOyJzdHJpbmciPT10eXBlb2YgaSYmKHIuYWx0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGkpKTtjb25zdCBoPWUuZGljdC5nZXQoIkxhbmciKTsic3RyaW5nIj09dHlwZW9mIGgmJihyLmxhbmc9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoaCkpO2Zvcihjb25zdCB0IG9mIGUua2lkcyl7Y29uc3QgZT10LnR5cGU9PT1sP3QucGFyZW50Tm9kZTpudWxsO2U/bm9kZVRvU2VyaWFsaXphYmxlKGUscixhKzEpOnQudHlwZT09PXN8fHQudHlwZT09PW8/ci5jaGlsZHJlbi5wdXNoKHt0eXBlOiJjb250ZW50IixpZDpgcGFnZSR7dC5wYWdlT2JqSWR9X21jaWQke3QubWNpZH1gfSk6dC50eXBlPT09YyYmci5jaGlsZHJlbi5wdXNoKHt0eXBlOiJvYmplY3QiLGlkOnQucmVmT2JqSWR9KX19Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO2UuY2hpbGRyZW49W107ZS5yb2xlPSJSb290Ijtmb3IoY29uc3QgdCBvZiB0aGlzLm5vZGVzKXQmJm5vZGVUb1NlcmlhbGl6YWJsZSh0LGUpO3JldHVybiBlfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5PYmplY3RMb2FkZXI9dm9pZCAwO3ZhciByPWEoMyksbj1hKDUpLGk9YSg0KSxzPWEoMik7ZnVuY3Rpb24gYWRkQ2hpbGRyZW4oZSx0KXtpZihlIGluc3RhbmNlb2Ygci5EaWN0KWU9ZS5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBuLkJhc2VTdHJlYW0pZT1lLmRpY3QuZ2V0UmF3VmFsdWVzKCk7ZWxzZSBpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm47Zm9yKGNvbnN0IGkgb2YgZSkoKGE9aSlpbnN0YW5jZW9mIHIuUmVmfHxhIGluc3RhbmNlb2Ygci5EaWN0fHxhIGluc3RhbmNlb2Ygbi5CYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KGEpKSYmdC5wdXNoKGkpO3ZhciBhfXQuT2JqZWN0TG9hZGVyPWNsYXNzIE9iamVjdExvYWRlcntjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5kaWN0PWU7dGhpcy5rZXlzPXQ7dGhpcy54cmVmPWE7dGhpcy5yZWZTZXQ9bnVsbH1hc3luYyBsb2FkKCl7aWYodGhpcy54cmVmLnN0cmVhbS5pc0RhdGFMb2FkZWQpcmV0dXJuO2NvbnN0e2tleXM6ZSxkaWN0OnR9PXRoaXM7dGhpcy5yZWZTZXQ9bmV3IHIuUmVmU2V0O2NvbnN0IGE9W107Zm9yKGNvbnN0IHIgb2YgZSl7Y29uc3QgZT10LmdldFJhdyhyKTt2b2lkIDAhPT1lJiZhLnB1c2goZSl9cmV0dXJuIHRoaXMuX3dhbGsoYSl9YXN5bmMgX3dhbGsoZSl7Y29uc3QgdD1bXSxhPVtdO2Zvcig7ZS5sZW5ndGg7KXtsZXQgbz1lLnBvcCgpO2lmKG8gaW5zdGFuY2VvZiByLlJlZil7aWYodGhpcy5yZWZTZXQuaGFzKG8pKWNvbnRpbnVlO3RyeXt0aGlzLnJlZlNldC5wdXQobyk7bz10aGlzLnhyZWYuZmV0Y2gobyl9Y2F0Y2goZSl7aWYoIShlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpeygwLHMud2FybikoYE9iamVjdExvYWRlci5fd2FsayAtIHJlcXVlc3RpbmcgYWxsIGRhdGE6ICIke2V9Ii5gKTt0aGlzLnJlZlNldD1udWxsO2NvbnN0e21hbmFnZXI6dH09dGhpcy54cmVmLnN0cmVhbTtyZXR1cm4gdC5yZXF1ZXN0QWxsQ2h1bmtzKCl9dC5wdXNoKG8pO2EucHVzaCh7YmVnaW46ZS5iZWdpbixlbmQ6ZS5lbmR9KX19aWYobyBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSl7Y29uc3QgZT1vLmdldEJhc2VTdHJlYW1zKCk7aWYoZSl7bGV0IHI9ITE7Zm9yKGNvbnN0IHQgb2YgZSlpZighdC5pc0RhdGFMb2FkZWQpe3I9ITA7YS5wdXNoKHtiZWdpbjp0LnN0YXJ0LGVuZDp0LmVuZH0pfXImJnQucHVzaChvKX19YWRkQ2hpbGRyZW4obyxlKX1pZihhLmxlbmd0aCl7YXdhaXQgdGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLnJlcXVlc3RSYW5nZXMoYSk7Zm9yKGNvbnN0IGUgb2YgdCllIGluc3RhbmNlb2Ygci5SZWYmJnRoaXMucmVmU2V0LnJlbW92ZShlKTtyZXR1cm4gdGhpcy5fd2Fsayh0KX10aGlzLnJlZlNldD1udWxsfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YRkFGYWN0b3J5PXZvaWQgMDt2YXIgcj1hKDc1KSxuPWEoNzkpLGk9YSg4NSkscz1hKDgzKSxvPWEoNzYpLGM9YSgyKSxsPWEoODYpLGg9YSg5Nik7Y2xhc3MgWEZBRmFjdG9yeXtjb25zdHJ1Y3RvcihlKXt0cnl7dGhpcy5yb290PShuZXcgbC5YRkFQYXJzZXIpLnBhcnNlKFhGQUZhY3RvcnkuX2NyZWF0ZURvY3VtZW50KGUpKTtjb25zdCB0PW5ldyBuLkJpbmRlcih0aGlzLnJvb3QpO3RoaXMuZm9ybT10LmJpbmQoKTt0aGlzLmRhdGFIYW5kbGVyPW5ldyBpLkRhdGFIYW5kbGVyKHRoaXMucm9vdCx0LmdldERhdGEoKSk7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLnRlbXBsYXRlPXRoaXMuZm9ybX1jYXRjaChlKXsoMCxjLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBhbmQgYmluZGluZzogJHtlfWApfX1pc1ZhbGlkKCl7cmV0dXJuIHRoaXMucm9vdCYmdGhpcy5mb3JtfV9jcmVhdGVQYWdlc0hlbHBlcigpe2NvbnN0IGU9dGhpcy5mb3JtW3IuJHRvUGFnZXNdKCk7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxhKT0+e2NvbnN0IG5leHRJdGVyYXRpb249KCk9Pnt0cnl7Y29uc3QgYT1lLm5leHQoKTthLmRvbmU/dChhLnZhbHVlKTpzZXRUaW1lb3V0KG5leHRJdGVyYXRpb24sMCl9Y2F0Y2goZSl7YShlKX19O3NldFRpbWVvdXQobmV4dEl0ZXJhdGlvbiwwKX0pKX1hc3luYyBfY3JlYXRlUGFnZXMoKXt0cnl7dGhpcy5wYWdlcz1hd2FpdCB0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO3RoaXMuZGltcz10aGlzLnBhZ2VzLmNoaWxkcmVuLm1hcCgoZT0+e2NvbnN0e3dpZHRoOnQsaGVpZ2h0OmF9PWUuYXR0cmlidXRlcy5zdHlsZTtyZXR1cm5bMCwwLHBhcnNlSW50KHQpLHBhcnNlSW50KGEpXX0pKX1jYXRjaChlKXsoMCxjLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAke2V9YCl9fWdldEJvdW5kaW5nQm94KGUpe3JldHVybiB0aGlzLmRpbXNbZV19YXN5bmMgZ2V0TnVtUGFnZXMoKXt0aGlzLnBhZ2VzfHxhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO3JldHVybiB0aGlzLmRpbXMubGVuZ3RofXNldEltYWdlcyhlKXt0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0uaW1hZ2VzPWV9c2V0Rm9udHMoZSl7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI9bmV3IHMuRm9udEZpbmRlcihlKTtjb25zdCB0PVtdO2ZvcihsZXQgZSBvZiB0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcyl7ZT0oMCxvLnN0cmlwUXVvdGVzKShlKTt0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKGUpfHx0LnB1c2goZSl9cmV0dXJuIHQubGVuZ3RoPjA/dDpudWxsfWFwcGVuZEZvbnRzKGUsdCl7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuYWRkKGUsdCl9YXN5bmMgZ2V0UGFnZXMoKXt0aGlzLnBhZ2VzfHxhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO2NvbnN0IGU9dGhpcy5wYWdlczt0aGlzLnBhZ2VzPW51bGw7cmV0dXJuIGV9c2VyaWFsaXplRGF0YShlKXtyZXR1cm4gdGhpcy5kYXRhSGFuZGxlci5zZXJpYWxpemUoZSl9c3RhdGljIF9jcmVhdGVEb2N1bWVudChlKXtyZXR1cm4gZVsiL3hkcDp4ZHAiXT9PYmplY3QudmFsdWVzKGUpLmpvaW4oIiIpOmVbInhkcDp4ZHAiXX1zdGF0aWMgZ2V0UmljaFRleHRBc0h0bWwoZSl7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7bGV0IHQ9bmV3IGwuWEZBUGFyc2VyKGguWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbci4kbm9kZU5hbWVdKSl7Y29uc3QgZT1oLlhodG1sTmFtZXNwYWNlLmJvZHkoe30pO2Vbci4kYXBwZW5kQ2hpbGRdKHQpO3Q9ZX1jb25zdCBhPXRbci4kdG9IVE1MXSgpO2lmKCFhLnN1Y2Nlc3MpcmV0dXJuIG51bGw7Y29uc3R7aHRtbDpufT1hLHthdHRyaWJ1dGVzOml9PW47aWYoaSl7aS5jbGFzcyYmKGkuY2xhc3M9aS5jbGFzcy5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoInhmYSIpKSkpO2kuZGlyPSJhdXRvIn1yZXR1cm57aHRtbDpuLHN0cjp0W3IuJHRleHRdKCl9fWNhdGNoKGUpeygwLGMud2FybikoYFhGQSAtIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIG9mIHJpY2ggdGV4dDogJHtlfWApfXJldHVybiBudWxsfX10LlhGQUZhY3Rvcnk9WEZBRmFjdG9yeX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhtbE9iamVjdD10LlhGQU9iamVjdEFycmF5PXQuWEZBT2JqZWN0PXQuWEZBQXR0cmlidXRlPXQuU3RyaW5nT2JqZWN0PXQuT3B0aW9uT2JqZWN0PXQuT3B0aW9uMTA9dC5PcHRpb24wMT10LkludGVnZXJPYmplY3Q9dC5Db250ZW50T2JqZWN0PXQuJHVpZD10LiR0b1N0eWxlPXQuJHRvU3RyaW5nPXQuJHRvUGFnZXM9dC4kdG9IVE1MPXQuJHRleHQ9dC4kdGFiSW5kZXg9dC4kc2V0VmFsdWU9dC4kc2V0U2V0QXR0cmlidXRlcz10LiRzZXRJZD10LiRzZWFyY2hOb2RlPXQuJHJvb3Q9dC4kcmVzb2x2ZVByb3RvdHlwZXM9dC4kcmVtb3ZlQ2hpbGQ9dC4kcHVzaFBhcmE9dC4kcHVzaEdseXBocz10LiRwb3BQYXJhPXQuJG9uVGV4dD10LiRvbkNoaWxkQ2hlY2s9dC4kb25DaGlsZD10LiRuc0F0dHJpYnV0ZXM9dC4kbm9kZU5hbWU9dC4kbmFtZXNwYWNlSWQ9dC4kaXNVc2FibGU9dC4kaXNUcmFuc3BhcmVudD10LiRpc1RoZXJlTW9yZVdpZHRoPXQuJGlzU3BsaXR0YWJsZT10LiRpc05zQWdub3N0aWM9dC4kaXNEZXNjZW5kZW50PXQuJGlzRGF0YVZhbHVlPXQuJGlzQ0RBVEFYbWw9dC4kaXNCaW5kYWJsZT10LiRpbnNlcnRBdD10LiRpbmRleE9mPXQuJGlkcz10LiRoYXNTZXR0YWJsZVZhbHVlPXQuJGdsb2JhbERhdGE9dC4kZ2V0VGVtcGxhdGVSb290PXQuJGdldFN1YmZvcm1QYXJlbnQ9dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9dC4kZ2V0UGFyZW50PXQuJGdldE5leHRQYWdlPXQuJGdldEV4dHJhPXQuJGdldERhdGFWYWx1ZT10LiRnZXRDb250YWluZWRDaGlsZHJlbj10LiRnZXRDaGlsZHJlbkJ5TmFtZUl0PXQuJGdldENoaWxkcmVuQnlOYW1lPXQuJGdldENoaWxkcmVuQnlDbGFzcz10LiRnZXRDaGlsZHJlbj10LiRnZXRBdmFpbGFibGVTcGFjZT10LiRnZXRBdHRyaWJ1dGVzPXQuJGdldEF0dHJpYnV0ZUl0PXQuJGZsdXNoSFRNTD10LiRmaW5hbGl6ZT10LiRleHRyYT10LiRkdW1wPXQuJGRhdGE9dC4kY29udGVudD10LiRjb25zdW1lZD10LiRjbG9uZT10LiRjbGVhbnVwPXQuJGNsZWFuUGFnZT10LiRjbGVhbj10LiRjaGlsZHJlblRvSFRNTD10LiRhcHBlbmRDaGlsZD10LiRhZGRIVE1MPXQuJGFjY2VwdFdoaXRlc3BhY2U9dm9pZCAwO3ZhciByPWEoNzYpLG49YSgyKSxpPWEoNCkscz1hKDc3KSxvPWEoNzgpO2NvbnN0IGM9U3ltYm9sKCk7dC4kYWNjZXB0V2hpdGVzcGFjZT1jO2NvbnN0IGw9U3ltYm9sKCk7dC4kYWRkSFRNTD1sO2NvbnN0IGg9U3ltYm9sKCk7dC4kYXBwZW5kQ2hpbGQ9aDtjb25zdCB1PVN5bWJvbCgpO3QuJGNoaWxkcmVuVG9IVE1MPXU7Y29uc3QgZD1TeW1ib2woKTt0LiRjbGVhbj1kO2NvbnN0IGY9U3ltYm9sKCk7dC4kY2xlYW5QYWdlPWY7Y29uc3QgZz1TeW1ib2woKTt0LiRjbGVhbnVwPWc7Y29uc3QgcD1TeW1ib2woKTt0LiRjbG9uZT1wO2NvbnN0IG09U3ltYm9sKCk7dC4kY29uc3VtZWQ9bTtjb25zdCBiPVN5bWJvbCgiY29udGVudCIpO3QuJGNvbnRlbnQ9Yjtjb25zdCB5PVN5bWJvbCgiZGF0YSIpO3QuJGRhdGE9eTtjb25zdCB3PVN5bWJvbCgpO3QuJGR1bXA9dztjb25zdCBTPVN5bWJvbCgiZXh0cmEiKTt0LiRleHRyYT1TO2NvbnN0IHg9U3ltYm9sKCk7dC4kZmluYWxpemU9eDtjb25zdCBrPVN5bWJvbCgpO3QuJGZsdXNoSFRNTD1rO2NvbnN0IEM9U3ltYm9sKCk7dC4kZ2V0QXR0cmlidXRlSXQ9Qztjb25zdCB2PVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZXM9djtjb25zdCBGPVN5bWJvbCgpO3QuJGdldEF2YWlsYWJsZVNwYWNlPUY7Y29uc3QgTz1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbkJ5Q2xhc3M9Tztjb25zdCBUPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlOYW1lPVQ7Y29uc3QgTT1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbkJ5TmFtZUl0PU07Y29uc3QgRT1TeW1ib2woKTt0LiRnZXREYXRhVmFsdWU9RTtjb25zdCBEPVN5bWJvbCgpO3QuJGdldEV4dHJhPUQ7Y29uc3QgTj1TeW1ib2woKTt0LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdD1OO2NvbnN0IFI9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW49Ujtjb25zdCBMPVN5bWJvbCgpO3QuJGdldENvbnRhaW5lZENoaWxkcmVuPUw7Y29uc3Qgaj1TeW1ib2woKTt0LiRnZXROZXh0UGFnZT1qO2NvbnN0ICQ9U3ltYm9sKCk7dC4kZ2V0U3ViZm9ybVBhcmVudD0kO2NvbnN0IF89U3ltYm9sKCk7dC4kZ2V0UGFyZW50PV87Y29uc3QgVT1TeW1ib2woKTt0LiRnZXRUZW1wbGF0ZVJvb3Q9VTtjb25zdCBYPVN5bWJvbCgpO3QuJGdsb2JhbERhdGE9WDtjb25zdCBIPVN5bWJvbCgpO3QuJGhhc1NldHRhYmxlVmFsdWU9SDtjb25zdCBxPVN5bWJvbCgpO3QuJGlkcz1xO2NvbnN0IFc9U3ltYm9sKCk7dC4kaW5kZXhPZj1XO2NvbnN0IHo9U3ltYm9sKCk7dC4kaW5zZXJ0QXQ9ejtjb25zdCBHPVN5bWJvbCgpO3QuJGlzQ0RBVEFYbWw9Rztjb25zdCBWPVN5bWJvbCgpO3QuJGlzQmluZGFibGU9Vjtjb25zdCBLPVN5bWJvbCgpO3QuJGlzRGF0YVZhbHVlPUs7Y29uc3QgWT1TeW1ib2woKTt0LiRpc0Rlc2NlbmRlbnQ9WTtjb25zdCBKPVN5bWJvbCgpO3QuJGlzTnNBZ25vc3RpYz1KO2NvbnN0IFo9U3ltYm9sKCk7dC4kaXNTcGxpdHRhYmxlPVo7Y29uc3QgUT1TeW1ib2woKTt0LiRpc1RoZXJlTW9yZVdpZHRoPVE7Y29uc3QgZWU9U3ltYm9sKCk7dC4kaXNUcmFuc3BhcmVudD1lZTtjb25zdCB0ZT1TeW1ib2woKTt0LiRpc1VzYWJsZT10ZTtjb25zdCBhZT1TeW1ib2woKSxyZT1TeW1ib2woIm5hbWVzcGFjZUlkIik7dC4kbmFtZXNwYWNlSWQ9cmU7Y29uc3QgbmU9U3ltYm9sKCJub2RlTmFtZSIpO3QuJG5vZGVOYW1lPW5lO2NvbnN0IGllPVN5bWJvbCgpO3QuJG5zQXR0cmlidXRlcz1pZTtjb25zdCBzZT1TeW1ib2woKTt0LiRvbkNoaWxkPXNlO2NvbnN0IG9lPVN5bWJvbCgpO3QuJG9uQ2hpbGRDaGVjaz1vZTtjb25zdCBjZT1TeW1ib2woKTt0LiRvblRleHQ9Y2U7Y29uc3QgbGU9U3ltYm9sKCk7dC4kcHVzaEdseXBocz1sZTtjb25zdCBoZT1TeW1ib2woKTt0LiRwb3BQYXJhPWhlO2NvbnN0IHVlPVN5bWJvbCgpO3QuJHB1c2hQYXJhPXVlO2NvbnN0IGRlPVN5bWJvbCgpO3QuJHJlbW92ZUNoaWxkPWRlO2NvbnN0IGZlPVN5bWJvbCgicm9vdCIpO3QuJHJvb3Q9ZmU7Y29uc3QgZ2U9U3ltYm9sKCk7dC4kcmVzb2x2ZVByb3RvdHlwZXM9Z2U7Y29uc3QgcGU9U3ltYm9sKCk7dC4kc2VhcmNoTm9kZT1wZTtjb25zdCBtZT1TeW1ib2woKTt0LiRzZXRJZD1tZTtjb25zdCBiZT1TeW1ib2woKTt0LiRzZXRTZXRBdHRyaWJ1dGVzPWJlO2NvbnN0IHllPVN5bWJvbCgpO3QuJHNldFZhbHVlPXllO2NvbnN0IHdlPVN5bWJvbCgpO3QuJHRhYkluZGV4PXdlO2NvbnN0IFNlPVN5bWJvbCgpO3QuJHRleHQ9U2U7Y29uc3QgeGU9U3ltYm9sKCk7dC4kdG9QYWdlcz14ZTtjb25zdCBBZT1TeW1ib2woKTt0LiR0b0hUTUw9QWU7Y29uc3Qga2U9U3ltYm9sKCk7dC4kdG9TdHJpbmc9a2U7Y29uc3QgQ2U9U3ltYm9sKCk7dC4kdG9TdHlsZT1DZTtjb25zdCB2ZT1TeW1ib2woInVpZCIpO3QuJHVpZD12ZTtjb25zdCBGZT1TeW1ib2woKSxPZT1TeW1ib2woKSxUZT1TeW1ib2woKSxJZT1TeW1ib2woIl9jaGlsZHJlbiIpLFBlPVN5bWJvbCgpLE1lPVN5bWJvbCgpLEVlPVN5bWJvbCgpLERlPVN5bWJvbCgpLE5lPVN5bWJvbCgpLEJlPVN5bWJvbCgpLFJlPVN5bWJvbCgpLExlPVN5bWJvbCgpLGplPVN5bWJvbCgpLCRlPVN5bWJvbCgicGFyZW50IiksX2U9U3ltYm9sKCksVWU9U3ltYm9sKCksWGU9U3ltYm9sKCk7bGV0IEhlPTA7Y29uc3QgcWU9cy5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7Y2xhc3MgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhPSExKXt0aGlzW3JlXT1lO3RoaXNbbmVdPXQ7dGhpc1tSZV09YTt0aGlzWyRlXT1udWxsO3RoaXNbSWVdPVtdO3RoaXNbdmVdPWAke3R9JHtIZSsrfWA7dGhpc1tYXT1udWxsfVtzZV0oZSl7aWYoIXRoaXNbUmVdfHwhdGhpc1tvZV0oZSkpcmV0dXJuITE7Y29uc3QgdD1lW25lXSxhPXRoaXNbdF07aWYoIShhIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpKXtudWxsIT09YSYmdGhpc1tkZV0oYSk7dGhpc1t0XT1lO3RoaXNbaF0oZSk7cmV0dXJuITB9aWYoYS5wdXNoKGUpKXt0aGlzW2hdKGUpO3JldHVybiEwfWxldCByPSIiO3RoaXMuaWQ/cj1gIChpZDogJHt0aGlzLmlkfSlgOnRoaXMubmFtZSYmKHI9YCAobmFtZTogJHt0aGlzLm5hbWV9ICR7dGhpcy5oLnZhbHVlfSlgKTsoMCxuLndhcm4pKGBYRkEgLSBub2RlICIke3RoaXNbbmVdfSIke3J9IGhhcyBhbHJlYWR5IGVub3VnaCAiJHt0fSIhYCk7cmV0dXJuITF9W29lXShlKXtyZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eShlW25lXSkmJmVbcmVdPT09dGhpc1tyZV19W0pdKCl7cmV0dXJuITF9W2NdKCl7cmV0dXJuITF9W0ddKCl7cmV0dXJuITF9W1ZdKCl7cmV0dXJuITF9W2hlXSgpe3RoaXMucGFyYSYmdGhpc1tVXSgpW1NdLnBhcmFTdGFjay5wb3AoKX1bdWVdKCl7dGhpc1tVXSgpW1NdLnBhcmFTdGFjay5wdXNoKHRoaXMucGFyYSl9W21lXShlKXt0aGlzLmlkJiZ0aGlzW3JlXT09PXMuTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkJiZlLnNldCh0aGlzLmlkLHRoaXMpfVtVXSgpe3JldHVybiB0aGlzW1hdLnRlbXBsYXRlfVtaXSgpe3JldHVybiExfVtRXSgpe3JldHVybiExfVtoXShlKXtlWyRlXT10aGlzO3RoaXNbSWVdLnB1c2goZSk7IWVbWF0mJnRoaXNbWF0mJihlW1hdPXRoaXNbWF0pfVtkZV0oZSl7Y29uc3QgdD10aGlzW0llXS5pbmRleE9mKGUpO3RoaXNbSWVdLnNwbGljZSh0LDEpfVtIXSgpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpfVt5ZV0oZSl7fVtjZV0oZSl7fVt4XSgpe31bZF0oZSl7ZGVsZXRlIHRoaXNbUmVdO2lmKHRoaXNbZ10pe2UuY2xlYW4odGhpc1tnXSk7ZGVsZXRlIHRoaXNbZ119fVtXXShlKXtyZXR1cm4gdGhpc1tJZV0uaW5kZXhPZihlKX1bel0oZSx0KXt0WyRlXT10aGlzO3RoaXNbSWVdLnNwbGljZShlLDAsdCk7IXRbWF0mJnRoaXNbWF0mJih0W1hdPXRoaXNbWF0pfVtlZV0oKXtyZXR1cm4hdGhpcy5uYW1lfVthZV0oKXtyZXR1cm4iIn1bU2VdKCl7cmV0dXJuIDA9PT10aGlzW0llXS5sZW5ndGg/dGhpc1tiXTp0aGlzW0llXS5tYXAoKGU9PmVbU2VdKCkpKS5qb2luKCIiKX1nZXRbVGVdKCl7Y29uc3QgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYoIWUuX2F0dHJpYnV0ZXMpe2NvbnN0IHQ9ZS5fYXR0cmlidXRlcz1uZXcgU2V0O2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZihudWxsPT09dGhpc1tlXXx8dGhpc1tlXWluc3RhbmNlb2YgWEZBT2JqZWN0fHx0aGlzW2VdaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSlicmVhazt0LmFkZChlKX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsVGUsZS5fYXR0cmlidXRlcyl9W1ldKGUpe2xldCB0PXRoaXM7Zm9yKDt0Oyl7aWYodD09PWUpcmV0dXJuITA7dD10W19dKCl9cmV0dXJuITF9W19dKCl7cmV0dXJuIHRoaXNbJGVdfVskXSgpe3JldHVybiB0aGlzW19dKCl9W1JdKGU9bnVsbCl7cmV0dXJuIGU/dGhpc1tlXTp0aGlzW0llXX1bd10oKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpc1tiXSYmKGUuJGNvbnRlbnQ9dGhpc1tiXSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IGE9dGhpc1t0XTtudWxsIT09YSYmKGEgaW5zdGFuY2VvZiBYRkFPYmplY3Q/ZVt0XT1hW3ddKCk6YSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5P2EuaXNFbXB0eSgpfHwoZVt0XT1hLmR1bXAoKSk6ZVt0XT1hKX1yZXR1cm4gZX1bQ2VdKCl7cmV0dXJuIG51bGx9W0FlXSgpe3JldHVybiByLkhUTUxSZXN1bHQuRU1QVFl9KltMXSgpe2Zvcihjb25zdCBlIG9mIHRoaXNbUl0oKSl5aWVsZCBlfSpbRGVdKGUsdCl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tMXSgpKWlmKCFlfHx0PT09ZS5oYXMoYVtuZV0pKXtjb25zdCBlPXRoaXNbRl0oKSx0PWFbQWVdKGUpO3Quc3VjY2Vzc3x8KHRoaXNbU10uZmFpbGluZ05vZGU9YSk7eWllbGQgdH19W2tdKCl7cmV0dXJuIG51bGx9W2xdKGUsdCl7dGhpc1tTXS5jaGlsZHJlbi5wdXNoKGUpfVtGXSgpe31bdV0oe2ZpbHRlcjplPW51bGwsaW5jbHVkZTp0PSEwfSl7aWYodGhpc1tTXS5nZW5lcmF0b3Ipe2NvbnN0IGU9dGhpc1tGXSgpLHQ9dGhpc1tTXS5mYWlsaW5nTm9kZVtBZV0oZSk7aWYoIXQuc3VjY2VzcylyZXR1cm4gdDt0Lmh0bWwmJnRoaXNbbF0odC5odG1sLHQuYmJveCk7ZGVsZXRlIHRoaXNbU10uZmFpbGluZ05vZGV9ZWxzZSB0aGlzW1NdLmdlbmVyYXRvcj10aGlzW0RlXShlLHQpO2Zvcig7Oyl7Y29uc3QgZT10aGlzW1NdLmdlbmVyYXRvci5uZXh0KCk7aWYoZS5kb25lKWJyZWFrO2NvbnN0IHQ9ZS52YWx1ZTtpZighdC5zdWNjZXNzKXJldHVybiB0O3QuaHRtbCYmdGhpc1tsXSh0Lmh0bWwsdC5iYm94KX10aGlzW1NdLmdlbmVyYXRvcj1udWxsO3JldHVybiByLkhUTUxSZXN1bHQuRU1QVFl9W2JlXShlKXt0aGlzW1VlXT1uZXcgU2V0KE9iamVjdC5rZXlzKGUpKX1bQmVdKGUpe2NvbnN0IHQ9dGhpc1tUZV0sYT10aGlzW1VlXTtyZXR1cm5bLi4uZV0uZmlsdGVyKChlPT50LmhhcyhlKSYmIWEuaGFzKGUpKSl9W2dlXShlLHQ9bmV3IFNldCl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tJZV0pYVtfZV0oZSx0KX1bX2VdKGUsdCl7Y29uc3QgYT10aGlzW05lXShlLHQpO2E/dGhpc1tGZV0oYSxlLHQpOnRoaXNbZ2VdKGUsdCl9W05lXShlLHQpe2NvbnN0e3VzZTphLHVzZWhyZWY6cn09dGhpcztpZighYSYmIXIpcmV0dXJuIG51bGw7bGV0IGk9bnVsbCxzPW51bGwsYz1udWxsLGw9YTtpZihyKXtsPXI7ci5zdGFydHNXaXRoKCIjc29tKCIpJiZyLmVuZHNXaXRoKCIpIik/cz1yLnNsaWNlKCIjc29tKCIubGVuZ3RoLHIubGVuZ3RoLTEpOnIuc3RhcnRzV2l0aCgiLiNzb20oIikmJnIuZW5kc1dpdGgoIikiKT9zPXIuc2xpY2UoIi4jc29tKCIubGVuZ3RoLHIubGVuZ3RoLTEpOnIuc3RhcnRzV2l0aCgiIyIpP2M9ci5zbGljZSgxKTpyLnN0YXJ0c1dpdGgoIi4jIikmJihjPXIuc2xpY2UoMikpfWVsc2UgYS5zdGFydHNXaXRoKCIjIik/Yz1hLnNsaWNlKDEpOnM9YTt0aGlzLnVzZT10aGlzLnVzZWhyZWY9IiI7aWYoYylpPWUuZ2V0KGMpO2Vsc2V7aT0oMCxvLnNlYXJjaE5vZGUpKGUuZ2V0KGZlKSx0aGlzLHMsITAsITEpO2kmJihpPWlbMF0pfWlmKCFpKXsoMCxuLndhcm4pKGBYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICR7bH0uYCk7cmV0dXJuIG51bGx9aWYoaVtuZV0hPT10aGlzW25lXSl7KDAsbi53YXJuKShgWEZBIC0gSW5jb21wYXRpYmxlIHByb3RvdHlwZTogJHtpW25lXX0gIT09ICR7dGhpc1tuZV19LmApO3JldHVybiBudWxsfWlmKHQuaGFzKGkpKXsoMCxuLndhcm4pKCJYRkEgLSBDeWNsZSBkZXRlY3RlZCBpbiBwcm90b3R5cGVzIHVzZS4iKTtyZXR1cm4gbnVsbH10LmFkZChpKTtjb25zdCBoPWlbTmVdKGUsdCk7aCYmaVtGZV0oaCxlLHQpO2lbZ2VdKGUsdCk7dC5kZWxldGUoaSk7cmV0dXJuIGl9W0ZlXShlLHQsYSl7aWYoYS5oYXMoZSkpeygwLG4ud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO3JldHVybn0hdGhpc1tiXSYmZVtiXSYmKHRoaXNbYl09ZVtiXSk7bmV3IFNldChhKS5hZGQoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpc1tCZV0oZVtVZV0pKXt0aGlzW3RdPWVbdF07dGhpc1tVZV0mJnRoaXNbVWVdLmFkZCh0KX1mb3IoY29uc3QgciBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYodGhpc1tUZV0uaGFzKHIpKWNvbnRpbnVlO2NvbnN0IG49dGhpc1tyXSxpPWVbcl07aWYobiBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KXtmb3IoY29uc3QgZSBvZiBuW0llXSllW19lXSh0LGEpO2ZvcihsZXQgcj1uW0llXS5sZW5ndGgscz1pW0llXS5sZW5ndGg7cjxzO3IrKyl7Y29uc3QgaT1lW0llXVtyXVtwXSgpO2lmKCFuLnB1c2goaSkpYnJlYWs7aVskZV09dGhpczt0aGlzW0llXS5wdXNoKGkpO2lbX2VdKHQsYSl9fWVsc2UgaWYobnVsbD09PW4pe2lmKG51bGwhPT1pKXtjb25zdCBlPWlbcF0oKTtlWyRlXT10aGlzO3RoaXNbcl09ZTt0aGlzW0llXS5wdXNoKGUpO2VbX2VdKHQsYSl9fWVsc2V7bltnZV0odCxhKTtpJiZuW0ZlXShpLHQsYSl9fX1zdGF0aWNbUGVdKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UubWFwKChlPT5YRkFPYmplY3RbUGVdKGUpKSk6Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZT9PYmplY3QuYXNzaWduKHt9LGUpOmV9W3BdKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSl0cnl7ZVt0XT10aGlzW3RdfWNhdGNoKGEpeygwLG4uc2hhZG93KShlLHQsdGhpc1t0XSl9ZVt2ZV09YCR7ZVtuZV19JHtIZSsrfWA7ZVtJZV09W107Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbVGVdLmhhcyh0KSl7ZVt0XT1YRkFPYmplY3RbUGVdKHRoaXNbdF0pO2NvbnRpbnVlfWNvbnN0IGE9dGhpc1t0XTtlW3RdPWEgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheT9uZXcgWEZBT2JqZWN0QXJyYXkoYVtMZV0pOm51bGx9Zm9yKGNvbnN0IHQgb2YgdGhpc1tJZV0pe2NvbnN0IGE9dFtuZV0scj10W3BdKCk7ZVtJZV0ucHVzaChyKTtyWyRlXT1lO251bGw9PT1lW2FdP2VbYV09cjplW2FdW0llXS5wdXNoKHIpfXJldHVybiBlfVtSXShlPW51bGwpe3JldHVybiBlP3RoaXNbSWVdLmZpbHRlcigodD0+dFtuZV09PT1lKSk6dGhpc1tJZV19W09dKGUpe3JldHVybiB0aGlzW2VdfVtUXShlLHQsYT0hMCl7cmV0dXJuIEFycmF5LmZyb20odGhpc1tNXShlLHQsYSkpfSpbTV0oZSx0LGE9ITApe2lmKCJwYXJlbnQiIT09ZSl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tJZV0pe2FbbmVdPT09ZSYmKHlpZWxkIGEpO2EubmFtZT09PWUmJih5aWVsZCBhKTsodHx8YVtlZV0oKSkmJih5aWVsZCphW01dKGUsdCwhMSkpfWEmJnRoaXNbVGVdLmhhcyhlKSYmKHlpZWxkIG5ldyBYRkFBdHRyaWJ1dGUodGhpcyxlLHRoaXNbZV0pKX1lbHNlIHlpZWxkIHRoaXNbJGVdfX10LlhGQU9iamVjdD1YRkFPYmplY3Q7Y2xhc3MgWEZBT2JqZWN0QXJyYXl7Y29uc3RydWN0b3IoZT0xLzApe3RoaXNbTGVdPWU7dGhpc1tJZV09W119cHVzaChlKXtpZih0aGlzW0llXS5sZW5ndGg8PXRoaXNbTGVdKXt0aGlzW0llXS5wdXNoKGUpO3JldHVybiEwfSgwLG4ud2FybikoYFhGQSAtIG5vZGUgIiR7ZVtuZV19IiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAke3RoaXNbTGVdfSBjaGlsZHJlbmApO3JldHVybiExfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXNbSWVdLmxlbmd0aH1kdW1wKCl7cmV0dXJuIDE9PT10aGlzW0llXS5sZW5ndGg/dGhpc1tJZV1bMF1bd10oKTp0aGlzW0llXS5tYXAoKGU9PmVbd10oKSkpfVtwXSgpe2NvbnN0IGU9bmV3IFhGQU9iamVjdEFycmF5KHRoaXNbTGVdKTtlW0llXT10aGlzW0llXS5tYXAoKGU9PmVbcF0oKSkpO3JldHVybiBlfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzW0llXX1jbGVhcigpe3RoaXNbSWVdLmxlbmd0aD0wfX10LlhGQU9iamVjdEFycmF5PVhGQU9iamVjdEFycmF5O2NsYXNzIFhGQUF0dHJpYnV0ZXtjb25zdHJ1Y3RvcihlLHQsYSl7dGhpc1skZV09ZTt0aGlzW25lXT10O3RoaXNbYl09YTt0aGlzW21dPSExO3RoaXNbdmVdPSJhdHRyaWJ1dGUiK0hlKyt9W19dKCl7cmV0dXJuIHRoaXNbJGVdfVtLXSgpe3JldHVybiEwfVtFXSgpe3JldHVybiB0aGlzW2JdLnRyaW0oKX1beWVdKGUpe2U9ZS52YWx1ZXx8IiI7dGhpc1tiXT1lLnRvU3RyaW5nKCl9W1NlXSgpe3JldHVybiB0aGlzW2JdfVtZXShlKXtyZXR1cm4gdGhpc1skZV09PT1lfHx0aGlzWyRlXVtZXShlKX19dC5YRkFBdHRyaWJ1dGU9WEZBQXR0cmlidXRlO2NsYXNzIFhtbE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQsYT17fSl7c3VwZXIoZSx0KTt0aGlzW2JdPSIiO3RoaXNbTWVdPW51bGw7aWYoIiN0ZXh0IiE9PXQpe2NvbnN0IGU9bmV3IE1hcDt0aGlzW09lXT1lO2Zvcihjb25zdFt0LHJdb2YgT2JqZWN0LmVudHJpZXMoYSkpZS5zZXQodCxuZXcgWEZBQXR0cmlidXRlKHRoaXMsdCxyKSk7aWYoYS5oYXNPd25Qcm9wZXJ0eShpZSkpe2NvbnN0IGU9YVtpZV0ueGZhLmRhdGFOb2RlO3ZvaWQgMCE9PWUmJigiZGF0YUdyb3VwIj09PWU/dGhpc1tNZV09ITE6ImRhdGFWYWx1ZSI9PT1lJiYodGhpc1tNZV09ITApKX19dGhpc1ttXT0hMX1ba2VdKGUpe2NvbnN0IHQ9dGhpc1tuZV07aWYoIiN0ZXh0Ij09PXQpe2UucHVzaCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2JdKSk7cmV0dXJufWNvbnN0IGE9KDAsbi51dGY4U3RyaW5nVG9TdHJpbmcpKHQpLHI9dGhpc1tyZV09PT1xZT8ieGZhOiI6IiI7ZS5wdXNoKGA8JHtyfSR7YX1gKTtmb3IoY29uc3RbdCxhXW9mIHRoaXNbT2VdLmVudHJpZXMoKSl7Y29uc3Qgcj0oMCxuLnV0ZjhTdHJpbmdUb1N0cmluZykodCk7ZS5wdXNoKGAgJHtyfT0iJHsoMCxpLmVuY29kZVRvWG1sU3RyaW5nKShhW2JdKX0iYCl9bnVsbCE9PXRoaXNbTWVdJiYodGhpc1tNZV0/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpO2lmKHRoaXNbYl18fDAhPT10aGlzW0llXS5sZW5ndGgpe2UucHVzaCgiPiIpO2lmKHRoaXNbYl0pInN0cmluZyI9PXR5cGVvZiB0aGlzW2JdP2UucHVzaCgoMCxpLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW2JdKSk6dGhpc1tiXVtrZV0oZSk7ZWxzZSBmb3IoY29uc3QgdCBvZiB0aGlzW0llXSl0W2tlXShlKTtlLnB1c2goYDwvJHtyfSR7YX0+YCl9ZWxzZSBlLnB1c2goIi8+Iil9W3NlXShlKXtpZih0aGlzW2JdKXtjb25zdCBlPW5ldyBYbWxPYmplY3QodGhpc1tyZV0sIiN0ZXh0Iik7dGhpc1toXShlKTtlW2JdPXRoaXNbYl07dGhpc1tiXT0iIn10aGlzW2hdKGUpO3JldHVybiEwfVtjZV0oZSl7dGhpc1tiXSs9ZX1beF0oKXtpZih0aGlzW2JdJiZ0aGlzW0llXS5sZW5ndGg+MCl7Y29uc3QgZT1uZXcgWG1sT2JqZWN0KHRoaXNbcmVdLCIjdGV4dCIpO3RoaXNbaF0oZSk7ZVtiXT10aGlzW2JdO2RlbGV0ZSB0aGlzW2JdfX1bQWVdKCl7cmV0dXJuIiN0ZXh0Ij09PXRoaXNbbmVdP3IuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tiXX0pOnIuSFRNTFJlc3VsdC5FTVBUWX1bUl0oZT1udWxsKXtyZXR1cm4gZT90aGlzW0llXS5maWx0ZXIoKHQ9PnRbbmVdPT09ZSkpOnRoaXNbSWVdfVt2XSgpe3JldHVybiB0aGlzW09lXX1bT10oZSl7Y29uc3QgdD10aGlzW09lXS5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDp0aGlzW1JdKGUpfSpbTV0oZSx0KXtjb25zdCBhPXRoaXNbT2VdLmdldChlKTthJiYoeWllbGQgYSk7Zm9yKGNvbnN0IGEgb2YgdGhpc1tJZV0pe2FbbmVdPT09ZSYmKHlpZWxkIGEpO3QmJih5aWVsZCphW01dKGUsdCkpfX0qW0NdKGUsdCl7Y29uc3QgYT10aGlzW09lXS5nZXQoZSk7IWF8fHQmJmFbbV18fCh5aWVsZCBhKTtmb3IoY29uc3QgYSBvZiB0aGlzW0llXSl5aWVsZCphW0NdKGUsdCl9KltOXShlLHQsYSl7Zm9yKGNvbnN0IHIgb2YgdGhpc1tJZV0pe3JbbmVdIT09ZXx8YSYmclttXXx8KHlpZWxkIHIpO3QmJih5aWVsZCpyW05dKGUsdCxhKSl9fVtLXSgpe3JldHVybiBudWxsPT09dGhpc1tNZV0/MD09PXRoaXNbSWVdLmxlbmd0aHx8dGhpc1tJZV1bMF1bcmVdPT09cy5OYW1lc3BhY2VJZHMueGh0bWwuaWQ6dGhpc1tNZV19W0VdKCl7cmV0dXJuIG51bGw9PT10aGlzW01lXT8wPT09dGhpc1tJZV0ubGVuZ3RoP3RoaXNbYl0udHJpbSgpOnRoaXNbSWVdWzBdW3JlXT09PXMuTmFtZXNwYWNlSWRzLnhodG1sLmlkP3RoaXNbSWVdWzBdW1NlXSgpLnRyaW0oKTpudWxsOnRoaXNbYl0udHJpbSgpfVt5ZV0oZSl7ZT1lLnZhbHVlfHwiIjt0aGlzW2JdPWUudG9TdHJpbmcoKX1bd10oZT0hMSl7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2UmJih0LiRucz10aGlzW3JlXSk7dGhpc1tiXSYmKHQuJGNvbnRlbnQ9dGhpc1tiXSk7dC4kbmFtZT10aGlzW25lXTt0LmNoaWxkcmVuPVtdO2Zvcihjb25zdCBhIG9mIHRoaXNbSWVdKXQuY2hpbGRyZW4ucHVzaChhW3ddKGUpKTt0LmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbZSxhXW9mIHRoaXNbT2VdKXQuYXR0cmlidXRlc1tlXT1hW2JdO3JldHVybiB0fX10LlhtbE9iamVjdD1YbWxPYmplY3Q7Y2xhc3MgQ29udGVudE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCk7dGhpc1tiXT0iIn1bY2VdKGUpe3RoaXNbYl0rPWV9W3hdKCl7fX10LkNvbnRlbnRPYmplY3Q9Q29udGVudE9iamVjdDt0Lk9wdGlvbk9iamVjdD1jbGFzcyBPcHRpb25PYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihlLHQpO3RoaXNbamVdPWF9W3hdKCl7dGhpc1tiXT0oMCxyLmdldEtleXdvcmQpKHtkYXRhOnRoaXNbYl0sZGVmYXVsdFZhbHVlOnRoaXNbamVdWzBdLHZhbGlkYXRlOmU9PnRoaXNbamVdLmluY2x1ZGVzKGUpfSl9W2RdKGUpe3N1cGVyW2RdKGUpO2RlbGV0ZSB0aGlzW2plXX19O3QuU3RyaW5nT2JqZWN0PWNsYXNzIFN0cmluZ09iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7W3hdKCl7dGhpc1tiXT10aGlzW2JdLnRyaW0oKX19O2NsYXNzIEludGVnZXJPYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKGUsdCk7dGhpc1tFZV09YTt0aGlzW1hlXT1yfVt4XSgpe3RoaXNbYl09KDAsci5nZXRJbnRlZ2VyKSh7ZGF0YTp0aGlzW2JdLGRlZmF1bHRWYWx1ZTp0aGlzW0VlXSx2YWxpZGF0ZTp0aGlzW1hlXX0pfVtkXShlKXtzdXBlcltkXShlKTtkZWxldGUgdGhpc1tFZV07ZGVsZXRlIHRoaXNbWGVdfX10LkludGVnZXJPYmplY3Q9SW50ZWdlck9iamVjdDt0Lk9wdGlvbjAxPWNsYXNzIE9wdGlvbjAxIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwwLChlPT4xPT09ZSkpfX07dC5PcHRpb24xMD1jbGFzcyBPcHRpb24xMCBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsMSwoZT0+MD09PWUpKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSFRNTFJlc3VsdD12b2lkIDA7dC5nZXRCQm94PWZ1bmN0aW9uIGdldEJCb3goZSl7Y29uc3QgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTtjb25zdCBhPWUudHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKChlPT5nZXRNZWFzdXJlbWVudChlLCItMSIpKSk7aWYoYS5sZW5ndGg8NHx8YVsyXTwwfHxhWzNdPDApcmV0dXJue3g6dCx5OnQsd2lkdGg6dCxoZWlnaHQ6dH07Y29uc3RbcixuLGksc109YTtyZXR1cm57eDpyLHk6bix3aWR0aDppLGhlaWdodDpzfX07dC5nZXRDb2xvcj1mdW5jdGlvbiBnZXRDb2xvcihlLHQ9WzAsMCwwXSl7bGV0W2EscixuXT10O2lmKCFlKXJldHVybntyOmEsZzpyLGI6bn07Y29uc3QgaT1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZT0+TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUludChlLnRyaW0oKSwxMCkpLDI1NSkpKS5tYXAoKGU9PmlzTmFOKGUpPzA6ZSkpO2lmKGkubGVuZ3RoPDMpcmV0dXJue3I6YSxnOnIsYjpufTtbYSxyLG5dPWk7cmV0dXJue3I6YSxnOnIsYjpufX07dC5nZXRGbG9hdD1mdW5jdGlvbiBnZXRGbG9hdCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOmF9KXtpZighZSlyZXR1cm4gdDtlPWUudHJpbSgpO2NvbnN0IHI9cGFyc2VGbG9hdChlKTtpZighaXNOYU4ocikmJmEocikpcmV0dXJuIHI7cmV0dXJuIHR9O3QuZ2V0SW50ZWdlcj1mdW5jdGlvbiBnZXRJbnRlZ2VyKHtkYXRhOmUsZGVmYXVsdFZhbHVlOnQsdmFsaWRhdGU6YX0pe2lmKCFlKXJldHVybiB0O2U9ZS50cmltKCk7Y29uc3Qgcj1wYXJzZUludChlLDEwKTtpZighaXNOYU4ocikmJmEocikpcmV0dXJuIHI7cmV0dXJuIHR9O3QuZ2V0S2V5d29yZD1nZXRLZXl3b3JkO3QuZ2V0TWVhc3VyZW1lbnQ9Z2V0TWVhc3VyZW1lbnQ7dC5nZXRSYXRpbz1mdW5jdGlvbiBnZXRSYXRpbyhlKXtpZighZSlyZXR1cm57bnVtOjEsZGVuOjF9O2NvbnN0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKjpccyovKS5tYXAoKGU9PnBhcnNlRmxvYXQoZSkpKS5maWx0ZXIoKGU9PiFpc05hTihlKSkpOzE9PT10Lmxlbmd0aCYmdC5wdXNoKDEpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm57bnVtOjEsZGVuOjF9O2NvbnN0W2Escl09dDtyZXR1cm57bnVtOmEsZGVuOnJ9fTt0LmdldFJlbGV2YW50PWZ1bmN0aW9uIGdldFJlbGV2YW50KGUpe2lmKCFlKXJldHVybltdO3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT4oe2V4Y2x1ZGVkOiItIj09PWVbMF0sdmlld25hbWU6ZS5zdWJzdHJpbmcoMSl9KSkpfTt0LmdldFN0cmluZ09wdGlvbj1mdW5jdGlvbiBnZXRTdHJpbmdPcHRpb24oZSx0KXtyZXR1cm4gZ2V0S2V5d29yZCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0WzBdLHZhbGlkYXRlOmU9PnQuaW5jbHVkZXMoZSl9KX07dC5zdHJpcFF1b3Rlcz1mdW5jdGlvbiBzdHJpcFF1b3RlcyhlKXtpZihlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJykpcmV0dXJuIGUuc2xpY2UoMSxlLmxlbmd0aC0xKTtyZXR1cm4gZX07dmFyIHI9YSgyKTtjb25zdCBuPXtwdDplPT5lLGNtOmU9PmUvMi41NCo3MixtbTplPT5lLzI1LjQqNzIsaW46ZT0+NzIqZSxweDplPT5lfSxpPS8oWystXT9cZCtcLj9cZCopKC4qKS87ZnVuY3Rpb24gZ2V0S2V5d29yZCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOmF9KXtyZXR1cm4gZSYmYShlPWUudHJpbSgpKT9lOnR9ZnVuY3Rpb24gZ2V0TWVhc3VyZW1lbnQoZSx0PSIwIil7dD10fHwiMCI7aWYoIWUpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0IGE9ZS50cmltKCkubWF0Y2goaSk7aWYoIWEpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0WyxyLHNdPWEsbz1wYXJzZUZsb2F0KHIpO2lmKGlzTmFOKG8pKXJldHVybiBnZXRNZWFzdXJlbWVudCh0KTtpZigwPT09bylyZXR1cm4gMDtjb25zdCBjPW5bc107cmV0dXJuIGM/YyhvKTpvfWNsYXNzIEhUTUxSZXN1bHR7c3RhdGljIGdldCBGQUlMVVJFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkZBSUxVUkUiLG5ldyBIVE1MUmVzdWx0KCExLG51bGwsbnVsbCxudWxsKSl9c3RhdGljIGdldCBFTVBUWSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJFTVBUWSIsbmV3IEhUTUxSZXN1bHQoITAsbnVsbCxudWxsLG51bGwpKX1jb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLnN1Y2Nlc3M9ZTt0aGlzLmh0bWw9dDt0aGlzLmJib3g9YTt0aGlzLmJyZWFrTm9kZT1yfWlzQnJlYWsoKXtyZXR1cm4hIXRoaXMuYnJlYWtOb2RlfXN0YXRpYyBicmVha05vZGUoZSl7cmV0dXJuIG5ldyBIVE1MUmVzdWx0KCExLG51bGwsbnVsbCxlKX1zdGF0aWMgc3VjY2VzcyhlLHQ9bnVsbCl7cmV0dXJuIG5ldyBIVE1MUmVzdWx0KCEwLGUsdCxudWxsKX19dC5IVE1MUmVzdWx0PUhUTUxSZXN1bHR9LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTmFtZXNwYWNlSWRzPXQuJGJ1aWxkWEZBT2JqZWN0PXZvaWQgMDtjb25zdCBhPVN5bWJvbCgpO3QuJGJ1aWxkWEZBT2JqZWN0PWE7dC5OYW1lc3BhY2VJZHM9e2NvbmZpZzp7aWQ6MCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGNpLyIpfSxjb25uZWN0aW9uU2V0OntpZDoxLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9LGRhdGFzZXRzOntpZDoyLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8iKX0sZm9ybTp7aWQ6MyxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWZvcm0vIil9LGxvY2FsZVNldDp7aWQ6NCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9LHBkZjp7aWQ6NSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvcGRmLyI9PT1lfSxzaWduYXR1cmU6e2lkOjYsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPT09ZX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtc291cmNlLXNldC8iKX0sc3R5bGVzaGVldDp7aWQ6OCxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj09PWV9LHRlbXBsYXRlOntpZDo5LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtdGVtcGxhdGUvIil9LHhkYzp7aWQ6MTAsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX0seGRwOntpZDoxMSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvIj09PWV9LHhmZGY6e2lkOjEyLGNoZWNrOmU9PiJodHRwOi8vbnMuYWRvYmUuY29tL3hmZGYvIj09PWV9LHhodG1sOntpZDoxMyxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfSx4bXBtZXRhOntpZDoxNCxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94bXBtZXRhLyI9PT1lfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5jcmVhdGVEYXRhTm9kZT1mdW5jdGlvbiBjcmVhdGVEYXRhTm9kZShlLHQsYSl7Y29uc3Qgbj1wYXJzZUV4cHJlc3Npb24oYSk7aWYoIW4pcmV0dXJuIG51bGw7aWYobi5zb21lKChlPT5lLm9wZXJhdG9yPT09bCkpKXJldHVybiBudWxsO2NvbnN0IHM9Zi5nZXQoblswXS5uYW1lKTtsZXQgbz0wO2lmKHMpe2U9cyhlLHQpO289MX1lbHNlIGU9dHx8ZTtmb3IobGV0IHQ9bi5sZW5ndGg7bzx0O28rKyl7Y29uc3R7bmFtZTp0LG9wZXJhdG9yOmEsaW5kZXg6c309bltvXTtpZighaXNGaW5pdGUocykpe25bb10uaW5kZXg9MDtyZXR1cm4gY3JlYXRlTm9kZXMoZSxuLnNsaWNlKG8pKX1sZXQgdTtzd2l0Y2goYSl7Y2FzZSBjOnU9ZVtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0odCwhMSk7YnJlYWs7Y2FzZSBsOnU9ZVtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0odCwhMCk7YnJlYWs7Y2FzZSBoOnU9ZVtyLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKHQpO3U9dSBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0QXJyYXk/dS5jaGlsZHJlbjpbdV19aWYoMD09PXUubGVuZ3RoKXJldHVybiBjcmVhdGVOb2RlcyhlLG4uc2xpY2UobykpO2lmKCEoczx1Lmxlbmd0aCkpe25bb10uaW5kZXg9cy11Lmxlbmd0aDtyZXR1cm4gY3JlYXRlTm9kZXMoZSxuLnNsaWNlKG8pKX17Y29uc3QgdD11W3NdO2lmKCEodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KSl7KDAsaS53YXJuKSgiWEZBIC0gQ2Fubm90IGNyZWF0ZSBhIG5vZGUuIik7cmV0dXJuIG51bGx9ZT10fX1yZXR1cm4gbnVsbH07dC5zZWFyY2hOb2RlPWZ1bmN0aW9uIHNlYXJjaE5vZGUoZSx0LGEsbj0hMCxpPSEwKXtjb25zdCBzPXBhcnNlRXhwcmVzc2lvbihhLG4pO2lmKCFzKXJldHVybiBudWxsO2NvbnN0IG89Zi5nZXQoc1swXS5uYW1lKTtsZXQgdSxkPTA7aWYobyl7dT0hMDtlPVtvKGUsdCldO2Q9MX1lbHNle3U9bnVsbD09PXQ7ZT1bdHx8ZV19Zm9yKGxldCBhPXMubGVuZ3RoO2Q8YTtkKyspe2NvbnN0e25hbWU6YSxjYWNoZU5hbWU6bixvcGVyYXRvcjpvLGluZGV4OmZ9PXNbZF0scD1bXTtmb3IoY29uc3QgdCBvZiBlKXtpZighKHQgaW5zdGFuY2VvZiByLlhGQU9iamVjdCkpY29udGludWU7bGV0IGUscztpZihpKXtzPWcuZ2V0KHQpO2lmKCFzKXtzPW5ldyBNYXA7Zy5zZXQodCxzKX1lPXMuZ2V0KG4pfWlmKCFlKXtzd2l0Y2gobyl7Y2FzZSBjOmU9dFtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0oYSwhMSk7YnJlYWs7Y2FzZSBsOmU9dFtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0oYSwhMCk7YnJlYWs7Y2FzZSBoOmU9dFtyLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKGEpO2U9ZSBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0QXJyYXk/ZS5jaGlsZHJlbjpbZV19aSYmcy5zZXQobixlKX1lLmxlbmd0aD4wJiZwLnB1c2goZSl9aWYoMCE9PXAubGVuZ3RofHx1fHwwIT09ZCllPWlzRmluaXRlKGYpP3AuZmlsdGVyKChlPT5mPGUubGVuZ3RoKSkubWFwKChlPT5lW2ZdKSk6cC5mbGF0KCk7ZWxzZXtjb25zdCBhPXRbci4kZ2V0UGFyZW50XSgpO2lmKCEodD1hKSlyZXR1cm4gbnVsbDtkPS0xO2U9W3RdfX1pZigwPT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIGV9O3ZhciByPWEoNzUpLG49YSg3NyksaT1hKDIpO2NvbnN0IHM9L15bXi5bXSsvLG89L15bXlxdXSsvLGM9MCxsPTEsaD0yLHU9MyxkPTQsZj1uZXcgTWFwKFtbIiRkYXRhIiwoZSx0KT0+ZS5kYXRhc2V0cz9lLmRhdGFzZXRzLmRhdGE6ZV0sWyIkcmVjb3JkIiwoZSx0KT0+KGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW3IuJGdldENoaWxkcmVuXSgpWzBdXSxbIiR0ZW1wbGF0ZSIsKGUsdCk9PmUudGVtcGxhdGVdLFsiJGNvbm5lY3Rpb25TZXQiLChlLHQpPT5lLmNvbm5lY3Rpb25TZXRdLFsiJGZvcm0iLChlLHQpPT5lLmZvcm1dLFsiJGxheW91dCIsKGUsdCk9PmUubGF5b3V0XSxbIiRob3N0IiwoZSx0KT0+ZS5ob3N0XSxbIiRkYXRhV2luZG93IiwoZSx0KT0+ZS5kYXRhV2luZG93XSxbIiRldmVudCIsKGUsdCk9PmUuZXZlbnRdLFsiISIsKGUsdCk9PmUuZGF0YXNldHNdLFsiJHhmYSIsKGUsdCk9PmVdLFsieGZhIiwoZSx0KT0+ZV0sWyIkIiwoZSx0KT0+dF1dKSxnPW5ldyBXZWFrTWFwLHA9bi5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKGUsdCxhPSEwKXtsZXQgcj1lLm1hdGNoKHMpO2lmKCFyKXJldHVybiBudWxsO2xldFtuXT1yO2NvbnN0IGY9W3tuYW1lOm4sY2FjaGVOYW1lOiIuIituLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsLG9wZXJhdG9yOmN9XTtsZXQgZz1uLmxlbmd0aDtmb3IoO2c8ZS5sZW5ndGg7KXtjb25zdCBtPWc7aWYoIlsiPT09ZS5jaGFyQXQoZysrKSl7cj1lLnNsaWNlKGcpLm1hdGNoKG8pO2lmKCFyKXsoMCxpLndhcm4pKCJYRkEgLSBJbnZhbGlkIGluZGV4IGluIFNPTSBleHByZXNzaW9uIik7cmV0dXJuIG51bGx9Zi5hdCgtMSkuaW5kZXg9IioiPT09KHA9KHA9clswXSkudHJpbSgpKT8xLzA6cGFyc2VJbnQocCwxMCl8fDA7Zys9clswXS5sZW5ndGgrMTtjb250aW51ZX1sZXQgYjtzd2l0Y2goZS5jaGFyQXQoZykpe2Nhc2UiLiI6aWYoIXQpcmV0dXJuIG51bGw7ZysrO2I9bDticmVhaztjYXNlIiMiOmcrKztiPWg7YnJlYWs7Y2FzZSJbIjppZihhKXsoMCxpLndhcm4pKCJYRkEgLSBTT00gZXhwcmVzc2lvbiBjb250YWlucyBhIEZvcm1DYWxjIHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpO3JldHVybiBudWxsfWI9dTticmVhaztjYXNlIigiOmlmKGEpeygwLGkud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgSmF2YVNjcmlwdCBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1iPWQ7YnJlYWs7ZGVmYXVsdDpiPWN9cj1lLnNsaWNlKGcpLm1hdGNoKHMpO2lmKCFyKWJyZWFrO1tuXT1yO2crPW4ubGVuZ3RoO2YucHVzaCh7bmFtZTpuLGNhY2hlTmFtZTplLnNsaWNlKG0sZyksb3BlcmF0b3I6YixpbmRleDowLGpzOm51bGwsZm9ybUNhbGM6bnVsbH0pfXZhciBwO3JldHVybiBmfWZ1bmN0aW9uIGNyZWF0ZU5vZGVzKGUsdCl7bGV0IGE9bnVsbDtmb3IoY29uc3R7bmFtZTpuLGluZGV4Oml9b2YgdCl7Zm9yKGxldCB0PTAscz1pc0Zpbml0ZShpKT9pOjA7dDw9czt0Kyspe2NvbnN0IHQ9ZVtyLiRuYW1lc3BhY2VJZF09PT1wPy0xOmVbci4kbmFtZXNwYWNlSWRdO2E9bmV3IHIuWG1sT2JqZWN0KHQsbik7ZVtyLiRhcHBlbmRDaGlsZF0oYSl9ZT1hfXJldHVybiBhfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkJpbmRlcj12b2lkIDA7dmFyIHI9YSg3NSksbj1hKDgwKSxpPWEoNzgpLHM9YSg3Nyksbz1hKDIpO2NvbnN0IGM9cy5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gY3JlYXRlVGV4dChlKXtjb25zdCB0PW5ldyBuLlRleHQoe30pO3Rbci4kY29udGVudF09ZTtyZXR1cm4gdH10LkJpbmRlcj1jbGFzcyBCaW5kZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5yb290PWU7dGhpcy5kYXRhc2V0cz1lLmRhdGFzZXRzO2UuZGF0YXNldHMmJmUuZGF0YXNldHMuZGF0YT90aGlzLmRhdGE9ZS5kYXRhc2V0cy5kYXRhOnRoaXMuZGF0YT1uZXcgci5YbWxPYmplY3Qocy5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQsImRhdGEiKTt0aGlzLmVtcHR5TWVyZ2U9MD09PXRoaXMuZGF0YVtyLiRnZXRDaGlsZHJlbl0oKS5sZW5ndGg7dGhpcy5yb290LmZvcm09dGhpcy5mb3JtPWUudGVtcGxhdGVbci4kY2xvbmVdKCl9X2lzQ29uc3VtZURhdGEoKXtyZXR1cm4hdGhpcy5lbXB0eU1lcmdlJiZ0aGlzLl9tZXJnZU1vZGV9X2lzTWF0Y2hUZW1wbGF0ZSgpe3JldHVybiF0aGlzLl9pc0NvbnN1bWVEYXRhKCl9YmluZCgpe3RoaXMuX2JpbmRFbGVtZW50KHRoaXMuZm9ybSx0aGlzLmRhdGEpO3JldHVybiB0aGlzLmZvcm19Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGF9X2JpbmRWYWx1ZShlLHQsYSl7ZVtyLiRkYXRhXT10O2lmKGVbci4kaGFzU2V0dGFibGVWYWx1ZV0oKSlpZih0W3IuJGlzRGF0YVZhbHVlXSgpKXtjb25zdCBhPXRbci4kZ2V0RGF0YVZhbHVlXSgpO2Vbci4kc2V0VmFsdWVdKGNyZWF0ZVRleHQoYSkpfWVsc2UgaWYoZSBpbnN0YW5jZW9mIG4uRmllbGQmJmUudWkmJmUudWkuY2hvaWNlTGlzdCYmIm11bHRpU2VsZWN0Ij09PWUudWkuY2hvaWNlTGlzdC5vcGVuKXtjb25zdCBhPXRbci4kZ2V0Q2hpbGRyZW5dKCkubWFwKChlPT5lW3IuJGNvbnRlbnRdLnRyaW0oKSkpLmpvaW4oIlxuIik7ZVtyLiRzZXRWYWx1ZV0oY3JlYXRlVGV4dChhKSl9ZWxzZSB0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJigwLG8ud2FybikoIlhGQSAtIE5vZGVzIGhhdmVuJ3QgdGhlIHNhbWUgdHlwZS4iKTtlbHNlIXRbci4kaXNEYXRhVmFsdWVdKCl8fHRoaXMuX2lzTWF0Y2hUZW1wbGF0ZSgpP3RoaXMuX2JpbmRFbGVtZW50KGUsdCk6KDAsby53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpfV9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShlLHQsYSxuKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgaSxvO2ZvcihsZXQgbj0wO248MztuKyspe2k9YVtyLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oZSwhMSwhMCk7Zm9yKDs7KXtvPWkubmV4dCgpLnZhbHVlO2lmKCFvKWJyZWFrO2lmKHQ9PT1vW3IuJGlzRGF0YVZhbHVlXSgpKXJldHVybiBvfWlmKGFbci4kbmFtZXNwYWNlSWRdPT09cy5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQmJiJkYXRhIj09PWFbci4kbm9kZU5hbWVdKWJyZWFrO2E9YVtyLiRnZXRQYXJlbnRdKCl9aWYoIW4pcmV0dXJuIG51bGw7aT10aGlzLmRhdGFbci4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGUsITAsITEpO289aS5uZXh0KCkudmFsdWU7aWYobylyZXR1cm4gbztpPXRoaXMuZGF0YVtyLiRnZXRBdHRyaWJ1dGVJdF0oZSwhMCk7bz1pLm5leHQoKS52YWx1ZTtyZXR1cm4gbyYmb1tyLiRpc0RhdGFWYWx1ZV0oKT9vOm51bGx9X3NldFByb3BlcnRpZXMoZSx0KXtpZihlLmhhc093blByb3BlcnR5KCJzZXRQcm9wZXJ0eSIpKWZvcihjb25zdHtyZWY6YSx0YXJnZXQ6cyxjb25uZWN0aW9uOmN9b2YgZS5zZXRQcm9wZXJ0eS5jaGlsZHJlbil7aWYoYyljb250aW51ZTtpZighYSljb250aW51ZTtjb25zdCBsPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsYSwhMSwhMSk7aWYoIWwpeygwLG8ud2FybikoYFhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAke2F9LmApO2NvbnRpbnVlfWNvbnN0W2hdPWw7aWYoIWhbci4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGEpKXsoMCxvLndhcm4pKCJYRkEgLSBJbnZhbGlkIG5vZGU6IG11c3QgYmUgYSBkYXRhIG5vZGUuIik7Y29udGludWV9Y29uc3QgdT0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCxlLHMsITEsITEpO2lmKCF1KXsoMCxvLndhcm4pKGBYRkEgLSBJbnZhbGlkIHRhcmdldDogJHtzfS5gKTtjb250aW51ZX1jb25zdFtkXT11O2lmKCFkW3IuJGlzRGVzY2VuZGVudF0oZSkpeygwLG8ud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBtdXN0IGJlIGEgcHJvcGVydHkgb3Igc3VicHJvcGVydHkuIik7Y29udGludWV9Y29uc3QgZj1kW3IuJGdldFBhcmVudF0oKTtpZihkIGluc3RhbmNlb2Ygbi5TZXRQcm9wZXJ0eXx8ZiBpbnN0YW5jZW9mIG4uU2V0UHJvcGVydHkpeygwLG8ud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBzZXRQcm9wZXJ0eSBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuIik7Y29udGludWV9aWYoZCBpbnN0YW5jZW9mIG4uQmluZEl0ZW1zfHxmIGluc3RhbmNlb2Ygbi5CaW5kSXRlbXMpeygwLG8ud2FybikoIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBiaW5kSXRlbXMgb3Igb25lIG9mIGl0cyBwcm9wZXJ0aWVzLiIpO2NvbnRpbnVlfWNvbnN0IGc9aFtyLiR0ZXh0XSgpLHA9ZFtyLiRub2RlTmFtZV07aWYoZCBpbnN0YW5jZW9mIHIuWEZBQXR0cmlidXRlKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7ZVtwXT1nO2NvbnN0IHQ9UmVmbGVjdC5jb25zdHJ1Y3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKGYpLmNvbnN0cnVjdG9yLFtlXSk7ZltwXT10W3BdfWVsc2UgaWYoZC5oYXNPd25Qcm9wZXJ0eShyLiRjb250ZW50KSl7ZFtyLiRkYXRhXT1oO2Rbci4kY29udGVudF09ZztkW3IuJGZpbmFsaXplXSgpfWVsc2UoMCxvLndhcm4pKCJYRkEgLSBJbnZhbGlkIG5vZGUgdG8gdXNlIGluIHNldFByb3BlcnR5Iil9fV9iaW5kSXRlbXMoZSx0KXtpZighZS5oYXNPd25Qcm9wZXJ0eSgiaXRlbXMiKXx8IWUuaGFzT3duUHJvcGVydHkoImJpbmRJdGVtcyIpfHxlLmJpbmRJdGVtcy5pc0VtcHR5KCkpcmV0dXJuO2Zvcihjb25zdCB0IG9mIGUuaXRlbXMuY2hpbGRyZW4pZVtyLiRyZW1vdmVDaGlsZF0odCk7ZS5pdGVtcy5jbGVhcigpO2NvbnN0IGE9bmV3IG4uSXRlbXMoe30pLHM9bmV3IG4uSXRlbXMoe30pO2Vbci4kYXBwZW5kQ2hpbGRdKGEpO2UuaXRlbXMucHVzaChhKTtlW3IuJGFwcGVuZENoaWxkXShzKTtlLml0ZW1zLnB1c2gocyk7Zm9yKGNvbnN0e3JlZjpuLGxhYmVsUmVmOmMsdmFsdWVSZWY6bCxjb25uZWN0aW9uOmh9b2YgZS5iaW5kSXRlbXMuY2hpbGRyZW4pe2lmKGgpY29udGludWU7aWYoIW4pY29udGludWU7Y29uc3QgZT0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LG4sITEsITEpO2lmKGUpZm9yKGNvbnN0IHQgb2YgZSl7aWYoIXRbci4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7KDAsby53YXJuKShgWEZBIC0gSW52YWxpZCByZWYgKCR7bn0pOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuYCk7Y29udGludWV9Y29uc3QgZT0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LGMsITAsITEpO2lmKCFlKXsoMCxvLndhcm4pKGBYRkEgLSBJbnZhbGlkIGxhYmVsOiAke2N9LmApO2NvbnRpbnVlfWNvbnN0W2hdPWU7aWYoIWhbci4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7KDAsby53YXJuKSgiWEZBIC0gSW52YWxpZCBsYWJlbDogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpO2NvbnRpbnVlfWNvbnN0IHU9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxsLCEwLCExKTtpZighdSl7KDAsby53YXJuKShgWEZBIC0gSW52YWxpZCB2YWx1ZTogJHtsfS5gKTtjb250aW51ZX1jb25zdFtkXT11O2lmKCFkW3IuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpeygwLG8ud2FybikoIlhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKTtjb250aW51ZX1jb25zdCBmPWNyZWF0ZVRleHQoaFtyLiR0ZXh0XSgpKSxnPWNyZWF0ZVRleHQoZFtyLiR0ZXh0XSgpKTthW3IuJGFwcGVuZENoaWxkXShmKTthLnRleHQucHVzaChmKTtzW3IuJGFwcGVuZENoaWxkXShnKTtzLnRleHQucHVzaChnKX1lbHNlKDAsby53YXJuKShgWEZBIC0gSW52YWxpZCByZWZlcmVuY2U6ICR7bn0uYCl9fV9iaW5kT2NjdXJyZW5jZXMoZSx0LGEpe2xldCBuO2lmKHQubGVuZ3RoPjEpe249ZVtyLiRjbG9uZV0oKTtuW3IuJHJlbW92ZUNoaWxkXShuLm9jY3VyKTtuLm9jY3VyPW51bGx9dGhpcy5fYmluZFZhbHVlKGUsdFswXSxhKTt0aGlzLl9zZXRQcm9wZXJ0aWVzKGUsdFswXSk7dGhpcy5fYmluZEl0ZW1zKGUsdFswXSk7aWYoMT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPWVbci4kZ2V0UGFyZW50XSgpLHM9ZVtyLiRub2RlTmFtZV0sbz1pW3IuJGluZGV4T2ZdKGUpO2ZvcihsZXQgZT0xLGM9dC5sZW5ndGg7ZTxjO2UrKyl7Y29uc3QgYz10W2VdLGw9bltyLiRjbG9uZV0oKTtpW3NdLnB1c2gobCk7aVtyLiRpbnNlcnRBdF0obytlLGwpO3RoaXMuX2JpbmRWYWx1ZShsLGMsYSk7dGhpcy5fc2V0UHJvcGVydGllcyhsLGMpO3RoaXMuX2JpbmRJdGVtcyhsLGMpfX1fY3JlYXRlT2NjdXJyZW5jZXMoZSl7aWYoIXRoaXMuZW1wdHlNZXJnZSlyZXR1cm47Y29uc3R7b2NjdXI6dH09ZTtpZighdHx8dC5pbml0aWFsPD0xKXJldHVybjtjb25zdCBhPWVbci4kZ2V0UGFyZW50XSgpLG49ZVtyLiRub2RlTmFtZV07aWYoIShhW25daW5zdGFuY2VvZiByLlhGQU9iamVjdEFycmF5KSlyZXR1cm47bGV0IGk7aT1lLm5hbWU/YVtuXS5jaGlsZHJlbi5maWx0ZXIoKHQ9PnQubmFtZT09PWUubmFtZSkpLmxlbmd0aDphW25dLmNoaWxkcmVuLmxlbmd0aDtjb25zdCBzPWFbci4kaW5kZXhPZl0oZSkrMSxvPXQuaW5pdGlhbC1pO2lmKG8pe2NvbnN0IHQ9ZVtyLiRjbG9uZV0oKTt0W3IuJHJlbW92ZUNoaWxkXSh0Lm9jY3VyKTt0Lm9jY3VyPW51bGw7YVtuXS5wdXNoKHQpO2Fbci4kaW5zZXJ0QXRdKHMsdCk7Zm9yKGxldCBlPTE7ZTxvO2UrKyl7Y29uc3QgaT10W3IuJGNsb25lXSgpO2Fbbl0ucHVzaChpKTthW3IuJGluc2VydEF0XShzK2UsaSl9fX1fZ2V0T2NjdXJJbmZvKGUpe2NvbnN0e25hbWU6dCxvY2N1cjphfT1lO2lmKCFhfHwhdClyZXR1cm5bMSwxXTtjb25zdCByPS0xPT09YS5tYXg/MS8wOmEubWF4O3JldHVyblthLm1pbixyXX1fc2V0QW5kQmluZChlLHQpe3RoaXMuX3NldFByb3BlcnRpZXMoZSx0KTt0aGlzLl9iaW5kSXRlbXMoZSx0KTt0aGlzLl9iaW5kRWxlbWVudChlLHQpfV9iaW5kRWxlbWVudChlLHQpe2NvbnN0IGE9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7Zm9yKGNvbnN0IG4gb2YgZVtyLiRnZXRDaGlsZHJlbl0oKSl7aWYobltyLiRkYXRhXSljb250aW51ZTtpZih2b2lkIDA9PT10aGlzLl9tZXJnZU1vZGUmJiJzdWJmb3JtIj09PW5bci4kbm9kZU5hbWVdKXt0aGlzLl9tZXJnZU1vZGU9ImNvbnN1bWVEYXRhIj09PW4ubWVyZ2VNb2RlO2NvbnN0IGU9dFtyLiRnZXRDaGlsZHJlbl0oKTtpZihlLmxlbmd0aD4wKXRoaXMuX2JpbmRPY2N1cnJlbmNlcyhuLFtlWzBdXSxudWxsKTtlbHNlIGlmKHRoaXMuZW1wdHlNZXJnZSl7Y29uc3QgZT10W3IuJG5hbWVzcGFjZUlkXT09PWM/LTE6dFtyLiRuYW1lc3BhY2VJZF0sYT1uW3IuJGRhdGFdPW5ldyByLlhtbE9iamVjdChlLG4ubmFtZXx8InJvb3QiKTt0W3IuJGFwcGVuZENoaWxkXShhKTt0aGlzLl9iaW5kRWxlbWVudChuLGEpfWNvbnRpbnVlfWlmKCFuW3IuJGlzQmluZGFibGVdKCkpY29udGludWU7bGV0IGU9ITEscz1udWxsLGw9bnVsbCxoPW51bGw7aWYobi5iaW5kKXtzd2l0Y2gobi5iaW5kLm1hdGNoKXtjYXNlIm5vbmUiOnRoaXMuX3NldEFuZEJpbmQobix0KTtjb250aW51ZTtjYXNlImdsb2JhbCI6ZT0hMDticmVhaztjYXNlImRhdGFSZWYiOmlmKCFuLmJpbmQucmVmKXsoMCxvLndhcm4pKGBYRkEgLSByZWYgaXMgZW1wdHkgaW4gbm9kZSAke25bci4kbm9kZU5hbWVdfS5gKTt0aGlzLl9zZXRBbmRCaW5kKG4sdCk7Y29udGludWV9bD1uLmJpbmQucmVmfW4uYmluZC5waWN0dXJlJiYocz1uLmJpbmQucGljdHVyZVtyLiRjb250ZW50XSl9Y29uc3RbdSxkXT10aGlzLl9nZXRPY2N1ckluZm8obik7aWYobCl7aD0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LGwsITAsITEpO2lmKG51bGw9PT1oKXtoPSgwLGkuY3JlYXRlRGF0YU5vZGUpKHRoaXMuZGF0YSx0LGwpO2lmKCFoKWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKGhbci4kY29uc3VtZWRdPSEwKTt0aGlzLl9zZXRBbmRCaW5kKG4saCk7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYoaD1oLmZpbHRlcigoZT0+IWVbci4kY29uc3VtZWRdKSkpO2gubGVuZ3RoPmQ/aD1oLnNsaWNlKDAsZCk6MD09PWgubGVuZ3RoJiYoaD1udWxsKTtoJiZ0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJmguZm9yRWFjaCgoZT0+e2Vbci4kY29uc3VtZWRdPSEwfSkpfWVsc2V7aWYoIW4ubmFtZSl7dGhpcy5fc2V0QW5kQmluZChuLHQpO2NvbnRpbnVlfWlmKHRoaXMuX2lzQ29uc3VtZURhdGEoKSl7Y29uc3QgYT1bXTtmb3IoO2EubGVuZ3RoPGQ7KXtjb25zdCBpPXRoaXMuX2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKG4ubmFtZSxuW3IuJGhhc1NldHRhYmxlVmFsdWVdKCksdCxlKTtpZighaSlicmVhaztpW3IuJGNvbnN1bWVkXT0hMDthLnB1c2goaSl9aD1hLmxlbmd0aD4wP2E6bnVsbH1lbHNle2g9dFtyLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0obi5uYW1lLCExLHRoaXMuZW1wdHlNZXJnZSkubmV4dCgpLnZhbHVlO2lmKCFoKXtpZigwPT09dSl7YS5wdXNoKG4pO2NvbnRpbnVlfWNvbnN0IGU9dFtyLiRuYW1lc3BhY2VJZF09PT1jPy0xOnRbci4kbmFtZXNwYWNlSWRdO2g9bltyLiRkYXRhXT1uZXcgci5YbWxPYmplY3QoZSxuLm5hbWUpO3RoaXMuZW1wdHlNZXJnZSYmKGhbci4kY29uc3VtZWRdPSEwKTt0W3IuJGFwcGVuZENoaWxkXShoKTt0aGlzLl9zZXRBbmRCaW5kKG4saCk7Y29udGludWV9dGhpcy5lbXB0eU1lcmdlJiYoaFtyLiRjb25zdW1lZF09ITApO2g9W2hdfX1oP3RoaXMuX2JpbmRPY2N1cnJlbmNlcyhuLGgscyk6dT4wP3RoaXMuX3NldEFuZEJpbmQobix0KTphLnB1c2gobil9YS5mb3JFYWNoKChlPT5lW3IuJGdldFBhcmVudF0oKVtyLiRyZW1vdmVDaGlsZF0oZSkpKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVmFsdWU9dC5UZXh0PXQuVGVtcGxhdGVOYW1lc3BhY2U9dC5UZW1wbGF0ZT10LlNldFByb3BlcnR5PXQuSXRlbXM9dC5GaWVsZD10LkJpbmRJdGVtcz12b2lkIDA7dmFyIHI9YSg3NSksbj1hKDc3KSxpPWEoODEpLHM9YSg4Miksbz1hKDc2KSxjPWEoMiksbD1hKDgzKSxoPWEoNCksdT1hKDc4KTtjb25zdCBkPW4uTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkLGY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixnPS9eSChcZCspJC8scD1uZXcgU2V0KFsiaW1hZ2UvZ2lmIiwiaW1hZ2UvanBlZyIsImltYWdlL2pwZyIsImltYWdlL3BqcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvYXBuZyIsImltYWdlL3gtcG5nIiwiaW1hZ2UvYm1wIiwiaW1hZ2UveC1tcy1ibXAiLCJpbWFnZS90aWZmIiwiaW1hZ2UvdGlmIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pLG09W1tbNjYsNzddLCJpbWFnZS9ibXAiXSxbWzI1NSwyMTYsMjU1XSwiaW1hZ2UvanBlZyJdLFtbNzMsNzMsNDIsMF0sImltYWdlL3RpZmYiXSxbWzc3LDc3LDAsNDJdLCJpbWFnZS90aWZmIl0sW1s3MSw3Myw3MCw1Niw1Nyw5N10sImltYWdlL2dpZiJdLFtbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSwiaW1hZ2UvcG5nIl1dO2Z1bmN0aW9uIGdldEJvcmRlckRpbXMoZSl7aWYoIWV8fCFlLmJvcmRlcilyZXR1cm57dzowLGg6MH07Y29uc3QgdD1lLmJvcmRlcltyLiRnZXRFeHRyYV0oKTtyZXR1cm4gdD97dzp0LndpZHRoc1swXSt0LndpZHRoc1syXSt0Lmluc2V0c1swXSt0Lmluc2V0c1syXSxoOnQud2lkdGhzWzFdK3Qud2lkdGhzWzNdK3QuaW5zZXRzWzFdK3QuaW5zZXRzWzNdfTp7dzowLGg6MH19ZnVuY3Rpb24gaGFzTWFyZ2luKGUpe3JldHVybiBlLm1hcmdpbiYmKGUubWFyZ2luLnRvcEluc2V0fHxlLm1hcmdpbi5yaWdodEluc2V0fHxlLm1hcmdpbi5ib3R0b21JbnNldHx8ZS5tYXJnaW4ubGVmdEluc2V0KX1mdW5jdGlvbiBfc2V0VmFsdWUoZSx0KXtpZighZS52YWx1ZSl7Y29uc3QgdD1uZXcgVmFsdWUoe30pO2Vbci4kYXBwZW5kQ2hpbGRdKHQpO2UudmFsdWU9dH1lLnZhbHVlW3IuJHNldFZhbHVlXSh0KX1mdW5jdGlvbipnZXRDb250YWluZWRDaGlsZHJlbihlKXtmb3IoY29uc3QgdCBvZiBlW3IuJGdldENoaWxkcmVuXSgpKXQgaW5zdGFuY2VvZiBTdWJmb3JtU2V0P3lpZWxkKnRbci4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCk6eWllbGQgdH1mdW5jdGlvbiBpc1JlcXVpcmVkKGUpe3JldHVybiBlLnZhbGlkYXRlJiYiZXJyb3IiPT09ZS52YWxpZGF0ZS5udWxsVGVzdH1mdW5jdGlvbiBzZXRUYWJJbmRleChlKXtmb3IoO2U7KXtpZighZS50cmF2ZXJzYWwpe2Vbci4kdGFiSW5kZXhdPWVbci4kZ2V0UGFyZW50XSgpW3IuJHRhYkluZGV4XTtyZXR1cm59aWYoZVtyLiR0YWJJbmRleF0pcmV0dXJuO2xldCB0PW51bGw7Zm9yKGNvbnN0IGEgb2YgZS50cmF2ZXJzYWxbci4kZ2V0Q2hpbGRyZW5dKCkpaWYoIm5leHQiPT09YS5vcGVyYXRpb24pe3Q9YTticmVha31pZighdHx8IXQucmVmKXtlW3IuJHRhYkluZGV4XT1lW3IuJGdldFBhcmVudF0oKVtyLiR0YWJJbmRleF07cmV0dXJufWNvbnN0IGE9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7ZVtyLiR0YWJJbmRleF09KythW3IuJHRhYkluZGV4XTtjb25zdCBuPWFbci4kc2VhcmNoTm9kZV0odC5yZWYsZSk7aWYoIW4pcmV0dXJuO2U9blswXX19ZnVuY3Rpb24gYXBwbHlBc3Npc3QoZSx0KXtjb25zdCBhPWUuYXNzaXN0O2lmKGEpe2NvbnN0IGU9YVtyLiR0b0hUTUxdKCk7ZSYmKHQudGl0bGU9ZSk7Y29uc3Qgbj1hLnJvbGUubWF0Y2goZyk7aWYobil7Y29uc3QgZT0iaGVhZGluZyIsYT1uWzFdO3Qucm9sZT1lO3RbImFyaWEtbGV2ZWwiXT1hfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle2NvbnN0IGE9ZVtyLiRnZXRQYXJlbnRdKCk7InJvdyI9PT1hLmxheW91dCYmKGEuYXNzaXN0JiYiVEgiPT09YS5hc3Npc3Qucm9sZT90LnJvbGU9ImNvbHVtbmhlYWRlciI6dC5yb2xlPSJjZWxsIil9fWZ1bmN0aW9uIGFyaWFMYWJlbChlKXtpZighZS5hc3Npc3QpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrW3IuJGNvbnRlbnRdP3Quc3BlYWtbci4kY29udGVudF06dC50b29sVGlwP3QudG9vbFRpcFtyLiRjb250ZW50XTpudWxsfWZ1bmN0aW9uIHZhbHVlVG9IdG1sKGUpe3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbInhmYVJpY2giXSxzdHlsZTpPYmplY3QuY3JlYXRlKG51bGwpfSxjaGlsZHJlbjpbe25hbWU6InNwYW4iLGF0dHJpYnV0ZXM6e3N0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LHZhbHVlOmV9XX0pfWZ1bmN0aW9uIHNldEZpcnN0VW5zcGxpdHRhYmxlKGUpe2NvbnN0IHQ9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7aWYobnVsbD09PXRbci4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlKXt0W3IuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT1lO3Rbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMH19ZnVuY3Rpb24gdW5zZXRGaXJzdFVuc3BsaXR0YWJsZShlKXtjb25zdCB0PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO3Rbci4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlPT09ZSYmKHRbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMSl9ZnVuY3Rpb24gaGFuZGxlQnJlYWsoZSl7aWYoZVtyLiRleHRyYV0pcmV0dXJuITE7ZVtyLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKTtpZigiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7Y29uc3QgdD1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKTtsZXQgYT1udWxsO2lmKGUudGFyZ2V0KXthPXRbci4kc2VhcmNoTm9kZV0oZS50YXJnZXQsZVtyLiRnZXRQYXJlbnRdKCkpO2lmKCFhKXJldHVybiExO2E9YVswXX1jb25zdHtjdXJyZW50UGFnZUFyZWE6bixjdXJyZW50Q29udGVudEFyZWE6aX09dFtyLiRleHRyYV07aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSl7YSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHwoYT1udWxsKTtpZihlLnN0YXJ0TmV3KXtlW3IuJGV4dHJhXS50YXJnZXQ9YXx8bjtyZXR1cm4hMH1pZihhJiZhIT09bil7ZVtyLiRleHRyYV0udGFyZ2V0PWE7cmV0dXJuITB9cmV0dXJuITF9YSBpbnN0YW5jZW9mIENvbnRlbnRBcmVhfHwoYT1udWxsKTtjb25zdCBzPWEmJmFbci4kZ2V0UGFyZW50XSgpO2xldCBvLGM9cztpZihlLnN0YXJ0TmV3KWlmKGEpe2NvbnN0IGU9cy5jb250ZW50QXJlYS5jaGlsZHJlbix0PWUuaW5kZXhPZihpKSxyPWUuaW5kZXhPZihhKTstMSE9PXQmJnQ8ciYmKGM9bnVsbCk7bz1yLTF9ZWxzZSBvPW4uY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKTtlbHNle2lmKCFhfHxhPT09aSlyZXR1cm4hMTtvPXMuY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihhKS0xO2M9cz09PW4/bnVsbDpzfWVbci4kZXh0cmFdLnRhcmdldD1jO2Vbci4kZXh0cmFdLmluZGV4PW87cmV0dXJuITB9ZnVuY3Rpb24gaGFuZGxlT3ZlcmZsb3coZSx0LGEpe2NvbnN0IG49ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCksaT1uW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUscz10W3IuJGdldFN1YmZvcm1QYXJlbnRdO3Rbci4kZ2V0U3ViZm9ybVBhcmVudF09KCk9PmU7bltyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwO2NvbnN0IG89dFtyLiR0b0hUTUxdKGEpO2Vbci4kYWRkSFRNTF0oby5odG1sLG8uYmJveCk7bltyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWk7dFtyLiRnZXRTdWJmb3JtUGFyZW50XT1zfWNsYXNzIEFwcGVhcmFuY2VGaWx0ZXIgZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJhcHBlYXJhbmNlRmlsdGVyIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBBcmMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJhcmMiLCEwKTt0aGlzLmNpcmN1bGFyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5jaXJjdWxhcixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaGFuZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuc3RhcnRBbmdsZT0oMCxvLmdldEZsb2F0KSh7ZGF0YTplLnN0YXJ0QW5nbGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnN3ZWVwQW5nbGU9KDAsby5nZXRGbG9hdCkoe2RhdGE6ZS5zd2VlcEFuZ2xlLGRlZmF1bHRWYWx1ZTozNjAsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lZGdlPW51bGw7dGhpcy5maWxsPW51bGx9W3IuJHRvSFRNTF0oKXtjb25zdCBlPXRoaXMuZWRnZXx8bmV3IEVkZ2Uoe30pLHQ9ZVtyLiR0b1N0eWxlXSgpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZpbGwmJiJ2aXNpYmxlIj09PXRoaXMuZmlsbC5wcmVzZW5jZT9PYmplY3QuYXNzaWduKGEsdGhpcy5maWxsW3IuJHRvU3R5bGVdKCkpOmEuZmlsbD0idHJhbnNwYXJlbnQiO2Euc3Ryb2tlV2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCk7YS5zdHJva2U9dC5jb2xvcjtsZXQgbjtjb25zdCBpPXt4bWxuczpmLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9fTtpZigzNjA9PT10aGlzLnN3ZWVwQW5nbGUpbj17bmFtZToiZWxsaXBzZSIsYXR0cmlidXRlczp7eG1sbnM6ZixjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTphfX07ZWxzZXtjb25zdCBlPXRoaXMuc3RhcnRBbmdsZSpNYXRoLlBJLzE4MCx0PXRoaXMuc3dlZXBBbmdsZSpNYXRoLlBJLzE4MCxyPXRoaXMuc3dlZXBBbmdsZT4xODA/MTowLFtzLG8sYyxsXT1bNTAqKDErTWF0aC5jb3MoZSkpLDUwKigxLU1hdGguc2luKGUpKSw1MCooMStNYXRoLmNvcyhlK3QpKSw1MCooMS1NYXRoLnNpbihlK3QpKV07bj17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6ZixkOmBNICR7c30gJHtvfSBBIDUwIDUwIDAgJHtyfSAwICR7Y30gJHtsfWAsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOmF9fTtPYmplY3QuYXNzaWduKGkse3ZpZXdCb3g6IjAgMCAxMDAgMTAwIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pfWNvbnN0IGM9e25hbWU6InN2ZyIsY2hpbGRyZW46W25dLGF0dHJpYnV0ZXM6aX07aWYoaGFzTWFyZ2luKHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2NdfSk7Yy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGMpfX1jbGFzcyBBcmVhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYXJlYSIsITApO3RoaXMuY29sU3Bhbj0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMueD0oMCxvLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxvLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5hcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgci5YRkFPYmplY3RBcnJheX0qW3IuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpe3lpZWxkKmdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpfVtyLiRpc1RyYW5zcGFyZW50XSgpe3JldHVybiEwfVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRhZGRIVE1MXShlLHQpe2NvbnN0W2EsbixpLHNdPXQ7dGhpc1tyLiRleHRyYV0ud2lkdGg9TWF0aC5tYXgodGhpc1tyLiRleHRyYV0ud2lkdGgsYStpKTt0aGlzW3IuJGV4dHJhXS5oZWlnaHQ9TWF0aC5tYXgodGhpc1tyLiRleHRyYV0uaGVpZ2h0LG4rcyk7dGhpc1tyLiRleHRyYV0uY2hpbGRyZW4ucHVzaChlKX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuIHRoaXNbci4kZXh0cmFdLmF2YWlsYWJsZVNwYWNlfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJwb3NpdGlvbiIpLGE9e3N0eWxlOnQsaWQ6dGhpc1tyLiR1aWRdLGNsYXNzOlsieGZhQXJlYSJdfTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmYS5jbGFzcy5wdXNoKCJ4ZmFQcmludE9ubHkiKTt0aGlzLm5hbWUmJihhLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBuPVtdO3RoaXNbci4kZXh0cmFdPXtjaGlsZHJlbjpuLHdpZHRoOjAsaGVpZ2h0OjAsYXZhaWxhYmxlU3BhY2U6ZX07Y29uc3QgaT10aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwiZXhjbEdyb3VwIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSksaW5jbHVkZTohMH0pO2lmKCFpLnN1Y2Nlc3Mpe2lmKGkuaXNCcmVhaygpKXJldHVybiBpO2RlbGV0ZSB0aGlzW3IuJGV4dHJhXTtyZXR1cm4gby5IVE1MUmVzdWx0LkZBSUxVUkV9dC53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpc1tyLiRleHRyYV0ud2lkdGgpO3QuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzW3IuJGV4dHJhXS5oZWlnaHQpO2NvbnN0IGM9e25hbWU6ImRpdiIsYXR0cmlidXRlczphLGNoaWxkcmVuOm59LGw9W3RoaXMueCx0aGlzLnksdGhpc1tyLiRleHRyYV0ud2lkdGgsdGhpc1tyLiRleHRyYV0uaGVpZ2h0XTtkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGMsbCl9fWNsYXNzIEFzc2lzdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImFzc2lzdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yb2xlPWUucm9sZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc3BlYWs9bnVsbDt0aGlzLnRvb2xUaXA9bnVsbH1bci4kdG9IVE1MXSgpe3JldHVybiB0aGlzLnRvb2xUaXAmJnRoaXMudG9vbFRpcFtyLiRjb250ZW50XT90aGlzLnRvb2xUaXBbci4kY29udGVudF06bnVsbH19Y2xhc3MgQmFyY29kZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJhcmNvZGUiLCEwKTt0aGlzLmNoYXJFbmNvZGluZz0oMCxvLmdldEtleXdvcmQpKHtkYXRhOmUuY2hhckVuY29kaW5nP2UuY2hhckVuY29kaW5nLnRvTG93ZXJDYXNlKCk6IiIsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PlsidXRmLTgiLCJiaWctZml2ZSIsImZvbnRzcGVjaWZpYyIsImdiayIsImdiLTE4MDMwIiwiZ2ItMjMxMiIsImtzYy01NjAxIiwibm9uZSIsInNoaWZ0LWppcyIsInVjcy0yIiwidXRmLTE2Il0uaW5jbHVkZXMoZSl8fGUubWF0Y2goL2lzby04ODU5LVxkezJ9Lyl9KTt0aGlzLmNoZWNrc3VtPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmNoZWNrc3VtLFsibm9uZSIsIjFtb2QxMCIsIjFtb2QxMF8xbW9kMTEiLCIybW9kMTAiLCJhdXRvIl0pO3RoaXMuZGF0YUNvbHVtbkNvdW50PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5kYXRhQ29sdW1uQ291bnQsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmRhdGFMZW5ndGg9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRhdGFMZW5ndGgsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmRhdGFQcmVwPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGFQcmVwLFsibm9uZSIsImZsYXRlQ29tcHJlc3MiXSk7dGhpcy5kYXRhUm93Q291bnQ9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRhdGFSb3dDb3VudCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZW5kQ2hhcj1lLmVuZENoYXJ8fCIiO3RoaXMuZXJyb3JDb3JyZWN0aW9uTGV2ZWw9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmVycm9yQ29ycmVjdGlvbkxldmVsLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wJiZlPD04fSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1vZHVsZUhlaWdodD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1vZHVsZUhlaWdodCwiNW1tIik7dGhpcy5tb2R1bGVXaWR0aD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1vZHVsZVdpZHRoLCIwLjI1bW0iKTt0aGlzLnByaW50Q2hlY2tEaWdpdD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucHJpbnRDaGVja0RpZ2l0LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5yb3dDb2x1bW5SYXRpbz0oMCxvLmdldFJhdGlvKShlLnJvd0NvbHVtblJhdGlvKTt0aGlzLnN0YXJ0Q2hhcj1lLnN0YXJ0Q2hhcnx8IiI7dGhpcy50ZXh0TG9jYXRpb249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudGV4dExvY2F0aW9uLFsiYmVsb3ciLCJhYm92ZSIsImFib3ZlRW1iZWRkZWQiLCJiZWxvd0VtYmVkZGVkIiwibm9uZSJdKTt0aGlzLnRydW5jYXRlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS50cnVuY2F0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlP2UudHlwZS50b0xvd2VyQ2FzZSgpOiIiLFsiYXp0ZWMiLCJjb2RhYmFyIiwiY29kZTJvZjVpbmR1c3RyaWFsIiwiY29kZTJvZjVpbnRlcmxlYXZlZCIsImNvZGUyb2Y1bWF0cml4IiwiY29kZTJvZjVzdGFuZGFyZCIsImNvZGUzb2Y5IiwiY29kZTNvZjlleHRlbmRlZCIsImNvZGUxMSIsImNvZGU0OSIsImNvZGU5MyIsImNvZGUxMjgiLCJjb2RlMTI4YSIsImNvZGUxMjhiIiwiY29kZTEyOGMiLCJjb2RlMTI4c3NjYyIsImRhdGFtYXRyaXgiLCJlYW44IiwiZWFuOGFkZDIiLCJlYW44YWRkNSIsImVhbjEzIiwiZWFuMTNhZGQyIiwiZWFuMTNhZGQ1IiwiZWFuMTNwd2NkIiwiZmltIiwibG9nbWFycyIsIm1heGljb2RlIiwibXNpIiwicGRmNDE3IiwicGRmNDE3bWFjcm8iLCJwbGVzc2V5IiwicG9zdGF1c2N1c3QyIiwicG9zdGF1c2N1c3QzIiwicG9zdGF1c3JlcGx5cGFpZCIsInBvc3RhdXNzdGFuZGFyZCIsInBvc3R1a3JtNHNjYyIsInBvc3R1c2RwYmMiLCJwb3N0dXNpbWIiLCJwb3N0dXNzdGFuZGFyZCIsInBvc3R1czV6aXAiLCJxcmNvZGUiLCJyZmlkIiwicnNzMTQiLCJyc3MxNGV4cGFuZGVkIiwicnNzMTRsaW1pdGVkIiwicnNzMTRzdGFja2VkIiwicnNzMTRzdGFja2Vkb21uaSIsInJzczE0dHJ1bmNhdGVkIiwidGVsZXBlbiIsInVjYzEyOCIsInVjYzEyOHJhbmRvbSIsInVjYzEyOHNzY2MiLCJ1cGNhIiwidXBjYWFkZDIiLCJ1cGNhYWRkNSIsInVwY2Fwd2NkIiwidXBjZSIsInVwY2VhZGQyIiwidXBjZWFkZDUiLCJ1cGNlYW4yIiwidXBjZWFuNSIsInVwc21heGljb2RlIl0pO3RoaXMudXBzTW9kZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS51cHNNb2RlLFsidXNDYXJyaWVyIiwiaW50ZXJuYXRpb25hbENhcnJpZXIiLCJzZWN1cmVTeW1ib2wiLCJzdGFuZGFyZFN5bWJvbCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53aWRlTmFycm93UmF0aW89KDAsby5nZXRSYXRpbykoZS53aWRlTmFycm93UmF0aW8pO3RoaXMuZW5jcnlwdD1udWxsO3RoaXMuZXh0cmFzPW51bGx9fWNsYXNzIEJpbmQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJiaW5kIiwhMCk7dGhpcy5tYXRjaD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5tYXRjaCxbIm9uY2UiLCJkYXRhUmVmIiwiZ2xvYmFsIiwibm9uZSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIEJpbmRJdGVtcyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJpbmRJdGVtcyIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiI7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiJ9fXQuQmluZEl0ZW1zPUJpbmRJdGVtcztjbGFzcyBCb29rZW5kIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYm9va2VuZCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQm9vbGVhbkVsZW1lbnQgZXh0ZW5kcyByLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJvb2xlYW4iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwoMT09PXRoaXNbci4kY29udGVudF0/IjEiOiIwIil9fWNsYXNzIEJvcmRlciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImJvcmRlciIsITApO3RoaXMuYnJlYWs9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYnJlYWssWyJjbG9zZSIsIm9wZW4iXSk7dGhpcy5oYW5kPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wcmVzZW5jZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvcm5lcj1uZXcgci5YRkFPYmplY3RBcnJheSg0KTt0aGlzLmVkZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZpbGw9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiRnZXRFeHRyYV0oKXtpZighdGhpc1tyLiRleHRyYV0pe2NvbnN0IGU9dGhpcy5lZGdlLmNoaWxkcmVuLnNsaWNlKCk7aWYoZS5sZW5ndGg8NCl7Y29uc3QgdD1lLmF0KC0xKXx8bmV3IEVkZ2Uoe30pO2ZvcihsZXQgYT1lLmxlbmd0aDthPDQ7YSsrKWUucHVzaCh0KX1jb25zdCB0PWUubWFwKChlPT5lLnRoaWNrbmVzcykpLGE9WzAsMCwwLDBdO2lmKHRoaXMubWFyZ2luKXthWzBdPXRoaXMubWFyZ2luLnRvcEluc2V0O2FbMV09dGhpcy5tYXJnaW4ucmlnaHRJbnNldDthWzJdPXRoaXMubWFyZ2luLmJvdHRvbUluc2V0O2FbM109dGhpcy5tYXJnaW4ubGVmdEluc2V0fXRoaXNbci4kZXh0cmFdPXt3aWR0aHM6dCxpbnNldHM6YSxlZGdlczplfX1yZXR1cm4gdGhpc1tyLiRleHRyYV19W3IuJHRvU3R5bGVdKCl7Y29uc3R7ZWRnZXM6ZX09dGhpc1tyLiRnZXRFeHRyYV0oKSx0PWUubWFwKChlPT57Y29uc3QgdD1lW3IuJHRvU3R5bGVdKCk7dC5jb2xvcj10LmNvbG9yfHwiIzAwMDAwMCI7cmV0dXJuIHR9KSksYT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMubWFyZ2luJiZPYmplY3QuYXNzaWduKGEsdGhpcy5tYXJnaW5bci4kdG9TdHlsZV0oKSk7dGhpcy5maWxsJiYidmlzaWJsZSI9PT10aGlzLmZpbGwucHJlc2VuY2UmJk9iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbci4kdG9TdHlsZV0oKSk7aWYodGhpcy5jb3JuZXIuY2hpbGRyZW4uc29tZSgoZT0+MCE9PWUucmFkaXVzKSkpe2NvbnN0IGU9dGhpcy5jb3JuZXIuY2hpbGRyZW4ubWFwKChlPT5lW3IuJHRvU3R5bGVdKCkpKTtpZigyPT09ZS5sZW5ndGh8fDM9PT1lLmxlbmd0aCl7Y29uc3QgdD1lLmF0KC0xKTtmb3IobGV0IGE9ZS5sZW5ndGg7YTw0O2ErKyllLnB1c2godCl9YS5ib3JkZXJSYWRpdXM9ZS5tYXAoKGU9PmUucmFkaXVzKSkuam9pbigiICIpfXN3aXRjaCh0aGlzLnByZXNlbmNlKXtjYXNlImludmlzaWJsZSI6Y2FzZSJoaWRkZW4iOmEuYm9yZGVyU3R5bGU9IiI7YnJlYWs7Y2FzZSJpbmFjdGl2ZSI6YS5ib3JkZXJTdHlsZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDphLmJvcmRlclN0eWxlPXQubWFwKChlPT5lLnN0eWxlKSkuam9pbigiICIpfWEuYm9yZGVyV2lkdGg9dC5tYXAoKGU9PmUud2lkdGgpKS5qb2luKCIgIik7YS5ib3JkZXJDb2xvcj10Lm1hcCgoZT0+ZS5jb2xvcikpLmpvaW4oIiAiKTtyZXR1cm4gYX19Y2xhc3MgQnJlYWsgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJicmVhayIsITApO3RoaXMuYWZ0ZXI9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYWZ0ZXIsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKTt0aGlzLmFmdGVyVGFyZ2V0PWUuYWZ0ZXJUYXJnZXR8fCIiO3RoaXMuYmVmb3JlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmJlZm9yZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIiwicGFnZUV2ZW4iLCJwYWdlT2RkIl0pO3RoaXMuYmVmb3JlVGFyZ2V0PWUuYmVmb3JlVGFyZ2V0fHwiIjt0aGlzLmJvb2tlbmRMZWFkZXI9ZS5ib29rZW5kTGVhZGVyfHwiIjt0aGlzLmJvb2tlbmRUcmFpbGVyPWUuYm9va2VuZFRyYWlsZXJ8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vdmVyZmxvd0xlYWRlcj1lLm92ZXJmbG93TGVhZGVyfHwiIjt0aGlzLm92ZXJmbG93VGFyZ2V0PWUub3ZlcmZsb3dUYXJnZXR8fCIiO3RoaXMub3ZlcmZsb3dUcmFpbGVyPWUub3ZlcmZsb3dUcmFpbGVyfHwiIjt0aGlzLnN0YXJ0TmV3PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBCcmVha0FmdGVyIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYnJlYWtBZnRlciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMuc3RhcnROZXc9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudGFyZ2V0VHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50YXJnZXRUeXBlLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXSk7dGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc2NyaXB0PW51bGx9fWNsYXNzIEJyZWFrQmVmb3JlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYnJlYWtCZWZvcmUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZGVyPWUubGVhZGVyfHwiIjt0aGlzLnN0YXJ0TmV3PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRhcmdldFR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudGFyZ2V0VHlwZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl0pO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnNjcmlwdD1udWxsfVtyLiR0b0hUTUxdKGUpe3RoaXNbci4kZXh0cmFdPXt9O3JldHVybiBvLkhUTUxSZXN1bHQuRkFJTFVSRX19Y2xhc3MgQnV0dG9uIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiYnV0dG9uIiwhMCk7dGhpcy5oaWdobGlnaHQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaGlnaGxpZ2h0LFsiaW52ZXJ0ZWQiLCJub25lIiwib3V0bGluZSIsInB1c2giXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxhPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbci4kdWlkXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGUgb2YgdC5ldmVudC5jaGlsZHJlbil7aWYoImNsaWNrIiE9PWUuYWN0aXZpdHl8fCFlLnNjcmlwdCljb250aW51ZTtjb25zdCB0PSgwLGgucmVjb3ZlckpzVVJMKShlLnNjcmlwdFtyLiRjb250ZW50XSk7aWYoIXQpY29udGludWU7Y29uc3Qgbj0oMCxzLmZpeFVSTCkodC51cmwpO24mJmEuY2hpbGRyZW4ucHVzaCh7bmFtZToiYSIsYXR0cmlidXRlczp7aWQ6ImxpbmsiK3RoaXNbci4kdWlkXSxocmVmOm4sbmV3V2luZG93OnQubmV3V2luZG93LGNsYXNzOlsieGZhTGluayJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0pfXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2VzcyhhKX19Y2xhc3MgQ2FsY3VsYXRlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY2FsY3VsYXRlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm92ZXJyaWRlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm92ZXJyaWRlLFsiZGlzYWJsZWQiLCJlcnJvciIsImlnbm9yZSIsIndhcm5pbmciXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZXNzYWdlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgQ2FwdGlvbiBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNhcHRpb24iLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGxhY2VtZW50PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnBsYWNlbWVudCxbImxlZnQiLCJib3R0b20iLCJpbmxpbmUiLCJyaWdodCIsInRvcCJdKTt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVzZXJ2ZT1NYXRoLmNlaWwoKDAsby5nZXRNZWFzdXJlbWVudCkoZS5yZXNlcnZlKSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnZhbHVlPW51bGx9W3IuJHNldFZhbHVlXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bci4kZ2V0RXh0cmFdKGUpe2lmKCF0aGlzW3IuJGV4dHJhXSl7bGV0e3dpZHRoOnQsaGVpZ2h0OmF9PWU7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0PXRoaXMucmVzZXJ2ZTw9MD90OnRoaXMucmVzZXJ2ZTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmE9dGhpcy5yZXNlcnZlPD0wP2E6dGhpcy5yZXNlcnZlfXRoaXNbci4kZXh0cmFdPSgwLHMubGF5b3V0Tm9kZSkodGhpcyx7d2lkdGg6dCxoZWlnaHQ6YX0pfXJldHVybiB0aGlzW3IuJGV4dHJhXX1bci4kdG9IVE1MXShlKXtpZighdGhpcy52YWx1ZSlyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZO3RoaXNbci4kcHVzaFBhcmFdKCk7Y29uc3QgdD10aGlzLnZhbHVlW3IuJHRvSFRNTF0oZSkuaHRtbDtpZighdCl7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBvLkhUTUxSZXN1bHQuRU1QVFl9Y29uc3QgYT10aGlzLnJlc2VydmU7aWYodGhpcy5yZXNlcnZlPD0wKXtjb25zdHt3OnQsaDphfT10aGlzW3IuJGdldEV4dHJhXShlKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnRoaXMucmVzZXJ2ZT10O2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPWF9fWNvbnN0IG49W107InN0cmluZyI9PXR5cGVvZiB0P24ucHVzaCh7bmFtZToiI3RleHQiLHZhbHVlOnR9KTpuLnB1c2godCk7Y29uc3QgaT0oMCxzLnRvU3R5bGUpKHRoaXMsImZvbnQiLCJtYXJnaW4iLCJ2aXNpYmlsaXR5Iik7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOnRoaXMucmVzZXJ2ZT4wJiYoaS53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yZXNlcnZlKSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjp0aGlzLnJlc2VydmU+MCYmKGkuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJlc2VydmUpKX0oMCxzLnNldFBhcmEpKHRoaXMsbnVsbCx0KTt0aGlzW3IuJHBvcFBhcmFdKCk7dGhpcy5yZXNlcnZlPWE7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOmksY2xhc3M6WyJ4ZmFDYXB0aW9uIl19LGNoaWxkcmVuOm59KX19Y2xhc3MgQ2VydGlmaWNhdGUgZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjZXJ0aWZpY2F0ZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBDZXJ0aWZpY2F0ZXMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjZXJ0aWZpY2F0ZXMiLCEwKTt0aGlzLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVybD1lLnVybHx8IiI7dGhpcy51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmVuY3J5cHRpb249bnVsbDt0aGlzLmlzc3VlcnM9bnVsbDt0aGlzLmtleVVzYWdlPW51bGw7dGhpcy5vaWRzPW51bGw7dGhpcy5zaWduaW5nPW51bGw7dGhpcy5zdWJqZWN0RE5zPW51bGx9fWNsYXNzIENoZWNrQnV0dG9uIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY2hlY2tCdXR0b24iLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWFyaz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5tYXJrLFsiZGVmYXVsdCIsImNoZWNrIiwiY2lyY2xlIiwiY3Jvc3MiLCJkaWFtb25kIiwic3F1YXJlIiwic3RhciJdKTt0aGlzLnNoYXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNoYXBlLFsic3F1YXJlIiwicm91bmQiXSk7dGhpcy5zaXplPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuc2l6ZSwiMTBwdCIpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkoIm1hcmdpbiIpLGE9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc2l6ZSk7dC53aWR0aD10LmhlaWdodD1hO2xldCBuLGksYztjb25zdCBsPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxoPWwuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiZsLml0ZW1zLmNoaWxkcmVuWzBdW3IuJHRvSFRNTF0oKS5odG1sfHxbXSx1PXtvbjoodm9pZCAwIT09aFswXT9oWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1oWzFdP2hbMV06Im9mZiIpLnRvU3RyaW5nKCl9LGQ9KGwudmFsdWUmJmwudmFsdWVbci4kdGV4dF0oKXx8Im9mZiIpPT09dS5vbnx8dm9pZCAwLGY9bFtyLiRnZXRTdWJmb3JtUGFyZW50XSgpLGc9bFtyLiR1aWRdO2xldCBwO2lmKGYgaW5zdGFuY2VvZiBFeGNsR3JvdXApe2M9ZltyLiR1aWRdO249InJhZGlvIjtpPSJ4ZmFSYWRpbyI7cD1mW3IuJGRhdGFdJiZmW3IuJGRhdGFdW3IuJHVpZF18fGZbci4kdWlkXX1lbHNle249ImNoZWNrYm94IjtpPSJ4ZmFDaGVja2JveCI7cD1sW3IuJGRhdGFdJiZsW3IuJGRhdGFdW3IuJHVpZF18fGxbci4kdWlkXX1jb25zdCBtPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7Y2xhc3M6W2ldLHN0eWxlOnQsZmllbGRJZDpnLGRhdGFJZDpwLHR5cGU6bixjaGVja2VkOmQseGZhT246dS5vbix4ZmFPZmY6dS5vZmYsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChsKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTtjJiYobS5hdHRyaWJ1dGVzLm5hbWU9Yyk7aWYoaXNSZXF1aXJlZChsKSl7bS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7bS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W21dfSl9fWNsYXNzIENob2ljZUxpc3QgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjaG9pY2VMaXN0IiwhMCk7dGhpcy5jb21taXRPbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5jb21taXRPbixbInNlbGVjdCIsImV4aXQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm9wZW49KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3BlbixbInVzZXJDb250cm9sIiwiYWx3YXlzIiwibXVsdGlTZWxlY3QiLCJvbkVudHJ5Il0pO3RoaXMudGV4dEVudHJ5PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS50ZXh0RW50cnksZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLGE9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLG49e2ZvbnRTaXplOmBjYWxjKCR7YS5mb250JiZhLmZvbnQuc2l6ZXx8MTB9cHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWB9LGk9W107aWYoYS5pdGVtcy5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgZT1hLml0ZW1zO2xldCB0PTAscz0wO2lmKDI9PT1lLmNoaWxkcmVuLmxlbmd0aCl7dD1lLmNoaWxkcmVuWzBdLnNhdmU7cz0xLXR9Y29uc3Qgbz1lLmNoaWxkcmVuW3RdW3IuJHRvSFRNTF0oKS5odG1sLGM9ZS5jaGlsZHJlbltzXVtyLiR0b0hUTUxdKCkuaHRtbDtsZXQgbD0hMTtjb25zdCBoPWEudmFsdWUmJmEudmFsdWVbci4kdGV4dF0oKXx8IiI7Zm9yKGxldCBlPTAsdD1vLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PXtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e3ZhbHVlOmNbZV18fG9bZV0sc3R5bGU6bn0sdmFsdWU6b1tlXX07Y1tlXT09PWgmJih0LmF0dHJpYnV0ZXMuc2VsZWN0ZWQ9bD0hMCk7aS5wdXNoKHQpfWx8fGkuc3BsaWNlKDAsMCx7bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOntoaWRkZW46ITAsc2VsZWN0ZWQ6ITB9LHZhbHVlOiIgIn0pfWNvbnN0IGM9e2NsYXNzOlsieGZhU2VsZWN0Il0sZmllbGRJZDphW3IuJHVpZF0sZGF0YUlkOmFbci4kZGF0YV0mJmFbci4kZGF0YV1bci4kdWlkXXx8YVtyLiR1aWRdLHN0eWxlOnQsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChhKSwiYXJpYS1yZXF1aXJlZCI6ITF9O2lmKGlzUmVxdWlyZWQoYSkpe2NbImFyaWEtcmVxdWlyZWQiXT0hMDtjLnJlcXVpcmVkPSEwfSJtdWx0aVNlbGVjdCI9PT10aGlzLm9wZW4mJihjLm11bHRpcGxlPSEwKTtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt7bmFtZToic2VsZWN0IixjaGlsZHJlbjppLGF0dHJpYnV0ZXM6Y31dfSl9fWNsYXNzIENvbG9yIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiY29sb3IiLCEwKTt0aGlzLmNTcGFjZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5jU3BhY2UsWyJTUkdCIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudmFsdWU9ZS52YWx1ZT8oMCxvLmdldENvbG9yKShlLnZhbHVlKToiIjt0aGlzLmV4dHJhcz1udWxsfVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpe3JldHVybiExfVtyLiR0b1N0eWxlXSgpe3JldHVybiB0aGlzLnZhbHVlP2MuVXRpbC5tYWtlSGV4Q29sb3IodGhpcy52YWx1ZS5yLHRoaXMudmFsdWUuZyx0aGlzLnZhbHVlLmIpOm51bGx9fWNsYXNzIENvbWIgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJjb21iIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm51bWJlck9mQ2VsbHM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm51bWJlck9mQ2VsbHMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQ29ubmVjdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNvbm5lY3QiLCEwKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzYWdlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnVzYWdlLFsiZXhwb3J0QW5kSW1wb3J0IiwiZXhwb3J0T25seSIsImltcG9ydE9ubHkiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBDb250ZW50QXJlYSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNvbnRlbnRBcmVhIiwhMCk7dGhpcy5oPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuaCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS53KTt0aGlzLng9KDAsby5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsby5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9e2xlZnQ6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueCksdG9wOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnkpLHdpZHRoOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLncpLGhlaWdodDooMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5oKX0sYT1bInhmYUNvbnRlbnRhcmVhIl07KDAscy5pc1ByaW50T25seSkodGhpcykmJmEucHVzaCgieGZhUHJpbnRPbmx5Iik7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e3N0eWxlOnQsY2xhc3M6YSxpZDp0aGlzW3IuJHVpZF19fSl9fWNsYXNzIENvcm5lciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImNvcm5lciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbnZlcnRlZD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmpvaW49KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuam9pbixbInNxdWFyZSIsInJvdW5kIl0pO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yYWRpdXM9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5yYWRpdXMpO3RoaXMuc3Ryb2tlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnN0cm9rZSxbInNvbGlkIiwiZGFzaERvdCIsImRhc2hEb3REb3QiLCJkYXNoZWQiLCJkb3R0ZWQiLCJlbWJvc3NlZCIsImV0Y2hlZCIsImxvd2VyZWQiLCJyYWlzZWQiXSk7dGhpcy50aGlja25lc3M9KDAsby5nZXRNZWFzdXJlbWVudCkoZS50aGlja25lc3MsIjAuNXB0Iik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXSgpe2NvbnN0IGU9KDAscy50b1N0eWxlKSh0aGlzLCJ2aXNpYmlsaXR5Iik7ZS5yYWRpdXM9KDAscy5tZWFzdXJlVG9TdHJpbmcpKCJzcXVhcmUiPT09dGhpcy5qb2luPzA6dGhpcy5yYWRpdXMpO3JldHVybiBlfX1jbGFzcyBEYXRlRWxlbWVudCBleHRlbmRzIHIuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJkYXRlIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tyLiRjb250ZW50XS50cmltKCk7dGhpc1tyLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGF0ZVRpbWUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW3IuJGNvbnRlbnRdLnRyaW0oKTt0aGlzW3IuJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBEYXRlVGltZUVkaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJkYXRlVGltZUVkaXQiLCEwKTt0aGlzLmhTY3JvbGxQb2xpY3k9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGlja2VyPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnBpY2tlcixbImhvc3QiLCJub25lIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY29tYj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGE9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLG49e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOmFbci4kdWlkXSxkYXRhSWQ6YVtyLiRkYXRhXSYmYVtyLiRkYXRhXVtyLiR1aWRdfHxhW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoYSksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChhKSl7bi5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7bi5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W25dfSl9fWNsYXNzIERlY2ltYWwgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGVjaW1hbCIpO3RoaXMuZnJhY0RpZ2l0cz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuZnJhY0RpZ2l0cyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTplPT4hMH0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkRGlnaXRzPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZWFkRGlnaXRzLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT4hMH0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT1wYXJzZUZsb2F0KHRoaXNbci4kY29udGVudF0udHJpbSgpKTt0aGlzW3IuJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGVmYXVsdFVpIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGVmYXVsdFVpIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgRGVzYyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImRlc2MiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgRGlnZXN0TWV0aG9kIGV4dGVuZHMgci5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZGlnZXN0TWV0aG9kIixbIiIsIlNIQTEiLCJTSEEyNTYiLCJTSEE1MTIiLCJSSVBFTUQxNjAiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIERpZ2VzdE1ldGhvZHMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJkaWdlc3RNZXRob2RzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZGlnZXN0TWV0aG9kPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBEcmF3IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZHJhdyIsITApO3RoaXMuYW5jaG9yVHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmg9ZS5oPygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuaCk6IiI7dGhpcy5oQWxpZ249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1pbkg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKTt0aGlzLm1pblc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy5yb3RhdGU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJvdGF0ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lJTkwPT0wfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1lLnc/KDAsby5nZXRNZWFzdXJlbWVudCkoZS53KToiIjt0aGlzLng9KDAsby5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsby5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmFzc2lzdD1udWxsO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmtlZXA9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy51aT1udWxsO3RoaXMudmFsdWU9bnVsbDt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRzZXRWYWx1ZV0oZSl7X3NldFZhbHVlKHRoaXMsZSl9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7dGhpc1tyLiRwdXNoUGFyYV0oKTtjb25zdCB0PXRoaXMudyxhPXRoaXMuaCx7dzpuLGg6Yyxpc0Jyb2tlbjpsfT0oMCxzLmxheW91dE5vZGUpKHRoaXMsZSk7aWYobiYmIiI9PT10aGlzLncpe2lmKGwmJnRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfXRoaXMudz1ufWMmJiIiPT09dGhpcy5oJiYodGhpcy5oPWMpO3NldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSl7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBvLkhUTUxSZXN1bHQuRkFJTFVSRX11bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2NvbnN0IGg9KDAscy50b1N0eWxlKSh0aGlzLCJmb250IiwiaEFsaWduIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJyb3RhdGUiLCJhbmNob3JUeXBlIiwiYm9yZGVyIiwibWFyZ2luIik7KDAscy5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLGgpO2lmKGgubWFyZ2luKXtoLnBhZGRpbmc9aC5tYXJnaW47ZGVsZXRlIGgubWFyZ2lufWNvbnN0IHU9WyJ4ZmFEcmF3Il07dGhpcy5mb250JiZ1LnB1c2goInhmYUZvbnQiKTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmdS5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBkPXtzdHlsZTpoLGlkOnRoaXNbci4kdWlkXSxjbGFzczp1fTt0aGlzLm5hbWUmJihkLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBmPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZCxjaGlsZHJlbjpbXX07YXBwbHlBc3Npc3QodGhpcyxkKTtjb25zdCBnPSgwLHMuY29tcHV0ZUJib3gpKHRoaXMsZixlKSxwPXRoaXMudmFsdWU/dGhpcy52YWx1ZVtyLiR0b0hUTUxdKGUpLmh0bWw6bnVsbDtpZihudWxsPT09cCl7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsZiksZyl9Zi5jaGlsZHJlbi5wdXNoKHApOygwLHMuc2V0UGFyYSkodGhpcyxoLHApO3RoaXMudz10O3RoaXMuaD1hO3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLGYpLGcpfX1jbGFzcyBFZGdlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZWRnZSIsITApO3RoaXMuY2FwPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmNhcCxbInNxdWFyZSIsImJ1dHQiLCJyb3VuZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5zdHJva2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKTt0aGlzLnRoaWNrbmVzcz0oMCxvLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtPYmplY3QuYXNzaWduKGUse2xpbmVjYXA6dGhpcy5jYXAsd2lkdGg6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGhpY2tuZXNzKSxjb2xvcjp0aGlzLmNvbG9yP3RoaXMuY29sb3Jbci4kdG9TdHlsZV0oKToiIzAwMDAwMCIsc3R5bGU6IiJ9KTtpZigidmlzaWJsZSIhPT10aGlzLnByZXNlbmNlKWUuc3R5bGU9Im5vbmUiO2Vsc2Ugc3dpdGNoKHRoaXMuc3Ryb2tlKXtjYXNlInNvbGlkIjplLnN0eWxlPSJzb2xpZCI7YnJlYWs7Y2FzZSJkYXNoRG90IjpjYXNlImRhc2hEb3REb3QiOmNhc2UiZGFzaGVkIjplLnN0eWxlPSJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjplLnN0eWxlPSJkb3R0ZWQiO2JyZWFrO2Nhc2UiZW1ib3NzZWQiOmUuc3R5bGU9InJpZGdlIjticmVhaztjYXNlImV0Y2hlZCI6ZS5zdHlsZT0iZ3Jvb3ZlIjticmVhaztjYXNlImxvd2VyZWQiOmUuc3R5bGU9Imluc2V0IjticmVhaztjYXNlInJhaXNlZCI6ZS5zdHlsZT0ib3V0c2V0In1yZXR1cm4gZX19Y2xhc3MgRW5jb2RpbmcgZXh0ZW5kcyByLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNvZGluZyIsWyJhZGJlLng1MDkucnNhX3NoYTEiLCJhZGJlLnBrY3M3LmRldGFjaGVkIiwiYWRiZS5wa2NzNy5zaGExIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFbmNvZGluZ3MgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNvZGluZ3MiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNvZGluZz1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgRW5jcnlwdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImVuY3J5cHQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW51bGx9fWNsYXNzIEVuY3J5cHREYXRhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZW5jcnlwdERhdGEiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3BlcmF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm9wZXJhdGlvbixbImVuY3J5cHQiLCJkZWNyeXB0Il0pO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLm1hbmlmZXN0PW51bGx9fWNsYXNzIEVuY3J5cHRpb24gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNyeXB0aW9uIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEVuY3J5cHRpb25NZXRob2QgZXh0ZW5kcyByLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJlbmNyeXB0aW9uTWV0aG9kIixbIiIsIkFFUzI1Ni1DQkMiLCJUUklQTEVERVMtQ0JDIiwiQUVTMTI4LUNCQyIsIkFFUzE5Mi1DQkMiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEVuY3J5cHRpb25NZXRob2RzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZW5jcnlwdGlvbk1ldGhvZHMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNyeXB0aW9uTWV0aG9kPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFdmVudCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImV2ZW50IiwhMCk7dGhpcy5hY3Rpdml0eT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY3Rpdml0eSxbImNsaWNrIiwiY2hhbmdlIiwiZG9jQ2xvc2UiLCJkb2NSZWFkeSIsImVudGVyIiwiZXhpdCIsImZ1bGwiLCJpbmRleENoYW5nZSIsImluaXRpYWxpemUiLCJtb3VzZURvd24iLCJtb3VzZUVudGVyIiwibW91c2VFeGl0IiwibW91c2VVcCIsInBvc3RFeGVjdXRlIiwicG9zdE9wZW4iLCJwb3N0UHJpbnQiLCJwb3N0U2F2ZSIsInBvc3RTaWduIiwicG9zdFN1Ym1pdCIsInByZUV4ZWN1dGUiLCJwcmVPcGVuIiwicHJlUHJpbnQiLCJwcmVTYXZlIiwicHJlU2lnbiIsInByZVN1Ym1pdCIsInJlYWR5IiwidmFsaWRhdGlvblN0YXRlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5saXN0ZW49KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubGlzdGVuLFsicmVmT25seSIsInJlZkFuZERlc2NlbmRlbnRzIl0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmVuY3J5cHREYXRhPW51bGw7dGhpcy5leGVjdXRlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbDt0aGlzLnNpZ25EYXRhPW51bGw7dGhpcy5zdWJtaXQ9bnVsbH19Y2xhc3MgRXhEYXRhIGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImV4RGF0YSIpO3RoaXMuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiI7dGhpcy5ocmVmPWUuaHJlZnx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1heExlbmd0aD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWF4TGVuZ3RoLGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0tMX0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnRyYW5zZmVyRW5jb2Rpbmc9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHJhbnNmZXJFbmNvZGluZyxbIm5vbmUiLCJiYXNlNjQiLCJwYWNrYWdlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kaXNDREFUQVhtbF0oKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGV9W3IuJG9uQ2hpbGRdKGUpe2lmKCJ0ZXh0L2h0bWwiPT09dGhpcy5jb250ZW50VHlwZSYmZVtyLiRuYW1lc3BhY2VJZF09PT1uLk5hbWVzcGFjZUlkcy54aHRtbC5pZCl7dGhpc1tyLiRjb250ZW50XT1lO3JldHVybiEwfWlmKCJ0ZXh0L3htbCI9PT10aGlzLmNvbnRlbnRUeXBlKXt0aGlzW3IuJGNvbnRlbnRdPWU7cmV0dXJuITB9cmV0dXJuITF9W3IuJHRvSFRNTF0oZSl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlJiZ0aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF1bci4kdG9IVE1MXShlKTpvLkhUTUxSZXN1bHQuRU1QVFl9fWNsYXNzIEV4T2JqZWN0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZXhPYmplY3QiLCEwKTt0aGlzLmFyY2hpdmU9ZS5hcmNoaXZlfHwiIjt0aGlzLmNsYXNzSWQ9ZS5jbGFzc0lkfHwiIjt0aGlzLmNvZGVCYXNlPWUuY29kZUJhc2V8fCIiO3RoaXMuY29kZVR5cGU9ZS5jb2RlVHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhPYmplY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFeGNsR3JvdXAgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJleGNsR3JvdXAiLCEwKTt0aGlzLmFjY2Vzcz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiI7dGhpcy5hbmNob3JUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSk7dGhpcy5jb2xTcGFuPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuaD1lLmg/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5oKToiIjt0aGlzLmhBbGlnbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sYXlvdXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKTt0aGlzLm1heEg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1pbkg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKTt0aGlzLm1pblc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1lLnc/KDAsby5nZXRNZWFzdXJlbWVudCkoZS53KToiIjt0aGlzLng9KDAsby5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsby5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmFzc2lzdD1udWxsO3RoaXMuYmluZD1udWxsO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jYWxjdWxhdGU9bnVsbDt0aGlzLmNhcHRpb249bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy5jb25uZWN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpe3JldHVybiEwfVtyLiRzZXRWYWx1ZV0oZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5maWVsZC5jaGlsZHJlbil7aWYoIXQudmFsdWUpe2NvbnN0IGU9bmV3IFZhbHVlKHt9KTt0W3IuJGFwcGVuZENoaWxkXShlKTt0LnZhbHVlPWV9dC52YWx1ZVtyLiRzZXRWYWx1ZV0oZSl9fVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kaXNUaGVyZU1vcmVXaWR0aF0oKX1bci4kaXNTcGxpdHRhYmxlXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKCFlW3IuJGlzU3BsaXR0YWJsZV0oKSlyZXR1cm4hMTtpZih2b2lkIDAhPT10aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlKXJldHVybiB0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlO2lmKCJwb3NpdGlvbiI9PT10aGlzLmxheW91dHx8dGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlPSExO3JldHVybiExfWlmKGUubGF5b3V0JiZlLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjAhPT1lW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUpcmV0dXJuITE7dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMDtyZXR1cm4hMH1bci4kZmx1c2hIVE1MXSgpe3JldHVybigwLGkuZmx1c2hIVE1MKSh0aGlzKX1bci4kYWRkSFRNTF0oZSx0KXsoMCxpLmFkZEhUTUwpKHRoaXMsZSx0KX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuKDAsaS5nZXRBdmFpbGFibGVTcGFjZSkodGhpcyl9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZXx8MD09PXRoaXMuaHx8MD09PXRoaXMudylyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7Y29uc3QgdD1bXSxhPXtpZDp0aGlzW3IuJHVpZF0sY2xhc3M6W119OygwLHMuc2V0QWNjZXNzKSh0aGlzLGEuY2xhc3MpO3RoaXNbci4kZXh0cmFdfHwodGhpc1tyLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSk7T2JqZWN0LmFzc2lnbih0aGlzW3IuJGV4dHJhXSx7Y2hpbGRyZW46dCxhdHRyaWJ1dGVzOmEsYXR0ZW1wdDowLGxpbmU6bnVsbCxudW1iZXJJbkxpbmU6MCxhdmFpbGFibGVTcGFjZTp7d2lkdGg6TWF0aC5taW4odGhpcy53fHwxLzAsZS53aWR0aCksaGVpZ2h0Ok1hdGgubWluKHRoaXMuaHx8MS8wLGUuaGVpZ2h0KX0sd2lkdGg6MCxoZWlnaHQ6MCxwcmV2SGVpZ2h0OjAsY3VycmVudFdpZHRoOjB9KTtjb25zdCBuPXRoaXNbci4kaXNTcGxpdHRhYmxlXSgpO258fHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gby5IVE1MUmVzdWx0LkZBSUxVUkU7Y29uc3QgYz1uZXcgU2V0KFsiZmllbGQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXtjb25zdCBlPXRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKS5jb2x1bW5XaWR0aHM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7dGhpc1tyLiRleHRyYV0uY29sdW1uV2lkdGhzPWU7dGhpc1tyLiRleHRyYV0uY3VycmVudENvbHVtbj0wfX1jb25zdCBsPSgwLHMudG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksaD1bInhmYUV4Y2xncm91cCJdLHU9KDAscy5sYXlvdXRDbGFzcykodGhpcyk7dSYmaC5wdXNoKHUpOygwLHMuaXNQcmludE9ubHkpKHRoaXMpJiZoLnB1c2goInhmYVByaW50T25seSIpO2Euc3R5bGU9bDthLmNsYXNzPWg7dGhpcy5uYW1lJiYoYS54ZmFOYW1lPXRoaXMubmFtZSk7dGhpc1tyLiRwdXNoUGFyYV0oKTtjb25zdCBkPSJsci10YiI9PT10aGlzLmxheW91dHx8InJsLXRiIj09PXRoaXMubGF5b3V0LGY9ZD8yOjE7Zm9yKDt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PGY7dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCsrKXtkJiYxPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZT0wKTtjb25zdCBlPXRoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6YyxpbmNsdWRlOiEwfSk7aWYoZS5zdWNjZXNzKWJyZWFrO2lmKGUuaXNCcmVhaygpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIGV9aWYoZCYmMD09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUmJiF0aGlzW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PWY7YnJlYWt9fXRoaXNbci4kcG9wUGFyYV0oKTtufHx1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKHRoaXNbci4kZXh0cmFdLmF0dGVtcHQ9PT1mKXtufHxkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfWxldCBnPTAscD0wO2lmKHRoaXMubWFyZ2luKXtnPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O3A9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9Y29uc3QgbT1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS53aWR0aCtnLHRoaXMud3x8MCksYj1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS5oZWlnaHQrcCx0aGlzLmh8fDApLHk9W3RoaXMueCx0aGlzLnksbSxiXTsiIj09PXRoaXMudyYmKGwud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKG0pKTsiIj09PXRoaXMuaCYmKGwuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKShiKSk7Y29uc3Qgdz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmEsY2hpbGRyZW46dH07YXBwbHlBc3Npc3QodGhpcyxhKTtkZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyx3KSx5KX19Y2xhc3MgRXhlY3V0ZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImV4ZWN1dGUiKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmV4ZWN1dGVUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmV4ZWN1dGVUeXBlLFsiaW1wb3J0IiwicmVtZXJnZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucnVuQXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucnVuQXQsWyJjbGllbnQiLCJib3RoIiwic2VydmVyIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRXh0cmFzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZXh0cmFzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29sZWFuPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4dHJhcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEZpZWxkIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZmllbGQiLCEwKTt0aGlzLmFjY2Vzcz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiI7dGhpcy5hbmNob3JUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSk7dGhpcy5jb2xTcGFuPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuaD1lLmg/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5oKToiIjt0aGlzLmhBbGlnbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sb2NhbGU9ZS5sb2NhbGV8fCIiO3RoaXMubWF4SD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1heEgsIjBwdCIpO3RoaXMubWF4Vz0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1heFcsIjBwdCIpO3RoaXMubWluSD0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpO3RoaXMubWluVz0oMCxvLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWxldmFudD0oMCxvLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnJvdGF0ZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucm90YXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmUlOTA9PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53PWUudz8oMCxvLmdldE1lYXN1cmVtZW50KShlLncpOiIiO3RoaXMueD0oMCxvLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxvLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuYXNzaXN0PW51bGw7dGhpcy5iaW5kPW51bGw7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNhbGN1bGF0ZT1udWxsO3RoaXMuY2FwdGlvbj1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5mb3JtYXQ9bnVsbDt0aGlzLml0ZW1zPW5ldyByLlhGQU9iamVjdEFycmF5KDIpO3RoaXMua2VlcD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnVpPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFsdWU9bnVsbDt0aGlzLmJpbmRJdGVtcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRzZXRWYWx1ZV0oZSl7X3NldFZhbHVlKHRoaXMsZSl9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYoIXRoaXMudWkpe3RoaXMudWk9bmV3IFVpKHt9KTt0aGlzLnVpW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0odGhpcy51aSk7bGV0IGU7c3dpdGNoKHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6ZT1uZXcgVGV4dEVkaXQoe30pO3RoaXMudWkudGV4dEVkaXQ9ZTticmVhaztjYXNlIDE6ZT1uZXcgQ2hlY2tCdXR0b24oe30pO3RoaXMudWkuY2hlY2tCdXR0b249ZTticmVhaztjYXNlIDI6ZT1uZXcgQ2hvaWNlTGlzdCh7fSk7dGhpcy51aS5jaG9pY2VMaXN0PWV9dGhpcy51aVtyLiRhcHBlbmRDaGlsZF0oZSl9aWYoIXRoaXMudWl8fCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTt0aGlzLmNhcHRpb24mJmRlbGV0ZSB0aGlzLmNhcHRpb25bci4kZXh0cmFdO3RoaXNbci4kcHVzaFBhcmFdKCk7Y29uc3QgdD10aGlzLmNhcHRpb24/dGhpcy5jYXB0aW9uW3IuJHRvSFRNTF0oZSkuaHRtbDpudWxsLGE9dGhpcy53LG49dGhpcy5oO2xldCBjPTAsaD0wO2lmKHRoaXMubWFyZ2luKXtjPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O2g9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9bGV0IHU9bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe2xldCB0PW51bGwsYT1udWxsLG49MCxpPTA7aWYodGhpcy51aS5jaGVja0J1dHRvbiluPWk9dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7Y29uc3R7dzp0LGg6YX09KDAscy5sYXlvdXROb2RlKSh0aGlzLGUpO2lmKG51bGwhPT10KXtuPXQ7aT1hfWVsc2UgaT0oMCxsLmdldE1ldHJpY3MpKHRoaXMuZm9udCwhMCkubGluZU5vR2FwfXU9Z2V0Qm9yZGVyRGltcyh0aGlzLnVpW3IuJGdldEV4dHJhXSgpKTtuKz11Lnc7aSs9dS5oO2lmKHRoaXMuY2FwdGlvbil7Y29uc3R7dzpzLGg6Yyxpc0Jyb2tlbjpsfT10aGlzLmNhcHRpb25bci4kZ2V0RXh0cmFdKGUpO2lmKGwmJnRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfXQ9czthPWM7c3dpdGNoKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnQrPW47YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjphKz1pfX1lbHNle3Q9bjthPWl9aWYodCYmIiI9PT10aGlzLncpe3QrPWM7dGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPHQ/dDp0aGlzLm1pblcpfWlmKGEmJiIiPT09dGhpcy5oKXthKz1oO3RoaXMuaD1NYXRoLm1pbih0aGlzLm1heEg8PTA/MS8wOnRoaXMubWF4SCx0aGlzLm1pbkgrMTxhP2E6dGhpcy5taW5IKX19dGhpc1tyLiRwb3BQYXJhXSgpOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7c2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7aWYoISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXt0aGlzLnc9YTt0aGlzLmg9bjt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFfXVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7Y29uc3QgZD0oMCxzLnRvU3R5bGUpKHRoaXMsImZvbnQiLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJyb3RhdGUiLCJhbmNob3JUeXBlIiwicHJlc2VuY2UiLCJtYXJnaW4iLCJoQWxpZ24iKTsoMCxzLnNldE1pbk1heERpbWVuc2lvbnMpKHRoaXMsZCk7Y29uc3QgZj1bInhmYUZpZWxkIl07dGhpcy5mb250JiZmLnB1c2goInhmYUZvbnQiKTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmZi5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBnPXtzdHlsZTpkLGlkOnRoaXNbci4kdWlkXSxjbGFzczpmfTtpZihkLm1hcmdpbil7ZC5wYWRkaW5nPWQubWFyZ2luO2RlbGV0ZSBkLm1hcmdpbn0oMCxzLnNldEFjY2VzcykodGhpcyxmKTt0aGlzLm5hbWUmJihnLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBwPVtdLG09e25hbWU6ImRpdiIsYXR0cmlidXRlczpnLGNoaWxkcmVuOnB9O2FwcGx5QXNzaXN0KHRoaXMsZyk7Y29uc3QgYj10aGlzLmJvcmRlcj90aGlzLmJvcmRlcltyLiR0b1N0eWxlXSgpOm51bGwseT0oMCxzLmNvbXB1dGVCYm94KSh0aGlzLG0sZSksdz10aGlzLnVpW3IuJHRvSFRNTF0oKS5odG1sO2lmKCF3KXtPYmplY3QuYXNzaWduKGQsYik7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxtKSx5KX10aGlzW3IuJHRhYkluZGV4XSYmKHcuY2hpbGRyZW4mJncuY2hpbGRyZW5bMF0/dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbci4kdGFiSW5kZXhdOncuYXR0cmlidXRlcy50YWJpbmRleD10aGlzW3IuJHRhYkluZGV4XSk7dy5hdHRyaWJ1dGVzLnN0eWxlfHwody5hdHRyaWJ1dGVzLnN0eWxlPU9iamVjdC5jcmVhdGUobnVsbCkpO2xldCBTPW51bGw7aWYodGhpcy51aS5idXR0b24pezE9PT13LmNoaWxkcmVuLmxlbmd0aCYmKFtTXT13LmNoaWxkcmVuLnNwbGljZSgwLDEpKTtPYmplY3QuYXNzaWduKHcuYXR0cmlidXRlcy5zdHlsZSxiKX1lbHNlIE9iamVjdC5hc3NpZ24oZCxiKTtwLnB1c2godyk7aWYodGhpcy52YWx1ZSlpZih0aGlzLnVpLmltYWdlRWRpdCl3LmNoaWxkcmVuLnB1c2godGhpcy52YWx1ZVtyLiR0b0hUTUxdKCkuaHRtbCk7ZWxzZSBpZighdGhpcy51aS5idXR0b24pe2xldCBlPSIiO2lmKHRoaXMudmFsdWUuZXhEYXRhKWU9dGhpcy52YWx1ZS5leERhdGFbci4kdGV4dF0oKTtlbHNlIGlmKHRoaXMudmFsdWUudGV4dCllPXRoaXMudmFsdWUudGV4dFtyLiRnZXRFeHRyYV0oKTtlbHNle2NvbnN0IHQ9dGhpcy52YWx1ZVtyLiR0b0hUTUxdKCkuaHRtbDtudWxsIT09dCYmKGU9dC5jaGlsZHJlblswXS52YWx1ZSl9dGhpcy51aS50ZXh0RWRpdCYmdGhpcy52YWx1ZS50ZXh0JiZ0aGlzLnZhbHVlLnRleHQubWF4Q2hhcnMmJih3LmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMubWF4TGVuZ3RoPXRoaXMudmFsdWUudGV4dC5tYXhDaGFycyk7aWYoZSl7aWYodGhpcy51aS5udW1lcmljRWRpdCl7ZT1wYXJzZUZsb2F0KGUpO2U9aXNOYU4oZSk/IiI6ZS50b1N0cmluZygpfSJ0ZXh0YXJlYSI9PT13LmNoaWxkcmVuWzBdLm5hbWU/dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRleHRDb250ZW50PWU6dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnZhbHVlPWV9fWlmKCF0aGlzLnVpLmltYWdlRWRpdCYmdy5jaGlsZHJlbiYmdy5jaGlsZHJlblswXSYmdGhpcy5oKXt1PXV8fGdldEJvcmRlckRpbXModGhpcy51aVtyLiRnZXRFeHRyYV0oKSk7bGV0IHQ9MDtpZih0aGlzLmNhcHRpb24mJlsidG9wIiwiYm90dG9tIl0uaW5jbHVkZXModGhpcy5jYXB0aW9uLnBsYWNlbWVudCkpe3Q9dGhpcy5jYXB0aW9uLnJlc2VydmU7dDw9MCYmKHQ9dGhpcy5jYXB0aW9uW3IuJGdldEV4dHJhXShlKS5oKTtjb25zdCBhPXRoaXMuaC10LWgtdS5oO3cuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKGEpfWVsc2Ugdy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0iMTAwJSJ9UyYmdy5jaGlsZHJlbi5wdXNoKFMpO2lmKCF0KXt3LmF0dHJpYnV0ZXMuY2xhc3MmJncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0Iik7dGhpcy53PWE7dGhpcy5oPW47cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxtKSx5KX1pZih0aGlzLnVpLmJ1dHRvbil7ZC5wYWRkaW5nJiZkZWxldGUgZC5wYWRkaW5nOyJkaXYiPT09dC5uYW1lJiYodC5uYW1lPSJzcGFuIik7dy5jaGlsZHJlbi5wdXNoKHQpO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2VzcyhtLHkpfXRoaXMudWkuY2hlY2tCdXR0b24mJih0LmF0dHJpYnV0ZXMuY2xhc3NbMF09InhmYUNhcHRpb25Gb3JDaGVja0J1dHRvbiIpO3cuYXR0cmlidXRlcy5jbGFzc3x8KHcuYXR0cmlidXRlcy5jbGFzcz1bXSk7dy5jaGlsZHJlbi5zcGxpY2UoMCwwLHQpO3N3aXRjaCh0aGlzLmNhcHRpb24ucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UiaW5saW5lIjp3LmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhTGVmdCIpO2JyZWFrO2Nhc2UicmlnaHQiOncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFSaWdodCIpO2JyZWFrO2Nhc2UidG9wIjp3LmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhVG9wIik7YnJlYWs7Y2FzZSJib3R0b20iOncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFCb3R0b20iKX10aGlzLnc9YTt0aGlzLmg9bjtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLG0pLHkpfX10LkZpZWxkPUZpZWxkO2NsYXNzIEZpbGwgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJmaWxsIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByZXNlbmNlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmxpbmVhcj1udWxsO3RoaXMucGF0dGVybj1udWxsO3RoaXMucmFkaWFsPW51bGw7dGhpcy5zb2xpZD1udWxsO3RoaXMuc3RpcHBsZT1udWxsfVtyLiR0b1N0eWxlXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCksdD1lW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBuPSJjb2xvciIsaT1uO2lmKGUgaW5zdGFuY2VvZiBCb3JkZXIpe249ImJhY2tncm91bmQtY29sb3IiO2k9ImJhY2tncm91bmQiO3QgaW5zdGFuY2VvZiBVaSYmKGEuYmFja2dyb3VuZENvbG9yPSJ3aGl0ZSIpfWlmKGUgaW5zdGFuY2VvZiBSZWN0YW5nbGV8fGUgaW5zdGFuY2VvZiBBcmMpe249aT0iZmlsbCI7YS5maWxsPSJ3aGl0ZSJ9Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJleHRyYXMiPT09ZXx8ImNvbG9yIj09PWUpY29udGludWU7Y29uc3QgdD10aGlzW2VdO2lmKCEodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KSljb250aW51ZTtjb25zdCBzPXRbci4kdG9TdHlsZV0odGhpcy5jb2xvcik7cyYmKGFbcy5zdGFydHNXaXRoKCIjIik/bjppXT1zKTtyZXR1cm4gYX1pZih0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLnZhbHVlKXtjb25zdCBlPXRoaXMuY29sb3Jbci4kdG9TdHlsZV0oKTthW2Uuc3RhcnRzV2l0aCgiIyIpP246aV09ZX1yZXR1cm4gYX19Y2xhc3MgRmlsdGVyIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZmlsdGVyIiwhMCk7dGhpcy5hZGRSZXZvY2F0aW9uSW5mbz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hZGRSZXZvY2F0aW9uSW5mbyxbIiIsInJlcXVpcmVkIiwib3B0aW9uYWwiLCJub25lIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudmVyc2lvbj0oMCxvLmdldEludGVnZXIpKHtkYXRhOnRoaXMudmVyc2lvbixkZWZhdWx0VmFsdWU6NSx2YWxpZGF0ZTplPT5lPj0xJiZlPD01fSk7dGhpcy5hcHBlYXJhbmNlRmlsdGVyPW51bGw7dGhpcy5jZXJ0aWZpY2F0ZXM9bnVsbDt0aGlzLmRpZ2VzdE1ldGhvZHM9bnVsbDt0aGlzLmVuY29kaW5ncz1udWxsO3RoaXMuZW5jcnlwdGlvbk1ldGhvZHM9bnVsbDt0aGlzLmhhbmRsZXI9bnVsbDt0aGlzLmxvY2tEb2N1bWVudD1udWxsO3RoaXMubWRwPW51bGw7dGhpcy5yZWFzb25zPW51bGw7dGhpcy50aW1lU3RhbXA9bnVsbH19Y2xhc3MgRmxvYXQgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiZmxvYXQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT1wYXJzZUZsb2F0KHRoaXNbci4kY29udGVudF0udHJpbSgpKTt0aGlzW3IuJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRm9udCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImZvbnQiLCEwKTt0aGlzLmJhc2VsaW5lU2hpZnQ9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5iYXNlbGluZVNoaWZ0KTt0aGlzLmZvbnRIb3Jpem9udGFsU2NhbGU9KDAsby5nZXRGbG9hdCkoe2RhdGE6ZS5mb250SG9yaXpvbnRhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZm9udFZlcnRpY2FsU2NhbGU9KDAsby5nZXRGbG9hdCkoe2RhdGE6ZS5mb250VmVydGljYWxTY2FsZSxkZWZhdWx0VmFsdWU6MTAwLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMua2VybmluZ01vZGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUua2VybmluZ01vZGUsWyJub25lIiwicGFpciJdKTt0aGlzLmxldHRlclNwYWNpbmc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5sZXR0ZXJTcGFjaW5nLCIwIik7dGhpcy5saW5lVGhyb3VnaD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubGluZVRocm91Z2gsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV8fDI9PT1lfSk7dGhpcy5saW5lVGhyb3VnaFBlcmlvZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5saW5lVGhyb3VnaFBlcmlvZCxbImFsbCIsIndvcmQiXSk7dGhpcy5vdmVybGluZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUub3ZlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV8fDI9PT1lfSk7dGhpcy5vdmVybGluZVBlcmlvZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5vdmVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSk7dGhpcy5wb3N0dXJlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnBvc3R1cmUsWyJub3JtYWwiLCJpdGFsaWMiXSk7dGhpcy5zaXplPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUuc2l6ZSwiMTBwdCIpO3RoaXMudHlwZWZhY2U9ZS50eXBlZmFjZXx8IkNvdXJpZXIiO3RoaXMudW5kZXJsaW5lPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS51bmRlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV8fDI9PT1lfSk7dGhpcy51bmRlcmxpbmVQZXJpb2Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudW5kZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53ZWlnaHQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUud2VpZ2h0LFsibm9ybWFsIiwiYm9sZCJdKTt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZmlsbD1udWxsfVtyLiRjbGVhbl0oZSl7c3VwZXJbci4kY2xlYW5dKGUpO3RoaXNbci4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcy5hZGQodGhpcy50eXBlZmFjZSl9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsImZpbGwiKSx0PWUuY29sb3I7aWYodClpZigiIzAwMDAwMCI9PT10KWRlbGV0ZSBlLmNvbG9yO2Vsc2UgaWYoIXQuc3RhcnRzV2l0aCgiIyIpKXtlLmJhY2tncm91bmQ9dDtlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IjtlLmNvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5iYXNlbGluZVNoaWZ0JiYoZS52ZXJ0aWNhbEFsaWduPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJhc2VsaW5lU2hpZnQpKTtlLmZvbnRLZXJuaW5nPSJub25lIj09PXRoaXMua2VybmluZ01vZGU/Im5vbmUiOiJub3JtYWwiO2UubGV0dGVyU3BhY2luZz0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5sZXR0ZXJTcGFjaW5nKTtpZigwIT09dGhpcy5saW5lVGhyb3VnaCl7ZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIjsyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9aWYoMCE9PXRoaXMub3ZlcmxpbmUpe2UudGV4dERlY29yYXRpb249Im92ZXJsaW5lIjsyPT09dGhpcy5vdmVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9ZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlO2UuZm9udFNpemU9KDAscy5tZWFzdXJlVG9TdHJpbmcpKC45OSp0aGlzLnNpemUpOygwLHMuc2V0Rm9udEZhbWlseSkodGhpcyx0aGlzLHRoaXNbci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixlKTtpZigwIT09dGhpcy51bmRlcmxpbmUpe2UudGV4dERlY29yYXRpb249InVuZGVybGluZSI7Mj09PXRoaXMudW5kZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKX1lLmZvbnRXZWlnaHQ9dGhpcy53ZWlnaHQ7cmV0dXJuIGV9fWNsYXNzIEZvcm1hdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImZvcm1hdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIEhhbmRsZXIgZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJoYW5kbGVyIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBIeXBoZW5hdGlvbiBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImh5cGhlbmF0aW9uIik7dGhpcy5leGNsdWRlQWxsQ2Fwcz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUFsbENhcHMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmV4Y2x1ZGVJbml0aWFsQ2FwPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlSW5pdGlhbENhcCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaHlwaGVuYXRlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5oeXBoZW5hdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHVzaENoYXJhY3RlckNvdW50PSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5wdXNoQ2hhcmFjdGVyQ291bnQsZGVmYXVsdFZhbHVlOjMsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMucmVtYWluQ2hhcmFjdGVyQ291bnQ9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJlbWFpbkNoYXJhY3RlckNvdW50LGRlZmF1bHRWYWx1ZTozLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53b3JkQ2hhcmFjdGVyQ291bnQ9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLndvcmRDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Nyx2YWxpZGF0ZTplPT5lPj0wfSl9fWNsYXNzIEltYWdlIGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiaW1hZ2UiKTt0aGlzLmFzcGVjdD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSk7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmhyZWY9ZS5ocmVmfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudHJhbnNmZXJFbmNvZGluZz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiR0b0hUTUxdKCl7aWYodGhpcy5jb250ZW50VHlwZSYmIXAuaGFzKHRoaXMuY29udGVudFR5cGUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWTtsZXQgZT10aGlzW3IuJGdsb2JhbERhdGFdLmltYWdlcyYmdGhpc1tyLiRnbG9iYWxEYXRhXS5pbWFnZXMuZ2V0KHRoaXMuaHJlZik7aWYoIWUmJih0aGlzLmhyZWZ8fCF0aGlzW3IuJGNvbnRlbnRdKSlyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZO2V8fCJiYXNlNjQiIT09dGhpcy50cmFuc2ZlckVuY29kaW5nfHwoZT0oMCxjLnN0cmluZ1RvQnl0ZXMpKGF0b2IodGhpc1tyLiRjb250ZW50XSkpKTtpZighZSlyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZO2lmKCF0aGlzLmNvbnRlbnRUeXBlKXtmb3IoY29uc3RbdCxhXW9mIG0paWYoZS5sZW5ndGg+dC5sZW5ndGgmJnQuZXZlcnkoKCh0LGEpPT50PT09ZVthXSkpKXt0aGlzLmNvbnRlbnRUeXBlPWE7YnJlYWt9aWYoIXRoaXMuY29udGVudFR5cGUpcmV0dXJuIG8uSFRNTFJlc3VsdC5FTVBUWX1jb25zdCB0PW5ldyBCbG9iKFtlXSx7dHlwZTp0aGlzLmNvbnRlbnRUeXBlfSk7bGV0IGE7c3dpdGNoKHRoaXMuYXNwZWN0KXtjYXNlImZpdCI6Y2FzZSJhY3R1YWwiOmJyZWFrO2Nhc2UiaGVpZ2h0IjphPXtoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uibm9uZSI6YT17d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb2JqZWN0Rml0OiJmaWxsIn07YnJlYWs7Y2FzZSJ3aWR0aCI6YT17d2lkdGg6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9fWNvbnN0IG49dGhpc1tyLiRnZXRQYXJlbnRdKCk7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJpbWciLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhSW1hZ2UiXSxzdHlsZTphLHNyYzpVUkwuY3JlYXRlT2JqZWN0VVJMKHQpLGFsdDpuP2FyaWFMYWJlbChuW3IuJGdldFBhcmVudF0oKSk6bnVsbH19KX19Y2xhc3MgSW1hZ2VFZGl0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiaW1hZ2VFZGl0IiwhMCk7dGhpcy5kYXRhPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGEsWyJsaW5rIiwiZW1iZWQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9vLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6by5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBJbnRlZ2VyIGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImludGVnZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT1wYXJzZUludCh0aGlzW3IuJGNvbnRlbnRdLnRyaW0oKSwxMCk7dGhpc1tyLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKG51bGwhPT10aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIElzc3VlcnMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJpc3N1ZXJzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEl0ZW1zIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwiaXRlbXMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMuc2F2ZT0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuc2F2ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgci5YRkFPYmplY3RBcnJheX1bci4kdG9IVE1MXSgpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpc1tyLiRnZXRDaGlsZHJlbl0oKSllLnB1c2godFtyLiR0ZXh0XSgpKTtyZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoZSl9fXQuSXRlbXM9SXRlbXM7Y2xhc3MgS2VlcCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImtlZXAiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO2NvbnN0IHQ9WyJub25lIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdO3RoaXMuaW50YWN0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmludGFjdCx0KTt0aGlzLm5leHQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubmV4dCx0KTt0aGlzLnByZXZpb3VzPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByZXZpb3VzLHQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBLZXlVc2FnZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsImtleVVzYWdlIik7Y29uc3QgdD1bIiIsInllcyIsIm5vIl07dGhpcy5jcmxTaWduPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmNybFNpZ24sdCk7dGhpcy5kYXRhRW5jaXBoZXJtZW50PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGFFbmNpcGhlcm1lbnQsdCk7dGhpcy5kZWNpcGhlck9ubHk9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuZGVjaXBoZXJPbmx5LHQpO3RoaXMuZGlnaXRhbFNpZ25hdHVyZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5kaWdpdGFsU2lnbmF0dXJlLHQpO3RoaXMuZW5jaXBoZXJPbmx5PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmVuY2lwaGVyT25seSx0KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMua2V5QWdyZWVtZW50PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmtleUFncmVlbWVudCx0KTt0aGlzLmtleUNlcnRTaWduPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmtleUNlcnRTaWduLHQpO3RoaXMua2V5RW5jaXBoZXJtZW50PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmtleUVuY2lwaGVybWVudCx0KTt0aGlzLm5vblJlcHVkaWF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm5vblJlcHVkaWF0aW9uLHQpO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIExpbmUgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJsaW5lIiwhMCk7dGhpcy5oYW5kPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5zbG9wZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zbG9wZSxbIlxcIiwiLyJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lZGdlPW51bGx9W3IuJHRvSFRNTF0oKXtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSx0PXRoaXMuZWRnZXx8bmV3IEVkZ2Uoe30pLGE9dFtyLiR0b1N0eWxlXSgpLG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPSJ2aXNpYmxlIj09PXQucHJlc2VuY2U/dC50aGlja25lc3M6MDtuLnN0cm9rZVdpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKShpKTtuLnN0cm9rZT1hLmNvbG9yO2xldCBjLGwsaCx1LGQ9IjEwMCUiLGc9IjEwMCUiO2lmKGUudzw9aSl7W2MsbCxoLHVdPVsiNTAlIiwwLCI1MCUiLCIxMDAlIl07ZD1uLnN0cm9rZVdpZHRofWVsc2UgaWYoZS5oPD1pKXtbYyxsLGgsdV09WzAsIjUwJSIsIjEwMCUiLCI1MCUiXTtnPW4uc3Ryb2tlV2lkdGh9ZWxzZSJcXCI9PT10aGlzLnNsb3BlP1tjLGwsaCx1XT1bMCwwLCIxMDAlIiwiMTAwJSJdOltjLGwsaCx1XT1bMCwiMTAwJSIsIjEwMCUiLDBdO2NvbnN0IHA9e25hbWU6InN2ZyIsY2hpbGRyZW46W3tuYW1lOiJsaW5lIixhdHRyaWJ1dGVzOnt4bWxuczpmLHgxOmMseTE6bCx4MjpoLHkyOnUsc3R5bGU6bn19XSxhdHRyaWJ1dGVzOnt4bWxuczpmLHdpZHRoOmQsaGVpZ2h0Omcsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn19fTtpZihoYXNNYXJnaW4oZSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W3BdfSk7cC5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHApfX1jbGFzcyBMaW5lYXIgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJsaW5lYXIiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsidG9SaWdodCIsInRvQm90dG9tIiwidG9MZWZ0IiwidG9Ub3AiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtlPWU/ZVtyLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjtyZXR1cm5gbGluZWFyLWdyYWRpZW50KCR7dGhpcy50eXBlLnJlcGxhY2UoLyhbUkJMVF0pLywiICQxIikudG9Mb3dlckNhc2UoKX0sICR7ZX0sICR7dGhpcy5jb2xvcj90aGlzLmNvbG9yW3IuJHRvU3R5bGVdKCk6IiMwMDAwMDAifSlgfX1jbGFzcyBMb2NrRG9jdW1lbnQgZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwibG9ja0RvY3VtZW50Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXt0aGlzW3IuJGNvbnRlbnRdPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKSh0aGlzW3IuJGNvbnRlbnRdLFsiYXV0byIsIjAiLCIxIl0pfX1jbGFzcyBNYW5pZmVzdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm1hbmlmZXN0IiwhMCk7dGhpcy5hY3Rpb249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYWN0aW9uLFsiaW5jbHVkZSIsImFsbCIsImV4Y2x1ZGUiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLnJlZj1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgTWFyZ2luIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwibWFyZ2luIiwhMCk7dGhpcy5ib3R0b21JbnNldD0oMCxvLmdldE1lYXN1cmVtZW50KShlLmJvdHRvbUluc2V0LCIwIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlZnRJbnNldD0oMCxvLmdldE1lYXN1cmVtZW50KShlLmxlZnRJbnNldCwiMCIpO3RoaXMucmlnaHRJbnNldD0oMCxvLmdldE1lYXN1cmVtZW50KShlLnJpZ2h0SW5zZXQsIjAiKTt0aGlzLnRvcEluc2V0PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUudG9wSW5zZXQsIjAiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oKXtyZXR1cm57bWFyZ2luOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRvcEluc2V0KSsiICIrKDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmlnaHRJbnNldCkrIiAiKygwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJvdHRvbUluc2V0KSsiICIrKDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGVmdEluc2V0KX19fWNsYXNzIE1kcCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm1kcCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wZXJtaXNzaW9ucz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUucGVybWlzc2lvbnMsZGVmYXVsdFZhbHVlOjIsdmFsaWRhdGU6ZT0+MT09PWV8fDM9PT1lfSk7dGhpcy5zaWduYXR1cmVUeXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnNpZ25hdHVyZVR5cGUsWyJmaWxsZXIiLCJhdXRob3IiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBNZWRpdW0gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJtZWRpdW0iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW1hZ2luZ0JCb3g9KDAsby5nZXRCQm94KShlLmltYWdpbmdCQm94KTt0aGlzLmxvbmc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5sb25nKTt0aGlzLm9yaWVudGF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm9yaWVudGF0aW9uLFsicG9ydHJhaXQiLCJsYW5kc2NhcGUiXSk7dGhpcy5zaG9ydD0oMCxvLmdldE1lYXN1cmVtZW50KShlLnNob3J0KTt0aGlzLnN0b2NrPWUuc3RvY2t8fCIiO3RoaXMudHJheUluPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlJbixbImF1dG8iLCJkZWxlZ2F0ZSIsInBhZ2VGcm9udCJdKTt0aGlzLnRyYXlPdXQ9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHJheU91dCxbImF1dG8iLCJkZWxlZ2F0ZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJtZXNzYWdlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy50ZXh0PW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBOdW1lcmljRWRpdCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm51bWVyaWNFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNvbWI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsImZvbnQiLCJtYXJnaW4iKSxhPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxuPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZmllbGRJZDphW3IuJHVpZF0sZGF0YUlkOmFbci4kZGF0YV0mJmFbci4kZGF0YV1bci4kdWlkXXx8YVtyLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGEpLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQoYSkpe24uYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO24uYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOltuXX0pfX1jbGFzcyBPY2N1ciBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm9jY3VyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy5tYXg9IiIhPT1lLm1heD8oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWF4LGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy5taW49IiIhPT1lLm1pbj8oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubWluLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W3IuJGNsZWFuXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHxlIGluc3RhbmNlb2YgUGFnZVNldD8wOjEpOyIiPT09dGhpcy5tYXgmJih0aGlzLm1heD0iIj09PXQ/ZSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHxlIGluc3RhbmNlb2YgUGFnZVNldD8tMToxOnRoaXMubWluKTstMSE9PXRoaXMubWF4JiZ0aGlzLm1heDx0aGlzLm1pbiYmKHRoaXMubWF4PXRoaXMubWluKTsiIj09PXRoaXMuaW5pdGlhbCYmKHRoaXMuaW5pdGlhbD1lIGluc3RhbmNlb2YgVGVtcGxhdGU/MTp0aGlzLm1pbil9fWNsYXNzIE9pZCBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsIm9pZCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBPaWRzIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwib2lkcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLm9pZD1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgT3ZlcmZsb3cgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJvdmVyZmxvdyIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGdldEV4dHJhXSgpe2lmKCF0aGlzW3IuJGV4dHJhXSl7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKSx0PXRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpLGE9dFtyLiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCxlKSxuPXRbci4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsZSksaT10W3IuJHNlYXJjaE5vZGVdKHRoaXMudHJhaWxlcixlKTt0aGlzW3IuJGV4dHJhXT17dGFyZ2V0OmEmJmFbMF18fG51bGwsbGVhZGVyOm4mJm5bMF18fG51bGwsdHJhaWxlcjppJiZpWzBdfHxudWxsLGFkZExlYWRlcjohMSxhZGRUcmFpbGVyOiExfX1yZXR1cm4gdGhpc1tyLiRleHRyYV19fWNsYXNzIFBhZ2VBcmVhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicGFnZUFyZWEiLCEwKTt0aGlzLmJsYW5rT3JOb3RCbGFuaz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5ibGFua09yTm90QmxhbmssWyJhbnkiLCJibGFuayIsIm5vdEJsYW5rIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbml0aWFsTnVtYmVyPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5pbml0aWFsTnVtYmVyLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5udW1iZXJlZD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyZWQsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm9kZE9yRXZlbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5vZGRPckV2ZW4sWyJhbnkiLCJldmVuIiwib2RkIl0pO3RoaXMucGFnZVBvc2l0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnBhZ2VQb3NpdGlvbixbImFueSIsImZpcnN0IiwibGFzdCIsIm9ubHkiLCJyZXN0Il0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZWRpdW09bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5hcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY29udGVudEFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRpc1VzYWJsZV0oKXtpZighdGhpc1tyLiRleHRyYV0pe3RoaXNbci4kZXh0cmFdPXtudW1iZXJPZlVzZTowfTtyZXR1cm4hMH1yZXR1cm4hdGhpcy5vY2N1cnx8LTE9PT10aGlzLm9jY3VyLm1heHx8dGhpc1tyLiRleHRyYV0ubnVtYmVyT2ZVc2U8dGhpcy5vY2N1ci5tYXh9W3IuJGNsZWFuUGFnZV0oKXtkZWxldGUgdGhpc1tyLiRleHRyYV19W3IuJGdldE5leHRQYWdlXSgpe3RoaXNbci4kZXh0cmFdfHwodGhpc1tyLiRleHRyYV09e251bWJlck9mVXNlOjB9KTtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpO2lmKCJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW3IuJGlzVXNhYmxlXSgpKXt0aGlzW3IuJGV4dHJhXS5udW1iZXJPZlVzZSs9MTtyZXR1cm4gdGhpc31yZXR1cm4gZVtyLiRnZXROZXh0UGFnZV0oKX1bci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuIHRoaXNbci4kZXh0cmFdLnNwYWNlfHx7d2lkdGg6MCxoZWlnaHQ6MH19W3IuJHRvSFRNTF0oKXt0aGlzW3IuJGV4dHJhXXx8KHRoaXNbci4kZXh0cmFdPXtudW1iZXJPZlVzZToxfSk7Y29uc3QgZT1bXTt0aGlzW3IuJGV4dHJhXS5jaGlsZHJlbj1lO2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZih0aGlzLm1lZGl1bSYmdGhpcy5tZWRpdW0uc2hvcnQmJnRoaXMubWVkaXVtLmxvbmcpe3Qud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWVkaXVtLnNob3J0KTt0LmhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0ubG9uZyk7dGhpc1tyLiRleHRyYV0uc3BhY2U9e3dpZHRoOnRoaXMubWVkaXVtLnNob3J0LGhlaWdodDp0aGlzLm1lZGl1bS5sb25nfTtpZigibGFuZHNjYXBlIj09PXRoaXMubWVkaXVtLm9yaWVudGF0aW9uKXtjb25zdCBlPXQud2lkdGg7dC53aWR0aD10LmhlaWdodDt0LmhlaWdodD1lO3RoaXNbci4kZXh0cmFdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5sb25nLGhlaWdodDp0aGlzLm1lZGl1bS5zaG9ydH19fWVsc2UoMCxjLndhcm4pKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTt0aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwic3ViZm9ybSJdKSxpbmNsdWRlOiEwfSk7dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiY29udGVudEFyZWEiXSksaW5jbHVkZTohMH0pO3JldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjplLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUGFnZSJdLGlkOnRoaXNbci4kdWlkXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1jbGFzcyBQYWdlU2V0IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicGFnZVNldCIsITApO3RoaXMuZHVwbGV4SW1wb3NpdGlvbj0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pO3RoaXMucmVsZXZhbnQ9KDAsby5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMucGFnZUFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wYWdlU2V0PW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRjbGVhblBhZ2VdKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5wYWdlQXJlYS5jaGlsZHJlbillW3IuJGNsZWFuUGFnZV0oKTtmb3IoY29uc3QgZSBvZiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pZVtyLiRjbGVhblBhZ2VdKCl9W3IuJGlzVXNhYmxlXSgpe3JldHVybiF0aGlzLm9jY3VyfHwtMT09PXRoaXMub2NjdXIubWF4fHx0aGlzW3IuJGV4dHJhXS5udW1iZXJPZlVzZTx0aGlzLm9jY3VyLm1heH1bci4kZ2V0TmV4dFBhZ2VdKCl7dGhpc1tyLiRleHRyYV18fCh0aGlzW3IuJGV4dHJhXT17bnVtYmVyT2ZVc2U6MSxwYWdlSW5kZXg6LTEscGFnZVNldEluZGV4Oi0xfSk7aWYoIm9yZGVyZWRPY2N1cnJlbmNlIj09PXRoaXMucmVsYXRpb24pe2lmKHRoaXNbci4kZXh0cmFdLnBhZ2VJbmRleCsxPHRoaXMucGFnZUFyZWEuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzW3IuJGV4dHJhXS5wYWdlSW5kZXgrPTE7cmV0dXJuIHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bdGhpc1tyLiRleHRyYV0ucGFnZUluZGV4XVtyLiRnZXROZXh0UGFnZV0oKX1pZih0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXgrMTx0aGlzLnBhZ2VTZXQuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXgrPTE7cmV0dXJuIHRoaXMucGFnZVNldC5jaGlsZHJlblt0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXhdW3IuJGdldE5leHRQYWdlXSgpfWlmKHRoaXNbci4kaXNVc2FibGVdKCkpe3RoaXNbci4kZXh0cmFdLm51bWJlck9mVXNlKz0xO3RoaXNbci4kZXh0cmFdLnBhZ2VJbmRleD0tMTt0aGlzW3IuJGV4dHJhXS5wYWdlU2V0SW5kZXg9LTE7cmV0dXJuIHRoaXNbci4kZ2V0TmV4dFBhZ2VdKCl9Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKTtpZihlIGluc3RhbmNlb2YgUGFnZVNldClyZXR1cm4gZVtyLiRnZXROZXh0UGFnZV0oKTt0aGlzW3IuJGNsZWFuUGFnZV0oKTtyZXR1cm4gdGhpc1tyLiRnZXROZXh0UGFnZV0oKX1jb25zdCBlPXRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5wYWdlTnVtYmVyLHQ9ZSUyPT0wPyJldmVuIjoib2RkIixhPTA9PT1lPyJmaXJzdCI6InJlc3QiO2xldCBuPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZT0+ZS5vZGRPckV2ZW49PT10JiZlLnBhZ2VQb3NpdGlvbj09PWEpKTtpZihuKXJldHVybiBuO249dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChlPT4iYW55Ij09PWUub2RkT3JFdmVuJiZlLnBhZ2VQb3NpdGlvbj09PWEpKTtpZihuKXJldHVybiBuO249dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChlPT4iYW55Ij09PWUub2RkT3JFdmVuJiYiYW55Ij09PWUucGFnZVBvc2l0aW9uKSk7cmV0dXJuIG58fHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bMF19fWNsYXNzIFBhcmEgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJwYXJhIiwhMCk7dGhpcy5oQWxpZ249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5saW5lSGVpZ2h0LCIwcHQiKToiIjt0aGlzLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luTGVmdCwiMHB0Iik6IiI7dGhpcy5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiO3RoaXMub3JwaGFucz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5wcmVzZXJ2ZT1lLnByZXNlcnZlfHwiIjt0aGlzLnJhZGl4T2Zmc2V0PWUucmFkaXhPZmZzZXQ/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5yYWRpeE9mZnNldCwiMHB0Iik6IiI7dGhpcy5zcGFjZUFib3ZlPWUuc3BhY2VBYm92ZT8oMCxvLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQWJvdmUsIjBwdCIpOiIiO3RoaXMuc3BhY2VCZWxvdz1lLnNwYWNlQmVsb3c/KDAsby5nZXRNZWFzdXJlbWVudCkoZS5zcGFjZUJlbG93LCIwcHQiKToiIjt0aGlzLnRhYkRlZmF1bHQ9ZS50YWJEZWZhdWx0PygwLG8uZ2V0TWVhc3VyZW1lbnQpKHRoaXMudGFiRGVmYXVsdCk6IiI7dGhpcy50YWJTdG9wcz0oZS50YWJTdG9wc3x8IiIpLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKCgoZSx0KT0+dCUyPT0xPygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUpOmUpKTt0aGlzLnRleHRJbmRlbnQ9ZS50ZXh0SW5kZW50PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUudGV4dEluZGVudCwiMHB0Iik6IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudkFsaWduPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnZBbGlnbixbInRvcCIsImJvdHRvbSIsIm1pZGRsZSJdKTt0aGlzLndpZG93cz0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUud2lkb3dzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmh5cGhlbmF0aW9uPW51bGx9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsImhBbGlnbiIpOyIiIT09dGhpcy5tYXJnaW5MZWZ0JiYoZS5wYWRkaW5nTGVmdD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5MZWZ0KSk7IiIhPT10aGlzLm1hcmdpblJpZ2h0JiYoZS5wYWRkaW5naWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5SaWdodCkpOyIiIT09dGhpcy5zcGFjZUFib3ZlJiYoZS5wYWRkaW5nVG9wPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNwYWNlQWJvdmUpKTsiIiE9PXRoaXMuc3BhY2VCZWxvdyYmKGUucGFkZGluZ0JvdHRvbT0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUJlbG93KSk7aWYoIiIhPT10aGlzLnRleHRJbmRlbnQpe2UudGV4dEluZGVudD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50ZXh0SW5kZW50KTsoMCxzLmZpeFRleHRJbmRlbnQpKGUpfXRoaXMubGluZUhlaWdodD4wJiYoZS5saW5lSGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmxpbmVIZWlnaHQpKTsiIiE9PXRoaXMudGFiRGVmYXVsdCYmKGUudGFiU2l6ZT0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KSk7dGhpcy50YWJTdG9wcy5sZW5ndGg7dGhpcy5oeXBoZW5hdGF0aW9uJiZPYmplY3QuYXNzaWduKGUsdGhpcy5oeXBoZW5hdGF0aW9uW3IuJHRvU3R5bGVdKCkpO3JldHVybiBlfX1jbGFzcyBQYXNzd29yZEVkaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJwYXNzd29yZEVkaXQiLCEwKTt0aGlzLmhTY3JvbGxQb2xpY3k9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfX1jbGFzcyBQYXR0ZXJuIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicGF0dGVybiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJjcm9zc0hhdGNoIiwiY3Jvc3NEaWFnb25hbCIsImRpYWdvbmFsTGVmdCIsImRpYWdvbmFsUmlnaHQiLCJob3Jpem9udGFsIiwidmVydGljYWwiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtlPWU/ZVtyLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjtjb25zdCB0PXRoaXMuY29sb3I/dGhpcy5jb2xvcltyLiR0b1N0eWxlXSgpOiIjMDAwMDAwIixhPSJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50IixuPWAke2V9LCR7ZX0gNXB4LCR7dH0gNXB4LCR7dH0gMTBweGA7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSJjcm9zc0hhdGNoIjpyZXR1cm5gJHthfSh0byB0b3AsJHtufSkgJHthfSh0byByaWdodCwke259KWA7Y2FzZSJjcm9zc0RpYWdvbmFsIjpyZXR1cm5gJHthfSg0NWRlZywke259KSAke2F9KC00NWRlZywke259KWA7Y2FzZSJkaWFnb25hbExlZnQiOnJldHVybmAke2F9KDQ1ZGVnLCR7bn0pYDtjYXNlImRpYWdvbmFsUmlnaHQiOnJldHVybmAke2F9KC00NWRlZywke259KWA7Y2FzZSJob3Jpem9udGFsIjpyZXR1cm5gJHthfSh0byB0b3AsJHtufSlgO2Nhc2UidmVydGljYWwiOnJldHVybmAke2F9KHRvIHJpZ2h0LCR7bn0pYH1yZXR1cm4iIn19Y2xhc3MgUGljdHVyZSBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInBpY3R1cmUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUHJvdG8gZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJwcm90byIsITApO3RoaXMuYXBwZWFyYW5jZUZpbHRlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmFyYz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmFyZWE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5hc3Npc3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5iYXJjb2RlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYmluZEl0ZW1zPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYm9va2VuZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJvb2xlYW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5ib3JkZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVhaz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQWZ0ZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0JlZm9yZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJ1dHRvbj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNhbGN1bGF0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNhcHRpb249bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5jZXJ0aWZpY2F0ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNlcnRpZmljYXRlcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNoZWNrQnV0dG9uPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY2hvaWNlTGlzdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvbG9yPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY29tYj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5jb250ZW50QXJlYT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmNvcm5lcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lRWRpdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWZhdWx0VWk9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZXNjPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGlnZXN0TWV0aG9kPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZGlnZXN0TWV0aG9kcz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lZGdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jb2Rpbmc9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNvZGluZ3M9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdERhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0aW9uPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdGlvbk1ldGhvZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHRpb25NZXRob2RzPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4ZWN1dGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leHRyYXM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZpbGw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5maWx0ZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmZvbnQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mb3JtYXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5oYW5kbGVyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaHlwaGVuYXRpb249bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlRWRpdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5pc3N1ZXJzPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaXRlbXM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5rZWVwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMua2V5VXNhZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5saW5lPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubGluZWFyPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubG9ja0RvY3VtZW50PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubWFuaWZlc3Q9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tYXJnaW49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tZHA9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tZWRpdW09bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5tZXNzYWdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMubnVtZXJpY0VkaXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5vY2N1cj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLm9pZD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLm9pZHM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5vdmVyZmxvdz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnBhZ2VBcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMucGFnZVNldD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnBhcmE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXNzd29yZEVkaXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXR0ZXJuPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMucGljdHVyZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnJhZGlhbD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnJlYXNvbj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnJlYXNvbnM9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWN0YW5nbGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWY9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zY3JpcHQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNpZ25EYXRhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2lnbmF0dXJlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2lnbmluZz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNvbGlkPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3BlYWs9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdGlwcGxlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJqZWN0RE49bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJqZWN0RE5zPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3VibWl0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRleHRFZGl0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWVTdGFtcD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRvb2xUaXA9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50cmF2ZXJzYWw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy50cmF2ZXJzZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnVpPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudmFsaWRhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy52YWx1ZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnZhcmlhYmxlcz1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgUmFkaWFsIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicmFkaWFsIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvRWRnZSIsInRvQ2VudGVyIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oZSl7ZT1lP2Vbci4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7Y29uc3QgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbci4kdG9TdHlsZV0oKToiIzAwMDAwMCI7cmV0dXJuYHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgY2VudGVyLCAkeyJ0b0VkZ2UiPT09dGhpcy50eXBlP2Ake2V9LCR7dH1gOmAke3R9LCR7ZX1gfSlgfX1jbGFzcyBSZWFzb24gZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJyZWFzb24iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUmVhc29ucyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInJlYXNvbnMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5yZWFzb249bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFJlY3RhbmdsZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInJlY3RhbmdsZSIsITApO3RoaXMuaGFuZD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvcm5lcj1uZXcgci5YRkFPYmplY3RBcnJheSg0KTt0aGlzLmVkZ2U9bmV3IHIuWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5maWxsPW51bGx9W3IuJHRvSFRNTF0oKXtjb25zdCBlPXRoaXMuZWRnZS5jaGlsZHJlbi5sZW5ndGg/dGhpcy5lZGdlLmNoaWxkcmVuWzBdOm5ldyBFZGdlKHt9KSx0PWVbci4kdG9TdHlsZV0oKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5maWxsJiYidmlzaWJsZSI9PT10aGlzLmZpbGwucHJlc2VuY2U/T2JqZWN0LmFzc2lnbihhLHRoaXMuZmlsbFtyLiR0b1N0eWxlXSgpKTphLmZpbGw9InRyYW5zcGFyZW50IjthLnN0cm9rZVdpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKSgidmlzaWJsZSI9PT1lLnByZXNlbmNlP2UudGhpY2tuZXNzOjApO2Euc3Ryb2tlPXQuY29sb3I7Y29uc3Qgbj0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyBDb3JuZXIoe30pKVtyLiR0b1N0eWxlXSgpLGk9e25hbWU6InN2ZyIsY2hpbGRyZW46W3tuYW1lOiJyZWN0IixhdHRyaWJ1dGVzOnt4bWxuczpmLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHg6MCx5OjAscng6bi5yYWRpdXMscnk6bi5yYWRpdXMsc3R5bGU6YX19XSxhdHRyaWJ1dGVzOnt4bWxuczpmLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9LHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX07aWYoaGFzTWFyZ2luKHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2ldfSk7aS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIG8uSFRNTFJlc3VsdC5zdWNjZXNzKGkpfX1jbGFzcyBSZWZFbGVtZW50IGV4dGVuZHMgci5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwicmVmIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNjcmlwdCBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInNjcmlwdCIpO3RoaXMuYmluZGluZz1lLmJpbmRpbmd8fCIiO3RoaXMuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJ1bkF0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnJ1bkF0LFsiY2xpZW50IiwiYm90aCIsInNlcnZlciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNldFByb3BlcnR5IGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic2V0UHJvcGVydHkiKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIifX10LlNldFByb3BlcnR5PVNldFByb3BlcnR5O2NsYXNzIFNpZ25EYXRhIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic2lnbkRhdGEiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3BlcmF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLm9wZXJhdGlvbixbInNpZ24iLCJjbGVhciIsInZlcmlmeSJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbH19Y2xhc3MgU2lnbmF0dXJlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic2lnbmF0dXJlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIlBERjEuMyIsIlBERjEuNiJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZmlsdGVyPW51bGw7dGhpcy5tYW5pZmVzdD1udWxsO3RoaXMubWFyZ2luPW51bGx9fWNsYXNzIFNpZ25pbmcgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzaWduaW5nIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFNvbGlkIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic29saWQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtyZXR1cm4gZT9lW3IuJHRvU3R5bGVdKCk6IiNGRkZGRkYifX1jbGFzcyBTcGVhayBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInNwZWFrIik7dGhpcy5kaXNhYmxlPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5kaXNhYmxlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByaW9yaXR5PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnByaW9yaXR5LFsiY3VzdG9tIiwiY2FwdGlvbiIsIm5hbWUiLCJ0b29sVGlwIl0pO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFN0aXBwbGUgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzdGlwcGxlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJhdGU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJhdGUsZGVmYXVsdFZhbHVlOjUwLHZhbGlkYXRlOmU9PmU+PTAmJmU8PTEwMH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oZSl7Y29uc3QgdD10aGlzLnJhdGUvMTAwO3JldHVybiBjLlV0aWwubWFrZUhleENvbG9yKE1hdGgucm91bmQoZS52YWx1ZS5yKigxLXQpK3RoaXMudmFsdWUucip0KSxNYXRoLnJvdW5kKGUudmFsdWUuZyooMS10KSt0aGlzLnZhbHVlLmcqdCksTWF0aC5yb3VuZChlLnZhbHVlLmIqKDEtdCkrdGhpcy52YWx1ZS5iKnQpKX19Y2xhc3MgU3ViZm9ybSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInN1YmZvcm0iLCEwKTt0aGlzLmFjY2Vzcz0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFsbG93TWFjcm89KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFsbG93TWFjcm8sZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmFuY2hvclR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGU9PiItMSI9PT1lPy0xOigwLG8uZ2V0TWVhc3VyZW1lbnQpKGUpKSk7dGhpcy5oPWUuaD8oMCxvLmdldE1lYXN1cmVtZW50KShlLmgpOiIiO3RoaXMuaEFsaWduPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxheW91dD0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5sYXlvdXQsWyJwb3NpdGlvbiIsImxyLXRiIiwicmwtcm93IiwicmwtdGIiLCJyb3ciLCJ0YWJsZSIsInRiIl0pO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9KDAsby5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKTt0aGlzLm1lcmdlTW9kZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5tZXJnZU1vZGUsWyJjb25zdW1lRGF0YSIsIm1hdGNoVGVtcGxhdGUiXSk7dGhpcy5taW5IPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0Iik7dGhpcy5taW5XPSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMucmVzdG9yZVN0YXRlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnJlc3RvcmVTdGF0ZSxbIm1hbnVhbCIsImF1dG8iXSk7dGhpcy5zY29wZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbIm5hbWUiLCJub25lIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53PygwLG8uZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiI7dGhpcy54PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0Iik7dGhpcy55PSgwLG8uZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvb2tlbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuYnJlYWs9bnVsbDt0aGlzLmNhbGN1bGF0ZT1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5vdmVyZmxvdz1udWxsO3RoaXMucGFnZVNldD1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFyaWFibGVzPW51bGw7dGhpcy5hcmVhPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtBZnRlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuY29ubmVjdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5wcm90bz1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXl9W3IuJGdldFN1YmZvcm1QYXJlbnRdKCl7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKTtyZXR1cm4gZSBpbnN0YW5jZW9mIFN1YmZvcm1TZXQ/ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpOmV9W3IuJGlzQmluZGFibGVdKCl7cmV0dXJuITB9W3IuJGlzVGhlcmVNb3JlV2lkdGhdKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJnRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZT4wfHx0aGlzW3IuJGdldFBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpfSpbci4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCl7eWllbGQqZ2V0Q29udGFpbmVkQ2hpbGRyZW4odGhpcyl9W3IuJGZsdXNoSFRNTF0oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9W3IuJGFkZEhUTUxdKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9W3IuJGdldEF2YWlsYWJsZVNwYWNlXSgpe3JldHVybigwLGkuZ2V0QXZhaWxhYmxlU3BhY2UpKHRoaXMpfVtyLiRpc1NwbGl0dGFibGVdKCl7Y29uc3QgZT10aGlzW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYoIWVbci4kaXNTcGxpdHRhYmxlXSgpKXJldHVybiExO2lmKHZvaWQgMCE9PXRoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGUpcmV0dXJuIHRoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU7aWYoInBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3RoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITE7cmV0dXJuITF9aWYodGhpcy5rZWVwJiYibm9uZSIhPT10aGlzLmtlZXAuaW50YWN0KXt0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlPSExO3JldHVybiExfWlmKGUubGF5b3V0JiZlLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjAhPT1lW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUpcmV0dXJuITE7dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMDtyZXR1cm4hMH1bci4kdG9IVE1MXShlKXtzZXRUYWJJbmRleCh0aGlzKTtpZih0aGlzLmJyZWFrKXtpZigiYXV0byIhPT10aGlzLmJyZWFrLmFmdGVyfHwiIiE9PXRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQpe2NvbnN0IGU9bmV3IEJyZWFrQWZ0ZXIoe3RhcmdldFR5cGU6dGhpcy5icmVhay5hZnRlcix0YXJnZXQ6dGhpcy5icmVhay5hZnRlclRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtlW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7dGhpcy5icmVha0FmdGVyLnB1c2goZSl9aWYoImF1dG8iIT09dGhpcy5icmVhay5iZWZvcmV8fCIiIT09dGhpcy5icmVhay5iZWZvcmVUYXJnZXQpe2NvbnN0IGU9bmV3IEJyZWFrQmVmb3JlKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtlW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7dGhpcy5icmVha0JlZm9yZS5wdXNoKGUpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7Y29uc3QgZT1uZXcgT3ZlcmZsb3coe3RhcmdldDp0aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0LGxlYWRlcjp0aGlzLmJyZWFrLm92ZXJmbG93TGVhZGVyLHRyYWlsZXI6dGhpcy5icmVhay5vdmVyZmxvd1RyYWlsZXJ9KTtlW3IuJGdsb2JhbERhdGFdPXRoaXNbci4kZ2xvYmFsRGF0YV07dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7dGhpcy5vdmVyZmxvdy5wdXNoKGUpfXRoaXNbci4kcmVtb3ZlQ2hpbGRdKHRoaXMuYnJlYWspO3RoaXMuYnJlYWs9bnVsbH1pZigiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBvLkhUTUxSZXN1bHQuRU1QVFk7KHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPjF8fHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGg+MSkmJigwLGMud2FybikoIlhGQSAtIFNldmVyYWwgYnJlYWtCZWZvcmUgb3IgYnJlYWtBZnRlciBpbiBzdWJmb3JtczogcGxlYXNlIGZpbGUgYSBidWcuIik7aWYodGhpcy5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2NvbnN0IGU9dGhpcy5icmVha0JlZm9yZS5jaGlsZHJlblswXTtpZihoYW5kbGVCcmVhayhlKSlyZXR1cm4gby5IVE1MUmVzdWx0LmJyZWFrTm9kZShlKX1pZih0aGlzW3IuJGV4dHJhXSYmdGhpc1tyLiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyKXJldHVybiBvLkhUTUxSZXN1bHQuRU1QVFk7KDAscy5maXhEaW1lbnNpb25zKSh0aGlzKTtjb25zdCB0PVtdLGE9e2lkOnRoaXNbci4kdWlkXSxjbGFzczpbXX07KDAscy5zZXRBY2Nlc3MpKHRoaXMsYS5jbGFzcyk7dGhpc1tyLiRleHRyYV18fCh0aGlzW3IuJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKTtPYmplY3QuYXNzaWduKHRoaXNbci4kZXh0cmFdLHtjaGlsZHJlbjp0LGxpbmU6bnVsbCxhdHRyaWJ1dGVzOmEsYXR0ZW1wdDowLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO2NvbnN0IG49dGhpc1tyLiRnZXRUZW1wbGF0ZVJvb3RdKCksbD1uW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUsaD10aGlzW3IuJGlzU3BsaXR0YWJsZV0oKTtofHxzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZighKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIG8uSFRNTFJlc3VsdC5GQUlMVVJFO2NvbnN0IHU9bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZXhjbEdyb3VwIiwiZmllbGQiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe2NvbnN0IGU9dGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRocztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wKXt0aGlzW3IuJGV4dHJhXS5jb2x1bW5XaWR0aHM9ZTt0aGlzW3IuJGV4dHJhXS5jdXJyZW50Q29sdW1uPTB9fWNvbnN0IGQ9KDAscy50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxmPVsieGZhU3ViZm9ybSJdLGc9KDAscy5sYXlvdXRDbGFzcykodGhpcyk7ZyYmZi5wdXNoKGcpO2Euc3R5bGU9ZDthLmNsYXNzPWY7dGhpcy5uYW1lJiYoYS54ZmFOYW1lPXRoaXMubmFtZSk7aWYodGhpcy5vdmVyZmxvdyl7Y29uc3QgdD10aGlzLm92ZXJmbG93W3IuJGdldEV4dHJhXSgpO2lmKHQuYWRkTGVhZGVyKXt0LmFkZExlYWRlcj0hMTtoYW5kbGVPdmVyZmxvdyh0aGlzLHQubGVhZGVyLGUpfX10aGlzW3IuJHB1c2hQYXJhXSgpO2NvbnN0IHA9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsbT1wPzI6MTtmb3IoO3RoaXNbci4kZXh0cmFdLmF0dGVtcHQ8bTt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0Kyspe3AmJjE9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiYodGhpc1tyLiRleHRyYV0ubnVtYmVySW5MaW5lPTApO2NvbnN0IGU9dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjp1LGluY2x1ZGU6ITB9KTtpZihlLnN1Y2Nlc3MpYnJlYWs7aWYoZS5pc0JyZWFrKCkpe3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gZX1pZihwJiYwPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmMD09PXRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZSYmIW5bci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSl7dGhpc1tyLiRleHRyYV0uYXR0ZW1wdD1tO2JyZWFrfX10aGlzW3IuJHBvcFBhcmFdKCk7aHx8dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtuW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9bDtpZih0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PT09bSl7dGhpcy5vdmVyZmxvdyYmKHRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5vdmVyZmxvd05vZGU9dGhpcy5vdmVyZmxvdyk7aHx8ZGVsZXRlIHRoaXNbci4kZXh0cmFdO3JldHVybiBvLkhUTUxSZXN1bHQuRkFJTFVSRX1pZih0aGlzLm92ZXJmbG93KXtjb25zdCB0PXRoaXMub3ZlcmZsb3dbci4kZ2V0RXh0cmFdKCk7aWYodC5hZGRUcmFpbGVyKXt0LmFkZFRyYWlsZXI9ITE7aGFuZGxlT3ZlcmZsb3codGhpcyx0LnRyYWlsZXIsZSl9fWxldCBiPTAseT0wO2lmKHRoaXMubWFyZ2luKXtiPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O3k9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9Y29uc3Qgdz1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS53aWR0aCtiLHRoaXMud3x8MCksUz1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS5oZWlnaHQreSx0aGlzLmh8fDApLHg9W3RoaXMueCx0aGlzLnksdyxTXTsiIj09PXRoaXMudyYmKGQud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHcpKTsiIj09PXRoaXMuaCYmKGQuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKShTKSk7aWYoKCIwcHgiPT09ZC53aWR0aHx8IjBweCI9PT1kLmhlaWdodCkmJjA9PT10Lmxlbmd0aClyZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZO2NvbnN0IGs9e25hbWU6ImRpdiIsYXR0cmlidXRlczphLGNoaWxkcmVuOnR9O2FwcGx5QXNzaXN0KHRoaXMsYSk7Y29uc3QgQz1vLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsaykseCk7aWYodGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aD49MSl7Y29uc3QgZT10aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW5bMF07aWYoaGFuZGxlQnJlYWsoZSkpe3RoaXNbci4kZXh0cmFdLmFmdGVyQnJlYWtBZnRlcj1DO3JldHVybiBvLkhUTUxSZXN1bHQuYnJlYWtOb2RlKGUpfX1kZWxldGUgdGhpc1tyLiRleHRyYV07cmV0dXJuIEN9fWNsYXNzIFN1YmZvcm1TZXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzdWJmb3JtU2V0IiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGF0aW9uPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKTt0aGlzLnJlbGV2YW50PSgwLG8uZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2tlbmQ9bnVsbDt0aGlzLmJyZWFrPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5vdmVyZmxvdz1udWxsO3RoaXMuYnJlYWtBZnRlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IHIuWEZBT2JqZWN0QXJyYXl9KltyLiRnZXRDb250YWluZWRDaGlsZHJlbl0oKXt5aWVsZCpnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKX1bci4kZ2V0U3ViZm9ybVBhcmVudF0oKXtsZXQgZT10aGlzW3IuJGdldFBhcmVudF0oKTtmb3IoOyEoZSBpbnN0YW5jZW9mIFN1YmZvcm0pOyllPWVbci4kZ2V0UGFyZW50XSgpO3JldHVybiBlfVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfX1jbGFzcyBTdWJqZWN0RE4gZXh0ZW5kcyByLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwic3ViamVjdEROIik7dGhpcy5kZWxpbWl0ZXI9ZS5kZWxpbWl0ZXJ8fCIsIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7dGhpc1tyLiRjb250ZW50XT1uZXcgTWFwKHRoaXNbci4kY29udGVudF0uc3BsaXQodGhpcy5kZWxpbWl0ZXIpLm1hcCgoZT0+eyhlPWUuc3BsaXQoIj0iLDIpKVswXT1lWzBdLnRyaW0oKTtyZXR1cm4gZX0pKSl9fWNsYXNzIFN1YmplY3RETnMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzdWJqZWN0RE5zIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc3ViamVjdEROPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBTdWJtaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJzdWJtaXQiLCEwKTt0aGlzLmVtYmVkUERGPSgwLG8uZ2V0SW50ZWdlcikoe2RhdGE6ZS5lbWJlZFBERixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuZm9ybWF0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdCxbInhkcCIsImZvcm1kYXRhIiwicGRmIiwidXJsZW5jb2RlZCIsInhmZCIsInhtbCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRleHRFbmNvZGluZz0oMCxvLmdldEtleXdvcmQpKHtkYXRhOmUudGV4dEVuY29kaW5nP2UudGV4dEVuY29kaW5nLnRvTG93ZXJDYXNlKCk6IiIsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PlsidXRmLTgiLCJiaWctZml2ZSIsImZvbnRzcGVjaWZpYyIsImdiayIsImdiLTE4MDMwIiwiZ2ItMjMxMiIsImtzYy01NjAxIiwibm9uZSIsInNoaWZ0LWppcyIsInVjcy0yIiwidXRmLTE2Il0uaW5jbHVkZXMoZSl8fGUubWF0Y2goL2lzby04ODU5LVxkezJ9Lyl9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy54ZHBDb250ZW50PWUueGRwQ29udGVudHx8IiI7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5lbmNyeXB0RGF0YT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnNpZ25EYXRhPW5ldyByLlhGQU9iamVjdEFycmF5fX1jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRlbXBsYXRlIiwhMCk7dGhpcy5iYXNlUHJvZmlsZT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5iYXNlUHJvZmlsZSxbImZ1bGwiLCJpbnRlcmFjdGl2ZUZvcm1zIl0pO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zdWJmb3JtPW5ldyByLlhGQU9iamVjdEFycmF5fVtyLiRmaW5hbGl6ZV0oKXswPT09dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCYmKDAsYy53YXJuKSgiWEZBIC0gTm8gc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZS4iKTt0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0yJiYoMCxjLndhcm4pKCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO3RoaXNbci4kdGFiSW5kZXhdPTVlM31bci4kaXNTcGxpdHRhYmxlXSgpe3JldHVybiEwfVtyLiRzZWFyY2hOb2RlXShlLHQpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiMiKT9bdGhpc1tyLiRpZHNdLmdldChlLnNsaWNlKDEpKV06KDAsdS5zZWFyY2hOb2RlKSh0aGlzLHQsZSwhMCwhMCl9KltyLiR0b1BhZ2VzXSgpe2lmKCF0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoKXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXX0pO3RoaXNbci4kZXh0cmFdPXtvdmVyZmxvd05vZGU6bnVsbCxmaXJzdFVuc3BsaXR0YWJsZTpudWxsLGN1cnJlbnRDb250ZW50QXJlYTpudWxsLGN1cnJlbnRQYWdlQXJlYTpudWxsLG5vTGF5b3V0RmFpbHVyZTohMSxwYWdlTnVtYmVyOjEscGFnZVBvc2l0aW9uOiJmaXJzdCIsb2RkT3JFdmVuOiJvZGQiLGJsYW5rT3JOb3RCbGFuazoibm9uQmxhbmsiLHBhcmFTdGFjazpbXX07Y29uc3QgZT10aGlzLnN1YmZvcm0uY2hpbGRyZW5bMF07ZS5wYWdlU2V0W3IuJGNsZWFuUGFnZV0oKTtjb25zdCB0PWUucGFnZVNldC5wYWdlQXJlYS5jaGlsZHJlbixhPXtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfTtsZXQgbj1udWxsLGk9bnVsbCxzPW51bGw7aWYoZS5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2k9ZS5icmVha0JlZm9yZS5jaGlsZHJlblswXTtzPWkudGFyZ2V0fWVsc2UgaWYoZS5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MSYmZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD49MSl7aT1lLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07cz1pLnRhcmdldH1lbHNlIGlmKGUuYnJlYWsmJmUuYnJlYWsuYmVmb3JlVGFyZ2V0KXtpPWUuYnJlYWs7cz1pLmJlZm9yZVRhcmdldH1lbHNlIGlmKGUuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJmUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhayYmZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLmJlZm9yZVRhcmdldCl7aT1lLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWs7cz1pLmJlZm9yZVRhcmdldH1pZihpKXtjb25zdCBlPXRoaXNbci4kc2VhcmNoTm9kZV0ocyxpW3IuJGdldFBhcmVudF0oKSk7aWYoZSBpbnN0YW5jZW9mIFBhZ2VBcmVhKXtuPWU7aVtyLiRleHRyYV09e319fW58fChuPXRbMF0pO25bci4kZXh0cmFdPXtudW1iZXJPZlVzZToxfTtjb25zdCBsPW5bci4kZ2V0UGFyZW50XSgpO2xbci4kZXh0cmFdPXtudW1iZXJPZlVzZToxLHBhZ2VJbmRleDpsLnBhZ2VBcmVhLmNoaWxkcmVuLmluZGV4T2YobikscGFnZVNldEluZGV4OjB9O2xldCBoLHU9bnVsbCxkPW51bGwsZj0hMCxnPTAscD0wO2Zvcig7Oyl7aWYoZilnPTA7ZWxzZXthLmNoaWxkcmVuLnBvcCgpO2lmKDM9PSsrZyl7KDAsYy53YXJuKSgiWEZBIC0gU29tZXRoaW5nIGdvZXMgd3Jvbmc6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO3JldHVybiBhfX1oPW51bGw7dGhpc1tyLiRleHRyYV0uY3VycmVudFBhZ2VBcmVhPW47Y29uc3QgdD1uW3IuJHRvSFRNTF0oKS5odG1sO2EuY2hpbGRyZW4ucHVzaCh0KTtpZih1KXt0aGlzW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7dC5jaGlsZHJlbi5wdXNoKHVbci4kdG9IVE1MXShuW3IuJGV4dHJhXS5zcGFjZSkuaHRtbCk7dT1udWxsfWlmKGQpe3RoaXNbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMDt0LmNoaWxkcmVuLnB1c2goZFtyLiR0b0hUTUxdKG5bci4kZXh0cmFdLnNwYWNlKS5odG1sKTtkPW51bGx9Y29uc3QgaT1uLmNvbnRlbnRBcmVhLmNoaWxkcmVuLHM9dC5jaGlsZHJlbi5maWx0ZXIoKGU9PmUuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhQ29udGVudGFyZWEiKSkpO2Y9ITE7dGhpc1tyLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbDt0aGlzW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITE7Y29uc3QgZmx1c2g9dD0+e2NvbnN0IGE9ZVtyLiRmbHVzaEhUTUxdKCk7aWYoYSl7Zj1mfHxhLmNoaWxkcmVuJiYwIT09YS5jaGlsZHJlbi5sZW5ndGg7c1t0XS5jaGlsZHJlbi5wdXNoKGEpfX07Zm9yKGxldCB0PXAsbj1pLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPXRoaXNbci4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYT1pW3RdLG89e3dpZHRoOm4udyxoZWlnaHQ6bi5ofTtwPTA7aWYodSl7c1t0XS5jaGlsZHJlbi5wdXNoKHVbci4kdG9IVE1MXShvKS5odG1sKTt1PW51bGx9aWYoZCl7c1t0XS5jaGlsZHJlbi5wdXNoKGRbci4kdG9IVE1MXShvKS5odG1sKTtkPW51bGx9Y29uc3QgYz1lW3IuJHRvSFRNTF0obyk7aWYoYy5zdWNjZXNzKXtpZihjLmh0bWwpe2Y9Znx8Yy5odG1sLmNoaWxkcmVuJiYwIT09Yy5odG1sLmNoaWxkcmVuLmxlbmd0aDtzW3RdLmNoaWxkcmVuLnB1c2goYy5odG1sKX1lbHNlIWYmJmEuY2hpbGRyZW4ubGVuZ3RoPjEmJmEuY2hpbGRyZW4ucG9wKCk7cmV0dXJuIGF9aWYoYy5pc0JyZWFrKCkpe2NvbnN0IGU9Yy5icmVha05vZGU7Zmx1c2godCk7aWYoImF1dG8iPT09ZS50YXJnZXRUeXBlKWNvbnRpbnVlO2lmKGUubGVhZGVyKXt1PXRoaXNbci4kc2VhcmNoTm9kZV0oZS5sZWFkZXIsZVtyLiRnZXRQYXJlbnRdKCkpO3U9dT91WzBdOm51bGx9aWYoZS50cmFpbGVyKXtkPXRoaXNbci4kc2VhcmNoTm9kZV0oZS50cmFpbGVyLGVbci4kZ2V0UGFyZW50XSgpKTtkPWQ/ZFswXTpudWxsfWlmKCJwYWdlQXJlYSI9PT1lLnRhcmdldFR5cGUpe2g9ZVtyLiRleHRyYV0udGFyZ2V0O3Q9MS8wfWVsc2UgaWYoZVtyLiRleHRyYV0udGFyZ2V0KXtoPWVbci4kZXh0cmFdLnRhcmdldDtwPWVbci4kZXh0cmFdLmluZGV4KzE7dD0xLzB9ZWxzZSB0PWVbci4kZXh0cmFdLmluZGV4fWVsc2UgaWYodGhpc1tyLiRleHRyYV0ub3ZlcmZsb3dOb2RlKXtjb25zdCBlPXRoaXNbci4kZXh0cmFdLm92ZXJmbG93Tm9kZTt0aGlzW3IuJGV4dHJhXS5vdmVyZmxvd05vZGU9bnVsbDtjb25zdCBhPWVbci4kZ2V0RXh0cmFdKCksbj1hLnRhcmdldDthLmFkZExlYWRlcj1udWxsIT09YS5sZWFkZXI7YS5hZGRUcmFpbGVyPW51bGwhPT1hLnRyYWlsZXI7Zmx1c2godCk7Y29uc3Qgcz10O3Q9MS8wO2lmKG4gaW5zdGFuY2VvZiBQYWdlQXJlYSloPW47ZWxzZSBpZihuIGluc3RhbmNlb2YgQ29udGVudEFyZWEpe2NvbnN0IGU9aS5pbmRleE9mKG4pO2lmKC0xIT09ZSllPnM/dD1lLTE6cD1lO2Vsc2V7aD1uW3IuJGdldFBhcmVudF0oKTtwPWguY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihuKX19fWVsc2UgZmx1c2godCl9dGhpc1tyLiRleHRyYV0ucGFnZU51bWJlcis9MTtoJiYoaFtyLiRpc1VzYWJsZV0oKT9oW3IuJGV4dHJhXS5udW1iZXJPZlVzZSs9MTpoPW51bGwpO249aHx8bltyLiRnZXROZXh0UGFnZV0oKTt5aWVsZCBudWxsfX19dC5UZW1wbGF0ZT1UZW1wbGF0ZTtjbGFzcyBUZXh0IGV4dGVuZHMgci5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRleHQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWF4Q2hhcnM9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heENoYXJzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJpZD1lLnJpZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRhY2NlcHRXaGl0ZXNwYWNlXSgpe3JldHVybiEwfVtyLiRvbkNoaWxkXShlKXtpZihlW3IuJG5hbWVzcGFjZUlkXT09PW4uTmFtZXNwYWNlSWRzLnhodG1sLmlkKXt0aGlzW3IuJGNvbnRlbnRdPWU7cmV0dXJuITB9KDAsYy53YXJuKShgWEZBIC0gSW52YWxpZCBjb250ZW50IGluIFRleHQ6ICR7ZVtyLiRub2RlTmFtZV19LmApO3JldHVybiExfVtyLiRvblRleHRdKGUpe3RoaXNbci4kY29udGVudF1pbnN0YW5jZW9mIHIuWEZBT2JqZWN0fHxzdXBlcltyLiRvblRleHRdKGUpfVtyLiRmaW5hbGl6ZV0oKXsic3RyaW5nIj09dHlwZW9mIHRoaXNbci4kY29udGVudF0mJih0aGlzW3IuJGNvbnRlbnRdPXRoaXNbci4kY29udGVudF0ucmVwbGFjZSgvXHJcbi9nLCJcbiIpKX1bci4kZ2V0RXh0cmFdKCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0uc3BsaXQoL1tcdTIwMjlcdTIwMjhcbl0vKS5yZWR1Y2UoKChlLHQpPT57dCYmZS5wdXNoKHQpO3JldHVybiBlfSksW10pLmpvaW4oIlxuIik6dGhpc1tyLiRjb250ZW50XVtyLiR0ZXh0XSgpfVtyLiR0b0hUTUxdKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpc1tyLiRjb250ZW50XSl7Y29uc3QgZT12YWx1ZVRvSHRtbCh0aGlzW3IuJGNvbnRlbnRdKS5odG1sO2lmKHRoaXNbci4kY29udGVudF0uaW5jbHVkZXMoIlx1MjAyOSIpKXtlLm5hbWU9ImRpdiI7ZS5jaGlsZHJlbj1bXTt0aGlzW3IuJGNvbnRlbnRdLnNwbGl0KCJcdTIwMjkiKS5tYXAoKGU9PmUuc3BsaXQoL1tcdTIwMjhcbl0vKS5yZWR1Y2UoKChlLHQpPT57ZS5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSk7cmV0dXJuIGV9KSxbXSkpKS5mb3JFYWNoKCh0PT57ZS5jaGlsZHJlbi5wdXNoKHtuYW1lOiJwIixjaGlsZHJlbjp0fSl9KSl9ZWxzZSBpZigvW1x1MjAyOFxuXS8udGVzdCh0aGlzW3IuJGNvbnRlbnRdKSl7ZS5uYW1lPSJkaXYiO2UuY2hpbGRyZW49W107dGhpc1tyLiRjb250ZW50XS5zcGxpdCgvW1x1MjAyOFxuXS8pLmZvckVhY2goKHQ9PntlLmNoaWxkcmVuLnB1c2goe25hbWU6InNwYW4iLHZhbHVlOnR9LHtuYW1lOiJiciJ9KX0pKX1yZXR1cm4gby5IVE1MUmVzdWx0LnN1Y2Nlc3MoZSl9cmV0dXJuIHRoaXNbci4kY29udGVudF1bci4kdG9IVE1MXShlKX19dC5UZXh0PVRleHQ7Y2xhc3MgVGV4dEVkaXQgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ0ZXh0RWRpdCIsITApO3RoaXMuYWxsb3dSaWNoVGV4dD0oMCxvLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaFNjcm9sbFBvbGljeT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tdWx0aUxpbmU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm11bHRpTGluZSxkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+MD09PWV8fDE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudlNjcm9sbFBvbGljeT0oMCxvLmdldFN0cmluZ09wdGlvbikoZS52U2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jb21iPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIik7bGV0IGE7Y29uc3Qgbj10aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCk7IiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPW4gaW5zdGFuY2VvZiBEcmF3PzE6MCk7YT0xPT09dGhpcy5tdWx0aUxpbmU/e25hbWU6InRleHRhcmVhIixhdHRyaWJ1dGVzOntkYXRhSWQ6bltyLiRkYXRhXSYmbltyLiRkYXRhXVtyLiR1aWRdfHxuW3IuJHVpZF0sZmllbGRJZDpuW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwobiksImFyaWEtcmVxdWlyZWQiOiExfX06e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixkYXRhSWQ6bltyLiRkYXRhXSYmbltyLiRkYXRhXVtyLiR1aWRdfHxuW3IuJHVpZF0sZmllbGRJZDpuW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwobiksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChuKSl7YS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7YS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBvLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2FdfSl9fWNsYXNzIFRpbWUgZXh0ZW5kcyByLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ0aW1lIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tyLiRjb250ZW50XS50cmltKCk7dGhpc1tyLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgVGltZVN0YW1wIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidGltZVN0YW1wIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnNlcnZlcj1lLnNlcnZlcnx8IiI7dGhpcy50eXBlPSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgVG9vbFRpcCBleHRlbmRzIHIuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRvb2xUaXAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFRyYXZlcnNhbCBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInRyYXZlcnNhbCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy50cmF2ZXJzZT1uZXcgci5YRkFPYmplY3RBcnJheX19Y2xhc3MgVHJhdmVyc2UgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ0cmF2ZXJzZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249KDAsby5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLm9wZXJhdGlvbn1bci4kaXNUcmFuc3BhcmVudF0oKXtyZXR1cm4hMX19Y2xhc3MgVWkgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihkLCJ1aSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5iYXJjb2RlPW51bGw7dGhpcy5idXR0b249bnVsbDt0aGlzLmNoZWNrQnV0dG9uPW51bGw7dGhpcy5jaG9pY2VMaXN0PW51bGw7dGhpcy5kYXRlVGltZUVkaXQ9bnVsbDt0aGlzLmRlZmF1bHRVaT1udWxsO3RoaXMuaW1hZ2VFZGl0PW51bGw7dGhpcy5udW1lcmljRWRpdD1udWxsO3RoaXMucGFzc3dvcmRFZGl0PW51bGw7dGhpcy5zaWduYXR1cmU9bnVsbDt0aGlzLnRleHRFZGl0PW51bGx9W3IuJGdldEV4dHJhXSgpe2lmKHZvaWQgMD09PXRoaXNbci4kZXh0cmFdKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYoImV4dHJhcyI9PT1lfHwicGljdHVyZSI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2Ygci5YRkFPYmplY3Qpe3RoaXNbci4kZXh0cmFdPXQ7cmV0dXJuIHR9fXRoaXNbci4kZXh0cmFdPW51bGx9cmV0dXJuIHRoaXNbci4kZXh0cmFdfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9dGhpc1tyLiRnZXRFeHRyYV0oKTtyZXR1cm4gdD90W3IuJHRvSFRNTF0oZSk6by5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBWYWxpZGF0ZSBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInZhbGlkYXRlIiwhMCk7dGhpcy5mb3JtYXRUZXN0PSgwLG8uZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubnVsbFRlc3Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKTt0aGlzLnNjcmlwdFRlc3Q9KDAsby5nZXRTdHJpbmdPcHRpb24pKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWVzc2FnZT1udWxsO3RoaXMucGljdHVyZT1udWxsO3RoaXMuc2NyaXB0PW51bGx9fWNsYXNzIFZhbHVlIGV4dGVuZHMgci5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZCwidmFsdWUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3ZlcnJpZGU9KDAsby5nZXRJbnRlZ2VyKSh7ZGF0YTplLm92ZXJyaWRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5yZWxldmFudD0oMCxvLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5hcmM9bnVsbDt0aGlzLmJvb2xlYW49bnVsbDt0aGlzLmRhdGU9bnVsbDt0aGlzLmRhdGVUaW1lPW51bGw7dGhpcy5kZWNpbWFsPW51bGw7dGhpcy5leERhdGE9bnVsbDt0aGlzLmZsb2F0PW51bGw7dGhpcy5pbWFnZT1udWxsO3RoaXMuaW50ZWdlcj1udWxsO3RoaXMubGluZT1udWxsO3RoaXMucmVjdGFuZ2xlPW51bGw7dGhpcy50ZXh0PW51bGw7dGhpcy50aW1lPW51bGx9W3IuJHNldFZhbHVlXShlKXtjb25zdCB0PXRoaXNbci4kZ2V0UGFyZW50XSgpO2lmKHQgaW5zdGFuY2VvZiBGaWVsZCYmdC51aSYmdC51aS5pbWFnZUVkaXQpe2lmKCF0aGlzLmltYWdlKXt0aGlzLmltYWdlPW5ldyBJbWFnZSh7fSk7dGhpc1tyLiRhcHBlbmRDaGlsZF0odGhpcy5pbWFnZSl9dGhpcy5pbWFnZVtyLiRjb250ZW50XT1lW3IuJGNvbnRlbnRdO3JldHVybn1jb25zdCBhPWVbci4kbm9kZU5hbWVdO2lmKG51bGw9PT10aGlzW2FdKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7Y29uc3QgdD10aGlzW2VdO2lmKHQgaW5zdGFuY2VvZiByLlhGQU9iamVjdCl7dGhpc1tlXT1udWxsO3RoaXNbci4kcmVtb3ZlQ2hpbGRdKHQpfX10aGlzW2Vbci4kbm9kZU5hbWVdXT1lO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpfWVsc2UgdGhpc1thXVtyLiRjb250ZW50XT1lW3IuJGNvbnRlbnRdfVtyLiR0ZXh0XSgpe2lmKHRoaXMuZXhEYXRhKXJldHVybiJzdHJpbmciPT10eXBlb2YgdGhpcy5leERhdGFbci4kY29udGVudF0/dGhpcy5leERhdGFbci4kY29udGVudF0udHJpbSgpOnRoaXMuZXhEYXRhW3IuJGNvbnRlbnRdW3IuJHRleHRdKCkudHJpbSgpO2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZigiaW1hZ2UiPT09ZSljb250aW51ZTtjb25zdCB0PXRoaXNbZV07aWYodCBpbnN0YW5jZW9mIHIuWEZBT2JqZWN0KXJldHVybih0W3IuJGNvbnRlbnRdfHwiIikudG9TdHJpbmcoKS50cmltKCl9cmV0dXJuIG51bGx9W3IuJHRvSFRNTF0oZSl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IGE9dGhpc1t0XTtpZihhIGluc3RhbmNlb2Ygci5YRkFPYmplY3QpcmV0dXJuIGFbci4kdG9IVE1MXShlKX1yZXR1cm4gby5IVE1MUmVzdWx0LkVNUFRZfX10LlZhbHVlPVZhbHVlO2NsYXNzIFZhcmlhYmxlcyBleHRlbmRzIHIuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGQsInZhcmlhYmxlcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IHIuWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLm1hbmlmZXN0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMuc2NyaXB0PW5ldyByLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgci5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IHIuWEZBT2JqZWN0QXJyYXl9W3IuJGlzVHJhbnNwYXJlbnRdKCl7cmV0dXJuITB9fWNsYXNzIFRlbXBsYXRlTmFtZXNwYWNle3N0YXRpY1tuLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihUZW1wbGF0ZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSl7Y29uc3QgYT1UZW1wbGF0ZU5hbWVzcGFjZVtlXSh0KTthW3IuJHNldFNldEF0dHJpYnV0ZXNdKHQpO3JldHVybiBhfX1zdGF0aWMgYXBwZWFyYW5jZUZpbHRlcihlKXtyZXR1cm4gbmV3IEFwcGVhcmFuY2VGaWx0ZXIoZSl9c3RhdGljIGFyYyhlKXtyZXR1cm4gbmV3IEFyYyhlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IEFyZWEoZSl9c3RhdGljIGFzc2lzdChlKXtyZXR1cm4gbmV3IEFzc2lzdChlKX1zdGF0aWMgYmFyY29kZShlKXtyZXR1cm4gbmV3IEJhcmNvZGUoZSl9c3RhdGljIGJpbmQoZSl7cmV0dXJuIG5ldyBCaW5kKGUpfXN0YXRpYyBiaW5kSXRlbXMoZSl7cmV0dXJuIG5ldyBCaW5kSXRlbXMoZSl9c3RhdGljIGJvb2tlbmQoZSl7cmV0dXJuIG5ldyBCb29rZW5kKGUpfXN0YXRpYyBib29sZWFuKGUpe3JldHVybiBuZXcgQm9vbGVhbkVsZW1lbnQoZSl9c3RhdGljIGJvcmRlcihlKXtyZXR1cm4gbmV3IEJvcmRlcihlKX1zdGF0aWMgYnJlYWsoZSl7cmV0dXJuIG5ldyBCcmVhayhlKX1zdGF0aWMgYnJlYWtBZnRlcihlKXtyZXR1cm4gbmV3IEJyZWFrQWZ0ZXIoZSl9c3RhdGljIGJyZWFrQmVmb3JlKGUpe3JldHVybiBuZXcgQnJlYWtCZWZvcmUoZSl9c3RhdGljIGJ1dHRvbihlKXtyZXR1cm4gbmV3IEJ1dHRvbihlKX1zdGF0aWMgY2FsY3VsYXRlKGUpe3JldHVybiBuZXcgQ2FsY3VsYXRlKGUpfXN0YXRpYyBjYXB0aW9uKGUpe3JldHVybiBuZXcgQ2FwdGlvbihlKX1zdGF0aWMgY2VydGlmaWNhdGUoZSl7cmV0dXJuIG5ldyBDZXJ0aWZpY2F0ZShlKX1zdGF0aWMgY2VydGlmaWNhdGVzKGUpe3JldHVybiBuZXcgQ2VydGlmaWNhdGVzKGUpfXN0YXRpYyBjaGVja0J1dHRvbihlKXtyZXR1cm4gbmV3IENoZWNrQnV0dG9uKGUpfXN0YXRpYyBjaG9pY2VMaXN0KGUpe3JldHVybiBuZXcgQ2hvaWNlTGlzdChlKX1zdGF0aWMgY29sb3IoZSl7cmV0dXJuIG5ldyBDb2xvcihlKX1zdGF0aWMgY29tYihlKXtyZXR1cm4gbmV3IENvbWIoZSl9c3RhdGljIGNvbm5lY3QoZSl7cmV0dXJuIG5ldyBDb25uZWN0KGUpfXN0YXRpYyBjb250ZW50QXJlYShlKXtyZXR1cm4gbmV3IENvbnRlbnRBcmVhKGUpfXN0YXRpYyBjb3JuZXIoZSl7cmV0dXJuIG5ldyBDb3JuZXIoZSl9c3RhdGljIGRhdGUoZSl7cmV0dXJuIG5ldyBEYXRlRWxlbWVudChlKX1zdGF0aWMgZGF0ZVRpbWUoZSl7cmV0dXJuIG5ldyBEYXRlVGltZShlKX1zdGF0aWMgZGF0ZVRpbWVFZGl0KGUpe3JldHVybiBuZXcgRGF0ZVRpbWVFZGl0KGUpfXN0YXRpYyBkZWNpbWFsKGUpe3JldHVybiBuZXcgRGVjaW1hbChlKX1zdGF0aWMgZGVmYXVsdFVpKGUpe3JldHVybiBuZXcgRGVmYXVsdFVpKGUpfXN0YXRpYyBkZXNjKGUpe3JldHVybiBuZXcgRGVzYyhlKX1zdGF0aWMgZGlnZXN0TWV0aG9kKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kKGUpfXN0YXRpYyBkaWdlc3RNZXRob2RzKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kcyhlKX1zdGF0aWMgZHJhdyhlKXtyZXR1cm4gbmV3IERyYXcoZSl9c3RhdGljIGVkZ2UoZSl7cmV0dXJuIG5ldyBFZGdlKGUpfXN0YXRpYyBlbmNvZGluZyhlKXtyZXR1cm4gbmV3IEVuY29kaW5nKGUpfXN0YXRpYyBlbmNvZGluZ3MoZSl7cmV0dXJuIG5ldyBFbmNvZGluZ3MoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBFbmNyeXB0KGUpfXN0YXRpYyBlbmNyeXB0RGF0YShlKXtyZXR1cm4gbmV3IEVuY3J5cHREYXRhKGUpfXN0YXRpYyBlbmNyeXB0aW9uKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbihlKX1zdGF0aWMgZW5jcnlwdGlvbk1ldGhvZChlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb25NZXRob2QoZSl9c3RhdGljIGVuY3J5cHRpb25NZXRob2RzKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbk1ldGhvZHMoZSl9c3RhdGljIGV2ZW50KGUpe3JldHVybiBuZXcgRXZlbnQoZSl9c3RhdGljIGV4RGF0YShlKXtyZXR1cm4gbmV3IEV4RGF0YShlKX1zdGF0aWMgZXhPYmplY3QoZSl7cmV0dXJuIG5ldyBFeE9iamVjdChlKX1zdGF0aWMgZXhjbEdyb3VwKGUpe3JldHVybiBuZXcgRXhjbEdyb3VwKGUpfXN0YXRpYyBleGVjdXRlKGUpe3JldHVybiBuZXcgRXhlY3V0ZShlKX1zdGF0aWMgZXh0cmFzKGUpe3JldHVybiBuZXcgRXh0cmFzKGUpfXN0YXRpYyBmaWVsZChlKXtyZXR1cm4gbmV3IEZpZWxkKGUpfXN0YXRpYyBmaWxsKGUpe3JldHVybiBuZXcgRmlsbChlKX1zdGF0aWMgZmlsdGVyKGUpe3JldHVybiBuZXcgRmlsdGVyKGUpfXN0YXRpYyBmbG9hdChlKXtyZXR1cm4gbmV3IEZsb2F0KGUpfXN0YXRpYyBmb250KGUpe3JldHVybiBuZXcgRm9udChlKX1zdGF0aWMgZm9ybWF0KGUpe3JldHVybiBuZXcgRm9ybWF0KGUpfXN0YXRpYyBoYW5kbGVyKGUpe3JldHVybiBuZXcgSGFuZGxlcihlKX1zdGF0aWMgaHlwaGVuYXRpb24oZSl7cmV0dXJuIG5ldyBIeXBoZW5hdGlvbihlKX1zdGF0aWMgaW1hZ2UoZSl7cmV0dXJuIG5ldyBJbWFnZShlKX1zdGF0aWMgaW1hZ2VFZGl0KGUpe3JldHVybiBuZXcgSW1hZ2VFZGl0KGUpfXN0YXRpYyBpbnRlZ2VyKGUpe3JldHVybiBuZXcgSW50ZWdlcihlKX1zdGF0aWMgaXNzdWVycyhlKXtyZXR1cm4gbmV3IElzc3VlcnMoZSl9c3RhdGljIGl0ZW1zKGUpe3JldHVybiBuZXcgSXRlbXMoZSl9c3RhdGljIGtlZXAoZSl7cmV0dXJuIG5ldyBLZWVwKGUpfXN0YXRpYyBrZXlVc2FnZShlKXtyZXR1cm4gbmV3IEtleVVzYWdlKGUpfXN0YXRpYyBsaW5lKGUpe3JldHVybiBuZXcgTGluZShlKX1zdGF0aWMgbGluZWFyKGUpe3JldHVybiBuZXcgTGluZWFyKGUpfXN0YXRpYyBsb2NrRG9jdW1lbnQoZSl7cmV0dXJuIG5ldyBMb2NrRG9jdW1lbnQoZSl9c3RhdGljIG1hbmlmZXN0KGUpe3JldHVybiBuZXcgTWFuaWZlc3QoZSl9c3RhdGljIG1hcmdpbihlKXtyZXR1cm4gbmV3IE1hcmdpbihlKX1zdGF0aWMgbWRwKGUpe3JldHVybiBuZXcgTWRwKGUpfXN0YXRpYyBtZWRpdW0oZSl7cmV0dXJuIG5ldyBNZWRpdW0oZSl9c3RhdGljIG1lc3NhZ2UoZSl7cmV0dXJuIG5ldyBNZXNzYWdlKGUpfXN0YXRpYyBudW1lcmljRWRpdChlKXtyZXR1cm4gbmV3IE51bWVyaWNFZGl0KGUpfXN0YXRpYyBvY2N1cihlKXtyZXR1cm4gbmV3IE9jY3VyKGUpfXN0YXRpYyBvaWQoZSl7cmV0dXJuIG5ldyBPaWQoZSl9c3RhdGljIG9pZHMoZSl7cmV0dXJuIG5ldyBPaWRzKGUpfXN0YXRpYyBvdmVyZmxvdyhlKXtyZXR1cm4gbmV3IE92ZXJmbG93KGUpfXN0YXRpYyBwYWdlQXJlYShlKXtyZXR1cm4gbmV3IFBhZ2VBcmVhKGUpfXN0YXRpYyBwYWdlU2V0KGUpe3JldHVybiBuZXcgUGFnZVNldChlKX1zdGF0aWMgcGFyYShlKXtyZXR1cm4gbmV3IFBhcmEoZSl9c3RhdGljIHBhc3N3b3JkRWRpdChlKXtyZXR1cm4gbmV3IFBhc3N3b3JkRWRpdChlKX1zdGF0aWMgcGF0dGVybihlKXtyZXR1cm4gbmV3IFBhdHRlcm4oZSl9c3RhdGljIHBpY3R1cmUoZSl7cmV0dXJuIG5ldyBQaWN0dXJlKGUpfXN0YXRpYyBwcm90byhlKXtyZXR1cm4gbmV3IFByb3RvKGUpfXN0YXRpYyByYWRpYWwoZSl7cmV0dXJuIG5ldyBSYWRpYWwoZSl9c3RhdGljIHJlYXNvbihlKXtyZXR1cm4gbmV3IFJlYXNvbihlKX1zdGF0aWMgcmVhc29ucyhlKXtyZXR1cm4gbmV3IFJlYXNvbnMoZSl9c3RhdGljIHJlY3RhbmdsZShlKXtyZXR1cm4gbmV3IFJlY3RhbmdsZShlKX1zdGF0aWMgcmVmKGUpe3JldHVybiBuZXcgUmVmRWxlbWVudChlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgU2NyaXB0KGUpfXN0YXRpYyBzZXRQcm9wZXJ0eShlKXtyZXR1cm4gbmV3IFNldFByb3BlcnR5KGUpfXN0YXRpYyBzaWduRGF0YShlKXtyZXR1cm4gbmV3IFNpZ25EYXRhKGUpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBTaWduYXR1cmUoZSl9c3RhdGljIHNpZ25pbmcoZSl7cmV0dXJuIG5ldyBTaWduaW5nKGUpfXN0YXRpYyBzb2xpZChlKXtyZXR1cm4gbmV3IFNvbGlkKGUpfXN0YXRpYyBzcGVhayhlKXtyZXR1cm4gbmV3IFNwZWFrKGUpfXN0YXRpYyBzdGlwcGxlKGUpe3JldHVybiBuZXcgU3RpcHBsZShlKX1zdGF0aWMgc3ViZm9ybShlKXtyZXR1cm4gbmV3IFN1YmZvcm0oZSl9c3RhdGljIHN1YmZvcm1TZXQoZSl7cmV0dXJuIG5ldyBTdWJmb3JtU2V0KGUpfXN0YXRpYyBzdWJqZWN0RE4oZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE4oZSl9c3RhdGljIHN1YmplY3RETnMoZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE5zKGUpfXN0YXRpYyBzdWJtaXQoZSl7cmV0dXJuIG5ldyBTdWJtaXQoZSl9c3RhdGljIHRlbXBsYXRlKGUpe3JldHVybiBuZXcgVGVtcGxhdGUoZSl9c3RhdGljIHRleHQoZSl7cmV0dXJuIG5ldyBUZXh0KGUpfXN0YXRpYyB0ZXh0RWRpdChlKXtyZXR1cm4gbmV3IFRleHRFZGl0KGUpfXN0YXRpYyB0aW1lKGUpe3JldHVybiBuZXcgVGltZShlKX1zdGF0aWMgdGltZVN0YW1wKGUpe3JldHVybiBuZXcgVGltZVN0YW1wKGUpfXN0YXRpYyB0b29sVGlwKGUpe3JldHVybiBuZXcgVG9vbFRpcChlKX1zdGF0aWMgdHJhdmVyc2FsKGUpe3JldHVybiBuZXcgVHJhdmVyc2FsKGUpfXN0YXRpYyB0cmF2ZXJzZShlKXtyZXR1cm4gbmV3IFRyYXZlcnNlKGUpfXN0YXRpYyB1aShlKXtyZXR1cm4gbmV3IFVpKGUpfXN0YXRpYyB2YWxpZGF0ZShlKXtyZXR1cm4gbmV3IFZhbGlkYXRlKGUpfXN0YXRpYyB2YWx1ZShlKXtyZXR1cm4gbmV3IFZhbHVlKGUpfXN0YXRpYyB2YXJpYWJsZXMoZSl7cmV0dXJuIG5ldyBWYXJpYWJsZXMoZSl9fXQuVGVtcGxhdGVOYW1lc3BhY2U9VGVtcGxhdGVOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5hZGRIVE1MPWZ1bmN0aW9uIGFkZEhUTUwoZSx0LGEpe2NvbnN0IGk9ZVtyLiRleHRyYV0scz1pLmF2YWlsYWJsZVNwYWNlLFtvLGMsbCxoXT1hO3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6aS53aWR0aD1NYXRoLm1heChpLndpZHRoLG8rbCk7aS5oZWlnaHQ9TWF0aC5tYXgoaS5oZWlnaHQsYytoKTtpLmNoaWxkcmVuLnB1c2godCk7YnJlYWs7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6aWYoIWkubGluZXx8MT09PWkuYXR0ZW1wdCl7aS5saW5lPWNyZWF0ZUxpbmUoZSxbXSk7aS5jaGlsZHJlbi5wdXNoKGkubGluZSk7aS5udW1iZXJJbkxpbmU9MH1pLm51bWJlckluTGluZSs9MTtpLmxpbmUuY2hpbGRyZW4ucHVzaCh0KTtpZigwPT09aS5hdHRlbXB0KXtpLmN1cnJlbnRXaWR0aCs9bDtpLmhlaWdodD1NYXRoLm1heChpLmhlaWdodCxpLnByZXZIZWlnaHQraCl9ZWxzZXtpLmN1cnJlbnRXaWR0aD1sO2kucHJldkhlaWdodD1pLmhlaWdodDtpLmhlaWdodCs9aDtpLmF0dGVtcHQ9MH1pLndpZHRoPU1hdGgubWF4KGkud2lkdGgsaS5jdXJyZW50V2lkdGgpO2JyZWFrO2Nhc2Uicmwtcm93IjpjYXNlInJvdyI6e2kuY2hpbGRyZW4ucHVzaCh0KTtpLndpZHRoKz1sO2kuaGVpZ2h0PU1hdGgubWF4KGkuaGVpZ2h0LGgpO2NvbnN0IGU9KDAsbi5tZWFzdXJlVG9TdHJpbmcpKGkuaGVpZ2h0KTtmb3IoY29uc3QgdCBvZiBpLmNoaWxkcmVuKXQuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9ZTticmVha31jYXNlInRhYmxlIjpjYXNlInRiIjppLndpZHRoPU1hdGgubWluKHMud2lkdGgsTWF0aC5tYXgoaS53aWR0aCxsKSk7aS5oZWlnaHQrPWg7aS5jaGlsZHJlbi5wdXNoKHQpfX07dC5jaGVja0RpbWVuc2lvbnM9ZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25zKGUsdCl7aWYobnVsbD09PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSlyZXR1cm4hMDtpZigwPT09ZS53fHwwPT09ZS5oKXJldHVybiEwO2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpLG49YVtyLiRleHRyYV0mJmFbci4kZXh0cmFdLmF0dGVtcHR8fDAsWyxpLHMsb109ZnVuY3Rpb24gZ2V0VHJhbnNmb3JtZWRCQm94KGUpe2xldCB0LGEscj0iIj09PWUudz9OYU46ZS53LG49IiI9PT1lLmg/TmFOOmUuaCxbaSxzXT1bMCwwXTtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOltpLHNdPVtyLzIsbl07YnJlYWs7Y2FzZSJib3R0b21MZWZ0IjpbaSxzXT1bMCxuXTticmVhaztjYXNlImJvdHRvbVJpZ2h0IjpbaSxzXT1bcixuXTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6W2ksc109W3IvMixuLzJdO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6W2ksc109WzAsbi8yXTticmVhaztjYXNlIm1pZGRsZVJpZ2h0IjpbaSxzXT1bcixuLzJdO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjpbaSxzXT1bci8yLDBdO2JyZWFrO2Nhc2UidG9wUmlnaHQiOltpLHNdPVtyLDBdfXN3aXRjaChlLnJvdGF0ZXx8MCl7Y2FzZSAwOlt0LGFdPVstaSwtc107YnJlYWs7Y2FzZSA5MDpbdCxhXT1bLXMsaV07W3Isbl09W24sLXJdO2JyZWFrO2Nhc2UgMTgwOlt0LGFdPVtpLHNdO1tyLG5dPVstciwtbl07YnJlYWs7Y2FzZSAyNzA6W3QsYV09W3MsLWldO1tyLG5dPVstbixyXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxyKSxlLnkrYStNYXRoLm1pbigwLG4pLE1hdGguYWJzKHIpLE1hdGguYWJzKG4pXX0oZSk7c3dpdGNoKGEubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PW4/ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT8iIiE9PWUudz9NYXRoLnJvdW5kKHMtdC53aWR0aCk8PTI6dC53aWR0aD4yOiEoIiIhPT1lLmgmJk1hdGgucm91bmQoby10LmhlaWdodCk+MikmJigiIiE9PWUudz9NYXRoLnJvdW5kKHMtdC53aWR0aCk8PTJ8fDA9PT1hW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUmJnQuaGVpZ2h0PjI6dC53aWR0aD4yKTohIWVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCEoIiIhPT1lLmgmJk1hdGgucm91bmQoby10LmhlaWdodCk+MikmJigoIiI9PT1lLnd8fE1hdGgucm91bmQocy10LndpZHRoKTw9Mnx8IWFbci4kaXNUaGVyZU1vcmVXaWR0aF0oKSkmJnQuaGVpZ2h0PjIpO2Nhc2UidGFibGUiOmNhc2UidGIiOnJldHVybiEhZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxlW3IuJGlzU3BsaXR0YWJsZV0oKT8oIiI9PT1lLnd8fE1hdGgucm91bmQocy10LndpZHRoKTw9Mnx8IWFbci4kaXNUaGVyZU1vcmVXaWR0aF0oKSkmJnQuaGVpZ2h0PjI6TWF0aC5yb3VuZChvLXQuaGVpZ2h0KTw9Mik7Y2FzZSJwb3NpdGlvbiI6aWYoZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSlyZXR1cm4hMDtpZigiIj09PWUuaHx8TWF0aC5yb3VuZChvK2ktdC5oZWlnaHQpPD0yKXJldHVybiEwO2NvbnN0IGM9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYTtyZXR1cm4gbytpPmMuaDtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybiEhZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxNYXRoLnJvdW5kKG8tdC5oZWlnaHQpPD0yKTtkZWZhdWx0OnJldHVybiEwfX07dC5mbHVzaEhUTUw9ZnVuY3Rpb24gZmx1c2hIVE1MKGUpe2lmKCFlW3IuJGV4dHJhXSlyZXR1cm4gbnVsbDtjb25zdCB0PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZVtyLiRleHRyYV0uYXR0cmlidXRlcyxjaGlsZHJlbjplW3IuJGV4dHJhXS5jaGlsZHJlbn07aWYoZVtyLiRleHRyYV0uZmFpbGluZ05vZGUpe2NvbnN0IGE9ZVtyLiRleHRyYV0uZmFpbGluZ05vZGVbci4kZmx1c2hIVE1MXSgpO2EmJihlLmxheW91dC5lbmRzV2l0aCgiLXRiIik/dC5jaGlsZHJlbi5wdXNoKGNyZWF0ZUxpbmUoZSxbYV0pKTp0LmNoaWxkcmVuLnB1c2goYSkpfWlmKDA9PT10LmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gdH07dC5nZXRBdmFpbGFibGVTcGFjZT1mdW5jdGlvbiBnZXRBdmFpbGFibGVTcGFjZShlKXtjb25zdCB0PWVbci4kZXh0cmFdLmF2YWlsYWJsZVNwYWNlLGE9ZS5tYXJnaW4/ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXQ6MCxuPWUubWFyZ2luP2UubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0OjA7c3dpdGNoKGUubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWVbci4kZXh0cmFdLmF0dGVtcHQ/e3dpZHRoOnQud2lkdGgtbi1lW3IuJGV4dHJhXS5jdXJyZW50V2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LWEtZVtyLiRleHRyYV0ucHJldkhlaWdodH06e3dpZHRoOnQud2lkdGgtbixoZWlnaHQ6dC5oZWlnaHQtYS1lW3IuJGV4dHJhXS5oZWlnaHR9O2Nhc2Uicmwtcm93IjpjYXNlInJvdyI6cmV0dXJue3dpZHRoOmVbci4kZXh0cmFdLmNvbHVtbldpZHRocy5zbGljZShlW3IuJGV4dHJhXS5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKChlLHQpPT5lK3QpKSxoZWlnaHQ6dC5oZWlnaHQtbn07Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cmV0dXJue3dpZHRoOnQud2lkdGgtbixoZWlnaHQ6dC5oZWlnaHQtYS1lW3IuJGV4dHJhXS5oZWlnaHR9O2RlZmF1bHQ6cmV0dXJuIHR9fTt2YXIgcj1hKDc1KSxuPWEoODIpO2Z1bmN0aW9uIGNyZWF0ZUxpbmUoZSx0KXtyZXR1cm57bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbImxyLXRiIj09PWUubGF5b3V0PyJ4ZmFMciI6InhmYVJsIl19LGNoaWxkcmVuOnR9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmNvbXB1dGVCYm94PWZ1bmN0aW9uIGNvbXB1dGVCYm94KGUsdCxhKXtsZXQgbjtpZigiIiE9PWUudyYmIiIhPT1lLmgpbj1bZS54LGUueSxlLncsZS5oXTtlbHNle2lmKCFhKXJldHVybiBudWxsO2xldCBpPWUudztpZigiIj09PWkpe2lmKDA9PT1lLm1heFcpe2NvbnN0IHQ9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2k9InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQudz8wOmUubWluV31lbHNlIGk9TWF0aC5taW4oZS5tYXhXLGEud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD1tZWFzdXJlVG9TdHJpbmcoaSl9bGV0IHM9ZS5oO2lmKCIiPT09cyl7aWYoMD09PWUubWF4SCl7Y29uc3QgdD1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7cz0icG9zaXRpb24iPT09dC5sYXlvdXQmJiIiIT09dC5oPzA6ZS5taW5IfWVsc2Ugcz1NYXRoLm1pbihlLm1heEgsYS5oZWlnaHQpO3QuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKHMpfW49W2UueCxlLnksaSxzXX1yZXR1cm4gbn07dC5jcmVhdGVXcmFwcGVyPWZ1bmN0aW9uIGNyZWF0ZVdyYXBwZXIoZSx0KXtjb25zdHthdHRyaWJ1dGVzOmF9PXQse3N0eWxlOm59PWEsaT17bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbInhmYVdyYXBwZXIiXSxzdHlsZTpPYmplY3QuY3JlYXRlKG51bGwpfSxjaGlsZHJlbjpbXX07YS5jbGFzcy5wdXNoKCJ4ZmFXcmFwcGVkIik7aWYoZS5ib3JkZXIpe2NvbnN0e3dpZHRoczphLGluc2V0czpzfT1lLmJvcmRlcltyLiRleHRyYV07bGV0IG8sYyxsPXNbMF0saD1zWzNdO2NvbnN0IHU9c1swXStzWzJdLGQ9c1sxXStzWzNdO3N3aXRjaChlLmJvcmRlci5oYW5kKXtjYXNlImV2ZW4iOmwtPWFbMF0vMjtoLT1hWzNdLzI7bz1gY2FsYygxMDAlICsgJHsoYVsxXSthWzNdKS8yLWR9cHgpYDtjPWBjYWxjKDEwMCUgKyAkeyhhWzBdK2FbMl0pLzItdX1weClgO2JyZWFrO2Nhc2UibGVmdCI6bC09YVswXTtoLT1hWzNdO289YGNhbGMoMTAwJSArICR7YVsxXSthWzNdLWR9cHgpYDtjPWBjYWxjKDEwMCUgKyAke2FbMF0rYVsyXS11fXB4KWA7YnJlYWs7Y2FzZSJyaWdodCI6bz1kP2BjYWxjKDEwMCUgLSAke2R9cHgpYDoiMTAwJSI7Yz11P2BjYWxjKDEwMCUgLSAke3V9cHgpYDoiMTAwJSJ9Y29uc3QgZj1bInhmYUJvcmRlciJdO2lzUHJpbnRPbmx5KGUuYm9yZGVyKSYmZi5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBnPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOmYsc3R5bGU6e3RvcDpgJHtsfXB4YCxsZWZ0OmAke2h9cHhgLHdpZHRoOm8saGVpZ2h0OmN9fSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGUgb2ZbImJvcmRlciIsImJvcmRlcldpZHRoIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJTdHlsZSJdKWlmKHZvaWQgMCE9PW5bZV0pe2cuYXR0cmlidXRlcy5zdHlsZVtlXT1uW2VdO2RlbGV0ZSBuW2VdfWkuY2hpbGRyZW4ucHVzaChnLHQpfWVsc2UgaS5jaGlsZHJlbi5wdXNoKHQpO2Zvcihjb25zdCBlIG9mWyJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZENsaXAiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtT3JpZ2luIiwidmlzaWJpbGl0eSJdKWlmKHZvaWQgMCE9PW5bZV0pe2kuYXR0cmlidXRlcy5zdHlsZVtlXT1uW2VdO2RlbGV0ZSBuW2VdfSJhYnNvbHV0ZSI9PT1uLnBvc2l0aW9uP2kuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiOmkuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiO2RlbGV0ZSBuLnBvc2l0aW9uO2lmKG4uYWxpZ25TZWxmKXtpLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPW4uYWxpZ25TZWxmO2RlbGV0ZSBuLmFsaWduU2VsZn1yZXR1cm4gaX07dC5maXhEaW1lbnNpb25zPWZ1bmN0aW9uIGZpeERpbWVuc2lvbnMoZSl7Y29uc3QgdD1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYodC5sYXlvdXQmJnQubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgYT10W3IuJGV4dHJhXSxuPWUuY29sU3BhbjtsZXQgaTtpPS0xPT09bj9hLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk6YS5jb2x1bW5XaWR0aHMuc2xpY2UoYS5jdXJyZW50Q29sdW1uLGEuY3VycmVudENvbHVtbituKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApO2lzTmFOKGkpfHwoZS53PWkpfXQubGF5b3V0JiYicG9zaXRpb24iIT09dC5sYXlvdXQmJihlLng9ZS55PTApOyJ0YWJsZSI9PT1lLmxheW91dCYmIiI9PT1lLncmJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5XaWR0aHMpJiYoZS53PWUuY29sdW1uV2lkdGhzLnJlZHVjZSgoKGUsdCk9PmUrdCksMCkpfTt0LmZpeFRleHRJbmRlbnQ9ZnVuY3Rpb24gZml4VGV4dEluZGVudChlKXtjb25zdCB0PSgwLGkuZ2V0TWVhc3VyZW1lbnQpKGUudGV4dEluZGVudCwiMHB4Iik7aWYodD49MClyZXR1cm47Y29uc3QgYT0icGFkZGluZyIrKCJsZWZ0Ij09KCJyaWdodCI9PT1lLnRleHRBbGlnbj8icmlnaHQiOiJsZWZ0Iik/IkxlZnQiOiJSaWdodCIpLHI9KDAsaS5nZXRNZWFzdXJlbWVudCkoZVthXSwiMHB4Iik7ZVthXT1yLXQrInB4In07dC5maXhVUkw9ZnVuY3Rpb24gZml4VVJMKGUpe2NvbnN0IHQ9KDAsbi5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShlLG51bGwse2FkZERlZmF1bHRQcm90b2NvbDohMCx0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtyZXR1cm4gdD90LmhyZWY6bnVsbH07dC5pc1ByaW50T25seT1pc1ByaW50T25seTt0LmxheW91dENsYXNzPWZ1bmN0aW9uIGxheW91dENsYXNzKGUpe3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6ZGVmYXVsdDpyZXR1cm4ieGZhUG9zaXRpb24iO2Nhc2UibHItdGIiOnJldHVybiJ4ZmFMclRiIjtjYXNlInJsLXJvdyI6cmV0dXJuInhmYVJsUm93IjtjYXNlInJsLXRiIjpyZXR1cm4ieGZhUmxUYiI7Y2FzZSJyb3ciOnJldHVybiJ4ZmFSb3ciO2Nhc2UidGFibGUiOnJldHVybiJ4ZmFUYWJsZSI7Y2FzZSJ0YiI6cmV0dXJuInhmYVRiIn19O3QubGF5b3V0Tm9kZT1mdW5jdGlvbiBsYXlvdXROb2RlKGUsdCl7bGV0IGE9bnVsbCxuPW51bGwsaT0hMTtpZigoIWUud3x8IWUuaCkmJmUudmFsdWUpe2xldCBzPTAsbz0wO2lmKGUubWFyZ2luKXtzPWUubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0O289ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXR9bGV0IGM9bnVsbCxsPW51bGw7aWYoZS5wYXJhKXtsPU9iamVjdC5jcmVhdGUobnVsbCk7Yz0iIj09PWUucGFyYS5saW5lSGVpZ2h0P251bGw6ZS5wYXJhLmxpbmVIZWlnaHQ7bC50b3A9IiI9PT1lLnBhcmEuc3BhY2VBYm92ZT8wOmUucGFyYS5zcGFjZUFib3ZlO2wuYm90dG9tPSIiPT09ZS5wYXJhLnNwYWNlQmVsb3c/MDplLnBhcmEuc3BhY2VCZWxvdztsLmxlZnQ9IiI9PT1lLnBhcmEubWFyZ2luTGVmdD8wOmUucGFyYS5tYXJnaW5MZWZ0O2wucmlnaHQ9IiI9PT1lLnBhcmEubWFyZ2luUmlnaHQ/MDplLnBhcmEubWFyZ2luUmlnaHR9bGV0IGg9ZS5mb250O2lmKCFoKXtjb25zdCB0PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO2xldCBhPWVbci4kZ2V0UGFyZW50XSgpO2Zvcig7YSYmYSE9PXQ7KXtpZihhLmZvbnQpe2g9YS5mb250O2JyZWFrfWE9YVtyLiRnZXRQYXJlbnRdKCl9fWNvbnN0IHU9KGUud3x8dC53aWR0aCktcyxkPWVbci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcjtpZihlLnZhbHVlLmV4RGF0YSYmZS52YWx1ZS5leERhdGFbci4kY29udGVudF0mJiJ0ZXh0L2h0bWwiPT09ZS52YWx1ZS5leERhdGEuY29udGVudFR5cGUpe2NvbnN0IHQ9bGF5b3V0VGV4dChlLnZhbHVlLmV4RGF0YVtyLiRjb250ZW50XSxoLGwsYyxkLHUpO249dC53aWR0aDthPXQuaGVpZ2h0O2k9dC5pc0Jyb2tlbn1lbHNle2NvbnN0IHQ9ZS52YWx1ZVtyLiR0ZXh0XSgpO2lmKHQpe2NvbnN0IGU9bGF5b3V0VGV4dCh0LGgsbCxjLGQsdSk7bj1lLndpZHRoO2E9ZS5oZWlnaHQ7aT1lLmlzQnJva2VufX1udWxsPT09bnx8ZS53fHwobis9cyk7bnVsbD09PWF8fGUuaHx8KGErPW8pfXJldHVybnt3Om4saDphLGlzQnJva2VuOml9fTt0Lm1lYXN1cmVUb1N0cmluZz1tZWFzdXJlVG9TdHJpbmc7dC5zZXRBY2Nlc3M9ZnVuY3Rpb24gc2V0QWNjZXNzKGUsdCl7c3dpdGNoKGUuYWNjZXNzKXtjYXNlIm5vbkludGVyYWN0aXZlIjp0LnB1c2goInhmYU5vbkludGVyYWN0aXZlIik7YnJlYWs7Y2FzZSJyZWFkT25seSI6dC5wdXNoKCJ4ZmFSZWFkT25seSIpO2JyZWFrO2Nhc2UicHJvdGVjdGVkIjp0LnB1c2goInhmYURpc2FibGVkIil9fTt0LnNldEZvbnRGYW1pbHk9ZnVuY3Rpb24gc2V0Rm9udEZhbWlseShlLHQsYSxyKXtpZighYSl7ZGVsZXRlIHIuZm9udEZhbWlseTtyZXR1cm59Y29uc3Qgbj0oMCxpLnN0cmlwUXVvdGVzKShlLnR5cGVmYWNlKTtyLmZvbnRGYW1pbHk9YCIke259ImA7Y29uc3Qgbz1hLmZpbmQobik7aWYobyl7Y29uc3R7Zm9udEZhbWlseTphfT1vLnJlZ3VsYXIuY3NzRm9udEluZm87YSE9PW4mJihyLmZvbnRGYW1pbHk9YCIke2F9ImApO2NvbnN0IGk9Z2V0Q3VycmVudFBhcmEodCk7aWYoaSYmIiIhPT1pLmxpbmVIZWlnaHQpcmV0dXJuO2lmKHIubGluZUhlaWdodClyZXR1cm47Y29uc3QgYz0oMCxzLnNlbGVjdEZvbnQpKGUsbyk7YyYmKHIubGluZUhlaWdodD1NYXRoLm1heCgxLjIsYy5saW5lSGVpZ2h0KSl9fTt0LnNldE1pbk1heERpbWVuc2lvbnM9ZnVuY3Rpb24gc2V0TWluTWF4RGltZW5zaW9ucyhlLHQpe2lmKCJwb3NpdGlvbiI9PT1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCkubGF5b3V0KXtlLm1pblc+MCYmKHQubWluV2lkdGg9bWVhc3VyZVRvU3RyaW5nKGUubWluVykpO2UubWF4Vz4wJiYodC5tYXhXaWR0aD1tZWFzdXJlVG9TdHJpbmcoZS5tYXhXKSk7ZS5taW5IPjAmJih0Lm1pbkhlaWdodD1tZWFzdXJlVG9TdHJpbmcoZS5taW5IKSk7ZS5tYXhIPjAmJih0Lm1heEhlaWdodD1tZWFzdXJlVG9TdHJpbmcoZS5tYXhIKSl9fTt0LnNldFBhcmE9ZnVuY3Rpb24gc2V0UGFyYShlLHQsYSl7aWYoYS5hdHRyaWJ1dGVzLmNsYXNzJiZhLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYVJpY2giKSl7aWYodCl7IiI9PT1lLmgmJih0LmhlaWdodD0iYXV0byIpOyIiPT09ZS53JiYodC53aWR0aD0iYXV0byIpfWNvbnN0IG49Z2V0Q3VycmVudFBhcmEoZSk7aWYobil7Y29uc3QgZT1hLmF0dHJpYnV0ZXMuc3R5bGU7ZS5kaXNwbGF5PSJmbGV4IjtlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiI7c3dpdGNoKG4udkFsaWduKXtjYXNlInRvcCI6ZS5qdXN0aWZ5Q29udGVudD0ic3RhcnQiO2JyZWFrO2Nhc2UiYm90dG9tIjplLmp1c3RpZnlDb250ZW50PSJlbmQiO2JyZWFrO2Nhc2UibWlkZGxlIjplLmp1c3RpZnlDb250ZW50PSJjZW50ZXIifWNvbnN0IHQ9bltyLiR0b1N0eWxlXSgpO2Zvcihjb25zdFthLHJdb2YgT2JqZWN0LmVudHJpZXModCkpYSBpbiBlfHwoZVthXT1yKX19fTt0LnRvU3R5bGU9ZnVuY3Rpb24gdG9TdHlsZShlLC4uLnQpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3QgaSBvZiB0KXtjb25zdCB0PWVbaV07aWYobnVsbCE9PXQpaWYoYy5oYXNPd25Qcm9wZXJ0eShpKSljW2ldKGUsYSk7ZWxzZSBpZih0IGluc3RhbmNlb2Ygci5YRkFPYmplY3Qpe2NvbnN0IGU9dFtyLiR0b1N0eWxlXSgpO2U/T2JqZWN0LmFzc2lnbihhLGUpOigwLG4ud2FybikoYChERUJVRykgLSBYRkEgLSBzdHlsZSBmb3IgJHtpfSBub3QgaW1wbGVtZW50ZWQgeWV0YCl9fXJldHVybiBhfTt2YXIgcj1hKDc1KSxuPWEoMiksaT1hKDc2KSxzPWEoODMpLG89YSg4NCk7ZnVuY3Rpb24gbWVhc3VyZVRvU3RyaW5nKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8iMHB4IjpOdW1iZXIuaXNJbnRlZ2VyKGUpP2Ake2V9cHhgOmAke2UudG9GaXhlZCgyKX1weGB9Y29uc3QgYz17YW5jaG9yVHlwZShlLHQpe2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKGEmJighYS5sYXlvdXR8fCJwb3NpdGlvbiI9PT1hLmxheW91dCkpeyJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKTtzd2l0Y2goZS5hbmNob3JUeXBlKXtjYXNlImJvdHRvbUNlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwgLTEwMCUpIjticmVhaztjYXNlImJvdHRvbUxlZnQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKDAsLTEwMCUpIjticmVhaztjYXNlImJvdHRvbVJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwtMTAwJSkiO2JyZWFrO2Nhc2UibWlkZGxlQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLC01MCUpIjticmVhaztjYXNlIm1pZGRsZUxlZnQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKDAsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC01MCUpIjticmVhaztjYXNlInRvcENlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwwKSI7YnJlYWs7Y2FzZSJ0b3BSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsMCkifX19LGRpbWVuc2lvbnMoZSx0KXtjb25zdCBhPWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtsZXQgbj1lLnc7Y29uc3QgaT1lLmg7aWYoYS5sYXlvdXQmJmEubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgdD1hW3IuJGV4dHJhXSxpPWUuY29sU3BhbjtsZXQgcztpZigtMT09PWkpe3M9dC5jb2x1bW5XaWR0aHMuc2xpY2UodC5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApO3QuY3VycmVudENvbHVtbj0wfWVsc2V7cz10LmNvbHVtbldpZHRocy5zbGljZSh0LmN1cnJlbnRDb2x1bW4sdC5jdXJyZW50Q29sdW1uK2kpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk7dC5jdXJyZW50Q29sdW1uPSh0LmN1cnJlbnRDb2x1bW4rZS5jb2xTcGFuKSV0LmNvbHVtbldpZHRocy5sZW5ndGh9aXNOYU4ocyl8fChuPWUudz1zKX10LndpZHRoPSIiIT09bj9tZWFzdXJlVG9TdHJpbmcobik6ImF1dG8iO3QuaGVpZ2h0PSIiIT09aT9tZWFzdXJlVG9TdHJpbmcoaSk6ImF1dG8ifSxwb3NpdGlvbihlLHQpe2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKCFhfHwhYS5sYXlvdXR8fCJwb3NpdGlvbiI9PT1hLmxheW91dCl7dC5wb3NpdGlvbj0iYWJzb2x1dGUiO3QubGVmdD1tZWFzdXJlVG9TdHJpbmcoZS54KTt0LnRvcD1tZWFzdXJlVG9TdHJpbmcoZS55KX19LHJvdGF0ZShlLHQpe2lmKGUucm90YXRlKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7dC50cmFuc2Zvcm0rPWByb3RhdGUoLSR7ZS5yb3RhdGV9ZGVnKWA7dC50cmFuc2Zvcm1PcmlnaW49InRvcCBsZWZ0In19LHByZXNlbmNlKGUsdCl7c3dpdGNoKGUucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjp0LnZpc2liaWxpdHk9ImhpZGRlbiI7YnJlYWs7Y2FzZSJoaWRkZW4iOmNhc2UiaW5hY3RpdmUiOnQuZGlzcGxheT0ibm9uZSJ9fSxoQWxpZ24oZSx0KXtpZigicGFyYSI9PT1lW3IuJG5vZGVOYW1lXSlzd2l0Y2goZS5oQWxpZ24pe2Nhc2UianVzdGlmeUFsbCI6dC50ZXh0QWxpZ249Imp1c3RpZnktYWxsIjticmVhaztjYXNlInJhZGl4Ijp0LnRleHRBbGlnbj0ibGVmdCI7YnJlYWs7ZGVmYXVsdDp0LnRleHRBbGlnbj1lLmhBbGlnbn1lbHNlIHN3aXRjaChlLmhBbGlnbil7Y2FzZSJsZWZ0Ijp0LmFsaWduU2VsZj0ic3RhcnQiO2JyZWFrO2Nhc2UiY2VudGVyIjp0LmFsaWduU2VsZj0iY2VudGVyIjticmVhaztjYXNlInJpZ2h0Ijp0LmFsaWduU2VsZj0iZW5kIn19LG1hcmdpbihlLHQpe2UubWFyZ2luJiYodC5tYXJnaW49ZS5tYXJnaW5bci4kdG9TdHlsZV0oKS5tYXJnaW4pfX07ZnVuY3Rpb24gbGF5b3V0VGV4dChlLHQsYSxuLGkscyl7Y29uc3QgYz1uZXcgby5UZXh0TWVhc3VyZSh0LGEsbixpKTsic3RyaW5nIj09dHlwZW9mIGU/Yy5hZGRTdHJpbmcoZSk6ZVtyLiRwdXNoR2x5cGhzXShjKTtyZXR1cm4gYy5jb21wdXRlKHMpfWZ1bmN0aW9uIGlzUHJpbnRPbmx5KGUpe3JldHVybiBlLnJlbGV2YW50Lmxlbmd0aD4wJiYhZS5yZWxldmFudFswXS5leGNsdWRlZCYmInByaW50Ij09PWUucmVsZXZhbnRbMF0udmlld25hbWV9ZnVuY3Rpb24gZ2V0Q3VycmVudFBhcmEoZSl7Y29uc3QgdD1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ucGFyYVN0YWNrO3JldHVybiB0Lmxlbmd0aD90LmF0KC0xKTpudWxsfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkZvbnRGaW5kZXI9dm9pZCAwO3QuZ2V0TWV0cmljcz1mdW5jdGlvbiBnZXRNZXRyaWNzKGUsdD0hMSl7bGV0IGE9bnVsbDtpZihlKXtjb25zdCB0PSgwLG4uc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpLGk9ZVtyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmZpbmQodCk7YT1zZWxlY3RGb250KGUsaSl9aWYoIWEpcmV0dXJue2xpbmVIZWlnaHQ6MTIsbGluZUdhcDoyLGxpbmVOb0dhcDoxMH07Y29uc3QgaT1lLnNpemV8fDEwLHM9YS5saW5lSGVpZ2h0P01hdGgubWF4KHQ/MDoxLjIsYS5saW5lSGVpZ2h0KToxLjIsbz12b2lkIDA9PT1hLmxpbmVHYXA/LjI6YS5saW5lR2FwO3JldHVybntsaW5lSGVpZ2h0OnMqaSxsaW5lR2FwOm8qaSxsaW5lTm9HYXA6TWF0aC5tYXgoMSxzLW8pKml9fTt0LnNlbGVjdEZvbnQ9c2VsZWN0Rm9udDt2YXIgcj1hKDc1KSxuPWEoNzYpLGk9YSgyKTt0LkZvbnRGaW5kZXI9Y2xhc3MgRm9udEZpbmRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmZvbnRzPW5ldyBNYXA7dGhpcy5jYWNoZT1uZXcgTWFwO3RoaXMud2FybmVkPW5ldyBTZXQ7dGhpcy5kZWZhdWx0Rm9udD1udWxsO3RoaXMuYWRkKGUpfWFkZChlLHQ9bnVsbCl7Zm9yKGNvbnN0IHQgb2YgZSl0aGlzLmFkZFBkZkZvbnQodCk7Zm9yKGNvbnN0IGUgb2YgdGhpcy5mb250cy52YWx1ZXMoKSllLnJlZ3VsYXJ8fChlLnJlZ3VsYXI9ZS5pdGFsaWN8fGUuYm9sZHx8ZS5ib2xkaXRhbGljKTtpZighdHx8MD09PXQuc2l6ZSlyZXR1cm47Y29uc3QgYT10aGlzLmZvbnRzLmdldCgiUGRmSlMtRmFsbGJhY2stUGRmSlMtWEZBIik7Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLmZvbnRzLnNldChlLGEpfWFkZFBkZkZvbnQoZSl7Y29uc3QgdD1lLmNzc0ZvbnRJbmZvLGE9dC5mb250RmFtaWx5O2xldCByPXRoaXMuZm9udHMuZ2V0KGEpO2lmKCFyKXtyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5mb250cy5zZXQoYSxyKTt0aGlzLmRlZmF1bHRGb250fHwodGhpcy5kZWZhdWx0Rm9udD1yKX1sZXQgbj0iIjtjb25zdCBpPXBhcnNlRmxvYXQodC5mb250V2VpZ2h0KTswIT09cGFyc2VGbG9hdCh0Lml0YWxpY0FuZ2xlKT9uPWk+PTcwMD8iYm9sZGl0YWxpYyI6Iml0YWxpYyI6aT49NzAwJiYobj0iYm9sZCIpO2lmKCFuKXsoZS5uYW1lLmluY2x1ZGVzKCJCb2xkIil8fGUucHNOYW1lJiZlLnBzTmFtZS5pbmNsdWRlcygiQm9sZCIpKSYmKG49ImJvbGQiKTsoZS5uYW1lLmluY2x1ZGVzKCJJdGFsaWMiKXx8ZS5uYW1lLmVuZHNXaXRoKCJJdCIpfHxlLnBzTmFtZSYmKGUucHNOYW1lLmluY2x1ZGVzKCJJdGFsaWMiKXx8ZS5wc05hbWUuZW5kc1dpdGgoIkl0IikpKSYmKG4rPSJpdGFsaWMiKX1ufHwobj0icmVndWxhciIpO3Jbbl09ZX1nZXREZWZhdWx0KCl7cmV0dXJuIHRoaXMuZGVmYXVsdEZvbnR9ZmluZChlLHQ9ITApe2xldCBhPXRoaXMuZm9udHMuZ2V0KGUpfHx0aGlzLmNhY2hlLmdldChlKTtpZihhKXJldHVybiBhO2NvbnN0IHI9Lyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpO2xldCBuPWUucmVwbGFjZShyLCIiKTthPXRoaXMuZm9udHMuZ2V0KG4pO2lmKGEpe3RoaXMuY2FjaGUuc2V0KGUsYSk7cmV0dXJuIGF9bj1uLnRvTG93ZXJDYXNlKCk7Y29uc3Qgcz1bXTtmb3IoY29uc3RbZSx0XW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVwbGFjZShyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobikmJnMucHVzaCh0KTtpZigwPT09cy5sZW5ndGgpZm9yKGNvbnN0WyxlXW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVndWxhci5uYW1lJiZlLnJlZ3VsYXIubmFtZS5yZXBsYWNlKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKSYmcy5wdXNoKGUpO2lmKDA9PT1zLmxlbmd0aCl7bj1uLnJlcGxhY2UoL3BzbXR8bXQvZ2ksIiIpO2Zvcihjb25zdFtlLHRdb2YgdGhpcy5mb250cy5lbnRyaWVzKCkpZS5yZXBsYWNlKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKSYmcy5wdXNoKHQpfWlmKDA9PT1zLmxlbmd0aClmb3IoY29uc3QgZSBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKWUucmVndWxhci5uYW1lJiZlLnJlZ3VsYXIubmFtZS5yZXBsYWNlKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKSYmcy5wdXNoKGUpO2lmKHMubGVuZ3RoPj0xKXsxIT09cy5sZW5ndGgmJnQmJigwLGkud2FybikoYFhGQSAtIFRvbyBtYW55IGNob2ljZXMgdG8gZ3Vlc3MgdGhlIGNvcnJlY3QgZm9udDogJHtlfWApO3RoaXMuY2FjaGUuc2V0KGUsc1swXSk7cmV0dXJuIHNbMF19aWYodCYmIXRoaXMud2FybmVkLmhhcyhlKSl7dGhpcy53YXJuZWQuYWRkKGUpOygwLGkud2FybikoYFhGQSAtIENhbm5vdCBmaW5kIHRoZSBmb250OiAke2V9YCl9cmV0dXJuIG51bGx9fTtmdW5jdGlvbiBzZWxlY3RGb250KGUsdCl7cmV0dXJuIml0YWxpYyI9PT1lLnBvc3R1cmU/ImJvbGQiPT09ZS53ZWlnaHQ/dC5ib2xkaXRhbGljOnQuaXRhbGljOiJib2xkIj09PWUud2VpZ2h0P3QuYm9sZDp0LnJlZ3VsYXJ9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVGV4dE1lYXN1cmU9dm9pZCAwO3ZhciByPWEoODMpO2NsYXNzIEZvbnRJbmZve2NvbnN0cnVjdG9yKGUsdCxhLG4pe3RoaXMubGluZUhlaWdodD1hO3RoaXMucGFyYU1hcmdpbj10fHx7dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjB9O2lmKCFlKXtbdGhpcy5wZGZGb250LHRoaXMueGZhRm9udF09dGhpcy5kZWZhdWx0Rm9udChuKTtyZXR1cm59dGhpcy54ZmFGb250PXt0eXBlZmFjZTplLnR5cGVmYWNlLHBvc3R1cmU6ZS5wb3N0dXJlLHdlaWdodDplLndlaWdodCxzaXplOmUuc2l6ZSxsZXR0ZXJTcGFjaW5nOmUubGV0dGVyU3BhY2luZ307Y29uc3QgaT1uLmZpbmQoZS50eXBlZmFjZSk7aWYoaSl7dGhpcy5wZGZGb250PSgwLHIuc2VsZWN0Rm9udCkoZSxpKTt0aGlzLnBkZkZvbnR8fChbdGhpcy5wZGZGb250LHRoaXMueGZhRm9udF09dGhpcy5kZWZhdWx0Rm9udChuKSl9ZWxzZVt0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KG4pfWRlZmF1bHRGb250KGUpe2NvbnN0IHQ9ZS5maW5kKCJIZWx2ZXRpY2EiLCExKXx8ZS5maW5kKCJNeXJpYWQgUHJvIiwhMSl8fGUuZmluZCgiQXJpYWwiLCExKXx8ZS5nZXREZWZhdWx0KCk7aWYodCYmdC5yZWd1bGFyKXtjb25zdCBlPXQucmVndWxhcjtyZXR1cm5bZSx7dHlwZWZhY2U6ZS5jc3NGb250SW5mby5mb250RmFtaWx5LHBvc3R1cmU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHNpemU6MTAsbGV0dGVyU3BhY2luZzowfV19cmV0dXJuW251bGwse3R5cGVmYWNlOiJDb3VyaWVyIixwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfX1jbGFzcyBGb250U2VsZWN0b3J7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5mb250RmluZGVyPXI7dGhpcy5zdGFjaz1bbmV3IEZvbnRJbmZvKGUsdCxhLHIpXX1wdXNoRGF0YShlLHQsYSl7Y29uc3Qgcj10aGlzLnN0YWNrLmF0KC0xKTtmb3IoY29uc3QgdCBvZlsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXSllW3RdfHwoZVt0XT1yLnhmYUZvbnRbdF0pO2Zvcihjb25zdCBlIG9mWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSlpc05hTih0W2VdKSYmKHRbZV09ci5wYXJhTWFyZ2luW2VdKTtjb25zdCBuPW5ldyBGb250SW5mbyhlLHQsYXx8ci5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7bi5wZGZGb250fHwobi5wZGZGb250PXIucGRmRm9udCk7dGhpcy5zdGFjay5wdXNoKG4pfXBvcEZvbnQoKXt0aGlzLnN0YWNrLnBvcCgpfXRvcEZvbnQoKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fXQuVGV4dE1lYXN1cmU9Y2xhc3MgVGV4dE1lYXN1cmV7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5nbHlwaHM9W107dGhpcy5mb250U2VsZWN0b3I9bmV3IEZvbnRTZWxlY3RvcihlLHQsYSxyKTt0aGlzLmV4dHJhSGVpZ2h0PTB9cHVzaERhdGEoZSx0LGEpe3RoaXMuZm9udFNlbGVjdG9yLnB1c2hEYXRhKGUsdCxhKX1wb3BGb250KGUpe3JldHVybiB0aGlzLmZvbnRTZWxlY3Rvci5wb3BGb250KCl9YWRkUGFyYSgpe2NvbnN0IGU9dGhpcy5mb250U2VsZWN0b3IudG9wRm9udCgpO3RoaXMuZXh0cmFIZWlnaHQrPWUucGFyYU1hcmdpbi50b3ArZS5wYXJhTWFyZ2luLmJvdHRvbX1hZGRTdHJpbmcoZSl7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5mb250U2VsZWN0b3IudG9wRm9udCgpLGE9dC54ZmFGb250LnNpemU7aWYodC5wZGZGb250KXtjb25zdCByPXQueGZhRm9udC5sZXR0ZXJTcGFjaW5nLG49dC5wZGZGb250LGk9bi5saW5lSGVpZ2h0fHwxLjIscz10LmxpbmVIZWlnaHR8fE1hdGgubWF4KDEuMixpKSphLG89aS0odm9pZCAwPT09bi5saW5lR2FwPy4yOm4ubGluZUdhcCksYz1NYXRoLm1heCgxLG8pKmEsbD1hLzFlMyxoPW4uZGVmYXVsdFdpZHRofHxuLmNoYXJzVG9HbHlwaHMoIiAiKVswXS53aWR0aDtmb3IoY29uc3QgdCBvZiBlLnNwbGl0KC9bXHUyMDI5XG5dLykpe2NvbnN0IGU9bi5lbmNvZGVTdHJpbmcodCkuam9pbigiIiksYT1uLmNoYXJzVG9HbHlwaHMoZSk7Zm9yKGNvbnN0IGUgb2YgYSl7Y29uc3QgdD1lLndpZHRofHxoO3RoaXMuZ2x5cGhzLnB1c2goW3QqbCtyLHMsYyxlLnVuaWNvZGUsITFdKX10aGlzLmdseXBocy5wdXNoKFswLDAsMCwiXG4iLCEwXSl9dGhpcy5nbHlwaHMucG9wKCl9ZWxzZXtmb3IoY29uc3QgdCBvZiBlLnNwbGl0KC9bXHUyMDI5XG5dLykpe2Zvcihjb25zdCBlIG9mIHQuc3BsaXQoIiIpKXRoaXMuZ2x5cGhzLnB1c2goW2EsMS4yKmEsYSxlLCExXSk7dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfXRoaXMuZ2x5cGhzLnBvcCgpfX1jb21wdXRlKGUpe2xldCB0PS0xLGE9MCxyPTAsbj0wLGk9MCxzPTAsbz0hMSxjPSEwO2ZvcihsZXQgbD0wLGg9dGhpcy5nbHlwaHMubGVuZ3RoO2w8aDtsKyspe2NvbnN0W2gsdSxkLGYsZ109dGhpcy5nbHlwaHNbbF0scD0iICI9PT1mLG09Yz9kOnU7aWYoZyl7cj1NYXRoLm1heChyLGkpO2k9MDtuKz1zO3M9bTt0PS0xO2E9MDtjPSExfWVsc2UgaWYocClpZihpK2g+ZSl7cj1NYXRoLm1heChyLGkpO2k9MDtuKz1zO3M9bTt0PS0xO2E9MDtvPSEwO2M9ITF9ZWxzZXtzPU1hdGgubWF4KG0scyk7YT1pO2krPWg7dD1sfWVsc2UgaWYoaStoPmUpe24rPXM7cz1tO2lmKC0xIT09dCl7bD10O3I9TWF0aC5tYXgocixhKTtpPTA7dD0tMTthPTB9ZWxzZXtyPU1hdGgubWF4KHIsaSk7aT1ofW89ITA7Yz0hMX1lbHNle2krPWg7cz1NYXRoLm1heChtLHMpfX1yPU1hdGgubWF4KHIsaSk7bis9cyt0aGlzLmV4dHJhSGVpZ2h0O3JldHVybnt3aWR0aDoxLjAyKnIsaGVpZ2h0Om4saXNCcm9rZW46b319fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkRhdGFIYW5kbGVyPXZvaWQgMDt2YXIgcj1hKDc1KTt0LkRhdGFIYW5kbGVyPWNsYXNzIERhdGFIYW5kbGVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5kYXRhPXQ7dGhpcy5kYXRhc2V0PWUuZGF0YXNldHN8fG51bGx9c2VyaWFsaXplKGUpe2NvbnN0IHQ9W1stMSx0aGlzLmRhdGFbci4kZ2V0Q2hpbGRyZW5dKCldXTtmb3IoO3QubGVuZ3RoPjA7KXtjb25zdCBhPXQuYXQoLTEpLFtuLGldPWE7aWYobisxPT09aS5sZW5ndGgpe3QucG9wKCk7Y29udGludWV9Y29uc3Qgcz1pWysrYVswXV0sbz1lLmdldChzW3IuJHVpZF0pO2lmKG8pc1tyLiRzZXRWYWx1ZV0obyk7ZWxzZXtjb25zdCB0PXNbci4kZ2V0QXR0cmlidXRlc10oKTtmb3IoY29uc3QgYSBvZiB0LnZhbHVlcygpKXtjb25zdCB0PWUuZ2V0KGFbci4kdWlkXSk7aWYodCl7YVtyLiRzZXRWYWx1ZV0odCk7YnJlYWt9fX1jb25zdCBjPXNbci4kZ2V0Q2hpbGRyZW5dKCk7Yy5sZW5ndGg+MCYmdC5wdXNoKFstMSxjXSl9Y29uc3QgYT1bJzx4ZmE6ZGF0YXNldHMgeG1sbnM6eGZhPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLzEuMC8iPiddO2lmKHRoaXMuZGF0YXNldClmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGFzZXRbci4kZ2V0Q2hpbGRyZW5dKCkpImRhdGEiIT09ZVtyLiRub2RlTmFtZV0mJmVbci4kdG9TdHJpbmddKGEpO3RoaXMuZGF0YVtyLiR0b1N0cmluZ10oYSk7YS5wdXNoKCI8L3hmYTpkYXRhc2V0cz4iKTtyZXR1cm4gYS5qb2luKCIiKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWEZBUGFyc2VyPXZvaWQgMDt2YXIgcj1hKDc1KSxuPWEoNjQpLGk9YSg4Nykscz1hKDIpO2NsYXNzIFhGQVBhcnNlciBleHRlbmRzIG4uWE1MUGFyc2VyQmFzZXtjb25zdHJ1Y3RvcihlPW51bGwsdD0hMSl7c3VwZXIoKTt0aGlzLl9idWlsZGVyPW5ldyBpLkJ1aWxkZXIoZSk7dGhpcy5fc3RhY2s9W107dGhpcy5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fTt0aGlzLl9pZHM9bmV3IE1hcDt0aGlzLl9jdXJyZW50PXRoaXMuX2J1aWxkZXIuYnVpbGRSb290KHRoaXMuX2lkcyk7dGhpcy5fZXJyb3JDb2RlPW4uWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7dGhpcy5fd2hpdGVSZWdleD0vXlxzKyQvO3RoaXMuX25ic3BzPS9ceGEwKy9nO3RoaXMuX3JpY2hUZXh0PXR9cGFyc2UoZSl7dGhpcy5wYXJzZVhtbChlKTtpZih0aGlzLl9lcnJvckNvZGU9PT1uLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKXt0aGlzLl9jdXJyZW50W3IuJGZpbmFsaXplXSgpO3JldHVybiB0aGlzLl9jdXJyZW50LmVsZW1lbnR9fW9uVGV4dChlKXtlPWUucmVwbGFjZSh0aGlzLl9uYnNwcywoZT0+ZS5zbGljZSgxKSsiICIpKTt0aGlzLl9yaWNoVGV4dHx8dGhpcy5fY3VycmVudFtyLiRhY2NlcHRXaGl0ZXNwYWNlXSgpP3RoaXMuX2N1cnJlbnRbci4kb25UZXh0XShlLHRoaXMuX3JpY2hUZXh0KTp0aGlzLl93aGl0ZVJlZ2V4LnRlc3QoZSl8fHRoaXMuX2N1cnJlbnRbci4kb25UZXh0XShlLnRyaW0oKSl9b25DZGF0YShlKXt0aGlzLl9jdXJyZW50W3IuJG9uVGV4dF0oZSl9X21rQXR0cmlidXRlcyhlLHQpe2xldCBhPW51bGwsbj1udWxsO2NvbnN0IGk9T2JqZWN0LmNyZWF0ZSh7fSk7Zm9yKGNvbnN0e25hbWU6byx2YWx1ZTpjfW9mIGUpaWYoInhtbG5zIj09PW8pYT8oMCxzLndhcm4pKGBYRkEgLSBtdWx0aXBsZSBuYW1lc3BhY2UgZGVmaW5pdGlvbiBpbiA8JHt0fT5gKTphPWM7ZWxzZSBpZihvLnN0YXJ0c1dpdGgoInhtbG5zOiIpKXtjb25zdCBlPW8uc3Vic3RyaW5nKCJ4bWxuczoiLmxlbmd0aCk7bnx8KG49W10pO24ucHVzaCh7cHJlZml4OmUsdmFsdWU6Y30pfWVsc2V7Y29uc3QgZT1vLmluZGV4T2YoIjoiKTtpZigtMT09PWUpaVtvXT1jO2Vsc2V7bGV0IHQ9aVtyLiRuc0F0dHJpYnV0ZXNdO3R8fCh0PWlbci4kbnNBdHRyaWJ1dGVzXT1PYmplY3QuY3JlYXRlKG51bGwpKTtjb25zdFthLG5dPVtvLnNsaWNlKDAsZSksby5zbGljZShlKzEpXTtsZXQgcz10W2FdO3N8fChzPXRbYV09T2JqZWN0LmNyZWF0ZShudWxsKSk7c1tuXT1jfX1yZXR1cm5bYSxuLGldfV9nZXROYW1lQW5kUHJlZml4KGUsdCl7Y29uc3QgYT1lLmluZGV4T2YoIjoiKTtyZXR1cm4tMT09PWE/W2UsbnVsbF06W2Uuc3Vic3RyaW5nKGErMSksdD8iIjplLnN1YnN0cmluZygwLGEpXX1vbkJlZ2luRWxlbWVudChlLHQsYSl7Y29uc3RbbixpLHNdPXRoaXMuX21rQXR0cmlidXRlcyh0LGUpLFtvLGNdPXRoaXMuX2dldE5hbWVBbmRQcmVmaXgoZSx0aGlzLl9idWlsZGVyLmlzTnNBZ25vc3RpYygpKSxsPXRoaXMuX2J1aWxkZXIuYnVpbGQoe25zUHJlZml4OmMsbmFtZTpvLGF0dHJpYnV0ZXM6cyxuYW1lc3BhY2U6bixwcmVmaXhlczppfSk7bFtyLiRnbG9iYWxEYXRhXT10aGlzLl9nbG9iYWxEYXRhO2lmKGEpe2xbci4kZmluYWxpemVdKCk7dGhpcy5fY3VycmVudFtyLiRvbkNoaWxkXShsKSYmbFtyLiRzZXRJZF0odGhpcy5faWRzKTtsW3IuJGNsZWFuXSh0aGlzLl9idWlsZGVyKX1lbHNle3RoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudCk7dGhpcy5fY3VycmVudD1sfX1vbkVuZEVsZW1lbnQoZSl7Y29uc3QgdD10aGlzLl9jdXJyZW50O2lmKHRbci4kaXNDREFUQVhtbF0oKSYmInN0cmluZyI9PXR5cGVvZiB0W3IuJGNvbnRlbnRdKXtjb25zdCBlPW5ldyBYRkFQYXJzZXI7ZS5fZ2xvYmFsRGF0YT10aGlzLl9nbG9iYWxEYXRhO2NvbnN0IGE9ZS5wYXJzZSh0W3IuJGNvbnRlbnRdKTt0W3IuJGNvbnRlbnRdPW51bGw7dFtyLiRvbkNoaWxkXShhKX10W3IuJGZpbmFsaXplXSgpO3RoaXMuX2N1cnJlbnQ9dGhpcy5fc3RhY2sucG9wKCk7dGhpcy5fY3VycmVudFtyLiRvbkNoaWxkXSh0KSYmdFtyLiRzZXRJZF0odGhpcy5faWRzKTt0W3IuJGNsZWFuXSh0aGlzLl9idWlsZGVyKX1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX10LlhGQVBhcnNlcj1YRkFQYXJzZXJ9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5CdWlsZGVyPXZvaWQgMDt2YXIgcj1hKDc3KSxuPWEoNzUpLGk9YSg4OCkscz1hKDgwKSxvPWEoOTcpLGM9YSgyKTtjbGFzcyBSb290IGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoLTEsInJvb3QiLE9iamVjdC5jcmVhdGUobnVsbCkpO3RoaXMuZWxlbWVudD1udWxsO3RoaXNbbi4kaWRzXT1lfVtuLiRvbkNoaWxkXShlKXt0aGlzLmVsZW1lbnQ9ZTtyZXR1cm4hMH1bbi4kZmluYWxpemVdKCl7c3VwZXJbbi4kZmluYWxpemVdKCk7aWYodGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2Ygcy5UZW1wbGF0ZSl7dGhpc1tuLiRpZHNdLnNldChuLiRyb290LHRoaXMuZWxlbWVudCk7dGhpcy5lbGVtZW50LnRlbXBsYXRlW24uJHJlc29sdmVQcm90b3R5cGVzXSh0aGlzW24uJGlkc10pO3RoaXMuZWxlbWVudC50ZW1wbGF0ZVtuLiRpZHNdPXRoaXNbbi4kaWRzXX19fWNsYXNzIEVtcHR5IGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoKXtzdXBlcigtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1bbi4kb25DaGlsZF0oZSl7cmV0dXJuITF9fXQuQnVpbGRlcj1jbGFzcyBCdWlsZGVye2NvbnN0cnVjdG9yKGU9bnVsbCl7dGhpcy5fbmFtZXNwYWNlU3RhY2s9W107dGhpcy5fbnNBZ25vc3RpY0xldmVsPTA7dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXM9bmV3IE1hcDt0aGlzLl9uYW1lc3BhY2VzPW5ldyBNYXA7dGhpcy5fbmV4dE5zSWQ9TWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhyLk5hbWVzcGFjZUlkcykubWFwKCgoe2lkOmV9KT0+ZSkpKTt0aGlzLl9jdXJyZW50TmFtZXNwYWNlPWV8fG5ldyBvLlVua25vd25OYW1lc3BhY2UoKyt0aGlzLl9uZXh0TnNJZCl9YnVpbGRSb290KGUpe3JldHVybiBuZXcgUm9vdChlKX1idWlsZCh7bnNQcmVmaXg6ZSxuYW1lOnQsYXR0cmlidXRlczphLG5hbWVzcGFjZTpzLHByZWZpeGVzOm99KXtjb25zdCBjPW51bGwhPT1zO2lmKGMpe3RoaXMuX25hbWVzcGFjZVN0YWNrLnB1c2godGhpcy5fY3VycmVudE5hbWVzcGFjZSk7dGhpcy5fY3VycmVudE5hbWVzcGFjZT10aGlzLl9zZWFyY2hOYW1lc3BhY2Uocyl9byYmdGhpcy5fYWRkTmFtZXNwYWNlUHJlZml4KG8pO2lmKGEuaGFzT3duUHJvcGVydHkobi4kbnNBdHRyaWJ1dGVzKSl7Y29uc3QgZT1pLk5hbWVzcGFjZVNldFVwLmRhdGFzZXRzLHQ9YVtuLiRuc0F0dHJpYnV0ZXNdO2xldCByPW51bGw7Zm9yKGNvbnN0W2Esbl1vZiBPYmplY3QuZW50cmllcyh0KSl7aWYodGhpcy5fZ2V0TmFtZXNwYWNlVG9Vc2UoYSk9PT1lKXtyPXt4ZmE6bn07YnJlYWt9fXI/YVtuLiRuc0F0dHJpYnV0ZXNdPXI6ZGVsZXRlIGFbbi4kbnNBdHRyaWJ1dGVzXX1jb25zdCBsPXRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKGUpLGg9bCYmbFtyLiRidWlsZFhGQU9iamVjdF0odCxhKXx8bmV3IEVtcHR5O2hbbi4kaXNOc0Fnbm9zdGljXSgpJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwrKzsoY3x8b3x8aFtuLiRpc05zQWdub3N0aWNdKCkpJiYoaFtuLiRjbGVhbnVwXT17aGFzTmFtZXNwYWNlOmMscHJlZml4ZXM6byxuc0Fnbm9zdGljOmhbbi4kaXNOc0Fnbm9zdGljXSgpfSk7cmV0dXJuIGh9aXNOc0Fnbm9zdGljKCl7cmV0dXJuIHRoaXMuX25zQWdub3N0aWNMZXZlbD4wfV9zZWFyY2hOYW1lc3BhY2UoZSl7bGV0IHQ9dGhpcy5fbmFtZXNwYWNlcy5nZXQoZSk7aWYodClyZXR1cm4gdDtmb3IoY29uc3RbYSx7Y2hlY2s6bn1db2YgT2JqZWN0LmVudHJpZXMoci5OYW1lc3BhY2VJZHMpKWlmKG4oZSkpe3Q9aS5OYW1lc3BhY2VTZXRVcFthXTtpZih0KXt0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpO3JldHVybiB0fWJyZWFrfXQ9bmV3IG8uVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTt0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpO3JldHVybiB0fV9hZGROYW1lc3BhY2VQcmVmaXgoZSl7Zm9yKGNvbnN0e3ByZWZpeDp0LHZhbHVlOmF9b2YgZSl7Y29uc3QgZT10aGlzLl9zZWFyY2hOYW1lc3BhY2UoYSk7bGV0IHI9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KHQpO2lmKCFyKXtyPVtdO3RoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldCh0LHIpfXIucHVzaChlKX19X2dldE5hbWVzcGFjZVRvVXNlKGUpe2lmKCFlKXJldHVybiB0aGlzLl9jdXJyZW50TmFtZXNwYWNlO2NvbnN0IHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO2lmKHQmJnQubGVuZ3RoPjApcmV0dXJuIHQuYXQoLTEpOygwLGMud2FybikoYFVua25vd24gbmFtZXNwYWNlIHByZWZpeDogJHtlfS5gKTtyZXR1cm4gbnVsbH1jbGVhbihlKXtjb25zdHtoYXNOYW1lc3BhY2U6dCxwcmVmaXhlczphLG5zQWdub3N0aWM6cn09ZTt0JiYodGhpcy5fY3VycmVudE5hbWVzcGFjZT10aGlzLl9uYW1lc3BhY2VTdGFjay5wb3AoKSk7YSYmYS5mb3JFYWNoKCgoe3ByZWZpeDplfSk9Pnt0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQoZSkucG9wKCl9KSk7ciYmdGhpcy5fbnNBZ25vc3RpY0xldmVsLS19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk5hbWVzcGFjZVNldFVwPXZvaWQgMDt2YXIgcj1hKDg5KSxuPWEoOTApLGk9YSg5MSkscz1hKDkyKSxvPWEoOTMpLGM9YSg5NCksbD1hKDgwKSxoPWEoOTUpLHU9YSg5Nik7Y29uc3QgZD17Y29uZmlnOnIuQ29uZmlnTmFtZXNwYWNlLGNvbm5lY3Rpb246bi5Db25uZWN0aW9uU2V0TmFtZXNwYWNlLGRhdGFzZXRzOmkuRGF0YXNldHNOYW1lc3BhY2UsbG9jYWxlU2V0OnMuTG9jYWxlU2V0TmFtZXNwYWNlLHNpZ25hdHVyZTpvLlNpZ25hdHVyZU5hbWVzcGFjZSxzdHlsZXNoZWV0OmMuU3R5bGVzaGVldE5hbWVzcGFjZSx0ZW1wbGF0ZTpsLlRlbXBsYXRlTmFtZXNwYWNlLHhkcDpoLlhkcE5hbWVzcGFjZSx4aHRtbDp1LlhodG1sTmFtZXNwYWNlfTt0Lk5hbWVzcGFjZVNldFVwPWR9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Db25maWdOYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzcpLG49YSg3NSksaT1hKDc2KSxzPWEoMik7Y29uc3Qgbz1yLk5hbWVzcGFjZUlkcy5jb25maWcuaWQ7Y2xhc3MgQWNyb2JhdCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFjcm9iYXQiLCEwKTt0aGlzLmFjcm9iYXQ3PW51bGw7dGhpcy5hdXRvU2F2ZT1udWxsO3RoaXMuY29tbW9uPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXM9bnVsbDt0aGlzLnN1Ym1pdFVybD1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgQWNyb2JhdDcgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhY3JvYmF0NyIsITApO3RoaXMuZHluYW1pY1JlbmRlcj1udWxsfX1jbGFzcyBBREJFX0pTQ29uc29sZSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIkFEQkVfSlNDb25zb2xlIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX19Y2xhc3MgQURCRV9KU0RlYnVnZ2VyIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiQURCRV9KU0RlYnVnZ2VyIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX19Y2xhc3MgQWRkU2lsZW50UHJpbnQgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFkZFNpbGVudFByaW50Iil9fWNsYXNzIEFkZFZpZXdlclByZWZlcmVuY2VzIGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfX1jbGFzcyBBZGp1c3REYXRhIGV4dGVuZHMgbi5PcHRpb24xMHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhZGp1c3REYXRhIil9fWNsYXNzIEFkb2JlRXh0ZW5zaW9uTGV2ZWwgZXh0ZW5kcyBuLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYWRvYmVFeHRlbnNpb25MZXZlbCIsMCwoZT0+ZT49MSYmZTw9OCkpfX1jbGFzcyBBZ2VudCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFnZW50IiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuY29tbW9uPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBBbHdheXNFbWJlZCBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhbHdheXNFbWJlZCIpfX1jbGFzcyBBbWQgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhbWQiKX19Y2xhc3MgQXJlYSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImFyZWEiKTt0aGlzLmxldmVsPSgwLGkuZ2V0SW50ZWdlcikoe2RhdGE6ZS5sZXZlbCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0xJiZlPD0zfSk7dGhpcy5uYW1lPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyIiLCJiYXJjb2RlIiwiY29yZWluaXQiLCJkZXZpY2VEcml2ZXIiLCJmb250IiwiZ2VuZXJhbCIsImxheW91dCIsIm1lcmdlIiwic2NyaXB0Iiwic2lnbmF0dXJlIiwic291cmNlU2V0IiwidGVtcGxhdGVDYWNoZSJdKX19Y2xhc3MgQXR0cmlidXRlcyBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImF0dHJpYnV0ZXMiLFsicHJlc2VydmUiLCJkZWxlZ2F0ZSIsImlnbm9yZSJdKX19Y2xhc3MgQXV0b1NhdmUgZXh0ZW5kcyBuLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJhdXRvU2F2ZSIsWyJkaXNhYmxlZCIsImVuYWJsZWQiXSl9fWNsYXNzIEJhc2UgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJiYXNlIil9fWNsYXNzIEJhdGNoT3V0cHV0IGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYmF0Y2hPdXRwdXQiKTt0aGlzLmZvcm1hdD0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5mb3JtYXQsWyJub25lIiwiY29uY2F0IiwiemlwIiwiemlwQ29tcHJlc3MiXSl9fWNsYXNzIEJlaGF2aW9yT3ZlcnJpZGUgZXh0ZW5kcyBuLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiYmVoYXZpb3JPdmVycmlkZSIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPW5ldyBNYXAodGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+ZS5pbmNsdWRlcygiOiIpKSkubWFwKChlPT5lLnNwbGl0KCI6IiwyKSkpKX19Y2xhc3MgQ2FjaGUgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjYWNoZSIsITApO3RoaXMudGVtcGxhdGVDYWNoZT1udWxsfX1jbGFzcyBDaGFuZ2UgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNoYW5nZSIpfX1jbGFzcyBDb21tb24gZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjb21tb24iLCEwKTt0aGlzLmRhdGE9bnVsbDt0aGlzLmxvY2FsZT1udWxsO3RoaXMubG9jYWxlU2V0PW51bGw7dGhpcy5tZXNzYWdpbmc9bnVsbDt0aGlzLnN1cHByZXNzQmFubmVyPW51bGw7dGhpcy50ZW1wbGF0ZT1udWxsO3RoaXMudmFsaWRhdGlvbk1lc3NhZ2luZz1udWxsO3RoaXMudmVyc2lvbkNvbnRyb2w9bnVsbDt0aGlzLmxvZz1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgQ29tcHJlc3MgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjb21wcmVzcyIpO3RoaXMuc2NvcGU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUuc2NvcGUsWyJpbWFnZU9ubHkiLCJkb2N1bWVudCJdKX19Y2xhc3MgQ29tcHJlc3NMb2dpY2FsU3RydWN0dXJlIGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUiKX19Y2xhc3MgQ29tcHJlc3NPYmplY3RTdHJlYW0gZXh0ZW5kcyBuLk9wdGlvbjEwe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvbXByZXNzT2JqZWN0U3RyZWFtIil9fWNsYXNzIENvbXByZXNzaW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY29tcHJlc3Npb24iLCEwKTt0aGlzLmNvbXByZXNzTG9naWNhbFN0cnVjdHVyZT1udWxsO3RoaXMuY29tcHJlc3NPYmplY3RTdHJlYW09bnVsbDt0aGlzLmxldmVsPW51bGw7dGhpcy50eXBlPW51bGx9fWNsYXNzIENvbmZpZyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvbmZpZyIsITApO3RoaXMuYWNyb2JhdD1udWxsO3RoaXMucHJlc2VudD1udWxsO3RoaXMudHJhY2U9bnVsbDt0aGlzLmFnZW50PW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBDb25mb3JtYW5jZSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvbmZvcm1hbmNlIixbIkEiLCJCIl0pfX1jbGFzcyBDb250ZW50Q29weSBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY29udGVudENvcHkiKX19Y2xhc3MgQ29waWVzIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImNvcGllcyIsMSwoZT0+ZT49MSkpfX1jbGFzcyBDcmVhdG9yIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiY3JlYXRvciIpfX1jbGFzcyBDdXJyZW50UGFnZSBleHRlbmRzIG4uSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJjdXJyZW50UGFnZSIsMCwoZT0+ZT49MCkpfX1jbGFzcyBEYXRhIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZGF0YSIsITApO3RoaXMuYWRqdXN0RGF0YT1udWxsO3RoaXMuYXR0cmlidXRlcz1udWxsO3RoaXMuaW5jcmVtZW50YWxMb2FkPW51bGw7dGhpcy5vdXRwdXRYU0w9bnVsbDt0aGlzLnJhbmdlPW51bGw7dGhpcy5yZWNvcmQ9bnVsbDt0aGlzLnN0YXJ0Tm9kZT1udWxsO3RoaXMudXJpPW51bGw7dGhpcy53aW5kb3c9bnVsbDt0aGlzLnhzbD1udWxsO3RoaXMuZXhjbHVkZU5TPW5ldyBuLlhGQU9iamVjdEFycmF5O3RoaXMudHJhbnNmb3JtPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBEZWJ1ZyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImRlYnVnIiwhMCk7dGhpcy51cmk9bnVsbH19Y2xhc3MgRGVmYXVsdFR5cGVmYWNlIGV4dGVuZHMgbi5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImRlZmF1bHRUeXBlZmFjZSIpO3RoaXMud3JpdGluZ1NjcmlwdD0oMCxpLmdldFN0cmluZ09wdGlvbikoZS53cml0aW5nU2NyaXB0LFsiKiIsIkFyYWJpYyIsIkN5cmlsbGljIiwiRWFzdEV1cm9wZWFuUm9tYW4iLCJHcmVlayIsIkhlYnJldyIsIkphcGFuZXNlIiwiS29yZWFuIiwiUm9tYW4iLCJTaW1wbGlmaWVkQ2hpbmVzZSIsIlRoYWkiLCJUcmFkaXRpb25hbENoaW5lc2UiLCJWaWV0bmFtZXNlIl0pfX1jbGFzcyBEZXN0aW5hdGlvbiBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImRlc3RpbmF0aW9uIixbInBkZiIsInBjbCIsInBzIiwid2ViQ2xpZW50IiwienBsIl0pfX1jbGFzcyBEb2N1bWVudEFzc2VtYmx5IGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJkb2N1bWVudEFzc2VtYmx5Iil9fWNsYXNzIERyaXZlciBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImRyaXZlciIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgRHVwbGV4T3B0aW9uIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZHVwbGV4T3B0aW9uIixbInNpbXBsZXgiLCJkdXBsZXhGbGlwTG9uZ0VkZ2UiLCJkdXBsZXhGbGlwU2hvcnRFZGdlIl0pfX1jbGFzcyBEeW5hbWljUmVuZGVyIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZHluYW1pY1JlbmRlciIsWyJmb3JiaWRkZW4iLCJyZXF1aXJlZCJdKX19Y2xhc3MgRW1iZWQgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImVtYmVkIil9fWNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImVuY3J5cHQiKX19Y2xhc3MgRW5jcnlwdGlvbiBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImVuY3J5cHRpb24iLCEwKTt0aGlzLmVuY3J5cHQ9bnVsbDt0aGlzLmVuY3J5cHRpb25MZXZlbD1udWxsO3RoaXMucGVybWlzc2lvbnM9bnVsbH19Y2xhc3MgRW5jcnlwdGlvbkxldmVsIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZW5jcnlwdGlvbkxldmVsIixbIjQwYml0IiwiMTI4Yml0Il0pfX1jbGFzcyBFbmZvcmNlIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZW5mb3JjZSIpfX1jbGFzcyBFcXVhdGUgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJlcXVhdGUiKTt0aGlzLmZvcmNlPSgwLGkuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mb3JjZSxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4wPT09ZX0pO3RoaXMuZnJvbT1lLmZyb218fCIiO3RoaXMudG89ZS50b3x8IiJ9fWNsYXNzIEVxdWF0ZVJhbmdlIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZXF1YXRlUmFuZ2UiKTt0aGlzLmZyb209ZS5mcm9tfHwiIjt0aGlzLnRvPWUudG98fCIiO3RoaXMuX3VuaWNvZGVSYW5nZT1lLnVuaWNvZGVSYW5nZXx8IiJ9Z2V0IHVuaWNvZGVSYW5nZSgpe2NvbnN0IGU9W10sdD0vVVwrKFswLTlhLWZBLUZdKykvLGE9dGhpcy5fdW5pY29kZVJhbmdlO2ZvcihsZXQgciBvZiBhLnNwbGl0KCIsIikubWFwKChlPT5lLnRyaW0oKSkpLmZpbHRlcigoZT0+ISFlKSkpe3I9ci5zcGxpdCgiLSIsMikubWFwKChlPT57Y29uc3QgYT1lLm1hdGNoKHQpO3JldHVybiBhP3BhcnNlSW50KGFbMV0sMTYpOjB9KSk7MT09PXIubGVuZ3RoJiZyLnB1c2goclswXSk7ZS5wdXNoKHIpfXJldHVybigwLHMuc2hhZG93KSh0aGlzLCJ1bmljb2RlUmFuZ2UiLGUpfX1jbGFzcyBFeGNsdWRlIGV4dGVuZHMgbi5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImV4Y2x1ZGUiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5lJiZbImNhbGN1bGF0ZSIsImNsb3NlIiwiZW50ZXIiLCJleGl0IiwiaW5pdGlhbGl6ZSIsInJlYWR5IiwidmFsaWRhdGUiXS5pbmNsdWRlcyhlKSkpfX1jbGFzcyBFeGNsdWRlTlMgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJleGNsdWRlTlMiKX19Y2xhc3MgRmxpcExhYmVsIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZmxpcExhYmVsIixbInVzZVByaW50ZXJTZXR0aW5nIiwib24iLCJvZmYiXSl9fWNsYXNzIEZvbnRJbmZvIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiZm9udEluZm8iLCEwKTt0aGlzLmVtYmVkPW51bGw7dGhpcy5tYXA9bnVsbDt0aGlzLnN1YnNldEJlbG93PW51bGw7dGhpcy5hbHdheXNFbWJlZD1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLmRlZmF1bHRUeXBlZmFjZT1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLm5ldmVyRW1iZWQ9bmV3IG4uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEZvcm1GaWVsZEZpbGxpbmcgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImZvcm1GaWVsZEZpbGxpbmciKX19Y2xhc3MgR3JvdXBQYXJlbnQgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJncm91cFBhcmVudCIpfX1jbGFzcyBJZkVtcHR5IGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaWZFbXB0eSIsWyJkYXRhVmFsdWUiLCJkYXRhR3JvdXAiLCJpZ25vcmUiLCJyZW1vdmUiXSl9fWNsYXNzIEluY2x1ZGVYRFBDb250ZW50IGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaW5jbHVkZVhEUENvbnRlbnQiKX19Y2xhc3MgSW5jcmVtZW50YWxMb2FkIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaW5jcmVtZW50YWxMb2FkIixbIm5vbmUiLCJmb3J3YXJkT25seSJdKX19Y2xhc3MgSW5jcmVtZW50YWxNZXJnZSBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaW5jcmVtZW50YWxNZXJnZSIpfX1jbGFzcyBJbnRlcmFjdGl2ZSBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiaW50ZXJhY3RpdmUiKX19Y2xhc3MgSm9nIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywiam9nIixbInVzZVByaW50ZXJTZXR0aW5nIiwibm9uZSIsInBhZ2VTZXQiXSl9fWNsYXNzIExhYmVsUHJpbnRlciBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImxhYmVsUHJpbnRlciIsITApO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsienBsIiwiZHBsIiwiaXBsIiwidGNwbCJdKTt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5mbGlwTGFiZWw9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgTGF5b3V0IGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibGF5b3V0IixbInBhZ2luYXRlIiwicGFuZWwiXSl9fWNsYXNzIExldmVsIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImxldmVsIiwwLChlPT5lPjApKX19Y2xhc3MgTGluZWFyaXplZCBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibGluZWFyaXplZCIpfX1jbGFzcyBMb2NhbGUgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJsb2NhbGUiKX19Y2xhc3MgTG9jYWxlU2V0IGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibG9jYWxlU2V0Iil9fWNsYXNzIExvZyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sImxvZyIsITApO3RoaXMubW9kZT1udWxsO3RoaXMudGhyZXNob2xkPW51bGw7dGhpcy50bz1udWxsO3RoaXMudXJpPW51bGx9fWNsYXNzIE1hcEVsZW1lbnQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJtYXAiLCEwKTt0aGlzLmVxdWF0ZT1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLmVxdWF0ZVJhbmdlPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBNZWRpdW1JbmZvIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibWVkaXVtSW5mbyIsITApO3RoaXMubWFwPW51bGx9fWNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJtZXNzYWdlIiwhMCk7dGhpcy5tc2dJZD1udWxsO3RoaXMuc2V2ZXJpdHk9bnVsbH19Y2xhc3MgTWVzc2FnaW5nIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibWVzc2FnaW5nIiwhMCk7dGhpcy5tZXNzYWdlPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBNb2RlIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibW9kZSIsWyJhcHBlbmQiLCJvdmVyd3JpdGUiXSl9fWNsYXNzIE1vZGlmeUFubm90cyBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibW9kaWZ5QW5ub3RzIil9fWNsYXNzIE1zZ0lkIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm1zZ0lkIiwxLChlPT5lPj0xKSl9fWNsYXNzIE5hbWVBdHRyIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywibmFtZUF0dHIiKX19Y2xhc3MgTmV2ZXJFbWJlZCBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJuZXZlckVtYmVkIil9fWNsYXNzIE51bWJlck9mQ29waWVzIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm51bWJlck9mQ29waWVzIixudWxsLChlPT5lPj0yJiZlPD01KSl9fWNsYXNzIE9wZW5BY3Rpb24gZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJvcGVuQWN0aW9uIiwhMCk7dGhpcy5kZXN0aW5hdGlvbj1udWxsfX1jbGFzcyBPdXRwdXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJvdXRwdXQiLCEwKTt0aGlzLnRvPW51bGw7dGhpcy50eXBlPW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgT3V0cHV0QmluIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywib3V0cHV0QmluIil9fWNsYXNzIE91dHB1dFhTTCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm91dHB1dFhTTCIsITApO3RoaXMudXJpPW51bGx9fWNsYXNzIE92ZXJwcmludCBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIm92ZXJwcmludCIsWyJub25lIiwiYm90aCIsImRyYXciLCJmaWVsZCJdKX19Y2xhc3MgUGFja2V0cyBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBhY2tldHMiKX1bbi4kZmluYWxpemVdKCl7IioiIT09dGhpc1tuLiRjb250ZW50XSYmKHRoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+WyJjb25maWciLCJkYXRhc2V0cyIsInRlbXBsYXRlIiwieGZkZiIsInhzbHQiXS5pbmNsdWRlcyhlKSkpKX19Y2xhc3MgUGFnZU9mZnNldCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBhZ2VPZmZzZXQiKTt0aGlzLng9KDAsaS5nZXRJbnRlZ2VyKSh7ZGF0YTplLngsZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTplPT4hMH0pO3RoaXMueT0oMCxpLmdldEludGVnZXIpKHtkYXRhOmUueSxkZWZhdWx0VmFsdWU6InVzZVhEQ1NldHRpbmciLHZhbGlkYXRlOmU9PiEwfSl9fWNsYXNzIFBhZ2VSYW5nZSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBhZ2VSYW5nZSIpfVtuLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGU9PnBhcnNlSW50KGUsMTApKSksdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKz0yKXQucHVzaChlLnNsaWNlKGEsYSsyKSk7dGhpc1tuLiRjb250ZW50XT10fX1jbGFzcyBQYWdpbmF0aW9uIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGFnaW5hdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4U2hvcnRFZGdlIiwiZHVwbGV4TG9uZ0VkZ2UiXSl9fWNsYXNzIFBhZ2luYXRpb25PdmVycmlkZSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBhZ2luYXRpb25PdmVycmlkZSIsWyJub25lIiwiZm9yY2VEdXBsZXgiLCJmb3JjZUR1cGxleExvbmdFZGdlIiwiZm9yY2VEdXBsZXhTaG9ydEVkZ2UiLCJmb3JjZVNpbXBsZXgiXSl9fWNsYXNzIFBhcnQgZXh0ZW5kcyBuLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGFydCIsMSwoZT0+ITEpKX19Y2xhc3MgUGNsIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicGNsIiwhMCk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLmpvZz1udWxsO3RoaXMubWVkaXVtSW5mbz1udWxsO3RoaXMub3V0cHV0QmluPW51bGw7dGhpcy5wYWdlT2Zmc2V0PW51bGw7dGhpcy5zdGFwbGU9bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBQZGYgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwZGYiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLmFkb2JlRXh0ZW5zaW9uTGV2ZWw9bnVsbDt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5jb21wcmVzc2lvbj1udWxsO3RoaXMuY3JlYXRvcj1udWxsO3RoaXMuZW5jcnlwdGlvbj1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLmludGVyYWN0aXZlPW51bGw7dGhpcy5saW5lYXJpemVkPW51bGw7dGhpcy5vcGVuQWN0aW9uPW51bGw7dGhpcy5wZGZhPW51bGw7dGhpcy5wcm9kdWNlcj1udWxsO3RoaXMucmVuZGVyUG9saWN5PW51bGw7dGhpcy5zY3JpcHRNb2RlbD1udWxsO3RoaXMuc2lsZW50UHJpbnQ9bnVsbDt0aGlzLnN1Ym1pdEZvcm1hdD1udWxsO3RoaXMudGFnZ2VkPW51bGw7dGhpcy52ZXJzaW9uPW51bGw7dGhpcy52aWV3ZXJQcmVmZXJlbmNlcz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIFBkZmEgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwZGZhIiwhMCk7dGhpcy5hbWQ9bnVsbDt0aGlzLmNvbmZvcm1hbmNlPW51bGw7dGhpcy5pbmNsdWRlWERQQ29udGVudD1udWxsO3RoaXMucGFydD1udWxsfX1jbGFzcyBQZXJtaXNzaW9ucyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBlcm1pc3Npb25zIiwhMCk7dGhpcy5hY2Nlc3NpYmxlQ29udGVudD1udWxsO3RoaXMuY2hhbmdlPW51bGw7dGhpcy5jb250ZW50Q29weT1udWxsO3RoaXMuZG9jdW1lbnRBc3NlbWJseT1udWxsO3RoaXMuZm9ybUZpZWxkRmlsbGluZz1udWxsO3RoaXMubW9kaWZ5QW5ub3RzPW51bGw7dGhpcy5wbGFpbnRleHRNZXRhZGF0YT1udWxsO3RoaXMucHJpbnQ9bnVsbDt0aGlzLnByaW50SGlnaFF1YWxpdHk9bnVsbH19Y2xhc3MgUGlja1RyYXlCeVBERlNpemUgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBpY2tUcmF5QnlQREZTaXplIil9fWNsYXNzIFBpY3R1cmUgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwaWN0dXJlIil9fWNsYXNzIFBsYWludGV4dE1ldGFkYXRhIGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwbGFpbnRleHRNZXRhZGF0YSIpfX1jbGFzcyBQcmVzZW5jZSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInByZXNlbmNlIixbInByZXNlcnZlIiwiZGlzc29sdmUiLCJkaXNzb2x2ZVN0cnVjdHVyZSIsImlnbm9yZSIsInJlbW92ZSJdKX19Y2xhc3MgUHJlc2VudCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInByZXNlbnQiLCEwKTt0aGlzLmJlaGF2aW9yT3ZlcnJpZGU9bnVsbDt0aGlzLmNhY2hlPW51bGw7dGhpcy5jb21tb249bnVsbDt0aGlzLmNvcGllcz1udWxsO3RoaXMuZGVzdGluYXRpb249bnVsbDt0aGlzLmluY3JlbWVudGFsTWVyZ2U9bnVsbDt0aGlzLmxheW91dD1udWxsO3RoaXMub3V0cHV0PW51bGw7dGhpcy5vdmVycHJpbnQ9bnVsbDt0aGlzLnBhZ2luYXRpb249bnVsbDt0aGlzLnBhZ2luYXRpb25PdmVycmlkZT1udWxsO3RoaXMuc2NyaXB0PW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMueGRwPW51bGw7dGhpcy5kcml2ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy5sYWJlbFByaW50ZXI9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy5wY2w9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy5wZGY9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy5wcz1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLnN1Ym1pdFVybD1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLndlYkNsaWVudD1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLnpwbD1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgUHJpbnQgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInByaW50Iil9fWNsYXNzIFByaW50SGlnaFF1YWxpdHkgZXh0ZW5kcyBuLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInByaW50SGlnaFF1YWxpdHkiKX19Y2xhc3MgUHJpbnRTY2FsaW5nIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicHJpbnRTY2FsaW5nIixbImFwcGRlZmF1bHQiLCJub1NjYWxpbmciXSl9fWNsYXNzIFByaW50ZXJOYW1lIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicHJpbnRlck5hbWUiKX19Y2xhc3MgUHJvZHVjZXIgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJwcm9kdWNlciIpfX1jbGFzcyBQcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInBzIiwhMCk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLmpvZz1udWxsO3RoaXMubWVkaXVtSW5mbz1udWxsO3RoaXMub3V0cHV0QmluPW51bGw7dGhpcy5zdGFwbGU9bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBSYW5nZSBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJyYW5nZSIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccyosXHMqLywyKS5tYXAoKGU9PmUuc3BsaXQoIi0iKS5tYXAoKGU9PnBhcnNlSW50KGUudHJpbSgpLDEwKSkpKSkuZmlsdGVyKChlPT5lLmV2ZXJ5KChlPT4haXNOYU4oZSkpKSkpLm1hcCgoZT0+ezE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pO3JldHVybiBlfSkpfX1jbGFzcyBSZWNvcmQgZXh0ZW5kcyBuLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywicmVjb3JkIil9W24uJGZpbmFsaXplXSgpe3RoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS50cmltKCk7Y29uc3QgZT1wYXJzZUludCh0aGlzW24uJGNvbnRlbnRdLDEwKTshaXNOYU4oZSkmJmU+PTAmJih0aGlzW24uJGNvbnRlbnRdPWUpfX1jbGFzcyBSZWxldmFudCBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJyZWxldmFudCIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKX19Y2xhc3MgUmVuYW1lIGV4dGVuZHMgbi5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInJlbmFtZSIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpOyh0aGlzW24uJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbbi4kY29udGVudF0pKSYmKDAscy53YXJuKSgiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lIil9fWNsYXNzIFJlbmRlclBvbGljeSBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInJlbmRlclBvbGljeSIsWyJzZXJ2ZXIiLCJjbGllbnQiXSl9fWNsYXNzIFJ1blNjcmlwdHMgZXh0ZW5kcyBuLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJydW5TY3JpcHRzIixbImJvdGgiLCJjbGllbnQiLCJub25lIiwic2VydmVyIl0pfX1jbGFzcyBTY3JpcHQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzY3JpcHQiLCEwKTt0aGlzLmN1cnJlbnRQYWdlPW51bGw7dGhpcy5leGNsdWRlPW51bGw7dGhpcy5ydW5TY3JpcHRzPW51bGx9fWNsYXNzIFNjcmlwdE1vZGVsIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic2NyaXB0TW9kZWwiLFsiWEZBIiwibm9uZSJdKX19Y2xhc3MgU2V2ZXJpdHkgZXh0ZW5kcyBuLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzZXZlcml0eSIsWyJpZ25vcmUiLCJlcnJvciIsImluZm9ybWF0aW9uIiwidHJhY2UiLCJ3YXJuaW5nIl0pfX1jbGFzcyBTaWxlbnRQcmludCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInNpbGVudFByaW50IiwhMCk7dGhpcy5hZGRTaWxlbnRQcmludD1udWxsO3RoaXMucHJpbnRlck5hbWU9bnVsbH19Y2xhc3MgU3RhcGxlIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3RhcGxlIik7dGhpcy5tb2RlPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm1vZGUsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pfX1jbGFzcyBTdGFydE5vZGUgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJzdGFydE5vZGUiKX19Y2xhc3MgU3RhcnRQYWdlIGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInN0YXJ0UGFnZSIsMCwoZT0+ITApKX19Y2xhc3MgU3VibWl0Rm9ybWF0IGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3VibWl0Rm9ybWF0IixbImh0bWwiLCJkZWxlZ2F0ZSIsImZkZiIsInhtbCIsInBkZiJdKX19Y2xhc3MgU3VibWl0VXJsIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3VibWl0VXJsIil9fWNsYXNzIFN1YnNldEJlbG93IGV4dGVuZHMgbi5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInN1YnNldEJlbG93IiwxMDAsKGU9PmU+PTAmJmU8PTEwMCkpfX1jbGFzcyBTdXBwcmVzc0Jhbm5lciBleHRlbmRzIG4uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIobywic3VwcHJlc3NCYW5uZXIiKX19Y2xhc3MgVGFnZ2VkIGV4dGVuZHMgbi5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ0YWdnZWQiKX19Y2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ0ZW1wbGF0ZSIsITApO3RoaXMuYmFzZT1udWxsO3RoaXMucmVsZXZhbnQ9bnVsbDt0aGlzLnN0YXJ0UGFnZT1udWxsO3RoaXMudXJpPW51bGw7dGhpcy54c2w9bnVsbH19Y2xhc3MgVGhyZXNob2xkIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidGhyZXNob2xkIixbInRyYWNlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsIndhcm5pbmciXSl9fWNsYXNzIFRvIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidG8iLFsibnVsbCIsIm1lbW9yeSIsInN0ZGVyciIsInN0ZG91dCIsInN5c3RlbSIsInVyaSJdKX19Y2xhc3MgVGVtcGxhdGVDYWNoZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInRlbXBsYXRlQ2FjaGUiKTt0aGlzLm1heEVudHJpZXM9KDAsaS5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heEVudHJpZXMsZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZT0+ZT49MH0pfX1jbGFzcyBUcmFjZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInRyYWNlIiwhMCk7dGhpcy5hcmVhPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBUcmFuc2Zvcm0gZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ0cmFuc2Zvcm0iLCEwKTt0aGlzLmdyb3VwUGFyZW50PW51bGw7dGhpcy5pZkVtcHR5PW51bGw7dGhpcy5uYW1lQXR0cj1udWxsO3RoaXMucGljdHVyZT1udWxsO3RoaXMucHJlc2VuY2U9bnVsbDt0aGlzLnJlbmFtZT1udWxsO3RoaXMud2hpdGVzcGFjZT1udWxsfX1jbGFzcyBUeXBlIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidHlwZSIsWyJub25lIiwiYXNjaWk4NSIsImFzY2lpSGV4IiwiY2NpdHRmYXgiLCJmbGF0ZSIsImx6dyIsInJ1bkxlbmd0aCIsIm5hdGl2ZSIsInhkcCIsIm1lcmdlZFhEUCJdKX19Y2xhc3MgVXJpIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidXJpIil9fWNsYXNzIFZhbGlkYXRlIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidmFsaWRhdGUiLFsicHJlU3VibWl0IiwicHJlUHJpbnQiLCJwcmVFeGVjdXRlIiwicHJlU2F2ZSJdKX19Y2xhc3MgVmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMgZXh0ZW5kcyBuLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5bImRvY1JlYWR5IiwicG9zdFNpZ24iXS5pbmNsdWRlcyhlKSkpfX1jbGFzcyBWYWxpZGF0aW9uTWVzc2FnaW5nIGV4dGVuZHMgbi5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywidmFsaWRhdGlvbk1lc3NhZ2luZyIsWyJhbGxNZXNzYWdlc0luZGl2aWR1YWxseSIsImFsbE1lc3NhZ2VzVG9nZXRoZXIiLCJmaXJzdE1lc3NhZ2VPbmx5Iiwibm9NZXNzYWdlcyJdKX19Y2xhc3MgVmVyc2lvbiBleHRlbmRzIG4uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInZlcnNpb24iLFsiMS43IiwiMS42IiwiMS41IiwiMS40IiwiMS4zIiwiMS4yIl0pfX1jbGFzcyBWZXJzaW9uQ29udHJvbCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sIlZlcnNpb25Db250cm9sIik7dGhpcy5vdXRwdXRCZWxvdz0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5vdXRwdXRCZWxvdyxbIndhcm4iLCJlcnJvciIsInVwZGF0ZSJdKTt0aGlzLnNvdXJjZUFib3ZlPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUFib3ZlLFsid2FybiIsImVycm9yIl0pO3RoaXMuc291cmNlQmVsb3c9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUuc291cmNlQmVsb3csWyJ1cGRhdGUiLCJtYWludGFpbiJdKX19Y2xhc3MgVmlld2VyUHJlZmVyZW5jZXMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApO3RoaXMuQURCRV9KU0NvbnNvbGU9bnVsbDt0aGlzLkFEQkVfSlNEZWJ1Z2dlcj1udWxsO3RoaXMuYWRkVmlld2VyUHJlZmVyZW5jZXM9bnVsbDt0aGlzLmR1cGxleE9wdGlvbj1udWxsO3RoaXMuZW5mb3JjZT1udWxsO3RoaXMubnVtYmVyT2ZDb3BpZXM9bnVsbDt0aGlzLnBhZ2VSYW5nZT1udWxsO3RoaXMucGlja1RyYXlCeVBERlNpemU9bnVsbDt0aGlzLnByaW50U2NhbGluZz1udWxsfX1jbGFzcyBXZWJDbGllbnQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ3ZWJDbGllbnQiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiI7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIFdoaXRlc3BhY2UgZXh0ZW5kcyBuLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ3aGl0ZXNwYWNlIixbInByZXNlcnZlIiwibHRyaW0iLCJub3JtYWxpemUiLCJydHJpbSIsInRyaW0iXSl9fWNsYXNzIFdpbmRvdyBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ3aW5kb3ciKX1bbi4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChlPT5wYXJzZUludChlLDEwKSkpO2lmKGUuc29tZSgoZT0+aXNOYU4oZSkpKSl0aGlzW24uJGNvbnRlbnRdPVswLDBdO2Vsc2V7MT09PWUubGVuZ3RoJiZlLnB1c2goZVswXSk7dGhpc1tuLiRjb250ZW50XT1lfX19Y2xhc3MgWGRjIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywieGRjIiwhMCk7dGhpcy51cmk9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy54c2w9bmV3IG4uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFhkcCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKG8sInhkcCIsITApO3RoaXMucGFja2V0cz1udWxsfX1jbGFzcyBYc2wgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihvLCJ4c2wiLCEwKTt0aGlzLmRlYnVnPW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgWnBsIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIobywienBsIiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZsaXBMYWJlbD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBDb25maWdOYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKENvbmZpZ05hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQ29uZmlnTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBhY3JvYmF0KGUpe3JldHVybiBuZXcgQWNyb2JhdChlKX1zdGF0aWMgYWNyb2JhdDcoZSl7cmV0dXJuIG5ldyBBY3JvYmF0NyhlKX1zdGF0aWMgQURCRV9KU0NvbnNvbGUoZSl7cmV0dXJuIG5ldyBBREJFX0pTQ29uc29sZShlKX1zdGF0aWMgQURCRV9KU0RlYnVnZ2VyKGUpe3JldHVybiBuZXcgQURCRV9KU0RlYnVnZ2VyKGUpfXN0YXRpYyBhZGRTaWxlbnRQcmludChlKXtyZXR1cm4gbmV3IEFkZFNpbGVudFByaW50KGUpfXN0YXRpYyBhZGRWaWV3ZXJQcmVmZXJlbmNlcyhlKXtyZXR1cm4gbmV3IEFkZFZpZXdlclByZWZlcmVuY2VzKGUpfXN0YXRpYyBhZGp1c3REYXRhKGUpe3JldHVybiBuZXcgQWRqdXN0RGF0YShlKX1zdGF0aWMgYWRvYmVFeHRlbnNpb25MZXZlbChlKXtyZXR1cm4gbmV3IEFkb2JlRXh0ZW5zaW9uTGV2ZWwoZSl9c3RhdGljIGFnZW50KGUpe3JldHVybiBuZXcgQWdlbnQoZSl9c3RhdGljIGFsd2F5c0VtYmVkKGUpe3JldHVybiBuZXcgQWx3YXlzRW1iZWQoZSl9c3RhdGljIGFtZChlKXtyZXR1cm4gbmV3IEFtZChlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IEFyZWEoZSl9c3RhdGljIGF0dHJpYnV0ZXMoZSl7cmV0dXJuIG5ldyBBdHRyaWJ1dGVzKGUpfXN0YXRpYyBhdXRvU2F2ZShlKXtyZXR1cm4gbmV3IEF1dG9TYXZlKGUpfXN0YXRpYyBiYXNlKGUpe3JldHVybiBuZXcgQmFzZShlKX1zdGF0aWMgYmF0Y2hPdXRwdXQoZSl7cmV0dXJuIG5ldyBCYXRjaE91dHB1dChlKX1zdGF0aWMgYmVoYXZpb3JPdmVycmlkZShlKXtyZXR1cm4gbmV3IEJlaGF2aW9yT3ZlcnJpZGUoZSl9c3RhdGljIGNhY2hlKGUpe3JldHVybiBuZXcgQ2FjaGUoZSl9c3RhdGljIGNoYW5nZShlKXtyZXR1cm4gbmV3IENoYW5nZShlKX1zdGF0aWMgY29tbW9uKGUpe3JldHVybiBuZXcgQ29tbW9uKGUpfXN0YXRpYyBjb21wcmVzcyhlKXtyZXR1cm4gbmV3IENvbXByZXNzKGUpfXN0YXRpYyBjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUoZSl7cmV0dXJuIG5ldyBDb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUoZSl9c3RhdGljIGNvbXByZXNzT2JqZWN0U3RyZWFtKGUpe3JldHVybiBuZXcgQ29tcHJlc3NPYmplY3RTdHJlYW0oZSl9c3RhdGljIGNvbXByZXNzaW9uKGUpe3JldHVybiBuZXcgQ29tcHJlc3Npb24oZSl9c3RhdGljIGNvbmZpZyhlKXtyZXR1cm4gbmV3IENvbmZpZyhlKX1zdGF0aWMgY29uZm9ybWFuY2UoZSl7cmV0dXJuIG5ldyBDb25mb3JtYW5jZShlKX1zdGF0aWMgY29udGVudENvcHkoZSl7cmV0dXJuIG5ldyBDb250ZW50Q29weShlKX1zdGF0aWMgY29waWVzKGUpe3JldHVybiBuZXcgQ29waWVzKGUpfXN0YXRpYyBjcmVhdG9yKGUpe3JldHVybiBuZXcgQ3JlYXRvcihlKX1zdGF0aWMgY3VycmVudFBhZ2UoZSl7cmV0dXJuIG5ldyBDdXJyZW50UGFnZShlKX1zdGF0aWMgZGF0YShlKXtyZXR1cm4gbmV3IERhdGEoZSl9c3RhdGljIGRlYnVnKGUpe3JldHVybiBuZXcgRGVidWcoZSl9c3RhdGljIGRlZmF1bHRUeXBlZmFjZShlKXtyZXR1cm4gbmV3IERlZmF1bHRUeXBlZmFjZShlKX1zdGF0aWMgZGVzdGluYXRpb24oZSl7cmV0dXJuIG5ldyBEZXN0aW5hdGlvbihlKX1zdGF0aWMgZG9jdW1lbnRBc3NlbWJseShlKXtyZXR1cm4gbmV3IERvY3VtZW50QXNzZW1ibHkoZSl9c3RhdGljIGRyaXZlcihlKXtyZXR1cm4gbmV3IERyaXZlcihlKX1zdGF0aWMgZHVwbGV4T3B0aW9uKGUpe3JldHVybiBuZXcgRHVwbGV4T3B0aW9uKGUpfXN0YXRpYyBkeW5hbWljUmVuZGVyKGUpe3JldHVybiBuZXcgRHluYW1pY1JlbmRlcihlKX1zdGF0aWMgZW1iZWQoZSl7cmV0dXJuIG5ldyBFbWJlZChlKX1zdGF0aWMgZW5jcnlwdChlKXtyZXR1cm4gbmV3IEVuY3J5cHQoZSl9c3RhdGljIGVuY3J5cHRpb24oZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uKGUpfXN0YXRpYyBlbmNyeXB0aW9uTGV2ZWwoZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uTGV2ZWwoZSl9c3RhdGljIGVuZm9yY2UoZSl7cmV0dXJuIG5ldyBFbmZvcmNlKGUpfXN0YXRpYyBlcXVhdGUoZSl7cmV0dXJuIG5ldyBFcXVhdGUoZSl9c3RhdGljIGVxdWF0ZVJhbmdlKGUpe3JldHVybiBuZXcgRXF1YXRlUmFuZ2UoZSl9c3RhdGljIGV4Y2x1ZGUoZSl7cmV0dXJuIG5ldyBFeGNsdWRlKGUpfXN0YXRpYyBleGNsdWRlTlMoZSl7cmV0dXJuIG5ldyBFeGNsdWRlTlMoZSl9c3RhdGljIGZsaXBMYWJlbChlKXtyZXR1cm4gbmV3IEZsaXBMYWJlbChlKX1zdGF0aWMgZm9udEluZm8oZSl7cmV0dXJuIG5ldyBGb250SW5mbyhlKX1zdGF0aWMgZm9ybUZpZWxkRmlsbGluZyhlKXtyZXR1cm4gbmV3IEZvcm1GaWVsZEZpbGxpbmcoZSl9c3RhdGljIGdyb3VwUGFyZW50KGUpe3JldHVybiBuZXcgR3JvdXBQYXJlbnQoZSl9c3RhdGljIGlmRW1wdHkoZSl7cmV0dXJuIG5ldyBJZkVtcHR5KGUpfXN0YXRpYyBpbmNsdWRlWERQQ29udGVudChlKXtyZXR1cm4gbmV3IEluY2x1ZGVYRFBDb250ZW50KGUpfXN0YXRpYyBpbmNyZW1lbnRhbExvYWQoZSl7cmV0dXJuIG5ldyBJbmNyZW1lbnRhbExvYWQoZSl9c3RhdGljIGluY3JlbWVudGFsTWVyZ2UoZSl7cmV0dXJuIG5ldyBJbmNyZW1lbnRhbE1lcmdlKGUpfXN0YXRpYyBpbnRlcmFjdGl2ZShlKXtyZXR1cm4gbmV3IEludGVyYWN0aXZlKGUpfXN0YXRpYyBqb2coZSl7cmV0dXJuIG5ldyBKb2coZSl9c3RhdGljIGxhYmVsUHJpbnRlcihlKXtyZXR1cm4gbmV3IExhYmVsUHJpbnRlcihlKX1zdGF0aWMgbGF5b3V0KGUpe3JldHVybiBuZXcgTGF5b3V0KGUpfXN0YXRpYyBsZXZlbChlKXtyZXR1cm4gbmV3IExldmVsKGUpfXN0YXRpYyBsaW5lYXJpemVkKGUpe3JldHVybiBuZXcgTGluZWFyaXplZChlKX1zdGF0aWMgbG9jYWxlKGUpe3JldHVybiBuZXcgTG9jYWxlKGUpfXN0YXRpYyBsb2NhbGVTZXQoZSl7cmV0dXJuIG5ldyBMb2NhbGVTZXQoZSl9c3RhdGljIGxvZyhlKXtyZXR1cm4gbmV3IExvZyhlKX1zdGF0aWMgbWFwKGUpe3JldHVybiBuZXcgTWFwRWxlbWVudChlKX1zdGF0aWMgbWVkaXVtSW5mbyhlKXtyZXR1cm4gbmV3IE1lZGl1bUluZm8oZSl9c3RhdGljIG1lc3NhZ2UoZSl7cmV0dXJuIG5ldyBNZXNzYWdlKGUpfXN0YXRpYyBtZXNzYWdpbmcoZSl7cmV0dXJuIG5ldyBNZXNzYWdpbmcoZSl9c3RhdGljIG1vZGUoZSl7cmV0dXJuIG5ldyBNb2RlKGUpfXN0YXRpYyBtb2RpZnlBbm5vdHMoZSl7cmV0dXJuIG5ldyBNb2RpZnlBbm5vdHMoZSl9c3RhdGljIG1zZ0lkKGUpe3JldHVybiBuZXcgTXNnSWQoZSl9c3RhdGljIG5hbWVBdHRyKGUpe3JldHVybiBuZXcgTmFtZUF0dHIoZSl9c3RhdGljIG5ldmVyRW1iZWQoZSl7cmV0dXJuIG5ldyBOZXZlckVtYmVkKGUpfXN0YXRpYyBudW1iZXJPZkNvcGllcyhlKXtyZXR1cm4gbmV3IE51bWJlck9mQ29waWVzKGUpfXN0YXRpYyBvcGVuQWN0aW9uKGUpe3JldHVybiBuZXcgT3BlbkFjdGlvbihlKX1zdGF0aWMgb3V0cHV0KGUpe3JldHVybiBuZXcgT3V0cHV0KGUpfXN0YXRpYyBvdXRwdXRCaW4oZSl7cmV0dXJuIG5ldyBPdXRwdXRCaW4oZSl9c3RhdGljIG91dHB1dFhTTChlKXtyZXR1cm4gbmV3IE91dHB1dFhTTChlKX1zdGF0aWMgb3ZlcnByaW50KGUpe3JldHVybiBuZXcgT3ZlcnByaW50KGUpfXN0YXRpYyBwYWNrZXRzKGUpe3JldHVybiBuZXcgUGFja2V0cyhlKX1zdGF0aWMgcGFnZU9mZnNldChlKXtyZXR1cm4gbmV3IFBhZ2VPZmZzZXQoZSl9c3RhdGljIHBhZ2VSYW5nZShlKXtyZXR1cm4gbmV3IFBhZ2VSYW5nZShlKX1zdGF0aWMgcGFnaW5hdGlvbihlKXtyZXR1cm4gbmV3IFBhZ2luYXRpb24oZSl9c3RhdGljIHBhZ2luYXRpb25PdmVycmlkZShlKXtyZXR1cm4gbmV3IFBhZ2luYXRpb25PdmVycmlkZShlKX1zdGF0aWMgcGFydChlKXtyZXR1cm4gbmV3IFBhcnQoZSl9c3RhdGljIHBjbChlKXtyZXR1cm4gbmV3IFBjbChlKX1zdGF0aWMgcGRmKGUpe3JldHVybiBuZXcgUGRmKGUpfXN0YXRpYyBwZGZhKGUpe3JldHVybiBuZXcgUGRmYShlKX1zdGF0aWMgcGVybWlzc2lvbnMoZSl7cmV0dXJuIG5ldyBQZXJtaXNzaW9ucyhlKX1zdGF0aWMgcGlja1RyYXlCeVBERlNpemUoZSl7cmV0dXJuIG5ldyBQaWNrVHJheUJ5UERGU2l6ZShlKX1zdGF0aWMgcGljdHVyZShlKXtyZXR1cm4gbmV3IFBpY3R1cmUoZSl9c3RhdGljIHBsYWludGV4dE1ldGFkYXRhKGUpe3JldHVybiBuZXcgUGxhaW50ZXh0TWV0YWRhdGEoZSl9c3RhdGljIHByZXNlbmNlKGUpe3JldHVybiBuZXcgUHJlc2VuY2UoZSl9c3RhdGljIHByZXNlbnQoZSl7cmV0dXJuIG5ldyBQcmVzZW50KGUpfXN0YXRpYyBwcmludChlKXtyZXR1cm4gbmV3IFByaW50KGUpfXN0YXRpYyBwcmludEhpZ2hRdWFsaXR5KGUpe3JldHVybiBuZXcgUHJpbnRIaWdoUXVhbGl0eShlKX1zdGF0aWMgcHJpbnRTY2FsaW5nKGUpe3JldHVybiBuZXcgUHJpbnRTY2FsaW5nKGUpfXN0YXRpYyBwcmludGVyTmFtZShlKXtyZXR1cm4gbmV3IFByaW50ZXJOYW1lKGUpfXN0YXRpYyBwcm9kdWNlcihlKXtyZXR1cm4gbmV3IFByb2R1Y2VyKGUpfXN0YXRpYyBwcyhlKXtyZXR1cm4gbmV3IFBzKGUpfXN0YXRpYyByYW5nZShlKXtyZXR1cm4gbmV3IFJhbmdlKGUpfXN0YXRpYyByZWNvcmQoZSl7cmV0dXJuIG5ldyBSZWNvcmQoZSl9c3RhdGljIHJlbGV2YW50KGUpe3JldHVybiBuZXcgUmVsZXZhbnQoZSl9c3RhdGljIHJlbmFtZShlKXtyZXR1cm4gbmV3IFJlbmFtZShlKX1zdGF0aWMgcmVuZGVyUG9saWN5KGUpe3JldHVybiBuZXcgUmVuZGVyUG9saWN5KGUpfXN0YXRpYyBydW5TY3JpcHRzKGUpe3JldHVybiBuZXcgUnVuU2NyaXB0cyhlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgU2NyaXB0KGUpfXN0YXRpYyBzY3JpcHRNb2RlbChlKXtyZXR1cm4gbmV3IFNjcmlwdE1vZGVsKGUpfXN0YXRpYyBzZXZlcml0eShlKXtyZXR1cm4gbmV3IFNldmVyaXR5KGUpfXN0YXRpYyBzaWxlbnRQcmludChlKXtyZXR1cm4gbmV3IFNpbGVudFByaW50KGUpfXN0YXRpYyBzdGFwbGUoZSl7cmV0dXJuIG5ldyBTdGFwbGUoZSl9c3RhdGljIHN0YXJ0Tm9kZShlKXtyZXR1cm4gbmV3IFN0YXJ0Tm9kZShlKX1zdGF0aWMgc3RhcnRQYWdlKGUpe3JldHVybiBuZXcgU3RhcnRQYWdlKGUpfXN0YXRpYyBzdWJtaXRGb3JtYXQoZSl7cmV0dXJuIG5ldyBTdWJtaXRGb3JtYXQoZSl9c3RhdGljIHN1Ym1pdFVybChlKXtyZXR1cm4gbmV3IFN1Ym1pdFVybChlKX1zdGF0aWMgc3Vic2V0QmVsb3coZSl7cmV0dXJuIG5ldyBTdWJzZXRCZWxvdyhlKX1zdGF0aWMgc3VwcHJlc3NCYW5uZXIoZSl7cmV0dXJuIG5ldyBTdXBwcmVzc0Jhbm5lcihlKX1zdGF0aWMgdGFnZ2VkKGUpe3JldHVybiBuZXcgVGFnZ2VkKGUpfXN0YXRpYyB0ZW1wbGF0ZShlKXtyZXR1cm4gbmV3IFRlbXBsYXRlKGUpfXN0YXRpYyB0ZW1wbGF0ZUNhY2hlKGUpe3JldHVybiBuZXcgVGVtcGxhdGVDYWNoZShlKX1zdGF0aWMgdGhyZXNob2xkKGUpe3JldHVybiBuZXcgVGhyZXNob2xkKGUpfXN0YXRpYyB0byhlKXtyZXR1cm4gbmV3IFRvKGUpfXN0YXRpYyB0cmFjZShlKXtyZXR1cm4gbmV3IFRyYWNlKGUpfXN0YXRpYyB0cmFuc2Zvcm0oZSl7cmV0dXJuIG5ldyBUcmFuc2Zvcm0oZSl9c3RhdGljIHR5cGUoZSl7cmV0dXJuIG5ldyBUeXBlKGUpfXN0YXRpYyB1cmkoZSl7cmV0dXJuIG5ldyBVcmkoZSl9c3RhdGljIHZhbGlkYXRlKGUpe3JldHVybiBuZXcgVmFsaWRhdGUoZSl9c3RhdGljIHZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGUpe3JldHVybiBuZXcgVmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMoZSl9c3RhdGljIHZhbGlkYXRpb25NZXNzYWdpbmcoZSl7cmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnaW5nKGUpfXN0YXRpYyB2ZXJzaW9uKGUpe3JldHVybiBuZXcgVmVyc2lvbihlKX1zdGF0aWMgdmVyc2lvbkNvbnRyb2woZSl7cmV0dXJuIG5ldyBWZXJzaW9uQ29udHJvbChlKX1zdGF0aWMgdmlld2VyUHJlZmVyZW5jZXMoZSl7cmV0dXJuIG5ldyBWaWV3ZXJQcmVmZXJlbmNlcyhlKX1zdGF0aWMgd2ViQ2xpZW50KGUpe3JldHVybiBuZXcgV2ViQ2xpZW50KGUpfXN0YXRpYyB3aGl0ZXNwYWNlKGUpe3JldHVybiBuZXcgV2hpdGVzcGFjZShlKX1zdGF0aWMgd2luZG93KGUpe3JldHVybiBuZXcgV2luZG93KGUpfXN0YXRpYyB4ZGMoZSl7cmV0dXJuIG5ldyBYZGMoZSl9c3RhdGljIHhkcChlKXtyZXR1cm4gbmV3IFhkcChlKX1zdGF0aWMgeHNsKGUpe3JldHVybiBuZXcgWHNsKGUpfXN0YXRpYyB6cGwoZSl7cmV0dXJuIG5ldyBacGwoZSl9fXQuQ29uZmlnTmFtZXNwYWNlPUNvbmZpZ05hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNvbm5lY3Rpb25TZXROYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzcpLG49YSg3NSk7Y29uc3QgaT1yLk5hbWVzcGFjZUlkcy5jb25uZWN0aW9uU2V0LmlkO2NsYXNzIENvbm5lY3Rpb25TZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJjb25uZWN0aW9uU2V0IiwhMCk7dGhpcy53c2RsQ29ubmVjdGlvbj1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLnhtbENvbm5lY3Rpb249bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy54c2RDb25uZWN0aW9uPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFZmZlY3RpdmVJbnB1dFBvbGljeSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksImVmZmVjdGl2ZUlucHV0UG9saWN5Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEVmZmVjdGl2ZU91dHB1dFBvbGljeSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksImVmZmVjdGl2ZU91dHB1dFBvbGljeSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJvcGVyYXRpb24iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW5wdXQ9ZS5pbnB1dHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5vdXRwdXQ9ZS5vdXRwdXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUm9vdEVsZW1lbnQgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJyb290RWxlbWVudCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTb2FwQWN0aW9uIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwic29hcEFjdGlvbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTb2FwQWRkcmVzcyBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInNvYXBBZGRyZXNzIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFVyaSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInVyaSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBXc2RsQWRkcmVzcyBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksIndzZGxBZGRyZXNzIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFdzZGxDb25uZWN0aW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwid3NkbENvbm5lY3Rpb24iLCEwKTt0aGlzLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5lZmZlY3RpdmVJbnB1dFBvbGljeT1udWxsO3RoaXMuZWZmZWN0aXZlT3V0cHV0UG9saWN5PW51bGw7dGhpcy5vcGVyYXRpb249bnVsbDt0aGlzLnNvYXBBY3Rpb249bnVsbDt0aGlzLnNvYXBBZGRyZXNzPW51bGw7dGhpcy53c2RsQWRkcmVzcz1udWxsfX1jbGFzcyBYbWxDb25uZWN0aW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwieG1sQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVyaT1udWxsfX1jbGFzcyBYc2RDb25uZWN0aW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwieHNkQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJvb3RFbGVtZW50PW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgQ29ubmVjdGlvblNldE5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoQ29ubmVjdGlvblNldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQ29ubmVjdGlvblNldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgY29ubmVjdGlvblNldChlKXtyZXR1cm4gbmV3IENvbm5lY3Rpb25TZXQoZSl9c3RhdGljIGVmZmVjdGl2ZUlucHV0UG9saWN5KGUpe3JldHVybiBuZXcgRWZmZWN0aXZlSW5wdXRQb2xpY3koZSl9c3RhdGljIGVmZmVjdGl2ZU91dHB1dFBvbGljeShlKXtyZXR1cm4gbmV3IEVmZmVjdGl2ZU91dHB1dFBvbGljeShlKX1zdGF0aWMgb3BlcmF0aW9uKGUpe3JldHVybiBuZXcgT3BlcmF0aW9uKGUpfXN0YXRpYyByb290RWxlbWVudChlKXtyZXR1cm4gbmV3IFJvb3RFbGVtZW50KGUpfXN0YXRpYyBzb2FwQWN0aW9uKGUpe3JldHVybiBuZXcgU29hcEFjdGlvbihlKX1zdGF0aWMgc29hcEFkZHJlc3MoZSl7cmV0dXJuIG5ldyBTb2FwQWRkcmVzcyhlKX1zdGF0aWMgdXJpKGUpe3JldHVybiBuZXcgVXJpKGUpfXN0YXRpYyB3c2RsQWRkcmVzcyhlKXtyZXR1cm4gbmV3IFdzZGxBZGRyZXNzKGUpfXN0YXRpYyB3c2RsQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IFdzZGxDb25uZWN0aW9uKGUpfXN0YXRpYyB4bWxDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgWG1sQ29ubmVjdGlvbihlKX1zdGF0aWMgeHNkQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IFhzZENvbm5lY3Rpb24oZSl9fXQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT1Db25uZWN0aW9uU2V0TmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRGF0YXNldHNOYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzUpLG49YSg3Nyk7Y29uc3QgaT1uLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtjbGFzcyBEYXRhIGV4dGVuZHMgci5YbWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwiZGF0YSIsZSl9W3IuJGlzTnNBZ25vc3RpY10oKXtyZXR1cm4hMH19Y2xhc3MgRGF0YXNldHMgZXh0ZW5kcyByLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJkYXRhc2V0cyIsITApO3RoaXMuZGF0YT1udWxsO3RoaXMuU2lnbmF0dXJlPW51bGx9W3IuJG9uQ2hpbGRdKGUpe2NvbnN0IHQ9ZVtyLiRub2RlTmFtZV07KCJkYXRhIj09PXQmJmVbci4kbmFtZXNwYWNlSWRdPT09aXx8IlNpZ25hdHVyZSI9PT10JiZlW3IuJG5hbWVzcGFjZUlkXT09PW4uTmFtZXNwYWNlSWRzLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpfX1jbGFzcyBEYXRhc2V0c05hbWVzcGFjZXtzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoRGF0YXNldHNOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIERhdGFzZXRzTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBkYXRhc2V0cyhlKXtyZXR1cm4gbmV3IERhdGFzZXRzKGUpfXN0YXRpYyBkYXRhKGUpe3JldHVybiBuZXcgRGF0YShlKX19dC5EYXRhc2V0c05hbWVzcGFjZT1EYXRhc2V0c05hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkxvY2FsZVNldE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg3Nyksbj1hKDc1KSxpPWEoNzYpO2NvbnN0IHM9ci5OYW1lc3BhY2VJZHMubG9jYWxlU2V0LmlkO2NsYXNzIENhbGVuZGFyU3ltYm9scyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImNhbGVuZGFyU3ltYm9scyIsITApO3RoaXMubmFtZT0iZ3JlZ29yaWFuIjt0aGlzLmRheU5hbWVzPW5ldyBuLlhGQU9iamVjdEFycmF5KDIpO3RoaXMuZXJhTmFtZXM9bnVsbDt0aGlzLm1lcmlkaWVtTmFtZXM9bnVsbDt0aGlzLm1vbnRoTmFtZXM9bmV3IG4uWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIEN1cnJlbmN5U3ltYm9sIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiY3VycmVuY3lTeW1ib2wiKTt0aGlzLm5hbWU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pfX1jbGFzcyBDdXJyZW5jeVN5bWJvbHMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJjdXJyZW5jeVN5bWJvbHMiLCEwKTt0aGlzLmN1cnJlbmN5U3ltYm9sPW5ldyBuLlhGQU9iamVjdEFycmF5KDMpfX1jbGFzcyBEYXRlUGF0dGVybiBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRhdGVQYXR0ZXJuIik7dGhpcy5uYW1lPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pfX1jbGFzcyBEYXRlUGF0dGVybnMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXRlUGF0dGVybnMiLCEwKTt0aGlzLmRhdGVQYXR0ZXJuPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpfX1jbGFzcyBEYXRlVGltZVN5bWJvbHMgZXh0ZW5kcyBuLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF0ZVRpbWVTeW1ib2xzIil9fWNsYXNzIERheSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRheSIpfX1jbGFzcyBEYXlOYW1lcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRheU5hbWVzIiwhMCk7dGhpcy5hYmJyPSgwLGkuZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5kYXk9bmV3IG4uWEZBT2JqZWN0QXJyYXkoNyl9fWNsYXNzIEVyYSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImVyYSIpfX1jbGFzcyBFcmFOYW1lcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImVyYU5hbWVzIiwhMCk7dGhpcy5lcmE9bmV3IG4uWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIExvY2FsZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImxvY2FsZSIsITApO3RoaXMuZGVzYz1lLmRlc2N8fCIiO3RoaXMubmFtZT0iaXNvbmFtZSI7dGhpcy5jYWxlbmRhclN5bWJvbHM9bnVsbDt0aGlzLmN1cnJlbmN5U3ltYm9scz1udWxsO3RoaXMuZGF0ZVBhdHRlcm5zPW51bGw7dGhpcy5kYXRlVGltZVN5bWJvbHM9bnVsbDt0aGlzLm51bWJlclBhdHRlcm5zPW51bGw7dGhpcy5udW1iZXJTeW1ib2xzPW51bGw7dGhpcy50aW1lUGF0dGVybnM9bnVsbDt0aGlzLnR5cGVGYWNlcz1udWxsfX1jbGFzcyBMb2NhbGVTZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJsb2NhbGVTZXQiLCEwKTt0aGlzLmxvY2FsZT1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgTWVyaWRpZW0gZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJtZXJpZGllbSIpfX1jbGFzcyBNZXJpZGllbU5hbWVzIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibWVyaWRpZW1OYW1lcyIsITApO3RoaXMubWVyaWRpZW09bmV3IG4uWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIE1vbnRoIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibW9udGgiKX19Y2xhc3MgTW9udGhOYW1lcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm1vbnRoTmFtZXMiLCEwKTt0aGlzLmFiYnI9KDAsaS5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFiYnIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLm1vbnRoPW5ldyBuLlhGQU9iamVjdEFycmF5KDEyKX19Y2xhc3MgTnVtYmVyUGF0dGVybiBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm51bWJlclBhdHRlcm4iKTt0aGlzLm5hbWU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIE51bWJlclBhdHRlcm5zIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyUGF0dGVybnMiLCEwKTt0aGlzLm51bWJlclBhdHRlcm49bmV3IG4uWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIE51bWJlclN5bWJvbCBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm51bWJlclN5bWJvbCIpO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZGVjaW1hbCIsImdyb3VwaW5nIiwicGVyY2VudCIsIm1pbnVzIiwiemVybyJdKX19Y2xhc3MgTnVtYmVyU3ltYm9scyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm51bWJlclN5bWJvbHMiLCEwKTt0aGlzLm51bWJlclN5bWJvbD1uZXcgbi5YRkFPYmplY3RBcnJheSg1KX19Y2xhc3MgVGltZVBhdHRlcm4gZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0aW1lUGF0dGVybiIpO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgVGltZVBhdHRlcm5zIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywidGltZVBhdHRlcm5zIiwhMCk7dGhpcy50aW1lUGF0dGVybj1uZXcgbi5YRkFPYmplY3RBcnJheSg0KX19Y2xhc3MgVHlwZUZhY2UgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0eXBlRmFjZSIsITApO3RoaXMubmFtZT0iInxlLm5hbWV9fWNsYXNzIFR5cGVGYWNlcyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInR5cGVGYWNlcyIsITApO3RoaXMudHlwZUZhY2U9bmV3IG4uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIExvY2FsZVNldE5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoTG9jYWxlU2V0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBMb2NhbGVTZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIGNhbGVuZGFyU3ltYm9scyhlKXtyZXR1cm4gbmV3IENhbGVuZGFyU3ltYm9scyhlKX1zdGF0aWMgY3VycmVuY3lTeW1ib2woZSl7cmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbChlKX1zdGF0aWMgY3VycmVuY3lTeW1ib2xzKGUpe3JldHVybiBuZXcgQ3VycmVuY3lTeW1ib2xzKGUpfXN0YXRpYyBkYXRlUGF0dGVybihlKXtyZXR1cm4gbmV3IERhdGVQYXR0ZXJuKGUpfXN0YXRpYyBkYXRlUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBEYXRlUGF0dGVybnMoZSl9c3RhdGljIGRhdGVUaW1lU3ltYm9scyhlKXtyZXR1cm4gbmV3IERhdGVUaW1lU3ltYm9scyhlKX1zdGF0aWMgZGF5KGUpe3JldHVybiBuZXcgRGF5KGUpfXN0YXRpYyBkYXlOYW1lcyhlKXtyZXR1cm4gbmV3IERheU5hbWVzKGUpfXN0YXRpYyBlcmEoZSl7cmV0dXJuIG5ldyBFcmEoZSl9c3RhdGljIGVyYU5hbWVzKGUpe3JldHVybiBuZXcgRXJhTmFtZXMoZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IExvY2FsZShlKX1zdGF0aWMgbG9jYWxlU2V0KGUpe3JldHVybiBuZXcgTG9jYWxlU2V0KGUpfXN0YXRpYyBtZXJpZGllbShlKXtyZXR1cm4gbmV3IE1lcmlkaWVtKGUpfXN0YXRpYyBtZXJpZGllbU5hbWVzKGUpe3JldHVybiBuZXcgTWVyaWRpZW1OYW1lcyhlKX1zdGF0aWMgbW9udGgoZSl7cmV0dXJuIG5ldyBNb250aChlKX1zdGF0aWMgbW9udGhOYW1lcyhlKXtyZXR1cm4gbmV3IE1vbnRoTmFtZXMoZSl9c3RhdGljIG51bWJlclBhdHRlcm4oZSl7cmV0dXJuIG5ldyBOdW1iZXJQYXR0ZXJuKGUpfXN0YXRpYyBudW1iZXJQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IE51bWJlclBhdHRlcm5zKGUpfXN0YXRpYyBudW1iZXJTeW1ib2woZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2woZSl9c3RhdGljIG51bWJlclN5bWJvbHMoZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2xzKGUpfXN0YXRpYyB0aW1lUGF0dGVybihlKXtyZXR1cm4gbmV3IFRpbWVQYXR0ZXJuKGUpfXN0YXRpYyB0aW1lUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBUaW1lUGF0dGVybnMoZSl9c3RhdGljIHR5cGVGYWNlKGUpe3JldHVybiBuZXcgVHlwZUZhY2UoZSl9c3RhdGljIHR5cGVGYWNlcyhlKXtyZXR1cm4gbmV3IFR5cGVGYWNlcyhlKX19dC5Mb2NhbGVTZXROYW1lc3BhY2U9TG9jYWxlU2V0TmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU2lnbmF0dXJlTmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDc3KSxuPWEoNzUpO2NvbnN0IGk9ci5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkO2NsYXNzIFNpZ25hdHVyZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInNpZ25hdHVyZSIsITApfX1jbGFzcyBTaWduYXR1cmVOYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKFNpZ25hdHVyZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gU2lnbmF0dXJlTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBTaWduYXR1cmUoZSl9fXQuU2lnbmF0dXJlTmFtZXNwYWNlPVNpZ25hdHVyZU5hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlN0eWxlc2hlZXROYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzcpLG49YSg3NSk7Y29uc3QgaT1yLk5hbWVzcGFjZUlkcy5zdHlsZXNoZWV0LmlkO2NsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJzdHlsZXNoZWV0IiwhMCl9fWNsYXNzIFN0eWxlc2hlZXROYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKFN0eWxlc2hlZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFN0eWxlc2hlZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIHN0eWxlc2hlZXQoZSl7cmV0dXJuIG5ldyBTdHlsZXNoZWV0KGUpfX10LlN0eWxlc2hlZXROYW1lc3BhY2U9U3R5bGVzaGVldE5hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhkcE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSg3Nyksbj1hKDc1KTtjb25zdCBpPXIuTmFtZXNwYWNlSWRzLnhkcC5pZDtjbGFzcyBYZHAgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJ4ZHAiLCEwKTt0aGlzLnV1aWQ9ZS51dWlkfHwiIjt0aGlzLnRpbWVTdGFtcD1lLnRpbWVTdGFtcHx8IiI7dGhpcy5jb25maWc9bnVsbDt0aGlzLmNvbm5lY3Rpb25TZXQ9bnVsbDt0aGlzLmRhdGFzZXRzPW51bGw7dGhpcy5sb2NhbGVTZXQ9bnVsbDt0aGlzLnN0eWxlc2hlZXQ9bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy50ZW1wbGF0ZT1udWxsfVtuLiRvbkNoaWxkQ2hlY2tdKGUpe2NvbnN0IHQ9ci5OYW1lc3BhY2VJZHNbZVtuLiRub2RlTmFtZV1dO3JldHVybiB0JiZlW24uJG5hbWVzcGFjZUlkXT09PXQuaWR9fWNsYXNzIFhkcE5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoWGRwTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBYZHBOYW1lc3BhY2VbZV0odCl9c3RhdGljIHhkcChlKXtyZXR1cm4gbmV3IFhkcChlKX19dC5YZHBOYW1lc3BhY2U9WGRwTmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWGh0bWxOYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoNzUpLG49YSg3NyksaT1hKDgyKSxzPWEoNzYpO2NvbnN0IG89bi5OYW1lc3BhY2VJZHMueGh0bWwuaWQsYz1TeW1ib2woKSxsPW5ldyBTZXQoWyJjb2xvciIsImZvbnQiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXdlaWdodCIsIm1hcmdpbiIsIm1hcmdpbi1ib3R0b20iLCJtYXJnaW4tbGVmdCIsIm1hcmdpbi1yaWdodCIsIm1hcmdpbi10b3AiLCJsZXR0ZXItc3BhY2luZyIsImxpbmUtaGVpZ2h0Iiwib3JwaGFucyIsInBhZ2UtYnJlYWstYWZ0ZXIiLCJwYWdlLWJyZWFrLWJlZm9yZSIsInBhZ2UtYnJlYWstaW5zaWRlIiwidGFiLWludGVydmFsIiwidGFiLXN0b3AiLCJ0ZXh0LWFsaWduIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1pbmRlbnQiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndpZG93cyIsImtlcm5pbmctbW9kZSIsInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLCJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZSIsInhmYS1zcGFjZXJ1biIsInhmYS10YWItc3RvcHMiXSksaD1uZXcgTWFwKFtbInBhZ2UtYnJlYWstYWZ0ZXIiLCJicmVha0FmdGVyIl0sWyJwYWdlLWJyZWFrLWJlZm9yZSIsImJyZWFrQmVmb3JlIl0sWyJwYWdlLWJyZWFrLWluc2lkZSIsImJyZWFrSW5zaWRlIl0sWyJrZXJuaW5nLW1vZGUiLGU9PiJub25lIj09PWU/Im5vbmUiOiJub3JtYWwiXSxbInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLGU9PmBzY2FsZVgoJHtNYXRoLm1heCgwLE1hdGgubWluKHBhcnNlSW50KGUpLzEwMCkpLnRvRml4ZWQoMil9KWBdLFsieGZhLWZvbnQtdmVydGljYWwtc2NhbGUiLGU9PmBzY2FsZVkoJHtNYXRoLm1heCgwLE1hdGgubWluKHBhcnNlSW50KGUpLzEwMCkpLnRvRml4ZWQoMil9KWBdLFsieGZhLXNwYWNlcnVuIiwiIl0sWyJ4ZmEtdGFiLXN0b3BzIiwiIl0sWyJmb250LXNpemUiLChlLHQpPT57ZT10LmZvbnRTaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpO3JldHVybigwLGkubWVhc3VyZVRvU3RyaW5nKSguOTkqZSl9XSxbImxldHRlci1zcGFjaW5nIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbImxpbmUtaGVpZ2h0IixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbiIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tYm90dG9tIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbi1sZWZ0IixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbi1yaWdodCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tdG9wIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbInRleHQtaW5kZW50IixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbImZvbnQtZmFtaWx5IixlPT5lXSxbInZlcnRpY2FsLWFsaWduIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXV0pLHU9L1xzKy9nLGQ9L1tcclxuXSsvZyxmPS9cclxuPy9nO2Z1bmN0aW9uIG1hcFN0eWxlKGUsdCxhKXtjb25zdCBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoIWUpcmV0dXJuIG47Y29uc3Qgbz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFt0LGFdb2YgZS5zcGxpdCgiOyIpLm1hcCgoZT0+ZS5zcGxpdCgiOiIsMikpKSl7Y29uc3QgZT1oLmdldCh0KTtpZigiIj09PWUpY29udGludWU7bGV0IHI9YTtlJiYocj0ic3RyaW5nIj09dHlwZW9mIGU/ZTplKGEsbykpO3QuZW5kc1dpdGgoInNjYWxlIik/bi50cmFuc2Zvcm0/bi50cmFuc2Zvcm09YCR7blt0XX0gJHtyfWA6bi50cmFuc2Zvcm09cjpuW3QucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywoKGUsdCk9PnQudG9VcHBlckNhc2UoKSkpXT1yfW4uZm9udEZhbWlseSYmKDAsaS5zZXRGb250RmFtaWx5KSh7dHlwZWZhY2U6bi5mb250RmFtaWx5LHdlaWdodDpuLmZvbnRXZWlnaHR8fCJub3JtYWwiLHBvc3R1cmU6bi5mb250U3R5bGV8fCJub3JtYWwiLHNpemU6by5mb250U2l6ZXx8MH0sdCx0W3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIsbik7aWYoYSYmbi52ZXJ0aWNhbEFsaWduJiYiMHB4IiE9PW4udmVydGljYWxBbGlnbiYmbi5mb250U2l6ZSl7Y29uc3QgZT0uNTgzLHQ9LjMzMyxhPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKG4uZm9udFNpemUpO24uZm9udFNpemU9KDAsaS5tZWFzdXJlVG9TdHJpbmcpKGEqZSk7bi52ZXJ0aWNhbEFsaWduPSgwLGkubWVhc3VyZVRvU3RyaW5nKShNYXRoLnNpZ24oKDAscy5nZXRNZWFzdXJlbWVudCkobi52ZXJ0aWNhbEFsaWduKSkqYSp0KX1hJiZuLmZvbnRTaXplJiYobi5mb250U2l6ZT1gY2FsYygke24uZm9udFNpemV9ICogdmFyKC0tc2NhbGUtZmFjdG9yKSlgKTsoMCxpLmZpeFRleHRJbmRlbnQpKG4pO3JldHVybiBufWNvbnN0IGc9bmV3IFNldChbImJvZHkiLCJodG1sIl0pO2NsYXNzIFhodG1sT2JqZWN0IGV4dGVuZHMgci5YbWxPYmplY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihvLHQpO3RoaXNbY109ITE7dGhpcy5zdHlsZT1lLnN0eWxlfHwiIn1bci4kY2xlYW5dKGUpe3N1cGVyW3IuJGNsZWFuXShlKTt0aGlzLnN0eWxlPWZ1bmN0aW9uIGNoZWNrU3R5bGUoZSl7cmV0dXJuIGUuc3R5bGU/ZS5zdHlsZS50cmltKCkuc3BsaXQoL1xzKjtccyovKS5maWx0ZXIoKGU9PiEhZSkpLm1hcCgoZT0+ZS5zcGxpdCgvXHMqOlxzKi8sMikpKS5maWx0ZXIoKChbdCxhXSk9PnsiZm9udC1mYW1pbHkiPT09dCYmZVtyLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZChhKTtyZXR1cm4gbC5oYXModCl9KSkubWFwKChlPT5lLmpvaW4oIjoiKSkpLmpvaW4oIjsiKToiIn0odGhpcyl9W3IuJGFjY2VwdFdoaXRlc3BhY2VdKCl7cmV0dXJuIWcuaGFzKHRoaXNbci4kbm9kZU5hbWVdKX1bci4kb25UZXh0XShlLHQ9ITEpe2lmKHQpdGhpc1tjXT0hMDtlbHNle2U9ZS5yZXBsYWNlKGQsIiIpO3RoaXMuc3R5bGUuaW5jbHVkZXMoInhmYS1zcGFjZXJ1bjp5ZXMiKXx8KGU9ZS5yZXBsYWNlKHUsIiAiKSl9ZSYmKHRoaXNbci4kY29udGVudF0rPWUpfVtyLiRwdXNoR2x5cGhzXShlLHQ9ITApe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXt0b3A6TmFOLGJvdHRvbTpOYU4sbGVmdDpOYU4scmlnaHQ6TmFOfTtsZXQgaT1udWxsO2Zvcihjb25zdFtlLHRdb2YgdGhpcy5zdHlsZS5zcGxpdCgiOyIpLm1hcCgoZT0+ZS5zcGxpdCgiOiIsMikpKSlzd2l0Y2goZSl7Y2FzZSJmb250LWZhbWlseSI6YS50eXBlZmFjZT0oMCxzLnN0cmlwUXVvdGVzKSh0KTticmVhaztjYXNlImZvbnQtc2l6ZSI6YS5zaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UiZm9udC13ZWlnaHQiOmEud2VpZ2h0PXQ7YnJlYWs7Y2FzZSJmb250LXN0eWxlIjphLnBvc3R1cmU9dDticmVhaztjYXNlImxldHRlci1zcGFjaW5nIjphLmxldHRlclNwYWNpbmc9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJtYXJnaW4iOmNvbnN0IGU9dC5zcGxpdCgvIFx0LykubWFwKChlPT4oMCxzLmdldE1lYXN1cmVtZW50KShlKSkpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOm4udG9wPW4uYm90dG9tPW4ubGVmdD1uLnJpZ2h0PWVbMF07YnJlYWs7Y2FzZSAyOm4udG9wPW4uYm90dG9tPWVbMF07bi5sZWZ0PW4ucmlnaHQ9ZVsxXTticmVhaztjYXNlIDM6bi50b3A9ZVswXTtuLmJvdHRvbT1lWzJdO24ubGVmdD1uLnJpZ2h0PWVbMV07YnJlYWs7Y2FzZSA0Om4udG9wPWVbMF07bi5sZWZ0PWVbMV07bi5ib3R0b209ZVsyXTtuLnJpZ2h0PWVbM119YnJlYWs7Y2FzZSJtYXJnaW4tdG9wIjpuLnRvcD0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlIm1hcmdpbi1ib3R0b20iOm4uYm90dG9tPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UibWFyZ2luLWxlZnQiOm4ubGVmdD0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlIm1hcmdpbi1yaWdodCI6bi5yaWdodD0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlImxpbmUtaGVpZ2h0IjppPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpfWUucHVzaERhdGEoYSxuLGkpO2lmKHRoaXNbci4kY29udGVudF0pZS5hZGRTdHJpbmcodGhpc1tyLiRjb250ZW50XSk7ZWxzZSBmb3IoY29uc3QgdCBvZiB0aGlzW3IuJGdldENoaWxkcmVuXSgpKSIjdGV4dCIhPT10W3IuJG5vZGVOYW1lXT90W3IuJHB1c2hHbHlwaHNdKGUpOmUuYWRkU3RyaW5nKHRbci4kY29udGVudF0pO3QmJmUucG9wRm9udCgpfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9W107dGhpc1tyLiRleHRyYV09e2NoaWxkcmVuOnR9O3RoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHt9KTtpZigwPT09dC5sZW5ndGgmJiF0aGlzW3IuJGNvbnRlbnRdKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7bGV0IGE7YT10aGlzW2NdP3RoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS5yZXBsYWNlKGYsIlxuIik6dm9pZCAwOnRoaXNbci4kY29udGVudF18fHZvaWQgMDtyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6dGhpc1tyLiRub2RlTmFtZV0sYXR0cmlidXRlczp7aHJlZjp0aGlzLmhyZWYsc3R5bGU6bWFwU3R5bGUodGhpcy5zdHlsZSx0aGlzLHRoaXNbY10pfSxjaGlsZHJlbjp0LHZhbHVlOmF9KX19Y2xhc3MgQSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImEiKTt0aGlzLmhyZWY9KDAsaS5maXhVUkwpKGUuaHJlZil8fCIifX1jbGFzcyBCIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYiIpfVtyLiRwdXNoR2x5cGhzXShlKXtlLnB1c2hGb250KHt3ZWlnaHQ6ImJvbGQifSk7c3VwZXJbci4kcHVzaEdseXBoc10oZSk7ZS5wb3BGb250KCl9fWNsYXNzIEJvZHkgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJib2R5Iil9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD1zdXBlcltyLiR0b0hUTUxdKGUpLHtodG1sOmF9PXQ7aWYoIWEpcmV0dXJuIHMuSFRNTFJlc3VsdC5FTVBUWTthLm5hbWU9ImRpdiI7YS5hdHRyaWJ1dGVzLmNsYXNzPVsieGZhUmljaCJdO3JldHVybiB0fX1jbGFzcyBCciBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImJyIil9W3IuJHRleHRdKCl7cmV0dXJuIlxuIn1bci4kcHVzaEdseXBoc10oZSl7ZS5hZGRTdHJpbmcoIlxuIil9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJiciJ9KX19Y2xhc3MgSHRtbCBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImh0bWwiKX1bci4kdG9IVE1MXShlKXtjb25zdCB0PVtdO3RoaXNbci4kZXh0cmFdPXtjaGlsZHJlbjp0fTt0aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7fSk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbInhmYVJpY2giXSxzdHlsZTp7fX0sdmFsdWU6dGhpc1tyLiRjb250ZW50XXx8IiJ9KTtpZigxPT09dC5sZW5ndGgpe2NvbnN0IGU9dFswXTtpZihlLmF0dHJpYnV0ZXMmJmUuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhlKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19Y2xhc3MgSSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImkiKX1bci4kcHVzaEdseXBoc10oZSl7ZS5wdXNoRm9udCh7cG9zdHVyZToiaXRhbGljIn0pO3N1cGVyW3IuJHB1c2hHbHlwaHNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBMaSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImxpIil9fWNsYXNzIE9sIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwib2wiKX19Y2xhc3MgUCBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInAiKX1bci4kcHVzaEdseXBoc10oZSl7c3VwZXJbci4kcHVzaEdseXBoc10oZSwhMSk7ZS5hZGRTdHJpbmcoIlxuIik7ZS5hZGRQYXJhKCk7ZS5wb3BGb250KCl9W3IuJHRleHRdKCl7cmV0dXJuIHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/c3VwZXJbci4kdGV4dF0oKTpzdXBlcltyLiR0ZXh0XSgpKyJcbiJ9fWNsYXNzIFNwYW4gZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzcGFuIil9fWNsYXNzIFN1YiBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInN1YiIpfX1jbGFzcyBTdXAgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzdXAiKX19Y2xhc3MgVWwgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJ1bCIpfX1jbGFzcyBYaHRtbE5hbWVzcGFjZXtzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoWGh0bWxOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFhodG1sTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBhKGUpe3JldHVybiBuZXcgQShlKX1zdGF0aWMgYihlKXtyZXR1cm4gbmV3IEIoZSl9c3RhdGljIGJvZHkoZSl7cmV0dXJuIG5ldyBCb2R5KGUpfXN0YXRpYyBicihlKXtyZXR1cm4gbmV3IEJyKGUpfXN0YXRpYyBodG1sKGUpe3JldHVybiBuZXcgSHRtbChlKX1zdGF0aWMgaShlKXtyZXR1cm4gbmV3IEkoZSl9c3RhdGljIGxpKGUpe3JldHVybiBuZXcgTGkoZSl9c3RhdGljIG9sKGUpe3JldHVybiBuZXcgT2woZSl9c3RhdGljIHAoZSl7cmV0dXJuIG5ldyBQKGUpfXN0YXRpYyBzcGFuKGUpe3JldHVybiBuZXcgU3BhbihlKX1zdGF0aWMgc3ViKGUpe3JldHVybiBuZXcgU3ViKGUpfXN0YXRpYyBzdXAoZSl7cmV0dXJuIG5ldyBTdXAoZSl9c3RhdGljIHVsKGUpe3JldHVybiBuZXcgVWwoZSl9fXQuWGh0bWxOYW1lc3BhY2U9WGh0bWxOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDc3KSxuPWEoNzUpO2NsYXNzIFVua25vd25OYW1lc3BhY2V7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lc3BhY2VJZD1lfVtyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtyZXR1cm4gbmV3IG4uWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsZSx0KX19dC5Vbmtub3duTmFtZXNwYWNlPVVua25vd25OYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5EYXRhc2V0UmVhZGVyPXZvaWQgMDt2YXIgcj1hKDIpLG49YSg0KSxpPWEoNjQpO2Z1bmN0aW9uIGRlY29kZVN0cmluZyhlKXt0cnl7cmV0dXJuKDAsci5zdHJpbmdUb1VURjhTdHJpbmcpKGUpfWNhdGNoKHQpeygwLHIud2FybikoYFVURi04IGRlY29kaW5nIGZhaWxlZDogIiR7dH0iLmApO3JldHVybiBlfX1jbGFzcyBEYXRhc2V0WE1MUGFyc2VyIGV4dGVuZHMgaS5TaW1wbGVYTUxQYXJzZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5ub2RlPW51bGx9b25FbmRFbGVtZW50KGUpe2NvbnN0IHQ9c3VwZXIub25FbmRFbGVtZW50KGUpO2lmKHQmJiJ4ZmE6ZGF0YXNldHMiPT09ZSl7dGhpcy5ub2RlPXQ7dGhyb3cgbmV3IEVycm9yKCJBYm9ydGluZyBEYXRhc2V0WE1MUGFyc2VyLiIpfX19dC5EYXRhc2V0UmVhZGVyPWNsYXNzIERhdGFzZXRSZWFkZXJ7Y29uc3RydWN0b3IoZSl7aWYoZS5kYXRhc2V0cyl0aGlzLm5vZGU9bmV3IGkuU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUuZGF0YXNldHMpLmRvY3VtZW50RWxlbWVudDtlbHNle2NvbnN0IHQ9bmV3IERhdGFzZXRYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KTt0cnl7dC5wYXJzZUZyb21TdHJpbmcoZVsieGRwOnhkcCJdKX1jYXRjaChlKXt9dGhpcy5ub2RlPXQubm9kZX19Z2V0VmFsdWUoZSl7aWYoIXRoaXMubm9kZXx8IWUpcmV0dXJuIiI7Y29uc3QgdD10aGlzLm5vZGUuc2VhcmNoTm9kZSgoMCxuLnBhcnNlWEZBUGF0aCkoZSksMCk7aWYoIXQpcmV0dXJuIiI7Y29uc3QgYT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGEmJiJ2YWx1ZSI9PT1hLm5vZGVOYW1lP3QuY2hpbGRyZW4ubWFwKChlPT5kZWNvZGVTdHJpbmcoZS50ZXh0Q29udGVudCkpKTpkZWNvZGVTdHJpbmcodC50ZXh0Q29udGVudCl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhSZWY9dm9pZCAwO3ZhciByPWEoMiksbj1hKDMpLGk9YSg0KSxzPWEoMTUpLG89YSg1KSxjPWEoNjUpO3QuWFJlZj1jbGFzcyBYUmVme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZTt0aGlzLnBkZk1hbmFnZXI9dDt0aGlzLmVudHJpZXM9W107dGhpcy54cmVmc3Rtcz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuX2NhY2hlTWFwPW5ldyBNYXA7dGhpcy5fcGVuZGluZ1JlZnM9bmV3IG4uUmVmU2V0O3RoaXMuc3RhdHM9bmV3IGkuRG9jU3RhdHModC5tc2dIYW5kbGVyKTt0aGlzLl9uZXdSZWZOdW09bnVsbH1nZXROZXdSZWYoKXtudWxsPT09dGhpcy5fbmV3UmVmTnVtJiYodGhpcy5fbmV3UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO3JldHVybiBuLlJlZi5nZXQodGhpcy5fbmV3UmVmTnVtKyssMCl9cmVzZXROZXdSZWYoKXt0aGlzLl9uZXdSZWZOdW09bnVsbH1zZXRTdGFydFhSZWYoZSl7dGhpcy5zdGFydFhSZWZRdWV1ZT1bZV19cGFyc2UoZT0hMSl7bGV0IHQsYSxzO2lmKGUpeygwLHIud2FybikoIkluZGV4aW5nIGFsbCBQREYgb2JqZWN0cyIpO3Q9dGhpcy5pbmRleE9iamVjdHMoKX1lbHNlIHQ9dGhpcy5yZWFkWFJlZigpO3QuYXNzaWduWHJlZih0aGlzKTt0aGlzLnRyYWlsZXI9dDt0cnl7YT10LmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKShgWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKGEgaW5zdGFuY2VvZiBuLkRpY3Qpe2NvbnN0IGU9dC5nZXQoIklEIikscj1lJiZlLmxlbmd0aD9lWzBdOiIiO2Euc3VwcHJlc3NFbmNyeXB0aW9uPSEwO3RoaXMuZW5jcnlwdD1uZXcgYy5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5KGEscix0aGlzLnBkZk1hbmFnZXIucGFzc3dvcmQpfXRyeXtzPXQuZ2V0KCJSb290Iil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxyLndhcm4pKGBYUmVmLnBhcnNlIC0gSW52YWxpZCAiUm9vdCIgcmVmZXJlbmNlOiAiJHtlfSIuYCl9aWYocyBpbnN0YW5jZW9mIG4uRGljdCl0cnl7aWYocy5nZXQoIlBhZ2VzIilpbnN0YW5jZW9mIG4uRGljdCl7dGhpcy5yb290PXM7cmV0dXJufX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkICJQYWdlcyIgcmVmZXJlbmNlOiAiJHtlfSIuYCl9aWYoIWUpdGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9uO3Rocm93IG5ldyByLkludmFsaWRQREZFeGNlcHRpb24oIkludmFsaWQgUm9vdCByZWZlcmVuY2UuIil9cHJvY2Vzc1hSZWZUYWJsZShlKXsidGFibGVTdGF0ZSJpbiB0aGlzfHwodGhpcy50YWJsZVN0YXRlPXtlbnRyeU51bTowLHN0cmVhbVBvczplLmxleGVyLnN0cmVhbS5wb3MscGFyc2VyQnVmMTplLmJ1ZjEscGFyc2VyQnVmMjplLmJ1ZjJ9KTtjb25zdCB0PXRoaXMucmVhZFhSZWZUYWJsZShlKTtpZighKDAsbi5pc0NtZCkodCwidHJhaWxlciIpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO2xldCBhPWUuZ2V0T2JqKCk7YSBpbnN0YW5jZW9mIG4uRGljdHx8IWEuZGljdHx8KGE9YS5kaWN0KTtpZighKGEgaW5zdGFuY2VvZiBuLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnkiKTtkZWxldGUgdGhpcy50YWJsZVN0YXRlO3JldHVybiBhfXJlYWRYUmVmVGFibGUoZSl7Y29uc3QgdD1lLmxleGVyLnN0cmVhbSxhPXRoaXMudGFibGVTdGF0ZTt0LnBvcz1hLnN0cmVhbVBvcztlLmJ1ZjE9YS5wYXJzZXJCdWYxO2UuYnVmMj1hLnBhcnNlckJ1ZjI7bGV0IGk7Zm9yKDs7KXtpZighKCJmaXJzdEVudHJ5TnVtImluIGEpfHwhKCJlbnRyeUNvdW50ImluIGEpKXtpZigoMCxuLmlzQ21kKShpPWUuZ2V0T2JqKCksInRyYWlsZXIiKSlicmVhazthLmZpcnN0RW50cnlOdW09aTthLmVudHJ5Q291bnQ9ZS5nZXRPYmooKX1sZXQgcz1hLmZpcnN0RW50cnlOdW07Y29uc3Qgbz1hLmVudHJ5Q291bnQ7aWYoIU51bWJlci5pc0ludGVnZXIocyl8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IHdyb25nIHR5cGVzIGluIHN1YnNlY3Rpb24gaGVhZGVyIik7Zm9yKGxldCBpPWEuZW50cnlOdW07aTxvO2krKyl7YS5zdHJlYW1Qb3M9dC5wb3M7YS5lbnRyeU51bT1pO2EucGFyc2VyQnVmMT1lLmJ1ZjE7YS5wYXJzZXJCdWYyPWUuYnVmMjtjb25zdCBjPXt9O2Mub2Zmc2V0PWUuZ2V0T2JqKCk7Yy5nZW49ZS5nZXRPYmooKTtjb25zdCBsPWUuZ2V0T2JqKCk7aWYobCBpbnN0YW5jZW9mIG4uQ21kKXN3aXRjaChsLmNtZCl7Y2FzZSJmIjpjLmZyZWU9ITA7YnJlYWs7Y2FzZSJuIjpjLnVuY29tcHJlc3NlZD0hMH1pZighTnVtYmVyLmlzSW50ZWdlcihjLm9mZnNldCl8fCFOdW1iZXIuaXNJbnRlZ2VyKGMuZ2VuKXx8IWMuZnJlZSYmIWMudW5jb21wcmVzc2VkKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluIFhSZWYgc3Vic2VjdGlvbjogJHtzfSwgJHtvfWApOzA9PT1pJiZjLmZyZWUmJjE9PT1zJiYocz0wKTt0aGlzLmVudHJpZXNbaStzXXx8KHRoaXMuZW50cmllc1tpK3NdPWMpfWEuZW50cnlOdW09MDthLnN0cmVhbVBvcz10LnBvczthLnBhcnNlckJ1ZjE9ZS5idWYxO2EucGFyc2VyQnVmMj1lLmJ1ZjI7ZGVsZXRlIGEuZmlyc3RFbnRyeU51bTtkZWxldGUgYS5lbnRyeUNvdW50fWlmKHRoaXMuZW50cmllc1swXSYmIXRoaXMuZW50cmllc1swXS5mcmVlKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IHVuZXhwZWN0ZWQgZmlyc3Qgb2JqZWN0Iik7cmV0dXJuIGl9cHJvY2Vzc1hSZWZTdHJlYW0oZSl7aWYoISgic3RyZWFtU3RhdGUiaW4gdGhpcykpe2NvbnN0IHQ9ZS5kaWN0LGE9dC5nZXQoIlciKTtsZXQgcj10LmdldCgiSW5kZXgiKTtyfHwocj1bMCx0LmdldCgiU2l6ZSIpXSk7dGhpcy5zdHJlYW1TdGF0ZT17ZW50cnlSYW5nZXM6cixieXRlV2lkdGhzOmEsZW50cnlOdW06MCxzdHJlYW1Qb3M6ZS5wb3N9fXRoaXMucmVhZFhSZWZTdHJlYW0oZSk7ZGVsZXRlIHRoaXMuc3RyZWFtU3RhdGU7cmV0dXJuIGUuZGljdH1yZWFkWFJlZlN0cmVhbShlKXtjb25zdCB0PXRoaXMuc3RyZWFtU3RhdGU7ZS5wb3M9dC5zdHJlYW1Qb3M7Y29uc3RbYSxuLGldPXQuYnl0ZVdpZHRocyxzPXQuZW50cnlSYW5nZXM7Zm9yKDtzLmxlbmd0aD4wOyl7Y29uc3RbbyxjXT1zO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihjKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIHJhbmdlIGZpZWxkczogJHtvfSwgJHtjfWApO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpfHwhTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIoaSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiAke299LCAke2N9YCk7Zm9yKGxldCBzPXQuZW50cnlOdW07czxjOysrcyl7dC5lbnRyeU51bT1zO3Quc3RyZWFtUG9zPWUucG9zO2xldCBjPTAsbD0wLGg9MDtmb3IobGV0IHQ9MDt0PGE7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ3R5cGUnLiIpO2M9Yzw8OHx0fTA9PT1hJiYoYz0xKTtmb3IobGV0IHQ9MDt0PG47Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ29mZnNldCcuIik7bD1sPDw4fHR9Zm9yKGxldCB0PTA7dDxpOysrdCl7Y29uc3QgdD1lLmdldEJ5dGUoKTtpZigtMT09PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtoPWg8PDh8dH1jb25zdCB1PXt9O3Uub2Zmc2V0PWw7dS5nZW49aDtzd2l0Y2goYyl7Y2FzZSAwOnUuZnJlZT0hMDticmVhaztjYXNlIDE6dS51bmNvbXByZXNzZWQ9ITA7YnJlYWs7Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSB0eXBlOiAke2N9YCl9dGhpcy5lbnRyaWVzW28rc118fCh0aGlzLmVudHJpZXNbbytzXT11KX10LmVudHJ5TnVtPTA7dC5zdHJlYW1Qb3M9ZS5wb3M7cy5zcGxpY2UoMCwyKX19aW5kZXhPYmplY3RzKCl7ZnVuY3Rpb24gcmVhZFRva2VuKGUsdCl7bGV0IGE9IiIscj1lW3RdO2Zvcig7MTAhPT1yJiYxMyE9PXImJjYwIT09ciYmISgrK3Q+PWUubGVuZ3RoKTspe2ErPVN0cmluZy5mcm9tQ2hhckNvZGUocik7cj1lW3RdfXJldHVybiBhfWZ1bmN0aW9uIHNraXBVbnRpbChlLHQsYSl7Y29uc3Qgcj1hLmxlbmd0aCxuPWUubGVuZ3RoO2xldCBpPTA7Zm9yKDt0PG47KXtsZXQgbj0wO2Zvcig7bjxyJiZlW3Qrbl09PT1hW25dOykrK247aWYobj49cilicmVhazt0Kys7aSsrfXJldHVybiBpfWNvbnN0IGU9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLHQ9L1xiZW5kb2JqW1xiXHNdJC8sYT0vXHMrKFxkK1xzK1xkK1xzK29ialtcYlxzPF0pJC8sbz1uZXcgVWludDhBcnJheShbMTE2LDExNCw5NywxMDUsMTA4LDEwMSwxMTRdKSxjPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksbD1uZXcgVWludDhBcnJheShbMTExLDk4LDEwNl0pLGg9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTA7dGhpcy5fY2FjaGVNYXAuY2xlYXIoKTtjb25zdCB1PXRoaXMuc3RyZWFtO3UucG9zPTA7Y29uc3QgZD11LmdldEJ5dGVzKCksZj1kLmxlbmd0aDtsZXQgZz11LnN0YXJ0O2NvbnN0IHA9W10sbT1bXTtmb3IoO2c8Zjspe2xldCBuPWRbZ107aWYoOT09PW58fDEwPT09bnx8MTM9PT1ufHwzMj09PW4peysrZztjb250aW51ZX1pZigzNz09PW4pe2RveysrZztpZihnPj1mKWJyZWFrO249ZFtnXX13aGlsZSgxMCE9PW4mJjEzIT09bik7Y29udGludWV9Y29uc3QgYj1yZWFkVG9rZW4oZCxnKTtsZXQgeTtpZihiLnN0YXJ0c1dpdGgoInhyZWYiKSYmKDQ9PT1iLmxlbmd0aHx8L1xzLy50ZXN0KGJbNF0pKSl7Zys9c2tpcFVudGlsKGQsZyxvKTtwLnB1c2goZyk7Zys9c2tpcFVudGlsKGQsZyxjKX1lbHNlIGlmKHk9ZS5leGVjKGIpKXtjb25zdCBlPTB8eVsxXSxuPTB8eVsyXTtsZXQgbyxjPWcrYi5sZW5ndGgsZj0hMTtpZih0aGlzLmVudHJpZXNbZV0pe2lmKHRoaXMuZW50cmllc1tlXS5nZW49PT1uKXRyeXtuZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKHUubWFrZVN1YlN0cmVhbShjKSl9KS5nZXRPYmooKTtmPSEwfWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBpLlBhcnNlckVPRkV4Y2VwdGlvbj8oMCxyLndhcm4pKGBpbmRleE9iamVjdHMgLS0gY2hlY2tpbmcgb2JqZWN0ICgke2J9KTogIiR7ZX0iLmApOmY9ITB9fWVsc2UgZj0hMDtmJiYodGhpcy5lbnRyaWVzW2VdPXtvZmZzZXQ6Zy11LnN0YXJ0LGdlbjpuLHVuY29tcHJlc3NlZDohMH0pO2Zvcig7YzxkLmxlbmd0aDspe2NvbnN0IGU9Yytza2lwVW50aWwoZCxjLGwpKzQ7bz1lLWc7Y29uc3Qgbj1NYXRoLm1heChlLTI1LGMpLGk9KDAsci5ieXRlc1RvU3RyaW5nKShkLnN1YmFycmF5KG4sZSkpO2lmKHQudGVzdChpKSlicmVhazt7Y29uc3QgZT1hLmV4ZWMoaSk7aWYoZSYmZVsxXSl7KDAsci53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCBuZXcgIm9iaiIgaW5zaWRlIG9mIGFub3RoZXIgIm9iaiIsIGNhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLicpO28tPWVbMV0ubGVuZ3RoO2JyZWFrfX1jPWV9Y29uc3QgcD1kLnN1YmFycmF5KGcsZytvKSx3PXNraXBVbnRpbChwLDAsaCk7aWYodzxvJiZwW3crNV08NjQpe20ucHVzaChnLXUuc3RhcnQpO3RoaXMueHJlZnN0bXNbZy11LnN0YXJ0XT0xfWcrPW99ZWxzZSBpZihiLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1iLmxlbmd0aHx8L1xzLy50ZXN0KGJbN10pKSl7cC5wdXNoKGcpO2crPXNraXBVbnRpbChkLGcsYyl9ZWxzZSBnKz1iLmxlbmd0aCsxfWZvcihjb25zdCBlIG9mIG0pe3RoaXMuc3RhcnRYUmVmUXVldWUucHVzaChlKTt0aGlzLnJlYWRYUmVmKCEwKX1sZXQgYix5O2Zvcihjb25zdCBlIG9mWy4uLnAsImdlbmVyYXRpb25GYWxsYmFjayIsLi4ucF0pe2lmKCJnZW5lcmF0aW9uRmFsbGJhY2siPT09ZSl7aWYoIXkpYnJlYWs7dGhpcy5fZ2VuZXJhdGlvbkZhbGxiYWNrPSEwO2NvbnRpbnVlfXUucG9zPWU7Y29uc3QgdD1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKHUpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSksYT10LmdldE9iaigpO2lmKCEoMCxuLmlzQ21kKShhLCJ0cmFpbGVyIikpY29udGludWU7Y29uc3Qgcj10LmdldE9iaigpO2lmKCEociBpbnN0YW5jZW9mIG4uRGljdCkpY29udGludWU7bGV0IGk9ITE7dHJ5e2NvbnN0IGU9ci5nZXQoIlJvb3QiKTtpZighKGUgaW5zdGFuY2VvZiBuLkRpY3QpKWNvbnRpbnVlO2NvbnN0IHQ9ZS5nZXQoIlBhZ2VzIik7aWYoISh0IGluc3RhbmNlb2Ygbi5EaWN0KSljb250aW51ZTtjb25zdCBhPXQuZ2V0KCJDb3VudCIpO051bWJlci5pc0ludGVnZXIoYSkmJihpPSEwKX1jYXRjaChlKXt5PWU7Y29udGludWV9aWYoaSYmci5oYXMoIklEIikpcmV0dXJuIHI7Yj1yfWlmKGIpcmV0dXJuIGI7aWYodGhpcy50b3BEaWN0KXJldHVybiB0aGlzLnRvcERpY3Q7dGhyb3cgbmV3IHIuSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBQREYgc3RydWN0dXJlLiIpfXJlYWRYUmVmKGU9ITEpe2NvbnN0IHQ9dGhpcy5zdHJlYW0sYT1uZXcgU2V0O3RyeXtmb3IoO3RoaXMuc3RhcnRYUmVmUXVldWUubGVuZ3RoOyl7Y29uc3QgZT10aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO2lmKGEuaGFzKGUpKXsoMCxyLndhcm4pKCJyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLiIpO3RoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtjb250aW51ZX1hLmFkZChlKTt0LnBvcz1lK3Quc3RhcnQ7Y29uc3QgaT1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKHQpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtsZXQgYyxsPWkuZ2V0T2JqKCk7aWYoKDAsbi5pc0NtZCkobCwieHJlZiIpKXtjPXRoaXMucHJvY2Vzc1hSZWZUYWJsZShpKTt0aGlzLnRvcERpY3R8fCh0aGlzLnRvcERpY3Q9Yyk7bD1jLmdldCgiWFJlZlN0bSIpO2lmKE51bWJlci5pc0ludGVnZXIobCkpe2NvbnN0IGU9bDtpZighKGUgaW4gdGhpcy54cmVmc3Rtcykpe3RoaXMueHJlZnN0bXNbZV09MTt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goZSl9fX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihpLmdldE9iaigpKSYmKDAsbi5pc0NtZCkoaS5nZXRPYmooKSwib2JqIikmJihsPWkuZ2V0T2JqKCkpaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7Yz10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGwpO3RoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1jKTtpZighYyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1sPWMuZ2V0KCJQcmV2Iik7TnVtYmVyLmlzSW50ZWdlcihsKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobCk6bCBpbnN0YW5jZW9mIG4uUmVmJiZ0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gobC5udW0pO3RoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKX1yZXR1cm4gdGhpcy50b3BEaWN0fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSk7dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKCFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbn1nZXRFbnRyeShlKXtjb25zdCB0PXRoaXMuZW50cmllc1tlXTtyZXR1cm4gdCYmIXQuZnJlZSYmdC5vZmZzZXQ/dDpudWxsfWZldGNoSWZSZWYoZSx0PSExKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4uUmVmP3RoaXMuZmV0Y2goZSx0KTplfWZldGNoKGUsdD0hMSl7aWYoIShlIGluc3RhbmNlb2Ygbi5SZWYpKXRocm93IG5ldyBFcnJvcigicmVmIG9iamVjdCBpcyBub3QgYSByZWZlcmVuY2UiKTtjb25zdCBhPWUubnVtLGk9dGhpcy5fY2FjaGVNYXAuZ2V0KGEpO2lmKHZvaWQgMCE9PWkpe2kgaW5zdGFuY2VvZiBuLkRpY3QmJiFpLm9iaklkJiYoaS5vYmpJZD1lLnRvU3RyaW5nKCkpO3JldHVybiBpfWxldCBzPXRoaXMuZ2V0RW50cnkoYSk7aWYobnVsbD09PXMpe3RoaXMuX2NhY2hlTWFwLnNldChhLHMpO3JldHVybiBzfWlmKHRoaXMuX3BlbmRpbmdSZWZzLmhhcyhlKSl7dGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpOygwLHIud2FybikoYElnbm9yaW5nIGNpcmN1bGFyIHJlZmVyZW5jZTogJHtlfS5gKTtyZXR1cm4gbi5DSVJDVUxBUl9SRUZ9dGhpcy5fcGVuZGluZ1JlZnMucHV0KGUpO3RyeXtzPXMudW5jb21wcmVzc2VkP3RoaXMuZmV0Y2hVbmNvbXByZXNzZWQoZSxzLHQpOnRoaXMuZmV0Y2hDb21wcmVzc2VkKGUscyx0KTt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSl9Y2F0Y2godCl7dGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpO3Rocm93IHR9cyBpbnN0YW5jZW9mIG4uRGljdD9zLm9iaklkPWUudG9TdHJpbmcoKTpzIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtJiYocy5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSk7cmV0dXJuIHN9ZmV0Y2hVbmNvbXByZXNzZWQoZSx0LGE9ITEpe2NvbnN0IGM9ZS5nZW47bGV0IGw9ZS5udW07aWYodC5nZW4hPT1jKXtjb25zdCBzPWBJbmNvbnNpc3RlbnQgZ2VuZXJhdGlvbiBpbiBYUmVmOiAke2V9YDtpZih0aGlzLl9nZW5lcmF0aW9uRmFsbGJhY2smJnQuZ2VuPGMpeygwLHIud2Fybikocyk7cmV0dXJuIHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQobi5SZWYuZ2V0KGwsdC5nZW4pLHQsYSl9dGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKHMpfWNvbnN0IGg9dGhpcy5zdHJlYW0ubWFrZVN1YlN0cmVhbSh0Lm9mZnNldCt0aGlzLnN0cmVhbS5zdGFydCksdT1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKGgpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSxkPXUuZ2V0T2JqKCksZj11LmdldE9iaigpLGc9dS5nZXRPYmooKTtpZihkIT09bHx8ZiE9PWN8fCEoZyBpbnN0YW5jZW9mIG4uQ21kKSl0aHJvdyBuZXcgaS5YUmVmRW50cnlFeGNlcHRpb24oYEJhZCAodW5jb21wcmVzc2VkKSBYUmVmIGVudHJ5OiAke2V9YCk7aWYoIm9iaiIhPT1nLmNtZCl7aWYoZy5jbWQuc3RhcnRzV2l0aCgib2JqIikpe2w9cGFyc2VJbnQoZy5jbWQuc3Vic3RyaW5nKDMpLDEwKTtpZighTnVtYmVyLmlzTmFOKGwpKXJldHVybiBsfXRocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbihgQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICR7ZX1gKX0odD10aGlzLmVuY3J5cHQmJiFhP3UuZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0obCxjKSk6dS5nZXRPYmooKSlpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KGwsdCk7cmV0dXJuIHR9ZmV0Y2hDb21wcmVzc2VkKGUsdCxhPSExKXtjb25zdCBjPXQub2Zmc2V0LGw9dGhpcy5mZXRjaChuLlJlZi5nZXQoYywwKSk7aWYoIShsIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiYmFkIE9ialN0bSBzdHJlYW0iKTtjb25zdCBoPWwuZGljdC5nZXQoIkZpcnN0IiksdT1sLmRpY3QuZ2V0KCJOIik7aWYoIU51bWJlci5pc0ludGVnZXIoaCl8fCFOdW1iZXIuaXNJbnRlZ2VyKHUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZpcnN0IGFuZCBuIHBhcmFtZXRlcnMgZm9yIE9ialN0bSBzdHJlYW0iKTtsZXQgZD1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKGwpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBmPW5ldyBBcnJheSh1KSxnPW5ldyBBcnJheSh1KTtmb3IobGV0IGU9MDtlPHU7KytlKXtjb25zdCB0PWQuZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIodCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYGludmFsaWQgb2JqZWN0IG51bWJlciBpbiB0aGUgT2JqU3RtIHN0cmVhbTogJHt0fWApO2NvbnN0IGE9ZC5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke2F9YCk7ZltlXT10O2dbZV09YX1jb25zdCBwPShsLnN0YXJ0fHwwKStoLG09bmV3IEFycmF5KHUpO2ZvcihsZXQgZT0wO2U8dTsrK2Upe2NvbnN0IHQ9ZTx1LTE/Z1tlKzFdLWdbZV06dm9pZCAwO2lmKHQ8MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW0uIik7ZD1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKGwubWFrZVN1YlN0cmVhbShwK2dbZV0sdCxsLmRpY3QpKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSk7Y29uc3QgYT1kLmdldE9iaigpO21bZV09YTtpZihhIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtKWNvbnRpbnVlO2NvbnN0IG49ZltlXSxpPXRoaXMuZW50cmllc1tuXTtpJiZpLm9mZnNldD09PWMmJmkuZ2VuPT09ZSYmdGhpcy5fY2FjaGVNYXAuc2V0KG4sYSl9aWYodm9pZCAwPT09KHQ9bVt0Lmdlbl0pKXRocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbihgQmFkIChjb21wcmVzc2VkKSBYUmVmIGVudHJ5OiAke2V9YCk7cmV0dXJuIHR9YXN5bmMgZmV0Y2hJZlJlZkFzeW5jKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuLlJlZj90aGlzLmZldGNoQXN5bmMoZSx0KTplfWFzeW5jIGZldGNoQXN5bmMoZSx0KXt0cnl7cmV0dXJuIHRoaXMuZmV0Y2goZSx0KX1jYXRjaChhKXtpZighKGEgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSl0aHJvdyBhO2F3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoYS5iZWdpbixhLmVuZCk7cmV0dXJuIHRoaXMuZmV0Y2hBc3luYyhlLHQpfX1nZXRDYXRhbG9nT2JqKCl7cmV0dXJuIHRoaXMucm9vdH19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmlzTm9kZUpTPXZvaWQgMDtjb25zdCBhPSEoIm9iamVjdCIhPXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKTt0LmlzTm9kZUpTPWF9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5NZXNzYWdlSGFuZGxlcj12b2lkIDA7dmFyIHI9YSgyKTtjb25zdCBuPTEsaT0yLHM9MSxvPTIsYz0zLGw9NCxoPTUsdT02LGQ9NyxmPTg7ZnVuY3Rpb24gd3JhcFJlYXNvbihlKXtlIGluc3RhbmNlb2YgRXJyb3J8fCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8fCgwLHIudW5yZWFjaGFibGUpKCd3cmFwUmVhc29uOiBFeHBlY3RlZCAicmVhc29uIiB0byBiZSBhIChwb3NzaWJseSBjbG9uZWQpIEVycm9yLicpO3N3aXRjaChlLm5hbWUpe2Nhc2UiQWJvcnRFeGNlcHRpb24iOnJldHVybiBuZXcgci5BYm9ydEV4Y2VwdGlvbihlLm1lc3NhZ2UpO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLk1pc3NpbmdQREZFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIlBhc3N3b3JkRXhjZXB0aW9uIjpyZXR1cm4gbmV3IHIuUGFzc3dvcmRFeGNlcHRpb24oZS5tZXNzYWdlLGUuY29kZSk7Y2FzZSJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iOnJldHVybiBuZXcgci5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oZS5tZXNzYWdlLGUuc3RhdHVzKTtjYXNlIlVua25vd25FcnJvckV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5kZXRhaWxzKTtkZWZhdWx0OnJldHVybiBuZXcgci5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUudG9TdHJpbmcoKSl9fXQuTWVzc2FnZUhhbmRsZXI9Y2xhc3MgTWVzc2FnZUhhbmRsZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuc291cmNlTmFtZT1lO3RoaXMudGFyZ2V0TmFtZT10O3RoaXMuY29tT2JqPWE7dGhpcy5jYWxsYmFja0lkPTE7dGhpcy5zdHJlYW1JZD0xO3RoaXMuc3RyZWFtU2lua3M9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllcz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuYWN0aW9uSGFuZGxlcj1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuX29uQ29tT2JqT25NZXNzYWdlPWU9Pntjb25zdCB0PWUuZGF0YTtpZih0LnRhcmdldE5hbWUhPT10aGlzLnNvdXJjZU5hbWUpcmV0dXJuO2lmKHQuc3RyZWFtKXt0aGlzLl9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KTtyZXR1cm59aWYodC5jYWxsYmFjayl7Y29uc3QgZT10LmNhbGxiYWNrSWQsYT10aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2VdO2lmKCFhKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgJHtlfWApO2RlbGV0ZSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2VdO2lmKHQuY2FsbGJhY2s9PT1uKWEucmVzb2x2ZSh0LmRhdGEpO2Vsc2V7aWYodC5jYWxsYmFjayE9PWkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNhbGxiYWNrIGNhc2UiKTthLnJlamVjdCh3cmFwUmVhc29uKHQucmVhc29uKSl9cmV0dXJufWNvbnN0IHI9dGhpcy5hY3Rpb25IYW5kbGVyW3QuYWN0aW9uXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIGZyb20gd29ya2VyOiAke3QuYWN0aW9ufWApO2lmKHQuY2FsbGJhY2tJZCl7Y29uc3QgZT10aGlzLnNvdXJjZU5hbWUscz10LnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uocih0LmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihyKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmUsdGFyZ2V0TmFtZTpzLGNhbGxiYWNrOm4sY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTpyfSl9KSwoZnVuY3Rpb24ocil7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTplLHRhcmdldE5hbWU6cyxjYWxsYmFjazppLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLHJlYXNvbjp3cmFwUmVhc29uKHIpfSl9KSl9ZWxzZSB0LnN0cmVhbUlkP3RoaXMuX2NyZWF0ZVN0cmVhbVNpbmsodCk6cih0LmRhdGEpfTthLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX1vbihlLHQpe2NvbnN0IGE9dGhpcy5hY3Rpb25IYW5kbGVyO2lmKGFbZV0pdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFjdGlvbk5hbWUgY2FsbGVkICIke2V9ImApO2FbZV09dH1zZW5kKGUsdCxhKXt0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsZGF0YTp0fSxhKX1zZW5kV2l0aFByb21pc2UoZSx0LGEpe2NvbnN0IG49dGhpcy5jYWxsYmFja0lkKyssaT0oMCxyLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbbl09aTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6bixkYXRhOnR9LGEpfWNhdGNoKGUpe2kucmVqZWN0KGUpfXJldHVybiBpLnByb21pc2V9c2VuZFdpdGhTdHJlYW0oZSx0LGEsbil7Y29uc3QgaT10aGlzLnN0cmVhbUlkKyssbz10aGlzLnNvdXJjZU5hbWUsYz10aGlzLnRhcmdldE5hbWUsbD10aGlzLmNvbU9iajtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydDphPT57Y29uc3Qgcz0oMCxyLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV09e2NvbnRyb2xsZXI6YSxzdGFydENhbGw6cyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX07bC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpvLHRhcmdldE5hbWU6YyxhY3Rpb246ZSxzdHJlYW1JZDppLGRhdGE6dCxkZXNpcmVkU2l6ZTphLmRlc2lyZWRTaXplfSxuKTtyZXR1cm4gcy5wcm9taXNlfSxwdWxsOmU9Pntjb25zdCB0PSgwLHIuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tpXS5wdWxsQ2FsbD10O2wucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6byx0YXJnZXROYW1lOmMsc3RyZWFtOnUsc3RyZWFtSWQ6aSxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSk7cmV0dXJuIHQucHJvbWlzZX0sY2FuY2VsOmU9PnsoMCxyLmFzc2VydCkoZSBpbnN0YW5jZW9mIEVycm9yLCJjYW5jZWwgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIik7Y29uc3QgdD0oMCxyLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV0uY2FuY2VsQ2FsbD10O3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV0uaXNDbG9zZWQ9ITA7bC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpvLHRhcmdldE5hbWU6YyxzdHJlYW06cyxzdHJlYW1JZDppLHJlYXNvbjp3cmFwUmVhc29uKGUpfSk7cmV0dXJuIHQucHJvbWlzZX19LGEpfV9jcmVhdGVTdHJlYW1TaW5rKGUpe2NvbnN0IHQ9ZS5zdHJlYW1JZCxhPXRoaXMuc291cmNlTmFtZSxuPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLHM9dGhpcyxvPXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl0sdT17ZW5xdWV1ZShlLHM9MSxvKXtpZih0aGlzLmlzQ2FuY2VsbGVkKXJldHVybjtjb25zdCBjPXRoaXMuZGVzaXJlZFNpemU7dGhpcy5kZXNpcmVkU2l6ZS09cztpZihjPjAmJnRoaXMuZGVzaXJlZFNpemU8PTApe3RoaXMuc2lua0NhcGFiaWxpdHk9KDAsci5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLnJlYWR5PXRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZX1pLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpsLHN0cmVhbUlkOnQsY2h1bms6ZX0sbyl9LGNsb3NlKCl7aWYoIXRoaXMuaXNDYW5jZWxsZWQpe3RoaXMuaXNDYW5jZWxsZWQ9ITA7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06YyxzdHJlYW1JZDp0fSk7ZGVsZXRlIHMuc3RyZWFtU2lua3NbdF19fSxlcnJvcihlKXsoMCxyLmFzc2VydCkoZSBpbnN0YW5jZW9mIEVycm9yLCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb24iKTtpZighdGhpcy5pc0NhbmNlbGxlZCl7dGhpcy5pc0NhbmNlbGxlZD0hMDtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpoLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX19LHNpbmtDYXBhYmlsaXR5OigwLHIuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksb25QdWxsOm51bGwsb25DYW5jZWw6bnVsbCxpc0NhbmNlbGxlZDohMSxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplLHJlYWR5Om51bGx9O3Uuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO3UucmVhZHk9dS5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlO3RoaXMuc3RyZWFtU2lua3NbdF09dTtuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChvKGUuZGF0YSx1KSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpmLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOmYsc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpfV9wcm9jZXNzU3RyZWFtTWVzc2FnZShlKXtjb25zdCB0PWUuc3RyZWFtSWQsYT10aGlzLnNvdXJjZU5hbWUsbj1lLnNvdXJjZU5hbWUsaT10aGlzLmNvbU9iaixnPXRoaXMuc3RyZWFtQ29udHJvbGxlcnNbdF0scD10aGlzLnN0cmVhbVNpbmtzW3RdO3N3aXRjaChlLnN0cmVhbSl7Y2FzZSBmOmUuc3VjY2Vzcz9nLnN0YXJ0Q2FsbC5yZXNvbHZlKCk6Zy5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIGQ6ZS5zdWNjZXNzP2cucHVsbENhbGwucmVzb2x2ZSgpOmcucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIHU6aWYoIXApe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOmQsc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSk7YnJlYWt9cC5kZXNpcmVkU2l6ZTw9MCYmZS5kZXNpcmVkU2l6ZT4wJiZwLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtwLmRlc2lyZWRTaXplPWUuZGVzaXJlZFNpemU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2UocC5vblB1bGwmJnAub25QdWxsKCkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06ZCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpkLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX0pKTticmVhaztjYXNlIGw6KDAsci5hc3NlcnQpKGcsImVucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihnLmlzQ2xvc2VkKWJyZWFrO2cuY29udHJvbGxlci5lbnF1ZXVlKGUuY2h1bmspO2JyZWFrO2Nhc2UgYzooMCxyLmFzc2VydCkoZywiY2xvc2Ugc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihnLmlzQ2xvc2VkKWJyZWFrO2cuaXNDbG9zZWQ9ITA7Zy5jb250cm9sbGVyLmNsb3NlKCk7dGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihnLHQpO2JyZWFrO2Nhc2UgaDooMCxyLmFzc2VydCkoZywiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtnLmNvbnRyb2xsZXIuZXJyb3Iod3JhcFJlYXNvbihlLnJlYXNvbikpO3RoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoZyx0KTticmVhaztjYXNlIG86ZS5zdWNjZXNzP2cuY2FuY2VsQ2FsbC5yZXNvbHZlKCk6Zy5jYW5jZWxDYWxsLnJlamVjdCh3cmFwUmVhc29uKGUucmVhc29uKSk7dGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihnLHQpO2JyZWFrO2Nhc2UgczppZighcClicmVhaztuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChwLm9uQ2FuY2VsJiZwLm9uQ2FuY2VsKHdyYXBSZWFzb24oZS5yZWFzb24pKSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpvLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOm8sc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpO3Auc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTtwLmlzQ2FuY2VsbGVkPSEwO2RlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW3RdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fWFzeW5jIF9kZWxldGVTdHJlYW1Db250cm9sbGVyKGUsdCl7YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtlLnN0YXJ0Q2FsbCYmZS5zdGFydENhbGwucHJvbWlzZSxlLnB1bGxDYWxsJiZlLnB1bGxDYWxsLnByb21pc2UsZS5jYW5jZWxDYWxsJiZlLmNhbmNlbENhbGwucHJvbWlzZV0pO2RlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3RdfWRlc3Ryb3koKXt0aGlzLmNvbU9iai5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBERldvcmtlclN0cmVhbT12b2lkIDA7dmFyIHI9YSgyKTt0LlBERldvcmtlclN0cmVhbT1jbGFzcyBQREZXb3JrZXJTdHJlYW17Y29uc3RydWN0b3IoZSl7dGhpcy5fbXNnSGFuZGxlcj1lO3RoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbDt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsO3RoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119Z2V0RnVsbFJlYWRlcigpeygwLHIuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERldvcmtlclN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyBQREZXb3JrZXJTdHJlYW1SZWFkZXIodGhpcy5fbXNnSGFuZGxlcik7cmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfWdldFJhbmdlUmVhZGVyKGUsdCl7Y29uc3QgYT1uZXcgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIoZSx0LHRoaXMuX21zZ0hhbmRsZXIpO3RoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChhKTtyZXR1cm4gYX1jYW5jZWxBbGxSZXF1ZXN0cyhlKXt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciYmdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuY2FuY2VsKGUpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpdC5jYW5jZWwoZSl9fTtjbGFzcyBQREZXb3JrZXJTdHJlYW1SZWFkZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fbXNnSGFuZGxlcj1lO3RoaXMub25Qcm9ncmVzcz1udWxsO3RoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbDt0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExO3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO2NvbnN0IHQ9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmVhZGVyIik7dGhpcy5fcmVhZGVyPXQuZ2V0UmVhZGVyKCk7dGhpcy5faGVhZGVyc1JlYWR5PXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJSZWFkZXJIZWFkZXJzUmVhZHkiKS50aGVuKChlPT57dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ZS5pc1N0cmVhbWluZ1N1cHBvcnRlZDt0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPWUuaXNSYW5nZVN1cHBvcnRlZDt0aGlzLl9jb250ZW50TGVuZ3RoPWUuY29udGVudExlbmd0aH0pKX1nZXQgaGVhZGVyc1JlYWR5KCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeX1nZXQgY29udGVudExlbmd0aCgpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofWdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH1nZXQgaXNSYW5nZVN1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkfWFzeW5jIHJlYWQoKXtjb25zdHt2YWx1ZTplLGRvbmU6dH09YXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtyZXR1cm4gdD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Ont2YWx1ZTplLmJ1ZmZlcixkb25lOiExfX1jYW5jZWwoZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19Y2xhc3MgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXJ7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXMuX21zZ0hhbmRsZXI9YTt0aGlzLm9uUHJvZ3Jlc3M9bnVsbDtjb25zdCByPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJhbmdlUmVhZGVyIix7YmVnaW46ZSxlbmQ6dH0pO3RoaXMuX3JlYWRlcj1yLmdldFJlYWRlcigpfWdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiExfWFzeW5jIHJlYWQoKXtjb25zdHt2YWx1ZTplLGRvbmU6dH09YXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtyZXR1cm4gdD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Ont2YWx1ZTplLmJ1ZmZlcixkb25lOiExfX1jYW5jZWwoZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19fV0sdD17fTtmdW5jdGlvbiBfX3dfcGRmanNfcmVxdWlyZV9fKGEpe3ZhciByPXRbYV07aWYodm9pZCAwIT09cilyZXR1cm4gci5leHBvcnRzO3ZhciBuPXRbYV09e2V4cG9ydHM6e319O2VbYV0obixuLmV4cG9ydHMsX193X3BkZmpzX3JlcXVpcmVfXyk7cmV0dXJuIG4uZXhwb3J0c31fX3dfcGRmanNfcmVxdWlyZV9fLmQ9KGUsdCk9Pntmb3IodmFyIGEgaW4gdClfX3dfcGRmanNfcmVxdWlyZV9fLm8odCxhKSYmIV9fd19wZGZqc19yZXF1aXJlX18ubyhlLGEpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxhLHtlbnVtZXJhYmxlOiEwLGdldDp0W2FdfSl9O19fd19wZGZqc19yZXF1aXJlX18ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCk7X193X3BkZmpzX3JlcXVpcmVfXy5yPWU9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfTt2YXIgYT17fTsoKCk9Pnt2YXIgZT1hO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiV29ya2VyTWVzc2FnZUhhbmRsZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lldvcmtlck1lc3NhZ2VIYW5kbGVyfX0pO3ZhciB0PV9fd19wZGZqc19yZXF1aXJlX18oMSl9KSgpO3JldHVybiBhfSkoKSkpOw=='
;// CONCATENATED MODULE: ./packages/pdf/src/pdf.js
const pdfjsLib = 'IWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInBkZmpzLWRpc3QvYnVpbGQvcGRmIixbXSxlKToib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0c1sicGRmanMtZGlzdC9idWlsZC9wZGYiXT1lKCk6dFsicGRmanMtZGlzdC9idWlsZC9wZGYiXT10LnBkZmpzTGliPWUoKX0oZ2xvYmFsVGhpcywoKCk9PigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz1bLCh0LGUpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuVmVyYm9zaXR5TGV2ZWw9ZS5VdGlsPWUuVW5rbm93bkVycm9yRXhjZXB0aW9uPWUuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPWUuVU5TVVBQT1JURURfRkVBVFVSRVM9ZS5UZXh0UmVuZGVyaW5nTW9kZT1lLlN0cmVhbVR5cGU9ZS5SZW5kZXJpbmdJbnRlbnRGbGFnPWUuUGVybWlzc2lvbkZsYWc9ZS5QYXNzd29yZFJlc3BvbnNlcz1lLlBhc3N3b3JkRXhjZXB0aW9uPWUuUGFnZUFjdGlvbkV2ZW50VHlwZT1lLk9QUz1lLk1pc3NpbmdQREZFeGNlcHRpb249ZS5MSU5FX0ZBQ1RPUj1lLkxJTkVfREVTQ0VOVF9GQUNUT1I9ZS5JbnZhbGlkUERGRXhjZXB0aW9uPWUuSW1hZ2VLaW5kPWUuSURFTlRJVFlfTUFUUklYPWUuRm9ybWF0RXJyb3I9ZS5Gb250VHlwZT1lLkZlYXR1cmVUZXN0PWUuRk9OVF9JREVOVElUWV9NQVRSSVg9ZS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT1lLkNNYXBDb21wcmVzc2lvblR5cGU9ZS5CYXNlRXhjZXB0aW9uPWUuQW5ub3RhdGlvblR5cGU9ZS5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9ZS5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9ZS5Bbm5vdGF0aW9uUmVwbHlUeXBlPWUuQW5ub3RhdGlvbk1vZGU9ZS5Bbm5vdGF0aW9uTWFya2VkU3RhdGU9ZS5Bbm5vdGF0aW9uRmxhZz1lLkFubm90YXRpb25GaWVsZEZsYWc9ZS5Bbm5vdGF0aW9uRWRpdG9yVHlwZT1lLkFubm90YXRpb25FZGl0b3JQcmVmaXg9ZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT1lLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9ZS5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPWUuQWJvcnRFeGNlcHRpb249dm9pZCAwO2UuYXJyYXlCeXRlTGVuZ3RoPWFycmF5Qnl0ZUxlbmd0aDtlLmFycmF5c1RvQnl0ZXM9ZnVuY3Rpb24gYXJyYXlzVG9CeXRlcyh0KXtjb25zdCBlPXQubGVuZ3RoO2lmKDE9PT1lJiZ0WzBdaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiB0WzBdO2xldCBzPTA7Zm9yKGxldCBpPTA7aTxlO2krKylzKz1hcnJheUJ5dGVMZW5ndGgodFtpXSk7bGV0IGk9MDtjb25zdCBuPW5ldyBVaW50OEFycmF5KHMpO2ZvcihsZXQgcz0wO3M8ZTtzKyspe2xldCBlPXRbc107ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fChlPSJzdHJpbmciPT10eXBlb2YgZT9zdHJpbmdUb0J5dGVzKGUpOm5ldyBVaW50OEFycmF5KGUpKTtjb25zdCByPWUuYnl0ZUxlbmd0aDtuLnNldChlLGkpO2krPXJ9cmV0dXJuIG59O2UuYXNzZXJ0PWZ1bmN0aW9uIGFzc2VydCh0LGUpe3R8fHVucmVhY2hhYmxlKGUpfTtlLmJ5dGVzVG9TdHJpbmc9ZnVuY3Rpb24gYnl0ZXNUb1N0cmluZyh0KXsib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiZ2b2lkIDAhPT10Lmxlbmd0aHx8dW5yZWFjaGFibGUoIkludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmciKTtjb25zdCBlPXQubGVuZ3RoLHM9ODE5MjtpZihlPHMpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0KTtjb25zdCBpPVtdO2ZvcihsZXQgbj0wO248ZTtuKz1zKXtjb25zdCByPU1hdGgubWluKG4rcyxlKSxhPXQuc3ViYXJyYXkobixyKTtpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEpKX1yZXR1cm4gaS5qb2luKCIiKX07ZS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eT1mdW5jdGlvbiBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSgpe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgZT0hMTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2V0dGxlZCIse2dldDooKT0+ZX0pO3QucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24ocyxpKXt0LnJlc29sdmU9ZnVuY3Rpb24odCl7ZT0hMDtzKHQpfTt0LnJlamVjdD1mdW5jdGlvbih0KXtlPSEwO2kodCl9fSkpO3JldHVybiB0fTtlLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCh0LGU9bnVsbCxzPW51bGwpe2lmKCF0KXJldHVybiBudWxsO3RyeXtpZihzJiYic3RyaW5nIj09dHlwZW9mIHQpe2lmKHMuYWRkRGVmYXVsdFByb3RvY29sJiZ0LnN0YXJ0c1dpdGgoInd3dy4iKSl7Y29uc3QgZT10Lm1hdGNoKC9cLi9nKTtlJiZlLmxlbmd0aD49MiYmKHQ9YGh0dHA6Ly8ke3R9YCl9aWYocy50cnlDb252ZXJ0RW5jb2RpbmcpdHJ5e3Q9c3RyaW5nVG9VVEY4U3RyaW5nKHQpfWNhdGNoKHQpe319Y29uc3QgaT1lP25ldyBVUkwodCxlKTpuZXcgVVJMKHQpO2lmKGZ1bmN0aW9uIF9pc1ZhbGlkUHJvdG9jb2wodCl7aWYoIXQpcmV0dXJuITE7c3dpdGNoKHQucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0oaSkpcmV0dXJuIGl9Y2F0Y2godCl7fXJldHVybiBudWxsfTtlLmVzY2FwZVN0cmluZz1mdW5jdGlvbiBlc2NhcGVTdHJpbmcodCl7cmV0dXJuIHQucmVwbGFjZSgvKFsoKVxcXG5ccl0pL2csKHQ9PiJcbiI9PT10PyJcXG4iOiJcciI9PT10PyJcXHIiOmBcXCR7dH1gKSl9O2UuZ2V0TW9kaWZpY2F0aW9uRGF0ZT1mdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlKHQ9bmV3IERhdGUpe3JldHVyblt0LmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKSwodC5nZXRVVENNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLHQuZ2V0VVRDRGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLHQuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSx0LmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKV0uam9pbigiIil9O2UuZ2V0VmVyYm9zaXR5TGV2ZWw9ZnVuY3Rpb24gZ2V0VmVyYm9zaXR5TGV2ZWwoKXtyZXR1cm4gaX07ZS5pbmZvPWZ1bmN0aW9uIGluZm8odCl7aT49cy5JTkZPUyYmY29uc29sZS5sb2coYEluZm86ICR7dH1gKX07ZS5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmdm9pZCAwIT09dC5ieXRlTGVuZ3RofTtlLmlzQXJyYXlFcXVhbD1mdW5jdGlvbiBpc0FycmF5RXF1YWwodCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcz0wLGk9dC5sZW5ndGg7czxpO3MrKylpZih0W3NdIT09ZVtzXSlyZXR1cm4hMTtyZXR1cm4hMH07ZS5pc0FzY2lpPWZ1bmN0aW9uIGlzQXNjaWkodCl7cmV0dXJuL15bXHgwMC1ceDdGXSokLy50ZXN0KHQpfTtlLm9iamVjdEZyb21NYXA9ZnVuY3Rpb24gb2JqZWN0RnJvbU1hcCh0KXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W3MsaV1vZiB0KWVbc109aTtyZXR1cm4gZX07ZS5vYmplY3RTaXplPWZ1bmN0aW9uIG9iamVjdFNpemUodCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aH07ZS5zZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbCh0KXtOdW1iZXIuaXNJbnRlZ2VyKHQpJiYoaT10KX07ZS5zaGFkb3c9c2hhZG93O2Uuc3RyaW5nMzI9ZnVuY3Rpb24gc3RyaW5nMzIodCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9O2Uuc3RyaW5nVG9CeXRlcz1zdHJpbmdUb0J5dGVzO2Uuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24gc3RyaW5nVG9QREZTdHJpbmcodCl7aWYodFswXT49IsOvIil7bGV0IGU7IsO+Ij09PXRbMF0mJiLDvyI9PT10WzFdP2U9InV0Zi0xNmJlIjoiw78iPT09dFswXSYmIsO+Ij09PXRbMV0/ZT0idXRmLTE2bGUiOiLDryI9PT10WzBdJiYiwrsiPT09dFsxXSYmIsK/Ij09PXRbMl0mJihlPSJ1dGYtOCIpO2lmKGUpdHJ5e2NvbnN0IHM9bmV3IFRleHREZWNvZGVyKGUse2ZhdGFsOiEwfSksaT1zdHJpbmdUb0J5dGVzKHQpO3JldHVybiBzLmRlY29kZShpKX1jYXRjaCh0KXt3YXJuKGBzdHJpbmdUb1BERlN0cmluZzogIiR7dH0iLmApfX1jb25zdCBlPVtdO2ZvcihsZXQgcz0wLGk9dC5sZW5ndGg7czxpO3MrKyl7Y29uc3QgaT1hW3QuY2hhckNvZGVBdChzKV07ZS5wdXNoKGk/U3RyaW5nLmZyb21DaGFyQ29kZShpKTp0LmNoYXJBdChzKSl9cmV0dXJuIGUuam9pbigiIil9O2Uuc3RyaW5nVG9VVEYxNkJFU3RyaW5nPWZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZCRVN0cmluZyh0KXtjb25zdCBlPVsiw77DvyJdO2ZvcihsZXQgcz0wLGk9dC5sZW5ndGg7czxpO3MrKyl7Y29uc3QgaT10LmNoYXJDb2RlQXQocyk7ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaT4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmkpKX1yZXR1cm4gZS5qb2luKCIiKX07ZS5zdHJpbmdUb1VURjhTdHJpbmc9c3RyaW5nVG9VVEY4U3RyaW5nO2UudW5yZWFjaGFibGU9dW5yZWFjaGFibGU7ZS51dGY4U3RyaW5nVG9TdHJpbmc9ZnVuY3Rpb24gdXRmOFN0cmluZ1RvU3RyaW5nKHQpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodCkpfTtlLndhcm49d2FybjtlLklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdO2UuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXTtlLkxJTkVfRkFDVE9SPTEuMzU7ZS5MSU5FX0RFU0NFTlRfRkFDVE9SPS4zNTtlLlJlbmRlcmluZ0ludGVudEZsYWc9e0FOWToxLERJU1BMQVk6MixQUklOVDo0LEFOTk9UQVRJT05TX0ZPUk1TOjE2LEFOTk9UQVRJT05TX1NUT1JBR0U6MzIsQU5OT1RBVElPTlNfRElTQUJMRTo2NCxPUExJU1Q6MjU2fTtlLkFubm90YXRpb25Nb2RlPXtESVNBQkxFOjAsRU5BQkxFOjEsRU5BQkxFX0ZPUk1TOjIsRU5BQkxFX1NUT1JBR0U6M307ZS5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PSJwZGZqc19pbnRlcm5hbF9lZGl0b3JfIjtlLkFubm90YXRpb25FZGl0b3JUeXBlPXtESVNBQkxFOi0xLE5PTkU6MCxGUkVFVEVYVDozLElOSzoxNX07ZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT17RlJFRVRFWFRfU0laRToxLEZSRUVURVhUX0NPTE9SOjIsRlJFRVRFWFRfT1BBQ0lUWTozLElOS19DT0xPUjoxMSxJTktfVEhJQ0tORVNTOjEyLElOS19PUEFDSVRZOjEzfTtlLlBlcm1pc3Npb25GbGFnPXtQUklOVDo0LE1PRElGWV9DT05URU5UUzo4LENPUFk6MTYsTU9ESUZZX0FOTk9UQVRJT05TOjMyLEZJTExfSU5URVJBQ1RJVkVfRk9STVM6MjU2LENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6NTEyLEFTU0VNQkxFOjEwMjQsUFJJTlRfSElHSF9RVUFMSVRZOjIwNDh9O2UuVGV4dFJlbmRlcmluZ01vZGU9e0ZJTEw6MCxTVFJPS0U6MSxGSUxMX1NUUk9LRToyLElOVklTSUJMRTozLEZJTExfQUREX1RPX1BBVEg6NCxTVFJPS0VfQUREX1RPX1BBVEg6NSxGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDo2LEFERF9UT19QQVRIOjcsRklMTF9TVFJPS0VfTUFTSzozLEFERF9UT19QQVRIX0ZMQUc6NH07ZS5JbWFnZUtpbmQ9e0dSQVlTQ0FMRV8xQlBQOjEsUkdCXzI0QlBQOjIsUkdCQV8zMkJQUDozfTtlLkFubm90YXRpb25UeXBlPXtURVhUOjEsTElOSzoyLEZSRUVURVhUOjMsTElORTo0LFNRVUFSRTo1LENJUkNMRTo2LFBPTFlHT046NyxQT0xZTElORTo4LEhJR0hMSUdIVDo5LFVOREVSTElORToxMCxTUVVJR0dMWToxMSxTVFJJS0VPVVQ6MTIsU1RBTVA6MTMsQ0FSRVQ6MTQsSU5LOjE1LFBPUFVQOjE2LEZJTEVBVFRBQ0hNRU5UOjE3LFNPVU5EOjE4LE1PVklFOjE5LFdJREdFVDoyMCxTQ1JFRU46MjEsUFJJTlRFUk1BUks6MjIsVFJBUE5FVDoyMyxXQVRFUk1BUks6MjQsVEhSRUVEOjI1LFJFREFDVDoyNn07ZS5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU9e01BUktFRDoiTWFya2VkIixSRVZJRVc6IlJldmlldyJ9O2UuQW5ub3RhdGlvbk1hcmtlZFN0YXRlPXtNQVJLRUQ6Ik1hcmtlZCIsVU5NQVJLRUQ6IlVubWFya2VkIn07ZS5Bbm5vdGF0aW9uUmV2aWV3U3RhdGU9e0FDQ0VQVEVEOiJBY2NlcHRlZCIsUkVKRUNURUQ6IlJlamVjdGVkIixDQU5DRUxMRUQ6IkNhbmNlbGxlZCIsQ09NUExFVEVEOiJDb21wbGV0ZWQiLE5PTkU6Ik5vbmUifTtlLkFubm90YXRpb25SZXBseVR5cGU9e0dST1VQOiJHcm91cCIsUkVQTFk6IlIifTtlLkFubm90YXRpb25GbGFnPXtJTlZJU0lCTEU6MSxISURERU46MixQUklOVDo0LE5PWk9PTTo4LE5PUk9UQVRFOjE2LE5PVklFVzozMixSRUFET05MWTo2NCxMT0NLRUQ6MTI4LFRPR0dMRU5PVklFVzoyNTYsTE9DS0VEQ09OVEVOVFM6NTEyfTtlLkFubm90YXRpb25GaWVsZEZsYWc9e1JFQURPTkxZOjEsUkVRVUlSRUQ6MixOT0VYUE9SVDo0LE1VTFRJTElORTo0MDk2LFBBU1NXT1JEOjgxOTIsTk9UT0dHTEVUT09GRjoxNjM4NCxSQURJTzozMjc2OCxQVVNIQlVUVE9OOjY1NTM2LENPTUJPOjEzMTA3MixFRElUOjI2MjE0NCxTT1JUOjUyNDI4OCxGSUxFU0VMRUNUOjEwNDg1NzYsTVVMVElTRUxFQ1Q6MjA5NzE1MixET05PVFNQRUxMQ0hFQ0s6NDE5NDMwNCxET05PVFNDUk9MTDo4Mzg4NjA4LENPTUI6MTY3NzcyMTYsUklDSFRFWFQ6MzM1NTQ0MzIsUkFESU9TSU5VTklTT046MzM1NTQ0MzIsQ09NTUlUT05TRUxDSEFOR0U6NjcxMDg4NjR9O2UuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT17U09MSUQ6MSxEQVNIRUQ6MixCRVZFTEVEOjMsSU5TRVQ6NCxVTkRFUkxJTkU6NX07ZS5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPXtFOiJNb3VzZSBFbnRlciIsWDoiTW91c2UgRXhpdCIsRDoiTW91c2UgRG93biIsVToiTW91c2UgVXAiLEZvOiJGb2N1cyIsQmw6IkJsdXIiLFBPOiJQYWdlT3BlbiIsUEM6IlBhZ2VDbG9zZSIsUFY6IlBhZ2VWaXNpYmxlIixQSToiUGFnZUludmlzaWJsZSIsSzoiS2V5c3Ryb2tlIixGOiJGb3JtYXQiLFY6IlZhbGlkYXRlIixDOiJDYWxjdWxhdGUifTtlLkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlPXtXQzoiV2lsbENsb3NlIixXUzoiV2lsbFNhdmUiLERTOiJEaWRTYXZlIixXUDoiV2lsbFByaW50IixEUDoiRGlkUHJpbnQifTtlLlBhZ2VBY3Rpb25FdmVudFR5cGU9e086IlBhZ2VPcGVuIixDOiJQYWdlQ2xvc2UifTtlLlN0cmVhbVR5cGU9e1VOS05PV046IlVOS05PV04iLEZMQVRFOiJGTEFURSIsTFpXOiJMWlciLERDVDoiRENUIixKUFg6IkpQWCIsSkJJRzoiSkJJRyIsQTg1OiJBODUiLEFIWDoiQUhYIixDQ0Y6IkNDRiIsUkxYOiJSTFgifTtlLkZvbnRUeXBlPXtVTktOT1dOOiJVTktOT1dOIixUWVBFMToiVFlQRTEiLFRZUEUxU1RBTkRBUkQ6IlRZUEUxU1RBTkRBUkQiLFRZUEUxQzoiVFlQRTFDIixDSURGT05UVFlQRTA6IkNJREZPTlRUWVBFMCIsQ0lERk9OVFRZUEUwQzoiQ0lERk9OVFRZUEUwQyIsVFJVRVRZUEU6IlRSVUVUWVBFIixDSURGT05UVFlQRTI6IkNJREZPTlRUWVBFMiIsVFlQRTM6IlRZUEUzIixPUEVOVFlQRToiT1BFTlRZUEUiLFRZUEUwOiJUWVBFMCIsTU1UWVBFMToiTU1UWVBFMSJ9O2NvbnN0IHM9e0VSUk9SUzowLFdBUk5JTkdTOjEsSU5GT1M6NX07ZS5WZXJib3NpdHlMZXZlbD1zO2UuQ01hcENvbXByZXNzaW9uVHlwZT17Tk9ORTowLEJJTkFSWToxfTtlLk9QUz17ZGVwZW5kZW5jeToxLHNldExpbmVXaWR0aDoyLHNldExpbmVDYXA6MyxzZXRMaW5lSm9pbjo0LHNldE1pdGVyTGltaXQ6NSxzZXREYXNoOjYsc2V0UmVuZGVyaW5nSW50ZW50Ojcsc2V0RmxhdG5lc3M6OCxzZXRHU3RhdGU6OSxzYXZlOjEwLHJlc3RvcmU6MTEsdHJhbnNmb3JtOjEyLG1vdmVUbzoxMyxsaW5lVG86MTQsY3VydmVUbzoxNSxjdXJ2ZVRvMjoxNixjdXJ2ZVRvMzoxNyxjbG9zZVBhdGg6MTgscmVjdGFuZ2xlOjE5LHN0cm9rZToyMCxjbG9zZVN0cm9rZToyMSxmaWxsOjIyLGVvRmlsbDoyMyxmaWxsU3Ryb2tlOjI0LGVvRmlsbFN0cm9rZToyNSxjbG9zZUZpbGxTdHJva2U6MjYsY2xvc2VFT0ZpbGxTdHJva2U6MjcsZW5kUGF0aDoyOCxjbGlwOjI5LGVvQ2xpcDozMCxiZWdpblRleHQ6MzEsZW5kVGV4dDozMixzZXRDaGFyU3BhY2luZzozMyxzZXRXb3JkU3BhY2luZzozNCxzZXRIU2NhbGU6MzUsc2V0TGVhZGluZzozNixzZXRGb250OjM3LHNldFRleHRSZW5kZXJpbmdNb2RlOjM4LHNldFRleHRSaXNlOjM5LG1vdmVUZXh0OjQwLHNldExlYWRpbmdNb3ZlVGV4dDo0MSxzZXRUZXh0TWF0cml4OjQyLG5leHRMaW5lOjQzLHNob3dUZXh0OjQ0LHNob3dTcGFjZWRUZXh0OjQ1LG5leHRMaW5lU2hvd1RleHQ6NDYsbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6NDcsc2V0Q2hhcldpZHRoOjQ4LHNldENoYXJXaWR0aEFuZEJvdW5kczo0OSxzZXRTdHJva2VDb2xvclNwYWNlOjUwLHNldEZpbGxDb2xvclNwYWNlOjUxLHNldFN0cm9rZUNvbG9yOjUyLHNldFN0cm9rZUNvbG9yTjo1MyxzZXRGaWxsQ29sb3I6NTQsc2V0RmlsbENvbG9yTjo1NSxzZXRTdHJva2VHcmF5OjU2LHNldEZpbGxHcmF5OjU3LHNldFN0cm9rZVJHQkNvbG9yOjU4LHNldEZpbGxSR0JDb2xvcjo1OSxzZXRTdHJva2VDTVlLQ29sb3I6NjAsc2V0RmlsbENNWUtDb2xvcjo2MSxzaGFkaW5nRmlsbDo2MixiZWdpbklubGluZUltYWdlOjYzLGJlZ2luSW1hZ2VEYXRhOjY0LGVuZElubGluZUltYWdlOjY1LHBhaW50WE9iamVjdDo2NixtYXJrUG9pbnQ6NjcsbWFya1BvaW50UHJvcHM6NjgsYmVnaW5NYXJrZWRDb250ZW50OjY5LGJlZ2luTWFya2VkQ29udGVudFByb3BzOjcwLGVuZE1hcmtlZENvbnRlbnQ6NzEsYmVnaW5Db21wYXQ6NzIsZW5kQ29tcGF0OjczLHBhaW50Rm9ybVhPYmplY3RCZWdpbjo3NCxwYWludEZvcm1YT2JqZWN0RW5kOjc1LGJlZ2luR3JvdXA6NzYsZW5kR3JvdXA6NzcsYmVnaW5Bbm5vdGF0aW9uOjgwLGVuZEFubm90YXRpb246ODEscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfTtlLlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXtmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNpZ25hdHVyZXM6InNpZ25hdHVyZXMiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixlcnJvclRpbGluZ1BhdHRlcm46ImVycm9yVGlsaW5nUGF0dGVybiIsZXJyb3JFeHRHU3RhdGU6ImVycm9yRXh0R1N0YXRlIixlcnJvclhPYmplY3Q6ImVycm9yWE9iamVjdCIsZXJyb3JGb250TG9hZFR5cGUzOiJlcnJvckZvbnRMb2FkVHlwZTMiLGVycm9yRm9udFN0YXRlOiJlcnJvckZvbnRTdGF0ZSIsZXJyb3JGb250TWlzc2luZzoiZXJyb3JGb250TWlzc2luZyIsZXJyb3JGb250VHJhbnNsYXRlOiJlcnJvckZvbnRUcmFuc2xhdGUiLGVycm9yQ29sb3JTcGFjZToiZXJyb3JDb2xvclNwYWNlIixlcnJvck9wZXJhdG9yTGlzdDoiZXJyb3JPcGVyYXRvckxpc3QiLGVycm9yRm9udFRvVW5pY29kZToiZXJyb3JGb250VG9Vbmljb2RlIixlcnJvckZvbnRMb2FkTmF0aXZlOiJlcnJvckZvbnRMb2FkTmF0aXZlIixlcnJvckZvbnRCdWlsZFBhdGg6ImVycm9yRm9udEJ1aWxkUGF0aCIsZXJyb3JGb250R2V0UGF0aDoiZXJyb3JGb250R2V0UGF0aCIsZXJyb3JNYXJrZWRDb250ZW50OiJlcnJvck1hcmtlZENvbnRlbnQiLGVycm9yQ29udGVudFN1YlN0cmVhbToiZXJyb3JDb250ZW50U3ViU3RyZWFtIn07ZS5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTtsZXQgaT1zLldBUk5JTkdTO2Z1bmN0aW9uIHdhcm4odCl7aT49cy5XQVJOSU5HUyYmY29uc29sZS5sb2coYFdhcm5pbmc6ICR7dH1gKX1mdW5jdGlvbiB1bnJlYWNoYWJsZSh0KXt0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gc2hhZG93KHQsZSxzKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpzLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiExfSk7cmV0dXJuIHN9Y29uc3Qgbj1mdW5jdGlvbiBCYXNlRXhjZXB0aW9uQ2xvc3VyZSgpe2Z1bmN0aW9uIEJhc2VFeGNlcHRpb24odCxlKXt0aGlzLmNvbnN0cnVjdG9yPT09QmFzZUV4Y2VwdGlvbiYmdW5yZWFjaGFibGUoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VFeGNlcHRpb24uIik7dGhpcy5tZXNzYWdlPXQ7dGhpcy5uYW1lPWV9QmFzZUV4Y2VwdGlvbi5wcm90b3R5cGU9bmV3IEVycm9yO0Jhc2VFeGNlcHRpb24uY29uc3RydWN0b3I9QmFzZUV4Y2VwdGlvbjtyZXR1cm4gQmFzZUV4Y2VwdGlvbn0oKTtlLkJhc2VFeGNlcHRpb249bjtlLlBhc3N3b3JkRXhjZXB0aW9uPWNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsIlBhc3N3b3JkRXhjZXB0aW9uIik7dGhpcy5jb2RlPWV9fTtlLlVua25vd25FcnJvckV4Y2VwdGlvbj1jbGFzcyBVbmtub3duRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCwiVW5rbm93bkVycm9yRXhjZXB0aW9uIik7dGhpcy5kZXRhaWxzPWV9fTtlLkludmFsaWRQREZFeGNlcHRpb249Y2xhc3MgSW52YWxpZFBERkV4Y2VwdGlvbiBleHRlbmRzIG57Y29uc3RydWN0b3IodCl7c3VwZXIodCwiSW52YWxpZFBERkV4Y2VwdGlvbiIpfX07ZS5NaXNzaW5nUERGRXhjZXB0aW9uPWNsYXNzIE1pc3NpbmdQREZFeGNlcHRpb24gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsIk1pc3NpbmdQREZFeGNlcHRpb24iKX19O2UuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPWNsYXNzIFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiBleHRlbmRzIG57Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iKTt0aGlzLnN0YXR1cz1lfX07ZS5Gb3JtYXRFcnJvcj1jbGFzcyBGb3JtYXRFcnJvciBleHRlbmRzIG57Y29uc3RydWN0b3IodCl7c3VwZXIodCwiRm9ybWF0RXJyb3IiKX19O2UuQWJvcnRFeGNlcHRpb249Y2xhc3MgQWJvcnRFeGNlcHRpb24gZXh0ZW5kcyBue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsIkFib3J0RXhjZXB0aW9uIil9fTtmdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmdW5yZWFjaGFibGUoIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMiKTtjb25zdCBlPXQubGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkoZSk7Zm9yKGxldCBpPTA7aTxlOysraSlzW2ldPTI1NSZ0LmNoYXJDb2RlQXQoaSk7cmV0dXJuIHN9ZnVuY3Rpb24gYXJyYXlCeXRlTGVuZ3RoKHQpe2lmKHZvaWQgMCE9PXQubGVuZ3RoKXJldHVybiB0Lmxlbmd0aDtpZih2b2lkIDAhPT10LmJ5dGVMZW5ndGgpcmV0dXJuIHQuYnl0ZUxlbmd0aDt1bnJlYWNoYWJsZSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYXJyYXlCeXRlTGVuZ3RoIil9ZS5GZWF0dXJlVGVzdD1jbGFzcyBGZWF0dXJlVGVzdHtzdGF0aWMgZ2V0IGlzTGl0dGxlRW5kaWFuKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc0xpdHRsZUVuZGlhbiIsZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KDQpO3RbMF09MTtyZXR1cm4gMT09PW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciwwLDEpWzBdfSgpKX1zdGF0aWMgZ2V0IGlzRXZhbFN1cHBvcnRlZCgpe3JldHVybiBzaGFkb3codGhpcywiaXNFdmFsU3VwcG9ydGVkIixmdW5jdGlvbiBpc0V2YWxTdXBwb3J0ZWQoKXt0cnl7bmV3IEZ1bmN0aW9uKCIiKTtyZXR1cm4hMH1jYXRjaCh0KXtyZXR1cm4hMX19KCkpfXN0YXRpYyBnZXQgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiE9dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyl9fTtjb25zdCByPVsuLi5BcnJheSgyNTYpLmtleXMoKV0ubWFwKCh0PT50LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpKTtjbGFzcyBVdGlse3N0YXRpYyBtYWtlSGV4Q29sb3IodCxlLHMpe3JldHVybmAjJHtyW3RdfSR7cltlXX0ke3Jbc119YH1zdGF0aWMgc2NhbGVNaW5NYXgodCxlKXtsZXQgcztpZih0WzBdKXtpZih0WzBdPDApe3M9ZVswXTtlWzBdPWVbMV07ZVsxXT1zfWVbMF0qPXRbMF07ZVsxXSo9dFswXTtpZih0WzNdPDApe3M9ZVsyXTtlWzJdPWVbM107ZVszXT1zfWVbMl0qPXRbM107ZVszXSo9dFszXX1lbHNle3M9ZVswXTtlWzBdPWVbMl07ZVsyXT1zO3M9ZVsxXTtlWzFdPWVbM107ZVszXT1zO2lmKHRbMV08MCl7cz1lWzJdO2VbMl09ZVszXTtlWzNdPXN9ZVsyXSo9dFsxXTtlWzNdKj10WzFdO2lmKHRbMl08MCl7cz1lWzBdO2VbMF09ZVsxXTtlWzFdPXN9ZVswXSo9dFsyXTtlWzFdKj10WzJdfWVbMF0rPXRbNF07ZVsxXSs9dFs0XTtlWzJdKz10WzVdO2VbM10rPXRbNV19c3RhdGljIHRyYW5zZm9ybSh0LGUpe3JldHVyblt0WzBdKmVbMF0rdFsyXSplWzFdLHRbMV0qZVswXSt0WzNdKmVbMV0sdFswXSplWzJdK3RbMl0qZVszXSx0WzFdKmVbMl0rdFszXSplWzNdLHRbMF0qZVs0XSt0WzJdKmVbNV0rdFs0XSx0WzFdKmVbNF0rdFszXSplWzVdK3RbNV1dfXN0YXRpYyBhcHBseVRyYW5zZm9ybSh0LGUpe3JldHVyblt0WzBdKmVbMF0rdFsxXSplWzJdK2VbNF0sdFswXSplWzFdK3RbMV0qZVszXStlWzVdXX1zdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHQsZSl7Y29uc3Qgcz1lWzBdKmVbM10tZVsxXSplWzJdO3JldHVyblsodFswXSplWzNdLXRbMV0qZVsyXStlWzJdKmVbNV0tZVs0XSplWzNdKS9zLCgtdFswXSplWzFdK3RbMV0qZVswXStlWzRdKmVbMV0tZVs1XSplWzBdKS9zXX1zdGF0aWMgZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3godCxlKXtjb25zdCBzPVV0aWwuYXBwbHlUcmFuc2Zvcm0odCxlKSxpPVV0aWwuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLGUpLG49VXRpbC5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxlKSxyPVV0aWwuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0sZSk7cmV0dXJuW01hdGgubWluKHNbMF0saVswXSxuWzBdLHJbMF0pLE1hdGgubWluKHNbMV0saVsxXSxuWzFdLHJbMV0pLE1hdGgubWF4KHNbMF0saVswXSxuWzBdLHJbMF0pLE1hdGgubWF4KHNbMV0saVsxXSxuWzFdLHJbMV0pXX1zdGF0aWMgaW52ZXJzZVRyYW5zZm9ybSh0KXtjb25zdCBlPXRbMF0qdFszXS10WzFdKnRbMl07cmV0dXJuW3RbM10vZSwtdFsxXS9lLC10WzJdL2UsdFswXS9lLCh0WzJdKnRbNV0tdFs0XSp0WzNdKS9lLCh0WzRdKnRbMV0tdFs1XSp0WzBdKS9lXX1zdGF0aWMgc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodCl7Y29uc3QgZT1bdFswXSx0WzJdLHRbMV0sdFszXV0scz10WzBdKmVbMF0rdFsxXSplWzJdLGk9dFswXSplWzFdK3RbMV0qZVszXSxuPXRbMl0qZVswXSt0WzNdKmVbMl0scj10WzJdKmVbMV0rdFszXSplWzNdLGE9KHMrcikvMixvPU1hdGguc3FydCgocytyKSoqMi00KihzKnItbippKSkvMixsPWErb3x8MSxjPWEtb3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydChjKV19c3RhdGljIG5vcm1hbGl6ZVJlY3QodCl7Y29uc3QgZT10LnNsaWNlKDApO2lmKHRbMF0+dFsyXSl7ZVswXT10WzJdO2VbMl09dFswXX1pZih0WzFdPnRbM10pe2VbMV09dFszXTtlWzNdPXRbMV19cmV0dXJuIGV9c3RhdGljIGludGVyc2VjdCh0LGUpe2NvbnN0IHM9TWF0aC5tYXgoTWF0aC5taW4odFswXSx0WzJdKSxNYXRoLm1pbihlWzBdLGVbMl0pKSxpPU1hdGgubWluKE1hdGgubWF4KHRbMF0sdFsyXSksTWF0aC5tYXgoZVswXSxlWzJdKSk7aWYocz5pKXJldHVybiBudWxsO2NvbnN0IG49TWF0aC5tYXgoTWF0aC5taW4odFsxXSx0WzNdKSxNYXRoLm1pbihlWzFdLGVbM10pKSxyPU1hdGgubWluKE1hdGgubWF4KHRbMV0sdFszXSksTWF0aC5tYXgoZVsxXSxlWzNdKSk7cmV0dXJuIG4+cj9udWxsOltzLG4saSxyXX1zdGF0aWMgYmV6aWVyQm91bmRpbmdCb3godCxlLHMsaSxuLHIsYSxvKXtjb25zdCBsPVtdLGM9W1tdLFtdXTtsZXQgaCxkLHUscCxnLG0sZixiO2ZvcihsZXQgYz0wO2M8MjsrK2Mpe2lmKDA9PT1jKXtkPTYqdC0xMipzKzYqbjtoPS0zKnQrOSpzLTkqbiszKmE7dT0zKnMtMyp0fWVsc2V7ZD02KmUtMTIqaSs2KnI7aD0tMyplKzkqaS05KnIrMypvO3U9MyppLTMqZX1pZihNYXRoLmFicyhoKTwxZS0xMil7aWYoTWF0aC5hYnMoZCk8MWUtMTIpY29udGludWU7cD0tdS9kOzA8cCYmcDwxJiZsLnB1c2gocCl9ZWxzZXtmPWQqZC00KnUqaDtiPU1hdGguc3FydChmKTtpZighKGY8MCkpe2c9KC1kK2IpLygyKmgpOzA8ZyYmZzwxJiZsLnB1c2goZyk7bT0oLWQtYikvKDIqaCk7MDxtJiZtPDEmJmwucHVzaChtKX19fWxldCBBLF89bC5sZW5ndGg7Y29uc3Qgdj1fO2Zvcig7Xy0tOyl7cD1sW19dO0E9MS1wO2NbMF1bX109QSpBKkEqdCszKkEqQSpwKnMrMypBKnAqcCpuK3AqcCpwKmE7Y1sxXVtfXT1BKkEqQSplKzMqQSpBKnAqaSszKkEqcCpwKnIrcCpwKnAqb31jWzBdW3ZdPXQ7Y1sxXVt2XT1lO2NbMF1bdisxXT1hO2NbMV1bdisxXT1vO2NbMF0ubGVuZ3RoPWNbMV0ubGVuZ3RoPXYrMjtyZXR1cm5bTWF0aC5taW4oLi4uY1swXSksTWF0aC5taW4oLi4uY1sxXSksTWF0aC5tYXgoLi4uY1swXSksTWF0aC5tYXgoLi4uY1sxXSldfX1lLlV0aWw9VXRpbDtjb25zdCBhPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3MjgsNzExLDcxMCw3MjksNzMzLDczMSw3MzAsNzMyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgyMjYsODIyNCw4MjI1LDgyMzAsODIxMiw4MjExLDQwMiw4MjYwLDgyNDksODI1MCw4NzIyLDgyNDAsODIyMiw4MjIwLDgyMjEsODIxNiw4MjE3LDgyMTgsODQ4Miw2NDI1Nyw2NDI1OCwzMjEsMzM4LDM1MiwzNzYsMzgxLDMwNSwzMjIsMzM5LDM1MywzODIsMCw4MzY0XTtmdW5jdGlvbiBzdHJpbmdUb1VURjhTdHJpbmcodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUodCkpfX0sKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193X3BkZmpzX3JlcXVpcmVfXyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZXhwb3J0cy5idWlsZD1leHBvcnRzLlJlbmRlclRhc2s9ZXhwb3J0cy5QREZXb3JrZXJVdGlsPWV4cG9ydHMuUERGV29ya2VyPWV4cG9ydHMuUERGUGFnZVByb3h5PWV4cG9ydHMuUERGRG9jdW1lbnRQcm94eT1leHBvcnRzLlBERkRvY3VtZW50TG9hZGluZ1Rhc2s9ZXhwb3J0cy5QREZEYXRhUmFuZ2VUcmFuc3BvcnQ9ZXhwb3J0cy5Mb29wYmFja1BvcnQ9ZXhwb3J0cy5EZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9ZXhwb3J0cy5EZWZhdWx0Q2FudmFzRmFjdG9yeT1leHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT12b2lkIDA7ZXhwb3J0cy5nZXREb2N1bWVudD1nZXREb2N1bWVudDtleHBvcnRzLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5PXNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5O2V4cG9ydHMudmVyc2lvbj12b2lkIDA7dmFyIF91dGlsPV9fd19wZGZqc19yZXF1aXJlX18oMSksX2Fubm90YXRpb25fc3RvcmFnZT1fX3dfcGRmanNfcmVxdWlyZV9fKDMpLF9kaXNwbGF5X3V0aWxzPV9fd19wZGZqc19yZXF1aXJlX18oNiksX2ZvbnRfbG9hZGVyPV9fd19wZGZqc19yZXF1aXJlX18oOSksX2NhbnZhcz1fX3dfcGRmanNfcmVxdWlyZV9fKDEwKSxfd29ya2VyX29wdGlvbnM9X193X3BkZmpzX3JlcXVpcmVfXygxNCksX2lzX25vZGU9X193X3BkZmpzX3JlcXVpcmVfXygxMiksX21lc3NhZ2VfaGFuZGxlcj1fX3dfcGRmanNfcmVxdWlyZV9fKDE1KSxfbWV0YWRhdGE9X193X3BkZmpzX3JlcXVpcmVfXygxNiksX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnPV9fd19wZGZqc19yZXF1aXJlX18oMTcpLF90cmFuc3BvcnRfc3RyZWFtPV9fd19wZGZqc19yZXF1aXJlX18oMTgpLF94ZmFfdGV4dD1fX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtjb25zdCBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU9NjU1MzYsUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUPTEwMDtsZXQgRGVmYXVsdENhbnZhc0ZhY3Rvcnk9X2Rpc3BsYXlfdXRpbHMuRE9NQ2FudmFzRmFjdG9yeTtleHBvcnRzLkRlZmF1bHRDYW52YXNGYWN0b3J5PURlZmF1bHRDYW52YXNGYWN0b3J5O2xldCBEZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9X2Rpc3BsYXlfdXRpbHMuRE9NQ01hcFJlYWRlckZhY3Rvcnk7ZXhwb3J0cy5EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9RGVmYXVsdENNYXBSZWFkZXJGYWN0b3J5O2xldCBEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9X2Rpc3BsYXlfdXRpbHMuRE9NU3RhbmRhcmRGb250RGF0YUZhY3RvcnksY3JlYXRlUERGTmV0d29ya1N0cmVhbTtleHBvcnRzLkRlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1EZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7aWYoX2lzX25vZGUuaXNOb2RlSlMpe2NvbnN0e05vZGVDYW52YXNGYWN0b3J5OnQsTm9kZUNNYXBSZWFkZXJGYWN0b3J5OmUsTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5OnN9PV9fd19wZGZqc19yZXF1aXJlX18oMjApO2V4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3Rvcnk9RGVmYXVsdENhbnZhc0ZhY3Rvcnk9dDtleHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeT1EZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk9ZTtleHBvcnRzLkRlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1EZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9c31mdW5jdGlvbiBzZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSh0KXtjcmVhdGVQREZOZXR3b3JrU3RyZWFtPXR9ZnVuY3Rpb24gZ2V0RG9jdW1lbnQodCl7Y29uc3QgZT1uZXcgUERGRG9jdW1lbnRMb2FkaW5nVGFzaztsZXQgcztpZigic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBVUkwpcz17dXJsOnR9O2Vsc2UgaWYoKDAsX3V0aWwuaXNBcnJheUJ1ZmZlcikodCkpcz17ZGF0YTp0fTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBQREZEYXRhUmFuZ2VUcmFuc3BvcnQpcz17cmFuZ2U6dH07ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhcmFtZXRlciBpbiBnZXREb2N1bWVudCwgbmVlZCBlaXRoZXIgc3RyaW5nLCBVUkwsIFR5cGVkQXJyYXksIG9yIHBhcmFtZXRlciBvYmplY3QuIik7aWYoIXQudXJsJiYhdC5kYXRhJiYhdC5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGFyYW1ldGVyIG9iamVjdDogbmVlZCBlaXRoZXIgLmRhdGEsIC5yYW5nZSBvciAudXJsIik7cz10fWNvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgbj1udWxsLHI9bnVsbDtmb3IoY29uc3QgdCBpbiBzKXtjb25zdCBlPXNbdF07c3dpdGNoKHQpe2Nhc2UidXJsIjppZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyl0cnl7aVt0XT1uZXcgVVJMKGUsd2luZG93LmxvY2F0aW9uKS5ocmVmO2NvbnRpbnVlfWNhdGNoKHQpeygwLF91dGlsLndhcm4pKGBDYW5ub3QgY3JlYXRlIHZhbGlkIFVSTDogIiR7dH0iLmApfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgVVJMKXtpW3RdPWUudG9TdHJpbmcoKTtjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIHVybCBkYXRhOiBlaXRoZXIgc3RyaW5nIG9yIFVSTC1vYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIHVybCBwcm9wZXJ0eS4iKTtjYXNlInJhbmdlIjpuPWU7Y29udGludWU7Y2FzZSJ3b3JrZXIiOnI9ZTtjb250aW51ZTtjYXNlImRhdGEiOmlmKF9pc19ub2RlLmlzTm9kZUpTJiYidW5kZWZpbmVkIiE9dHlwZW9mIEJ1ZmZlciYmZSBpbnN0YW5jZW9mIEJ1ZmZlcilpW3RdPW5ldyBVaW50OEFycmF5KGUpO2Vsc2V7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpYnJlYWs7aWYoInN0cmluZyI9PXR5cGVvZiBlKWlbdF09KDAsX3V0aWwuc3RyaW5nVG9CeXRlcykoZSk7ZWxzZSBpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lfHxpc05hTihlLmxlbmd0aCkpe2lmKCEoMCxfdXRpbC5pc0FycmF5QnVmZmVyKShlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIGJpbmFyeSBkYXRhOiBlaXRoZXIgVHlwZWRBcnJheSwgc3RyaW5nLCBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgZGF0YSBwcm9wZXJ0eS4iKTtpW3RdPW5ldyBVaW50OEFycmF5KGUpfWVsc2UgaVt0XT1uZXcgVWludDhBcnJheShlKX1jb250aW51ZX1pW3RdPWV9aS5DTWFwUmVhZGVyRmFjdG9yeT1pLkNNYXBSZWFkZXJGYWN0b3J5fHxEZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk7aS5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1pLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5fHxEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7aS5pZ25vcmVFcnJvcnM9ITAhPT1pLnN0b3BBdEVycm9ycztpLmZvbnRFeHRyYVByb3BlcnRpZXM9ITA9PT1pLmZvbnRFeHRyYVByb3BlcnRpZXM7aS5wZGZCdWc9ITA9PT1pLnBkZkJ1ZztpLmVuYWJsZVhmYT0hMD09PWkuZW5hYmxlWGZhOyghTnVtYmVyLmlzSW50ZWdlcihpLnJhbmdlQ2h1bmtTaXplKXx8aS5yYW5nZUNodW5rU2l6ZTwxKSYmKGkucmFuZ2VDaHVua1NpemU9REVGQVVMVF9SQU5HRV9DSFVOS19TSVpFKTsoInN0cmluZyIhPXR5cGVvZiBpLmRvY0Jhc2VVcmx8fCgwLF9kaXNwbGF5X3V0aWxzLmlzRGF0YVNjaGVtZSkoaS5kb2NCYXNlVXJsKSkmJihpLmRvY0Jhc2VVcmw9bnVsbCk7KCFOdW1iZXIuaXNJbnRlZ2VyKGkubWF4SW1hZ2VTaXplKXx8aS5tYXhJbWFnZVNpemU8LTEpJiYoaS5tYXhJbWFnZVNpemU9LTEpOyJzdHJpbmciIT10eXBlb2YgaS5jTWFwVXJsJiYoaS5jTWFwVXJsPW51bGwpOyJzdHJpbmciIT10eXBlb2YgaS5zdGFuZGFyZEZvbnREYXRhVXJsJiYoaS5zdGFuZGFyZEZvbnREYXRhVXJsPW51bGwpOyJib29sZWFuIiE9dHlwZW9mIGkudXNlV29ya2VyRmV0Y2gmJihpLnVzZVdvcmtlckZldGNoPWkuQ01hcFJlYWRlckZhY3Rvcnk9PT1fZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeSYmaS5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT09PV9kaXNwbGF5X3V0aWxzLkRPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5KTsiYm9vbGVhbiIhPXR5cGVvZiBpLmlzRXZhbFN1cHBvcnRlZCYmKGkuaXNFdmFsU3VwcG9ydGVkPSEwKTsiYm9vbGVhbiIhPXR5cGVvZiBpLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkJiYoaS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD0hX2lzX25vZGUuaXNOb2RlSlMpOyJib29sZWFuIiE9dHlwZW9mIGkuZGlzYWJsZUZvbnRGYWNlJiYoaS5kaXNhYmxlRm9udEZhY2U9X2lzX25vZGUuaXNOb2RlSlMpOyJib29sZWFuIiE9dHlwZW9mIGkudXNlU3lzdGVtRm9udHMmJihpLnVzZVN5c3RlbUZvbnRzPSFfaXNfbm9kZS5pc05vZGVKUyYmIWkuZGlzYWJsZUZvbnRGYWNlKTsib2JqZWN0Ij09dHlwZW9mIGkub3duZXJEb2N1bWVudCYmbnVsbCE9PWkub3duZXJEb2N1bWVudHx8KGkub3duZXJEb2N1bWVudD1nbG9iYWxUaGlzLmRvY3VtZW50KTsiYm9vbGVhbiIhPXR5cGVvZiBpLmRpc2FibGVSYW5nZSYmKGkuZGlzYWJsZVJhbmdlPSExKTsiYm9vbGVhbiIhPXR5cGVvZiBpLmRpc2FibGVTdHJlYW0mJihpLmRpc2FibGVTdHJlYW09ITEpOyJib29sZWFuIiE9dHlwZW9mIGkuZGlzYWJsZUF1dG9GZXRjaCYmKGkuZGlzYWJsZUF1dG9GZXRjaD0hMSk7KDAsX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKGkudmVyYm9zaXR5KTtpZighcil7Y29uc3QgdD17dmVyYm9zaXR5OmkudmVyYm9zaXR5LHBvcnQ6X3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyUG9ydH07cj10LnBvcnQ/UERGV29ya2VyLmZyb21Qb3J0KHQpOm5ldyBQREZXb3JrZXIodCk7ZS5fd29ya2VyPXJ9Y29uc3QgYT1lLmRvY0lkO3IucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe2lmKGUuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7Y29uc3QgdD1fZmV0Y2hEb2N1bWVudChyLGksbixhKSxzPW5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtsZXQgZTtuP2U9bmV3IF90cmFuc3BvcnRfc3RyZWFtLlBERkRhdGFUcmFuc3BvcnRTdHJlYW0oe2xlbmd0aDppLmxlbmd0aCxpbml0aWFsRGF0YTppLmluaXRpYWxEYXRhLHByb2dyZXNzaXZlRG9uZTppLnByb2dyZXNzaXZlRG9uZSxjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTppLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lLGRpc2FibGVSYW5nZTppLmRpc2FibGVSYW5nZSxkaXNhYmxlU3RyZWFtOmkuZGlzYWJsZVN0cmVhbX0sbik6aS5kYXRhfHwoZT1jcmVhdGVQREZOZXR3b3JrU3RyZWFtKHt1cmw6aS51cmwsbGVuZ3RoOmkubGVuZ3RoLGh0dHBIZWFkZXJzOmkuaHR0cEhlYWRlcnMsd2l0aENyZWRlbnRpYWxzOmkud2l0aENyZWRlbnRpYWxzLHJhbmdlQ2h1bmtTaXplOmkucmFuZ2VDaHVua1NpemUsZGlzYWJsZVJhbmdlOmkuZGlzYWJsZVJhbmdlLGRpc2FibGVTdHJlYW06aS5kaXNhYmxlU3RyZWFtfSkpO3QoZSl9KSk7cmV0dXJuIFByb21pc2UuYWxsKFt0LHNdKS50aGVuKChmdW5jdGlvbihbdCxzXSl7aWYoZS5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJMb2FkaW5nIGFib3J0ZWQiKTtjb25zdCBuPW5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKGEsdCxyLnBvcnQpLG89bmV3IFdvcmtlclRyYW5zcG9ydChuLGUscyxpKTtlLl90cmFuc3BvcnQ9bztuLnNlbmQoIlJlYWR5IixudWxsKX0pKX0pKS5jYXRjaChlLl9jYXBhYmlsaXR5LnJlamVjdCk7cmV0dXJuIGV9YXN5bmMgZnVuY3Rpb24gX2ZldGNoRG9jdW1lbnQodCxlLHMsaSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpO2lmKHMpe2UubGVuZ3RoPXMubGVuZ3RoO2UuaW5pdGlhbERhdGE9cy5pbml0aWFsRGF0YTtlLnByb2dyZXNzaXZlRG9uZT1zLnByb2dyZXNzaXZlRG9uZTtlLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lPXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWV9Y29uc3Qgbj1hd2FpdCB0Lm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RG9jUmVxdWVzdCIse2RvY0lkOmksYXBpVmVyc2lvbjoiMy4wLjI3OSIsZGF0YTplLmRhdGEscGFzc3dvcmQ6ZS5wYXNzd29yZCxkaXNhYmxlQXV0b0ZldGNoOmUuZGlzYWJsZUF1dG9GZXRjaCxyYW5nZUNodW5rU2l6ZTplLnJhbmdlQ2h1bmtTaXplLGxlbmd0aDplLmxlbmd0aCxkb2NCYXNlVXJsOmUuZG9jQmFzZVVybCxlbmFibGVYZmE6ZS5lbmFibGVYZmEsZXZhbHVhdG9yT3B0aW9uczp7bWF4SW1hZ2VTaXplOmUubWF4SW1hZ2VTaXplLGRpc2FibGVGb250RmFjZTplLmRpc2FibGVGb250RmFjZSxpZ25vcmVFcnJvcnM6ZS5pZ25vcmVFcnJvcnMsaXNFdmFsU3VwcG9ydGVkOmUuaXNFdmFsU3VwcG9ydGVkLGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOmUuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsZm9udEV4dHJhUHJvcGVydGllczplLmZvbnRFeHRyYVByb3BlcnRpZXMsdXNlU3lzdGVtRm9udHM6ZS51c2VTeXN0ZW1Gb250cyxjTWFwVXJsOmUudXNlV29ya2VyRmV0Y2g/ZS5jTWFwVXJsOm51bGwsc3RhbmRhcmRGb250RGF0YVVybDplLnVzZVdvcmtlckZldGNoP2Uuc3RhbmRhcmRGb250RGF0YVVybDpudWxsfX0pO2UuZGF0YSYmKGUuZGF0YT1udWxsKTtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIik7cmV0dXJuIG59Y2xhc3MgUERGRG9jdW1lbnRMb2FkaW5nVGFza3tzdGF0aWMjdD0wO2NvbnN0cnVjdG9yKCl7dGhpcy5fY2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl90cmFuc3BvcnQ9bnVsbDt0aGlzLl93b3JrZXI9bnVsbDt0aGlzLmRvY0lkPSJkIitQREZEb2N1bWVudExvYWRpbmdUYXNrLiN0Kys7dGhpcy5kZXN0cm95ZWQ9ITE7dGhpcy5vblBhc3N3b3JkPW51bGw7dGhpcy5vblByb2dyZXNzPW51bGw7dGhpcy5vblVuc3VwcG9ydGVkRmVhdHVyZT1udWxsfWdldCBwcm9taXNlKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX1hc3luYyBkZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITA7YXdhaXQodGhpcy5fdHJhbnNwb3J0Py5kZXN0cm95KCkpO3RoaXMuX3RyYW5zcG9ydD1udWxsO2lmKHRoaXMuX3dvcmtlcil7dGhpcy5fd29ya2VyLmRlc3Ryb3koKTt0aGlzLl93b3JrZXI9bnVsbH19fWV4cG9ydHMuUERGRG9jdW1lbnRMb2FkaW5nVGFzaz1QREZEb2N1bWVudExvYWRpbmdUYXNrO2NsYXNzIFBERkRhdGFSYW5nZVRyYW5zcG9ydHtjb25zdHJ1Y3Rvcih0LGUscz0hMSxpPW51bGwpe3RoaXMubGVuZ3RoPXQ7dGhpcy5pbml0aWFsRGF0YT1lO3RoaXMucHJvZ3Jlc3NpdmVEb25lPXM7dGhpcy5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZT1pO3RoaXMuX3JhbmdlTGlzdGVuZXJzPVtdO3RoaXMuX3Byb2dyZXNzTGlzdGVuZXJzPVtdO3RoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycz1bXTt0aGlzLl9wcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcnM9W107dGhpcy5fcmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpfWFkZFJhbmdlTGlzdGVuZXIodCl7dGhpcy5fcmFuZ2VMaXN0ZW5lcnMucHVzaCh0KX1hZGRQcm9ncmVzc0xpc3RlbmVyKHQpe3RoaXMuX3Byb2dyZXNzTGlzdGVuZXJzLnB1c2godCl9YWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIodCl7dGhpcy5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzLnB1c2godCl9YWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIodCl7dGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzLnB1c2godCl9b25EYXRhUmFuZ2UodCxlKXtmb3IoY29uc3QgcyBvZiB0aGlzLl9yYW5nZUxpc3RlbmVycylzKHQsZSl9b25EYXRhUHJvZ3Jlc3ModCxlKXt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKCgoKT0+e2Zvcihjb25zdCBzIG9mIHRoaXMuX3Byb2dyZXNzTGlzdGVuZXJzKXModCxlKX0pKX1vbkRhdGFQcm9ncmVzc2l2ZVJlYWQodCl7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnByb21pc2UudGhlbigoKCk9Pntmb3IoY29uc3QgZSBvZiB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMpZSh0KX0pKX1vbkRhdGFQcm9ncmVzc2l2ZURvbmUoKXt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKCgoKT0+e2Zvcihjb25zdCB0IG9mIHRoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycyl0KCl9KSl9dHJhbnNwb3J0UmVhZHkoKXt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpfXJlcXVlc3REYXRhUmFuZ2UodCxlKXsoMCxfdXRpbC51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBQREZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZSIpfWFib3J0KCl7fX1leHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydD1QREZEYXRhUmFuZ2VUcmFuc3BvcnQ7Y2xhc3MgUERGRG9jdW1lbnRQcm94eXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3BkZkluZm89dDt0aGlzLl90cmFuc3BvcnQ9ZX1nZXQgYW5ub3RhdGlvblN0b3JhZ2UoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmFubm90YXRpb25TdG9yYWdlfWdldCBudW1QYWdlcygpe3JldHVybiB0aGlzLl9wZGZJbmZvLm51bVBhZ2VzfWdldCBmaW5nZXJwcmludHMoKXtyZXR1cm4gdGhpcy5fcGRmSW5mby5maW5nZXJwcmludHN9Z2V0IHN0YXRzKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zdGF0c31nZXQgaXNQdXJlWGZhKCl7cmV0dXJuISF0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmF9Z2V0IGFsbFhmYUh0bWwoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhfWdldFBhZ2UodCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlKHQpfWdldFBhZ2VJbmRleCh0KXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VJbmRleCh0KX1nZXREZXN0aW5hdGlvbnMoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERlc3RpbmF0aW9ucygpfWdldERlc3RpbmF0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb24odCl9Z2V0UGFnZUxhYmVscygpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZUxhYmVscygpfWdldFBhZ2VMYXlvdXQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYXlvdXQoKX1nZXRQYWdlTW9kZSgpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZU1vZGUoKX1nZXRWaWV3ZXJQcmVmZXJlbmNlcygpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0Vmlld2VyUHJlZmVyZW5jZXMoKX1nZXRPcGVuQWN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRPcGVuQWN0aW9uKCl9Z2V0QXR0YWNobWVudHMoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEF0dGFjaG1lbnRzKCl9Z2V0SmF2YVNjcmlwdCgpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0SmF2YVNjcmlwdCgpfWdldEpTQWN0aW9ucygpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RG9jSlNBY3Rpb25zKCl9Z2V0T3V0bGluZSgpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3V0bGluZSgpfWdldE9wdGlvbmFsQ29udGVudENvbmZpZygpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3B0aW9uYWxDb250ZW50Q29uZmlnKCl9Z2V0UGVybWlzc2lvbnMoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBlcm1pc3Npb25zKCl9Z2V0TWV0YWRhdGEoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE1ldGFkYXRhKCl9Z2V0TWFya0luZm8oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE1hcmtJbmZvKCl9Z2V0RGF0YSgpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGF0YSgpfXNhdmVEb2N1bWVudCgpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuc2F2ZURvY3VtZW50KCl9Z2V0RG93bmxvYWRJbmZvKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnByb21pc2V9Y2xlYW51cCh0PSExKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnN0YXJ0Q2xlYW51cCh0fHx0aGlzLmlzUHVyZVhmYSl9ZGVzdHJveSgpe3JldHVybiB0aGlzLmxvYWRpbmdUYXNrLmRlc3Ryb3koKX1nZXQgbG9hZGluZ1BhcmFtcygpe3JldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1BhcmFtc31nZXQgbG9hZGluZ1Rhc2soKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmxvYWRpbmdUYXNrfWdldEZpZWxkT2JqZWN0cygpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RmllbGRPYmplY3RzKCl9aGFzSlNBY3Rpb25zKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5oYXNKU0FjdGlvbnMoKX1nZXRDYWxjdWxhdGlvbk9yZGVySWRzKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRDYWxjdWxhdGlvbk9yZGVySWRzKCl9fWV4cG9ydHMuUERGRG9jdW1lbnRQcm94eT1QREZEb2N1bWVudFByb3h5O2NsYXNzIFBERlBhZ2VQcm94eXtjb25zdHJ1Y3Rvcih0LGUscyxpLG49ITEpe3RoaXMuX3BhZ2VJbmRleD10O3RoaXMuX3BhZ2VJbmZvPWU7dGhpcy5fb3duZXJEb2N1bWVudD1pO3RoaXMuX3RyYW5zcG9ydD1zO3RoaXMuX3N0YXRzPW4/bmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcjpudWxsO3RoaXMuX3BkZkJ1Zz1uO3RoaXMuY29tbW9uT2Jqcz1zLmNvbW1vbk9ianM7dGhpcy5vYmpzPW5ldyBQREZPYmplY3RzO3RoaXMuX2JpdG1hcHM9bmV3IFNldDt0aGlzLmNsZWFudXBBZnRlclJlbmRlcj0hMTt0aGlzLnBlbmRpbmdDbGVhbnVwPSExO3RoaXMuX2ludGVudFN0YXRlcz1uZXcgTWFwO3RoaXMuX2Fubm90YXRpb25Qcm9taXNlcz1uZXcgTWFwO3RoaXMuZGVzdHJveWVkPSExfWdldCBwYWdlTnVtYmVyKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmRleCsxfWdldCByb3RhdGUoKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucm90YXRlfWdldCByZWYoKXtyZXR1cm4gdGhpcy5fcGFnZUluZm8ucmVmfWdldCB1c2VyVW5pdCgpe3JldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdH1nZXQgdmlldygpe3JldHVybiB0aGlzLl9wYWdlSW5mby52aWV3fWdldFZpZXdwb3J0KHtzY2FsZTp0LHJvdGF0aW9uOmU9dGhpcy5yb3RhdGUsb2Zmc2V0WDpzPTAsb2Zmc2V0WTppPTAsZG9udEZsaXA6bj0hMX09e30pe3JldHVybiBuZXcgX2Rpc3BsYXlfdXRpbHMuUGFnZVZpZXdwb3J0KHt2aWV3Qm94OnRoaXMudmlldyxzY2FsZTp0LHJvdGF0aW9uOmUsb2Zmc2V0WDpzLG9mZnNldFk6aSxkb250RmxpcDpufSl9Z2V0QW5ub3RhdGlvbnMoe2ludGVudDp0PSJkaXNwbGF5In09e30pe2NvbnN0IGU9dGhpcy5fdHJhbnNwb3J0LmdldFJlbmRlcmluZ0ludGVudCh0KTtsZXQgcz10aGlzLl9hbm5vdGF0aW9uUHJvbWlzZXMuZ2V0KGUuY2FjaGVLZXkpO2lmKCFzKXtzPXRoaXMuX3RyYW5zcG9ydC5nZXRBbm5vdGF0aW9ucyh0aGlzLl9wYWdlSW5kZXgsZS5yZW5kZXJpbmdJbnRlbnQpO3RoaXMuX2Fubm90YXRpb25Qcm9taXNlcy5zZXQoZS5jYWNoZUtleSxzKX1yZXR1cm4gc31nZXRKU0FjdGlvbnMoKXtyZXR1cm4gdGhpcy5fanNBY3Rpb25zUHJvbWlzZXx8PXRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSlNBY3Rpb25zKHRoaXMuX3BhZ2VJbmRleCl9YXN5bmMgZ2V0WGZhKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYT8uY2hpbGRyZW5bdGhpcy5fcGFnZUluZGV4XXx8bnVsbH1yZW5kZXIoe2NhbnZhc0NvbnRleHQ6dCx2aWV3cG9ydDplLGludGVudDpzPSJkaXNwbGF5Iixhbm5vdGF0aW9uTW9kZTppPV91dGlsLkFubm90YXRpb25Nb2RlLkVOQUJMRSx0cmFuc2Zvcm06bj1udWxsLGNhbnZhc0ZhY3Rvcnk6cj1udWxsLGJhY2tncm91bmQ6YT1udWxsLG9wdGlvbmFsQ29udGVudENvbmZpZ1Byb21pc2U6bz1udWxsLGFubm90YXRpb25DYW52YXNNYXA6bD1udWxsLHBhZ2VDb2xvcnM6Yz1udWxsLHByaW50QW5ub3RhdGlvblN0b3JhZ2U6aD1udWxsfSl7dGhpcy5fc3RhdHM/LnRpbWUoIk92ZXJhbGwiKTtjb25zdCBkPXRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQocyxpLGgpO3RoaXMucGVuZGluZ0NsZWFudXA9ITE7b3x8KG89dGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpKTtsZXQgdT10aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGQuY2FjaGVLZXkpO2lmKCF1KXt1PU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5faW50ZW50U3RhdGVzLnNldChkLmNhY2hlS2V5LHUpfWlmKHUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCl7Y2xlYXJUaW1lb3V0KHUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCk7dS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0PW51bGx9Y29uc3QgcD1yfHxuZXcgRGVmYXVsdENhbnZhc0ZhY3Rvcnkoe293bmVyRG9jdW1lbnQ6dGhpcy5fb3duZXJEb2N1bWVudH0pLGc9ISEoZC5yZW5kZXJpbmdJbnRlbnQmX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7aWYoIXUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSl7dS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3Uub3BlcmF0b3JMaXN0PXtmbkFycmF5OltdLGFyZ3NBcnJheTpbXSxsYXN0Q2h1bms6ITEsc2VwYXJhdGVBbm5vdHM6bnVsbH07dGhpcy5fc3RhdHM/LnRpbWUoIlBhZ2UgUmVxdWVzdCIpO3RoaXMuX3B1bXBPcGVyYXRvckxpc3QoZCl9Y29uc3QgY29tcGxldGU9dD0+e3UucmVuZGVyVGFza3MuZGVsZXRlKG0pOyh0aGlzLmNsZWFudXBBZnRlclJlbmRlcnx8ZykmJih0aGlzLnBlbmRpbmdDbGVhbnVwPSEwKTt0aGlzLl90cnlDbGVhbnVwKCk7aWYodCl7bS5jYXBhYmlsaXR5LnJlamVjdCh0KTt0aGlzLl9hYm9ydE9wZXJhdG9yTGlzdCh7aW50ZW50U3RhdGU6dSxyZWFzb246dCBpbnN0YW5jZW9mIEVycm9yP3Q6bmV3IEVycm9yKHQpfSl9ZWxzZSBtLmNhcGFiaWxpdHkucmVzb2x2ZSgpO3RoaXMuX3N0YXRzPy50aW1lRW5kKCJSZW5kZXJpbmciKTt0aGlzLl9zdGF0cz8udGltZUVuZCgiT3ZlcmFsbCIpfSxtPW5ldyBJbnRlcm5hbFJlbmRlclRhc2soe2NhbGxiYWNrOmNvbXBsZXRlLHBhcmFtczp7Y2FudmFzQ29udGV4dDp0LHZpZXdwb3J0OmUsdHJhbnNmb3JtOm4sYmFja2dyb3VuZDphfSxvYmpzOnRoaXMub2Jqcyxjb21tb25PYmpzOnRoaXMuY29tbW9uT2Jqcyxhbm5vdGF0aW9uQ2FudmFzTWFwOmwsb3BlcmF0b3JMaXN0OnUub3BlcmF0b3JMaXN0LHBhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsY2FudmFzRmFjdG9yeTpwLHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZTohZyxwZGZCdWc6dGhpcy5fcGRmQnVnLHBhZ2VDb2xvcnM6Y30pOyh1LnJlbmRlclRhc2tzfHw9bmV3IFNldCkuYWRkKG0pO2NvbnN0IGY9bS50YXNrO1Byb21pc2UuYWxsKFt1LmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZSxvXSkudGhlbigoKFt0LGVdKT0+e2lmKHRoaXMucGVuZGluZ0NsZWFudXApY29tcGxldGUoKTtlbHNle3RoaXMuX3N0YXRzPy50aW1lKCJSZW5kZXJpbmciKTttLmluaXRpYWxpemVHcmFwaGljcyh7dHJhbnNwYXJlbmN5OnQsb3B0aW9uYWxDb250ZW50Q29uZmlnOmV9KTttLm9wZXJhdG9yTGlzdENoYW5nZWQoKX19KSkuY2F0Y2goY29tcGxldGUpO3JldHVybiBmfWdldE9wZXJhdG9yTGlzdCh7aW50ZW50OnQ9ImRpc3BsYXkiLGFubm90YXRpb25Nb2RlOmU9X3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFLHByaW50QW5ub3RhdGlvblN0b3JhZ2U6cz1udWxsfT17fSl7Y29uc3QgaT10aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KHQsZSxzLCEwKTtsZXQgbixyPXRoaXMuX2ludGVudFN0YXRlcy5nZXQoaS5jYWNoZUtleSk7aWYoIXIpe3I9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9pbnRlbnRTdGF0ZXMuc2V0KGkuY2FjaGVLZXkscil9aWYoIXIub3BMaXN0UmVhZENhcGFiaWxpdHkpe249T2JqZWN0LmNyZWF0ZShudWxsKTtuLm9wZXJhdG9yTGlzdENoYW5nZWQ9ZnVuY3Rpb24gb3BlcmF0b3JMaXN0Q2hhbmdlZCgpe2lmKHIub3BlcmF0b3JMaXN0Lmxhc3RDaHVuayl7ci5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKHIub3BlcmF0b3JMaXN0KTtyLnJlbmRlclRhc2tzLmRlbGV0ZShuKX19O3Iub3BMaXN0UmVhZENhcGFiaWxpdHk9KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7KHIucmVuZGVyVGFza3N8fD1uZXcgU2V0KS5hZGQobik7ci5vcGVyYXRvckxpc3Q9e2ZuQXJyYXk6W10sYXJnc0FycmF5OltdLGxhc3RDaHVuazohMSxzZXBhcmF0ZUFubm90czpudWxsfTt0aGlzLl9zdGF0cz8udGltZSgiUGFnZSBSZXF1ZXN0Iik7dGhpcy5fcHVtcE9wZXJhdG9yTGlzdChpKX1yZXR1cm4gci5vcExpc3RSZWFkQ2FwYWJpbGl0eS5wcm9taXNlfXN0cmVhbVRleHRDb250ZW50KHtkaXNhYmxlQ29tYmluZVRleHRJdGVtczp0PSExLGluY2x1ZGVNYXJrZWRDb250ZW50OmU9ITF9PXt9KXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRUZXh0Q29udGVudCIse3BhZ2VJbmRleDp0aGlzLl9wYWdlSW5kZXgsY29tYmluZVRleHRJdGVtczohMCE9PXQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ITA9PT1lfSx7aGlnaFdhdGVyTWFyazoxMDAsc2l6ZTp0PT50Lml0ZW1zLmxlbmd0aH0pfWdldFRleHRDb250ZW50KHQ9e30pe2lmKHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYSlyZXR1cm4gdGhpcy5nZXRYZmEoKS50aGVuKCh0PT5feGZhX3RleHQuWGZhVGV4dC50ZXh0Q29udGVudCh0KSkpO2NvbnN0IGU9dGhpcy5zdHJlYW1UZXh0Q29udGVudCh0KTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscyl7Y29uc3QgaT1lLmdldFJlYWRlcigpLG49e2l0ZW1zOltdLHN0eWxlczpPYmplY3QuY3JlYXRlKG51bGwpfTshZnVuY3Rpb24gcHVtcCgpe2kucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKHt2YWx1ZTplLGRvbmU6c30pe2lmKHMpdChuKTtlbHNle09iamVjdC5hc3NpZ24obi5zdHlsZXMsZS5zdHlsZXMpO24uaXRlbXMucHVzaCguLi5lLml0ZW1zKTtwdW1wKCl9fSkscyl9KCl9KSl9Z2V0U3RydWN0VHJlZSgpe3JldHVybiB0aGlzLl9zdHJ1Y3RUcmVlUHJvbWlzZXx8PXRoaXMuX3RyYW5zcG9ydC5nZXRTdHJ1Y3RUcmVlKHRoaXMuX3BhZ2VJbmRleCl9X2Rlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMDtjb25zdCB0PVtdO2Zvcihjb25zdCBlIG9mIHRoaXMuX2ludGVudFN0YXRlcy52YWx1ZXMoKSl7dGhpcy5fYWJvcnRPcGVyYXRvckxpc3Qoe2ludGVudFN0YXRlOmUscmVhc29uOm5ldyBFcnJvcigiUGFnZSB3YXMgZGVzdHJveWVkLiIpLGZvcmNlOiEwfSk7aWYoIWUub3BMaXN0UmVhZENhcGFiaWxpdHkpZm9yKGNvbnN0IHMgb2YgZS5yZW5kZXJUYXNrcyl7dC5wdXNoKHMuY29tcGxldGVkKTtzLmNhbmNlbCgpfX10aGlzLm9ianMuY2xlYXIoKTtmb3IoY29uc3QgdCBvZiB0aGlzLl9iaXRtYXBzKXQuY2xvc2UoKTt0aGlzLl9iaXRtYXBzLmNsZWFyKCk7dGhpcy5fYW5ub3RhdGlvblByb21pc2VzLmNsZWFyKCk7dGhpcy5fanNBY3Rpb25zUHJvbWlzZT1udWxsO3RoaXMuX3N0cnVjdFRyZWVQcm9taXNlPW51bGw7dGhpcy5wZW5kaW5nQ2xlYW51cD0hMTtyZXR1cm4gUHJvbWlzZS5hbGwodCl9Y2xlYW51cCh0PSExKXt0aGlzLnBlbmRpbmdDbGVhbnVwPSEwO3JldHVybiB0aGlzLl90cnlDbGVhbnVwKHQpfV90cnlDbGVhbnVwKHQ9ITEpe2lmKCF0aGlzLnBlbmRpbmdDbGVhbnVwKXJldHVybiExO2Zvcihjb25zdHtyZW5kZXJUYXNrczp0LG9wZXJhdG9yTGlzdDplfW9mIHRoaXMuX2ludGVudFN0YXRlcy52YWx1ZXMoKSlpZih0LnNpemU+MHx8IWUubGFzdENodW5rKXJldHVybiExO3RoaXMuX2ludGVudFN0YXRlcy5jbGVhcigpO3RoaXMub2Jqcy5jbGVhcigpO3RoaXMuX2Fubm90YXRpb25Qcm9taXNlcy5jbGVhcigpO3RoaXMuX2pzQWN0aW9uc1Byb21pc2U9bnVsbDt0aGlzLl9zdHJ1Y3RUcmVlUHJvbWlzZT1udWxsO3QmJnRoaXMuX3N0YXRzJiYodGhpcy5fc3RhdHM9bmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcik7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fYml0bWFwcyl0LmNsb3NlKCk7dGhpcy5fYml0bWFwcy5jbGVhcigpO3RoaXMucGVuZGluZ0NsZWFudXA9ITE7cmV0dXJuITB9X3N0YXJ0UmVuZGVyUGFnZSh0LGUpe2NvbnN0IHM9dGhpcy5faW50ZW50U3RhdGVzLmdldChlKTtpZihzKXt0aGlzLl9zdGF0cz8udGltZUVuZCgiUGFnZSBSZXF1ZXN0Iik7cy5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5Py5yZXNvbHZlKHQpfX1fcmVuZGVyUGFnZUNodW5rKHQsZSl7Zm9yKGxldCBzPTAsaT10Lmxlbmd0aDtzPGk7cysrKXtlLm9wZXJhdG9yTGlzdC5mbkFycmF5LnB1c2godC5mbkFycmF5W3NdKTtlLm9wZXJhdG9yTGlzdC5hcmdzQXJyYXkucHVzaCh0LmFyZ3NBcnJheVtzXSl9ZS5vcGVyYXRvckxpc3QubGFzdENodW5rPXQubGFzdENodW5rO2Uub3BlcmF0b3JMaXN0LnNlcGFyYXRlQW5ub3RzPXQuc2VwYXJhdGVBbm5vdHM7Zm9yKGNvbnN0IHQgb2YgZS5yZW5kZXJUYXNrcyl0Lm9wZXJhdG9yTGlzdENoYW5nZWQoKTt0Lmxhc3RDaHVuayYmdGhpcy5fdHJ5Q2xlYW51cCgpfV9wdW1wT3BlcmF0b3JMaXN0KHtyZW5kZXJpbmdJbnRlbnQ6dCxjYWNoZUtleTplLGFubm90YXRpb25TdG9yYWdlTWFwOnN9KXtjb25zdCBpPXRoaXMuX3RyYW5zcG9ydC5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0T3BlcmF0b3JMaXN0Iix7cGFnZUluZGV4OnRoaXMuX3BhZ2VJbmRleCxpbnRlbnQ6dCxjYWNoZUtleTplLGFubm90YXRpb25TdG9yYWdlOnN9KS5nZXRSZWFkZXIoKSxuPXRoaXMuX2ludGVudFN0YXRlcy5nZXQoZSk7bi5zdHJlYW1SZWFkZXI9aTtjb25zdCBwdW1wPSgpPT57aS5yZWFkKCkudGhlbigoKHt2YWx1ZTp0LGRvbmU6ZX0pPT57aWYoZSluLnN0cmVhbVJlYWRlcj1udWxsO2Vsc2UgaWYoIXRoaXMuX3RyYW5zcG9ydC5kZXN0cm95ZWQpe3RoaXMuX3JlbmRlclBhZ2VDaHVuayh0LG4pO3B1bXAoKX19KSwodD0+e24uc3RyZWFtUmVhZGVyPW51bGw7aWYoIXRoaXMuX3RyYW5zcG9ydC5kZXN0cm95ZWQpe2lmKG4ub3BlcmF0b3JMaXN0KXtuLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bms9ITA7Zm9yKGNvbnN0IHQgb2Ygbi5yZW5kZXJUYXNrcyl0Lm9wZXJhdG9yTGlzdENoYW5nZWQoKTt0aGlzLl90cnlDbGVhbnVwKCl9aWYobi5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KW4uZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QodCk7ZWxzZXtpZighbi5vcExpc3RSZWFkQ2FwYWJpbGl0eSl0aHJvdyB0O24ub3BMaXN0UmVhZENhcGFiaWxpdHkucmVqZWN0KHQpfX19KSl9O3B1bXAoKX1fYWJvcnRPcGVyYXRvckxpc3Qoe2ludGVudFN0YXRlOnQscmVhc29uOmUsZm9yY2U6cz0hMX0pe2lmKHQuc3RyZWFtUmVhZGVyKXtpZighcyl7aWYodC5yZW5kZXJUYXNrcy5zaXplPjApcmV0dXJuO2lmKGUgaW5zdGFuY2VvZiBfZGlzcGxheV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24pe3Quc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dD1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtpbnRlbnRTdGF0ZTp0LHJlYXNvbjplLGZvcmNlOiEwfSk7dC5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0PW51bGx9KSxSRU5ERVJJTkdfQ0FOQ0VMTEVEX1RJTUVPVVQpO3JldHVybn19dC5zdHJlYW1SZWFkZXIuY2FuY2VsKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihlLm1lc3NhZ2UpKS5jYXRjaCgoKCk9Pnt9KSk7dC5zdHJlYW1SZWFkZXI9bnVsbDtpZighdGhpcy5fdHJhbnNwb3J0LmRlc3Ryb3llZCl7Zm9yKGNvbnN0W2Usc11vZiB0aGlzLl9pbnRlbnRTdGF0ZXMpaWYocz09PXQpe3RoaXMuX2ludGVudFN0YXRlcy5kZWxldGUoZSk7YnJlYWt9dGhpcy5jbGVhbnVwKCl9fX1nZXQgc3RhdHMoKXtyZXR1cm4gdGhpcy5fc3RhdHN9fWV4cG9ydHMuUERGUGFnZVByb3h5PVBERlBhZ2VQcm94eTtjbGFzcyBMb29wYmFja1BvcnR7I2U9W107I3M9UHJvbWlzZS5yZXNvbHZlKCk7cG9zdE1lc3NhZ2UodCxlKXtjb25zdCBzPXtkYXRhOnN0cnVjdHVyZWRDbG9uZSh0LGUpfTt0aGlzLiNzLnRoZW4oKCgpPT57Zm9yKGNvbnN0IHQgb2YgdGhpcy4jZSl0LmNhbGwodGhpcyxzKX0pKX1hZGRFdmVudExpc3RlbmVyKHQsZSl7dGhpcy4jZS5wdXNoKGUpfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxlKXtjb25zdCBzPXRoaXMuI2UuaW5kZXhPZihlKTt0aGlzLiNlLnNwbGljZShzLDEpfXRlcm1pbmF0ZSgpe3RoaXMuI2UubGVuZ3RoPTB9fWV4cG9ydHMuTG9vcGJhY2tQb3J0PUxvb3BiYWNrUG9ydDtjb25zdCBQREZXb3JrZXJVdGlsPXtpc1dvcmtlckRpc2FibGVkOiExLGZhbGxiYWNrV29ya2VyU3JjOm51bGwsZmFrZVdvcmtlcklkOjB9O2V4cG9ydHMuUERGV29ya2VyVXRpbD1QREZXb3JrZXJVdGlsO2lmKF9pc19ub2RlLmlzTm9kZUpTJiYiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSl7UERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkPSEwO1BERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmM9Ii4vcGRmLndvcmtlci5qcyJ9ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50KXtjb25zdCB0PWRvY3VtZW50Py5jdXJyZW50U2NyaXB0Py5zcmM7dCYmKFBERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmM9dC5yZXBsYWNlKC8oXC4oPzptaW5cLik/anMpKFw/LiopPyQvaSwiLndvcmtlciQxJDIiKSl9UERGV29ya2VyVXRpbC5pc1NhbWVPcmlnaW49ZnVuY3Rpb24odCxlKXtsZXQgczt0cnl7cz1uZXcgVVJMKHQpO2lmKCFzLm9yaWdpbnx8Im51bGwiPT09cy5vcmlnaW4pcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9Y29uc3QgaT1uZXcgVVJMKGUscyk7cmV0dXJuIHMub3JpZ2luPT09aS5vcmlnaW59O1BERldvcmtlclV0aWwuY3JlYXRlQ0ROV3JhcHBlcj1mdW5jdGlvbih0KXtjb25zdCBlPWBpbXBvcnRTY3JpcHRzKCIke3R9Iik7YDtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZV0pKX07Y2xhc3MgUERGV29ya2Vye3N0YXRpYyNpPW5ldyBXZWFrTWFwO2NvbnN0cnVjdG9yKHtuYW1lOnQ9bnVsbCxwb3J0OmU9bnVsbCx2ZXJib3NpdHk6cz0oMCxfdXRpbC5nZXRWZXJib3NpdHlMZXZlbCkoKX09e30pe2lmKGUmJlBERldvcmtlci4jaS5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgUERGV29ya2VyIHBlciBwb3J0LiIpO3RoaXMubmFtZT10O3RoaXMuZGVzdHJveWVkPSExO3RoaXMudmVyYm9zaXR5PXM7dGhpcy5fcmVhZHlDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuX3BvcnQ9bnVsbDt0aGlzLl93ZWJXb3JrZXI9bnVsbDt0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsO2lmKGUpe1BERldvcmtlci4jaS5zZXQoZSx0aGlzKTt0aGlzLl9pbml0aWFsaXplRnJvbVBvcnQoZSl9ZWxzZSB0aGlzLl9pbml0aWFsaXplKCl9Z2V0IHByb21pc2UoKXtyZXR1cm4gdGhpcy5fcmVhZHlDYXBhYmlsaXR5LnByb21pc2V9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fcG9ydH1nZXQgbWVzc2FnZUhhbmRsZXIoKXtyZXR1cm4gdGhpcy5fbWVzc2FnZUhhbmRsZXJ9X2luaXRpYWxpemVGcm9tUG9ydCh0KXt0aGlzLl9wb3J0PXQ7dGhpcy5fbWVzc2FnZUhhbmRsZXI9bmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoIm1haW4iLCJ3b3JrZXIiLHQpO3RoaXMuX21lc3NhZ2VIYW5kbGVyLm9uKCJyZWFkeSIsKGZ1bmN0aW9uKCl7fSkpO3RoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCk7dGhpcy5fbWVzc2FnZUhhbmRsZXIuc2VuZCgiY29uZmlndXJlIix7dmVyYm9zaXR5OnRoaXMudmVyYm9zaXR5fSl9X2luaXRpYWxpemUoKXtpZighUERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkJiYhUERGV29ya2VyLl9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIpe2xldHt3b3JrZXJTcmM6dH09UERGV29ya2VyO3RyeXtQREZXb3JrZXJVdGlsLmlzU2FtZU9yaWdpbih3aW5kb3cubG9jYXRpb24uaHJlZix0KXx8KHQ9UERGV29ya2VyVXRpbC5jcmVhdGVDRE5XcmFwcGVyKG5ldyBVUkwodCx3aW5kb3cubG9jYXRpb24pLmhyZWYpKTtjb25zdCBlPW5ldyBXb3JrZXIodCkscz1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcigibWFpbiIsIndvcmtlciIsZSksdGVybWluYXRlRWFybHk9KCk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixvbldvcmtlckVycm9yKTtzLmRlc3Ryb3koKTtlLnRlcm1pbmF0ZSgpO3RoaXMuZGVzdHJveWVkP3RoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTp0aGlzLl9zZXR1cEZha2VXb3JrZXIoKX0sb25Xb3JrZXJFcnJvcj0oKT0+e3RoaXMuX3dlYldvcmtlcnx8dGVybWluYXRlRWFybHkoKX07ZS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsb25Xb3JrZXJFcnJvcik7cy5vbigidGVzdCIsKHQ9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixvbldvcmtlckVycm9yKTtpZih0aGlzLmRlc3Ryb3llZCl0ZXJtaW5hdGVFYXJseSgpO2Vsc2UgaWYodCl7dGhpcy5fbWVzc2FnZUhhbmRsZXI9czt0aGlzLl9wb3J0PWU7dGhpcy5fd2ViV29ya2VyPWU7dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKTtzLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0aGlzLnZlcmJvc2l0eX0pfWVsc2V7dGhpcy5fc2V0dXBGYWtlV29ya2VyKCk7cy5kZXN0cm95KCk7ZS50ZXJtaW5hdGUoKX19KSk7cy5vbigicmVhZHkiLCh0PT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsb25Xb3JrZXJFcnJvcik7aWYodGhpcy5kZXN0cm95ZWQpdGVybWluYXRlRWFybHkoKTtlbHNlIHRyeXtzZW5kVGVzdCgpfWNhdGNoKHQpe3RoaXMuX3NldHVwRmFrZVdvcmtlcigpfX0pKTtjb25zdCBzZW5kVGVzdD0oKT0+e2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXk7cy5zZW5kKCJ0ZXN0Iix0LFt0LmJ1ZmZlcl0pfTtzZW5kVGVzdCgpO3JldHVybn1jYXRjaCh0KXsoMCxfdXRpbC5pbmZvKSgiVGhlIHdvcmtlciBoYXMgYmVlbiBkaXNhYmxlZC4iKX19dGhpcy5fc2V0dXBGYWtlV29ya2VyKCl9X3NldHVwRmFrZVdvcmtlcigpe2lmKCFQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQpeygwLF91dGlsLndhcm4pKCJTZXR0aW5nIHVwIGZha2Ugd29ya2VyLiIpO1BERldvcmtlclV0aWwuaXNXb3JrZXJEaXNhYmxlZD0hMH1QREZXb3JrZXIuX3NldHVwRmFrZVdvcmtlckdsb2JhbC50aGVuKCh0PT57aWYodGhpcy5kZXN0cm95ZWQpe3RoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTtyZXR1cm59Y29uc3QgZT1uZXcgTG9vcGJhY2tQb3J0O3RoaXMuX3BvcnQ9ZTtjb25zdCBzPSJmYWtlIitQREZXb3JrZXJVdGlsLmZha2VXb3JrZXJJZCsrLGk9bmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIocysiX3dvcmtlciIscyxlKTt0LnNldHVwKGksZSk7Y29uc3Qgbj1uZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihzLHMrIl93b3JrZXIiLGUpO3RoaXMuX21lc3NhZ2VIYW5kbGVyPW47dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKTtuLnNlbmQoImNvbmZpZ3VyZSIse3ZlcmJvc2l0eTp0aGlzLnZlcmJvc2l0eX0pfSkpLmNhdGNoKCh0PT57dGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoYFNldHRpbmcgdXAgZmFrZSB3b3JrZXIgZmFpbGVkOiAiJHt0Lm1lc3NhZ2V9Ii5gKSl9KSl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwO2lmKHRoaXMuX3dlYldvcmtlcil7dGhpcy5fd2ViV29ya2VyLnRlcm1pbmF0ZSgpO3RoaXMuX3dlYldvcmtlcj1udWxsfVBERldvcmtlci4jaS5kZWxldGUodGhpcy5fcG9ydCk7dGhpcy5fcG9ydD1udWxsO2lmKHRoaXMuX21lc3NhZ2VIYW5kbGVyKXt0aGlzLl9tZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7dGhpcy5fbWVzc2FnZUhhbmRsZXI9bnVsbH19c3RhdGljIGZyb21Qb3J0KHQpe2lmKCF0Py5wb3J0KXRocm93IG5ldyBFcnJvcigiUERGV29ya2VyLmZyb21Qb3J0IC0gaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlLiIpO3JldHVybiB0aGlzLiNpLmhhcyh0LnBvcnQpP3RoaXMuI2kuZ2V0KHQucG9ydCk6bmV3IFBERldvcmtlcih0KX1zdGF0aWMgZ2V0IHdvcmtlclNyYygpe2lmKF93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYylyZXR1cm4gX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjO2lmKG51bGwhPT1QREZXb3JrZXJVdGlsLmZhbGxiYWNrV29ya2VyU3JjKXtfaXNfbm9kZS5pc05vZGVKU3x8KDAsX2Rpc3BsYXlfdXRpbHMuZGVwcmVjYXRlZCkoJ05vICJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyIgc3BlY2lmaWVkLicpO3JldHVybiBQREZXb3JrZXJVdGlsLmZhbGxiYWNrV29ya2VyU3JjfXRocm93IG5ldyBFcnJvcignTm8gIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjIiBzcGVjaWZpZWQuJyl9c3RhdGljIGdldCBfbWFpblRocmVhZFdvcmtlck1lc3NhZ2VIYW5kbGVyKCl7dHJ5e3JldHVybiBnbG9iYWxUaGlzLnBkZmpzV29ya2VyPy5Xb3JrZXJNZXNzYWdlSGFuZGxlcnx8bnVsbH1jYXRjaCh0KXtyZXR1cm4gbnVsbH19c3RhdGljIGdldCBfc2V0dXBGYWtlV29ya2VyR2xvYmFsKCl7Y29uc3QgbG9hZGVyPWFzeW5jKCk9Pntjb25zdCBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXI9dGhpcy5fbWFpblRocmVhZFdvcmtlck1lc3NhZ2VIYW5kbGVyO2lmKG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcilyZXR1cm4gbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyO2lmKF9pc19ub2RlLmlzTm9kZUpTJiYiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSl7Y29uc3Qgd29ya2VyPWV2YWwoInJlcXVpcmUiKSh0aGlzLndvcmtlclNyYyk7cmV0dXJuIHdvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcn1hd2FpdCgwLF9kaXNwbGF5X3V0aWxzLmxvYWRTY3JpcHQpKHRoaXMud29ya2VyU3JjKTtyZXR1cm4gd2luZG93LnBkZmpzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyfTtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsIl9zZXR1cEZha2VXb3JrZXJHbG9iYWwiLGxvYWRlcigpKX19ZXhwb3J0cy5QREZXb3JrZXI9UERGV29ya2VyO2NsYXNzIFdvcmtlclRyYW5zcG9ydHsjbj1udWxsOyNyPW5ldyBNYXA7I2E9bmV3IE1hcDsjbz1udWxsO2NvbnN0cnVjdG9yKHQsZSxzLGkpe3RoaXMubWVzc2FnZUhhbmRsZXI9dDt0aGlzLmxvYWRpbmdUYXNrPWU7dGhpcy5jb21tb25PYmpzPW5ldyBQREZPYmplY3RzO3RoaXMuZm9udExvYWRlcj1uZXcgX2ZvbnRfbG9hZGVyLkZvbnRMb2FkZXIoe29uVW5zdXBwb3J0ZWRGZWF0dXJlOnRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlLmJpbmQodGhpcyksb3duZXJEb2N1bWVudDppLm93bmVyRG9jdW1lbnQsc3R5bGVFbGVtZW50Omkuc3R5bGVFbGVtZW50fSk7dGhpcy5fcGFyYW1zPWk7aWYoIWkudXNlV29ya2VyRmV0Y2gpe3RoaXMuQ01hcFJlYWRlckZhY3Rvcnk9bmV3IGkuQ01hcFJlYWRlckZhY3Rvcnkoe2Jhc2VVcmw6aS5jTWFwVXJsLGlzQ29tcHJlc3NlZDppLmNNYXBQYWNrZWR9KTt0aGlzLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5PW5ldyBpLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5KHtiYXNlVXJsOmkuc3RhbmRhcmRGb250RGF0YVVybH0pfXRoaXMuZGVzdHJveWVkPSExO3RoaXMuZGVzdHJveUNhcGFiaWxpdHk9bnVsbDt0aGlzLl9wYXNzd29yZENhcGFiaWxpdHk9bnVsbDt0aGlzLl9uZXR3b3JrU3RyZWFtPXM7dGhpcy5fZnVsbFJlYWRlcj1udWxsO3RoaXMuX2xhc3RQcm9ncmVzcz1udWxsO3RoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eT0oMCxfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKX1nZXQgYW5ub3RhdGlvblN0b3JhZ2UoKXtyZXR1cm4oMCxfdXRpbC5zaGFkb3cpKHRoaXMsImFubm90YXRpb25TdG9yYWdlIixuZXcgX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZSl9Z2V0IHN0YXRzKCl7cmV0dXJuIHRoaXMuI259Z2V0UmVuZGVyaW5nSW50ZW50KHQsZT1fdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEUscz1udWxsLGk9ITEpe2xldCBuPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSxyPW51bGw7c3dpdGNoKHQpe2Nhc2UiYW55IjpuPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZO2JyZWFrO2Nhc2UiZGlzcGxheSI6YnJlYWs7Y2FzZSJwcmludCI6bj1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwud2FybikoYGdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgaW50ZW50OiAke3R9YCl9c3dpdGNoKGUpe2Nhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRElTQUJMRTpuKz1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0RJU0FCTEU7YnJlYWs7Y2FzZSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEU6YnJlYWs7Y2FzZSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEVfRk9STVM6bis9X3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUzticmVhaztjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkVOQUJMRV9TVE9SQUdFOm4rPV91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfU1RPUkFHRTtyPShuJl91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQmJnMgaW5zdGFuY2VvZiBfYW5ub3RhdGlvbl9zdG9yYWdlLlByaW50QW5ub3RhdGlvblN0b3JhZ2U/czp0aGlzLmFubm90YXRpb25TdG9yYWdlKS5zZXJpYWxpemFibGU7YnJlYWs7ZGVmYXVsdDooMCxfdXRpbC53YXJuKShgZ2V0UmVuZGVyaW5nSW50ZW50IC0gaW52YWxpZCBhbm5vdGF0aW9uTW9kZTogJHtlfWApfWkmJihuKz1fdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLk9QTElTVCk7cmV0dXJue3JlbmRlcmluZ0ludGVudDpuLGNhY2hlS2V5OmAke259XyR7X2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZS5nZXRIYXNoKHIpfWAsYW5ub3RhdGlvblN0b3JhZ2VNYXA6cn19ZGVzdHJveSgpe2lmKHRoaXMuZGVzdHJveUNhcGFiaWxpdHkpcmV0dXJuIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucHJvbWlzZTt0aGlzLmRlc3Ryb3llZD0hMDt0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSYmdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIGR1cmluZyBvblBhc3N3b3JkIGNhbGxiYWNrIikpO2NvbnN0IHQ9W107Zm9yKGNvbnN0IGUgb2YgdGhpcy4jci52YWx1ZXMoKSl0LnB1c2goZS5fZGVzdHJveSgpKTt0aGlzLiNyLmNsZWFyKCk7dGhpcy4jYS5jbGVhcigpO3RoaXMuaGFzT3duUHJvcGVydHkoImFubm90YXRpb25TdG9yYWdlIikmJnRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO2NvbnN0IGU9dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIlRlcm1pbmF0ZSIsbnVsbCk7dC5wdXNoKGUpO1Byb21pc2UuYWxsKHQpLnRoZW4oKCgpPT57dGhpcy5jb21tb25PYmpzLmNsZWFyKCk7dGhpcy5mb250TG9hZGVyLmNsZWFyKCk7dGhpcy4jbz1udWxsO3RoaXMuX2dldEZpZWxkT2JqZWN0c1Byb21pc2U9bnVsbDt0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlPW51bGw7dGhpcy5fbmV0d29ya1N0cmVhbSYmdGhpcy5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7aWYodGhpcy5tZXNzYWdlSGFuZGxlcil7dGhpcy5tZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7dGhpcy5tZXNzYWdlSGFuZGxlcj1udWxsfXRoaXMuZGVzdHJveUNhcGFiaWxpdHkucmVzb2x2ZSgpfSksdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5yZWplY3QpO3JldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2V9c2V0dXBNZXNzYWdlSGFuZGxlcigpe2NvbnN0e21lc3NhZ2VIYW5kbGVyOnQsbG9hZGluZ1Rhc2s6ZX09dGhpczt0Lm9uKCJHZXRSZWFkZXIiLCgodCxlKT0+eygwLF91dGlsLmFzc2VydCkodGhpcy5fbmV0d29ya1N0cmVhbSwiR2V0UmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS4iKTt0aGlzLl9mdWxsUmVhZGVyPXRoaXMuX25ldHdvcmtTdHJlYW0uZ2V0RnVsbFJlYWRlcigpO3RoaXMuX2Z1bGxSZWFkZXIub25Qcm9ncmVzcz10PT57dGhpcy5fbGFzdFByb2dyZXNzPXtsb2FkZWQ6dC5sb2FkZWQsdG90YWw6dC50b3RhbH19O2Uub25QdWxsPSgpPT57dGhpcy5fZnVsbFJlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oe3ZhbHVlOnQsZG9uZTpzfSl7aWYocyllLmNsb3NlKCk7ZWxzZXsoMCxfdXRpbC5hc3NlcnQpKCgwLF91dGlsLmlzQXJyYXlCdWZmZXIpKHQpLCJHZXRSZWFkZXIgLSBleHBlY3RlZCBhbiBBcnJheUJ1ZmZlci4iKTtlLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodCksMSxbdF0pfX0pKS5jYXRjaCgodD0+e2UuZXJyb3IodCl9KSl9O2Uub25DYW5jZWw9dD0+e3RoaXMuX2Z1bGxSZWFkZXIuY2FuY2VsKHQpO2UucmVhZHkuY2F0Y2goKHQ9PntpZighdGhpcy5kZXN0cm95ZWQpdGhyb3cgdH0pKX19KSk7dC5vbigiUmVhZGVySGVhZGVyc1JlYWR5IiwodD0+e2NvbnN0IHM9KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksaT10aGlzLl9mdWxsUmVhZGVyO2kuaGVhZGVyc1JlYWR5LnRoZW4oKCgpPT57aWYoIWkuaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fCFpLmlzUmFuZ2VTdXBwb3J0ZWQpe3RoaXMuX2xhc3RQcm9ncmVzcyYmZS5vblByb2dyZXNzPy4odGhpcy5fbGFzdFByb2dyZXNzKTtpLm9uUHJvZ3Jlc3M9dD0+e2Uub25Qcm9ncmVzcz8uKHtsb2FkZWQ6dC5sb2FkZWQsdG90YWw6dC50b3RhbH0pfX1zLnJlc29sdmUoe2lzU3RyZWFtaW5nU3VwcG9ydGVkOmkuaXNTdHJlYW1pbmdTdXBwb3J0ZWQsaXNSYW5nZVN1cHBvcnRlZDppLmlzUmFuZ2VTdXBwb3J0ZWQsY29udGVudExlbmd0aDppLmNvbnRlbnRMZW5ndGh9KX0pLHMucmVqZWN0KTtyZXR1cm4gcy5wcm9taXNlfSkpO3Qub24oIkdldFJhbmdlUmVhZGVyIiwoKHQsZSk9PnsoMCxfdXRpbC5hc3NlcnQpKHRoaXMuX25ldHdvcmtTdHJlYW0sIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS4iKTtjb25zdCBzPXRoaXMuX25ldHdvcmtTdHJlYW0uZ2V0UmFuZ2VSZWFkZXIodC5iZWdpbix0LmVuZCk7aWYocyl7ZS5vblB1bGw9KCk9PntzLnJlYWQoKS50aGVuKChmdW5jdGlvbih7dmFsdWU6dCxkb25lOnN9KXtpZihzKWUuY2xvc2UoKTtlbHNleygwLF91dGlsLmFzc2VydCkoKDAsX3V0aWwuaXNBcnJheUJ1ZmZlcikodCksIkdldFJhbmdlUmVhZGVyIC0gZXhwZWN0ZWQgYW4gQXJyYXlCdWZmZXIuIik7ZS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHQpLDEsW3RdKX19KSkuY2F0Y2goKHQ9PntlLmVycm9yKHQpfSkpfTtlLm9uQ2FuY2VsPXQ9PntzLmNhbmNlbCh0KTtlLnJlYWR5LmNhdGNoKCh0PT57aWYoIXRoaXMuZGVzdHJveWVkKXRocm93IHR9KSl9fWVsc2UgZS5jbG9zZSgpfSkpO3Qub24oIkdldERvYyIsKCh7cGRmSW5mbzp0fSk9Pnt0aGlzLl9udW1QYWdlcz10Lm51bVBhZ2VzO3RoaXMuX2h0bWxGb3JYZmE9dC5odG1sRm9yWGZhO2RlbGV0ZSB0Lmh0bWxGb3JYZmE7ZS5fY2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBQREZEb2N1bWVudFByb3h5KHQsdGhpcykpfSkpO3Qub24oIkRvY0V4Y2VwdGlvbiIsKGZ1bmN0aW9uKHQpe2xldCBzO3N3aXRjaCh0Lm5hbWUpe2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOnM9bmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSx0LmNvZGUpO2JyZWFrO2Nhc2UiSW52YWxpZFBERkV4Y2VwdGlvbiI6cz1uZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6cz1uZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2JyZWFrO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpzPW5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24odC5tZXNzYWdlLHQuc3RhdHVzKTticmVhaztjYXNlIlVua25vd25FcnJvckV4Y2VwdGlvbiI6cz1uZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSx0LmRldGFpbHMpO2JyZWFrO2RlZmF1bHQ6KDAsX3V0aWwudW5yZWFjaGFibGUpKCJEb2NFeGNlcHRpb24gLSBleHBlY3RlZCBhIHZhbGlkIEVycm9yLiIpfWUuX2NhcGFiaWxpdHkucmVqZWN0KHMpfSkpO3Qub24oIlBhc3N3b3JkUmVxdWVzdCIsKHQ9Pnt0aGlzLl9wYXNzd29yZENhcGFiaWxpdHk9KDAsX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7aWYoZS5vblBhc3N3b3JkKXtjb25zdCB1cGRhdGVQYXNzd29yZD10PT57dCBpbnN0YW5jZW9mIEVycm9yP3RoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QodCk6dGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlc29sdmUoe3Bhc3N3b3JkOnR9KX07dHJ5e2Uub25QYXNzd29yZCh1cGRhdGVQYXNzd29yZCx0LmNvZGUpfWNhdGNoKHQpe3RoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QodCl9fWVsc2UgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChuZXcgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24odC5tZXNzYWdlLHQuY29kZSkpO3JldHVybiB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucHJvbWlzZX0pKTt0Lm9uKCJEYXRhTG9hZGVkIiwodD0+e2Uub25Qcm9ncmVzcz8uKHtsb2FkZWQ6dC5sZW5ndGgsdG90YWw6dC5sZW5ndGh9KTt0aGlzLmRvd25sb2FkSW5mb0NhcGFiaWxpdHkucmVzb2x2ZSh0KX0pKTt0Lm9uKCJTdGFydFJlbmRlclBhZ2UiLCh0PT57aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO3RoaXMuI3IuZ2V0KHQucGFnZUluZGV4KS5fc3RhcnRSZW5kZXJQYWdlKHQudHJhbnNwYXJlbmN5LHQuY2FjaGVLZXkpfSkpO3Qub24oImNvbW1vbm9iaiIsKChbZSxzLGldKT0+e2lmKCF0aGlzLmRlc3Ryb3llZCYmIXRoaXMuY29tbW9uT2Jqcy5oYXMoZSkpc3dpdGNoKHMpe2Nhc2UiRm9udCI6Y29uc3Qgbj10aGlzLl9wYXJhbXM7aWYoImVycm9yImluIGkpe2NvbnN0IHQ9aS5lcnJvcjsoMCxfdXRpbC53YXJuKShgRXJyb3IgZHVyaW5nIGZvbnQgbG9hZGluZzogJHt0fWApO3RoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGUsdCk7YnJlYWt9bGV0IHI9bnVsbDtuLnBkZkJ1ZyYmZ2xvYmFsVGhpcy5Gb250SW5zcGVjdG9yPy5lbmFibGVkJiYocj17cmVnaXN0ZXJGb250KHQsZSl7Z2xvYmFsVGhpcy5Gb250SW5zcGVjdG9yLmZvbnRBZGRlZCh0LGUpfX0pO2NvbnN0IGE9bmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChpLHtpc0V2YWxTdXBwb3J0ZWQ6bi5pc0V2YWxTdXBwb3J0ZWQsZGlzYWJsZUZvbnRGYWNlOm4uZGlzYWJsZUZvbnRGYWNlLGlnbm9yZUVycm9yczpuLmlnbm9yZUVycm9ycyxvblVuc3VwcG9ydGVkRmVhdHVyZTp0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpLGZvbnRSZWdpc3RyeTpyfSk7dGhpcy5mb250TG9hZGVyLmJpbmQoYSkuY2F0Y2goKHM9PnQuc2VuZFdpdGhQcm9taXNlKCJGb250RmFsbGJhY2siLHtpZDplfSkpKS5maW5hbGx5KCgoKT0+eyFuLmZvbnRFeHRyYVByb3BlcnRpZXMmJmEuZGF0YSYmKGEuZGF0YT1udWxsKTt0aGlzLmNvbW1vbk9ianMucmVzb2x2ZShlLGEpfSkpO2JyZWFrO2Nhc2UiRm9udFBhdGgiOmNhc2UiSW1hZ2UiOnRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGUsaSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEdvdCB1bmtub3duIGNvbW1vbiBvYmplY3QgdHlwZSAke3N9YCl9fSkpO3Qub24oIm9iaiIsKChbdCxlLHMsaV0pPT57aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IG49dGhpcy4jci5nZXQoZSk7aWYoIW4ub2Jqcy5oYXModCkpc3dpdGNoKHMpe2Nhc2UiSW1hZ2UiOm4ub2Jqcy5yZXNvbHZlKHQsaSk7Y29uc3QgZT04ZTY7aWYoaSl7bGV0IHQ7aWYoaS5iaXRtYXApe2NvbnN0e2JpdG1hcDplLHdpZHRoOnMsaGVpZ2h0OnJ9PWk7dD1zKnIqNDtuLl9iaXRtYXBzLmFkZChlKX1lbHNlIHQ9aS5kYXRhPy5sZW5ndGh8fDA7dD5lJiYobi5jbGVhbnVwQWZ0ZXJSZW5kZXI9ITApfWJyZWFrO2Nhc2UiUGF0dGVybiI6bi5vYmpzLnJlc29sdmUodCxpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgR290IHVua25vd24gb2JqZWN0IHR5cGUgJHtzfWApfX0pKTt0Lm9uKCJEb2NQcm9ncmVzcyIsKHQ9Pnt0aGlzLmRlc3Ryb3llZHx8ZS5vblByb2dyZXNzPy4oe2xvYWRlZDp0LmxvYWRlZCx0b3RhbDp0LnRvdGFsfSl9KSk7dC5vbigiRG9jU3RhdHMiLCh0PT57dGhpcy5kZXN0cm95ZWR8fCh0aGlzLiNuPU9iamVjdC5mcmVlemUoe3N0cmVhbVR5cGVzOk9iamVjdC5mcmVlemUodC5zdHJlYW1UeXBlcyksZm9udFR5cGVzOk9iamVjdC5mcmVlemUodC5mb250VHlwZXMpfSkpfSkpO3Qub24oIlVuc3VwcG9ydGVkRmVhdHVyZSIsdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSk7dC5vbigiRmV0Y2hCdWlsdEluQ01hcCIsKHQ9PnRoaXMuZGVzdHJveWVkP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQuIikpOnRoaXMuQ01hcFJlYWRlckZhY3Rvcnk/dGhpcy5DTWFwUmVhZGVyRmFjdG9yeS5mZXRjaCh0KTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNNYXBSZWFkZXJGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci4iKSkpKTt0Lm9uKCJGZXRjaFN0YW5kYXJkRm9udERhdGEiLCh0PT50aGlzLmRlc3Ryb3llZD9Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkLiIpKTp0aGlzLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5P3RoaXMuU3RhbmRhcmRGb250RGF0YUZhY3RvcnkuZmV0Y2godCk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSBub3QgaW5pdGlhbGl6ZWQsIHNlZSB0aGUgYHVzZVdvcmtlckZldGNoYCBwYXJhbWV0ZXIuIikpKSl9X29uVW5zdXBwb3J0ZWRGZWF0dXJlKHtmZWF0dXJlSWQ6dH0pe3RoaXMuZGVzdHJveWVkfHx0aGlzLmxvYWRpbmdUYXNrLm9uVW5zdXBwb3J0ZWRGZWF0dXJlPy4odCl9Z2V0RGF0YSgpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGF0YSIsbnVsbCl9c2F2ZURvY3VtZW50KCl7dGhpcy5hbm5vdGF0aW9uU3RvcmFnZS5zaXplPD0wJiYoMCxfdXRpbC53YXJuKSgic2F2ZURvY3VtZW50IGNhbGxlZCB3aGlsZSBgYW5ub3RhdGlvblN0b3JhZ2VgIGlzIGVtcHR5LCBwbGVhc2UgdXNlIHRoZSBnZXREYXRhLW1ldGhvZCBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiU2F2ZURvY3VtZW50Iix7aXNQdXJlWGZhOiEhdGhpcy5faHRtbEZvclhmYSxudW1QYWdlczp0aGlzLl9udW1QYWdlcyxhbm5vdGF0aW9uU3RvcmFnZTp0aGlzLmFubm90YXRpb25TdG9yYWdlLnNlcmlhbGl6YWJsZSxmaWxlbmFtZTp0aGlzLl9mdWxsUmVhZGVyPy5maWxlbmFtZT8/bnVsbH0pLmZpbmFsbHkoKCgpPT57dGhpcy5hbm5vdGF0aW9uU3RvcmFnZS5yZXNldE1vZGlmaWVkKCl9KSl9Z2V0UGFnZSh0KXtpZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDw9MHx8dD50aGlzLl9udW1QYWdlcylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJJbnZhbGlkIHBhZ2UgcmVxdWVzdC4iKSk7Y29uc3QgZT10LTEscz10aGlzLiNhLmdldChlKTtpZihzKXJldHVybiBzO2NvbnN0IGk9dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2UiLHtwYWdlSW5kZXg6ZX0pLnRoZW4oKHQ9PntpZih0aGlzLmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRyYW5zcG9ydCBkZXN0cm95ZWQiKTtjb25zdCBzPW5ldyBQREZQYWdlUHJveHkoZSx0LHRoaXMsdGhpcy5fcGFyYW1zLm93bmVyRG9jdW1lbnQsdGhpcy5fcGFyYW1zLnBkZkJ1Zyk7dGhpcy4jci5zZXQoZSxzKTtyZXR1cm4gc30pKTt0aGlzLiNhLnNldChlLGkpO3JldHVybiBpfWdldFBhZ2VJbmRleCh0KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIHR8fG51bGw9PT10fHwhTnVtYmVyLmlzSW50ZWdlcih0Lm51bSl8fHQubnVtPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuZ2VuKXx8dC5nZW48MD9Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkludmFsaWQgcGFnZUluZGV4IHJlcXVlc3QuIikpOnRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlSW5kZXgiLHtudW06dC5udW0sZ2VuOnQuZ2VufSl9Z2V0QW5ub3RhdGlvbnModCxlKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldEFubm90YXRpb25zIix7cGFnZUluZGV4OnQsaW50ZW50OmV9KX1nZXRGaWVsZE9iamVjdHMoKXtyZXR1cm4gdGhpcy5fZ2V0RmllbGRPYmplY3RzUHJvbWlzZXx8PXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRGaWVsZE9iamVjdHMiLG51bGwpfWhhc0pTQWN0aW9ucygpe3JldHVybiB0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlfHw9dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkhhc0pTQWN0aW9ucyIsbnVsbCl9Z2V0Q2FsY3VsYXRpb25PcmRlcklkcygpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCl9Z2V0RGVzdGluYXRpb25zKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXREZXN0aW5hdGlvbnMiLG51bGwpfWdldERlc3RpbmF0aW9uKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdD9Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkludmFsaWQgZGVzdGluYXRpb24gcmVxdWVzdC4iKSk6dGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERlc3RpbmF0aW9uIix7aWQ6dH0pfWdldFBhZ2VMYWJlbHMoKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VMYWJlbHMiLG51bGwpfWdldFBhZ2VMYXlvdXQoKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VMYXlvdXQiLG51bGwpfWdldFBhZ2VNb2RlKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlTW9kZSIsbnVsbCl9Z2V0Vmlld2VyUHJlZmVyZW5jZXMoKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFZpZXdlclByZWZlcmVuY2VzIixudWxsKX1nZXRPcGVuQWN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRPcGVuQWN0aW9uIixudWxsKX1nZXRBdHRhY2htZW50cygpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0QXR0YWNobWVudHMiLG51bGwpfWdldEphdmFTY3JpcHQoKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldEphdmFTY3JpcHQiLG51bGwpfWdldERvY0pTQWN0aW9ucygpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RG9jSlNBY3Rpb25zIixudWxsKX1nZXRQYWdlSlNBY3Rpb25zKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUpTQWN0aW9ucyIse3BhZ2VJbmRleDp0fSl9Z2V0U3RydWN0VHJlZSh0KXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFN0cnVjdFRyZWUiLHtwYWdlSW5kZXg6dH0pfWdldE91dGxpbmUoKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE91dGxpbmUiLG51bGwpfWdldE9wdGlvbmFsQ29udGVudENvbmZpZygpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKS50aGVuKCh0PT5uZXcgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnLk9wdGlvbmFsQ29udGVudENvbmZpZyh0KSkpfWdldFBlcm1pc3Npb25zKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQZXJtaXNzaW9ucyIsbnVsbCl9Z2V0TWV0YWRhdGEoKXtyZXR1cm4gdGhpcy4jb3x8PXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRNZXRhZGF0YSIsbnVsbCkudGhlbigodD0+KHtpbmZvOnRbMF0sbWV0YWRhdGE6dFsxXT9uZXcgX21ldGFkYXRhLk1ldGFkYXRhKHRbMV0pOm51bGwsY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6dGhpcy5fZnVsbFJlYWRlcj8uZmlsZW5hbWU/P251bGwsY29udGVudExlbmd0aDp0aGlzLl9mdWxsUmVhZGVyPy5jb250ZW50TGVuZ3RoPz9udWxsfSkpKX1nZXRNYXJrSW5mbygpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0TWFya0luZm8iLG51bGwpfWFzeW5jIHN0YXJ0Q2xlYW51cCh0PSExKXtpZighdGhpcy5kZXN0cm95ZWQpe2F3YWl0IHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJDbGVhbnVwIixudWxsKTtmb3IoY29uc3QgdCBvZiB0aGlzLiNyLnZhbHVlcygpKXtpZighdC5jbGVhbnVwKCkpdGhyb3cgbmV3IEVycm9yKGBzdGFydENsZWFudXA6IFBhZ2UgJHt0LnBhZ2VOdW1iZXJ9IGlzIGN1cnJlbnRseSByZW5kZXJpbmcuYCl9dGhpcy5jb21tb25PYmpzLmNsZWFyKCk7dHx8dGhpcy5mb250TG9hZGVyLmNsZWFyKCk7dGhpcy4jbz1udWxsO3RoaXMuX2dldEZpZWxkT2JqZWN0c1Byb21pc2U9bnVsbDt0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlPW51bGx9fWdldCBsb2FkaW5nUGFyYW1zKCl7Y29uc3QgdD10aGlzLl9wYXJhbXM7cmV0dXJuKDAsX3V0aWwuc2hhZG93KSh0aGlzLCJsb2FkaW5nUGFyYW1zIix7ZGlzYWJsZUF1dG9GZXRjaDp0LmRpc2FibGVBdXRvRmV0Y2gsZW5hYmxlWGZhOnQuZW5hYmxlWGZhfSl9fWNsYXNzIFBERk9iamVjdHN7I2w9T2JqZWN0LmNyZWF0ZShudWxsKTsjYyh0KXtjb25zdCBlPXRoaXMuI2xbdF07cmV0dXJuIGV8fCh0aGlzLiNsW3RdPXtjYXBhYmlsaXR5OigwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGRhdGE6bnVsbH0pfWdldCh0LGU9bnVsbCl7aWYoZSl7Y29uc3Qgcz10aGlzLiNjKHQpO3MuY2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCgpPT5lKHMuZGF0YSkpKTtyZXR1cm4gbnVsbH1jb25zdCBzPXRoaXMuI2xbdF07aWYoIXM/LmNhcGFiaWxpdHkuc2V0dGxlZCl0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3Rpbmcgb2JqZWN0IHRoYXQgaXNuJ3QgcmVzb2x2ZWQgeWV0ICR7dH0uYCk7cmV0dXJuIHMuZGF0YX1oYXModCl7cmV0dXJuIHRoaXMuI2xbdF0/LmNhcGFiaWxpdHkuc2V0dGxlZHx8ITF9cmVzb2x2ZSh0LGU9bnVsbCl7Y29uc3Qgcz10aGlzLiNjKHQpO3MuZGF0YT1lO3MuY2FwYWJpbGl0eS5yZXNvbHZlKCl9Y2xlYXIoKXt0aGlzLiNsPU9iamVjdC5jcmVhdGUobnVsbCl9fWNsYXNzIFJlbmRlclRhc2t7I2g9bnVsbDtjb25zdHJ1Y3Rvcih0KXt0aGlzLiNoPXQ7dGhpcy5vbkNvbnRpbnVlPW51bGx9Z2V0IHByb21pc2UoKXtyZXR1cm4gdGhpcy4jaC5jYXBhYmlsaXR5LnByb21pc2V9Y2FuY2VsKCl7dGhpcy4jaC5jYW5jZWwoKX1nZXQgc2VwYXJhdGVBbm5vdHMoKXtjb25zdHtzZXBhcmF0ZUFubm90czp0fT10aGlzLiNoLm9wZXJhdG9yTGlzdDtpZighdClyZXR1cm4hMTtjb25zdHthbm5vdGF0aW9uQ2FudmFzTWFwOmV9PXRoaXMuI2g7cmV0dXJuIHQuZm9ybXx8dC5jYW52YXMmJmU/LnNpemU+MH19ZXhwb3J0cy5SZW5kZXJUYXNrPVJlbmRlclRhc2s7Y2xhc3MgSW50ZXJuYWxSZW5kZXJUYXNre3N0YXRpYyNkPW5ldyBXZWFrU2V0O2NvbnN0cnVjdG9yKHtjYWxsYmFjazp0LHBhcmFtczplLG9ianM6cyxjb21tb25PYmpzOmksYW5ub3RhdGlvbkNhbnZhc01hcDpuLG9wZXJhdG9yTGlzdDpyLHBhZ2VJbmRleDphLGNhbnZhc0ZhY3Rvcnk6byx1c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bD0hMSxwZGZCdWc6Yz0hMSxwYWdlQ29sb3JzOmg9bnVsbH0pe3RoaXMuY2FsbGJhY2s9dDt0aGlzLnBhcmFtcz1lO3RoaXMub2Jqcz1zO3RoaXMuY29tbW9uT2Jqcz1pO3RoaXMuYW5ub3RhdGlvbkNhbnZhc01hcD1uO3RoaXMub3BlcmF0b3JMaXN0SWR4PW51bGw7dGhpcy5vcGVyYXRvckxpc3Q9cjt0aGlzLl9wYWdlSW5kZXg9YTt0aGlzLmNhbnZhc0ZhY3Rvcnk9bzt0aGlzLl9wZGZCdWc9Yzt0aGlzLnBhZ2VDb2xvcnM9aDt0aGlzLnJ1bm5pbmc9ITE7dGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2s9bnVsbDt0aGlzLmdyYXBoaWNzUmVhZHk9ITE7dGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lPSEwPT09bCYmInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c7dGhpcy5jYW5jZWxsZWQ9ITE7dGhpcy5jYXBhYmlsaXR5PSgwLF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMudGFzaz1uZXcgUmVuZGVyVGFzayh0aGlzKTt0aGlzLl9jYW5jZWxCb3VuZD10aGlzLmNhbmNlbC5iaW5kKHRoaXMpO3RoaXMuX2NvbnRpbnVlQm91bmQ9dGhpcy5fY29udGludWUuYmluZCh0aGlzKTt0aGlzLl9zY2hlZHVsZU5leHRCb3VuZD10aGlzLl9zY2hlZHVsZU5leHQuYmluZCh0aGlzKTt0aGlzLl9uZXh0Qm91bmQ9dGhpcy5fbmV4dC5iaW5kKHRoaXMpO3RoaXMuX2NhbnZhcz1lLmNhbnZhc0NvbnRleHQuY2FudmFzfWdldCBjb21wbGV0ZWQoKXtyZXR1cm4gdGhpcy5jYXBhYmlsaXR5LnByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfWluaXRpYWxpemVHcmFwaGljcyh7dHJhbnNwYXJlbmN5OnQ9ITEsb3B0aW9uYWxDb250ZW50Q29uZmlnOmV9KXtpZih0aGlzLmNhbmNlbGxlZClyZXR1cm47aWYodGhpcy5fY2FudmFzKXtpZihJbnRlcm5hbFJlbmRlclRhc2suI2QuaGFzKHRoaXMuX2NhbnZhcykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIHRoZSBzYW1lIGNhbnZhcyBkdXJpbmcgbXVsdGlwbGUgcmVuZGVyKCkgb3BlcmF0aW9ucy4gVXNlIGRpZmZlcmVudCBjYW52YXMgb3IgZW5zdXJlIHByZXZpb3VzIG9wZXJhdGlvbnMgd2VyZSBjYW5jZWxsZWQgb3IgY29tcGxldGVkLiIpO0ludGVybmFsUmVuZGVyVGFzay4jZC5hZGQodGhpcy5fY2FudmFzKX1pZih0aGlzLl9wZGZCdWcmJmdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXI/LmVuYWJsZWQpe3RoaXMuc3RlcHBlcj1nbG9iYWxUaGlzLlN0ZXBwZXJNYW5hZ2VyLmNyZWF0ZSh0aGlzLl9wYWdlSW5kZXgpO3RoaXMuc3RlcHBlci5pbml0KHRoaXMub3BlcmF0b3JMaXN0KTt0aGlzLnN0ZXBwZXIubmV4dEJyZWFrUG9pbnQ9dGhpcy5zdGVwcGVyLmdldE5leHRCcmVha1BvaW50KCl9Y29uc3R7Y2FudmFzQ29udGV4dDpzLHZpZXdwb3J0OmksdHJhbnNmb3JtOm4sYmFja2dyb3VuZDpyfT10aGlzLnBhcmFtczt0aGlzLmdmeD1uZXcgX2NhbnZhcy5DYW52YXNHcmFwaGljcyhzLHRoaXMuY29tbW9uT2Jqcyx0aGlzLm9ianMsdGhpcy5jYW52YXNGYWN0b3J5LGUsdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwLHRoaXMucGFnZUNvbG9ycyk7dGhpcy5nZnguYmVnaW5EcmF3aW5nKHt0cmFuc2Zvcm06bix2aWV3cG9ydDppLHRyYW5zcGFyZW5jeTp0LGJhY2tncm91bmQ6cn0pO3RoaXMub3BlcmF0b3JMaXN0SWR4PTA7dGhpcy5ncmFwaGljc1JlYWR5PSEwO3RoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrPy4oKX1jYW5jZWwodD1udWxsKXt0aGlzLnJ1bm5pbmc9ITE7dGhpcy5jYW5jZWxsZWQ9ITA7dGhpcy5nZng/LmVuZERyYXdpbmcoKTt0aGlzLl9jYW52YXMmJkludGVybmFsUmVuZGVyVGFzay4jZC5kZWxldGUodGhpcy5fY2FudmFzKTt0aGlzLmNhbGxiYWNrKHR8fG5ldyBfZGlzcGxheV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24oYFJlbmRlcmluZyBjYW5jZWxsZWQsIHBhZ2UgJHt0aGlzLl9wYWdlSW5kZXgrMX1gLCJjYW52YXMiKSl9b3BlcmF0b3JMaXN0Q2hhbmdlZCgpe2lmKHRoaXMuZ3JhcGhpY3NSZWFkeSl7dGhpcy5zdGVwcGVyPy51cGRhdGVPcGVyYXRvckxpc3QodGhpcy5vcGVyYXRvckxpc3QpO3RoaXMucnVubmluZ3x8dGhpcy5fY29udGludWUoKX1lbHNlIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrfHwodGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2s9dGhpcy5fY29udGludWVCb3VuZCl9X2NvbnRpbnVlKCl7dGhpcy5ydW5uaW5nPSEwO3RoaXMuY2FuY2VsbGVkfHwodGhpcy50YXNrLm9uQ29udGludWU/dGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpOnRoaXMuX3NjaGVkdWxlTmV4dCgpKX1fc2NoZWR1bGVOZXh0KCl7dGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5fbmV4dEJvdW5kKCkuY2F0Y2godGhpcy5fY2FuY2VsQm91bmQpfSkpOlByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5fbmV4dEJvdW5kKS5jYXRjaCh0aGlzLl9jYW5jZWxCb3VuZCl9YXN5bmMgX25leHQoKXtpZighdGhpcy5jYW5jZWxsZWQpe3RoaXMub3BlcmF0b3JMaXN0SWR4PXRoaXMuZ2Z4LmV4ZWN1dGVPcGVyYXRvckxpc3QodGhpcy5vcGVyYXRvckxpc3QsdGhpcy5vcGVyYXRvckxpc3RJZHgsdGhpcy5fY29udGludWVCb3VuZCx0aGlzLnN0ZXBwZXIpO2lmKHRoaXMub3BlcmF0b3JMaXN0SWR4PT09dGhpcy5vcGVyYXRvckxpc3QuYXJnc0FycmF5Lmxlbmd0aCl7dGhpcy5ydW5uaW5nPSExO2lmKHRoaXMub3BlcmF0b3JMaXN0Lmxhc3RDaHVuayl7dGhpcy5nZnguZW5kRHJhd2luZygpO3RoaXMuX2NhbnZhcyYmSW50ZXJuYWxSZW5kZXJUYXNrLiNkLmRlbGV0ZSh0aGlzLl9jYW52YXMpO3RoaXMuY2FsbGJhY2soKX19fX19Y29uc3QgdmVyc2lvbj0iMy4wLjI3OSI7ZXhwb3J0cy52ZXJzaW9uPXZlcnNpb247Y29uc3QgYnVpbGQ9ImQwODIzMDY2YyI7ZXhwb3J0cy5idWlsZD1idWlsZH0sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLlByaW50QW5ub3RhdGlvblN0b3JhZ2U9ZS5Bbm5vdGF0aW9uU3RvcmFnZT12b2lkIDA7dmFyIGk9cygxKSxuPXMoNCkscj1zKDgpO2NsYXNzIEFubm90YXRpb25TdG9yYWdle2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmFnZT1uZXcgTWFwO3RoaXMuX21vZGlmaWVkPSExO3RoaXMub25TZXRNb2RpZmllZD1udWxsO3RoaXMub25SZXNldE1vZGlmaWVkPW51bGw7dGhpcy5vbkFubm90YXRpb25FZGl0b3I9bnVsbH1nZXRWYWx1ZSh0LGUpe2NvbnN0IHM9dGhpcy5fc3RvcmFnZS5nZXQodCk7cmV0dXJuIHZvaWQgMD09PXM/ZTpPYmplY3QuYXNzaWduKGUscyl9Z2V0UmF3VmFsdWUodCl7cmV0dXJuIHRoaXMuX3N0b3JhZ2UuZ2V0KHQpfXJlbW92ZSh0KXt0aGlzLl9zdG9yYWdlLmRlbGV0ZSh0KTswPT09dGhpcy5fc3RvcmFnZS5zaXplJiZ0aGlzLnJlc2V0TW9kaWZpZWQoKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3Ipe2Zvcihjb25zdCB0IG9mIHRoaXMuX3N0b3JhZ2UudmFsdWVzKCkpaWYodCBpbnN0YW5jZW9mIG4uQW5ub3RhdGlvbkVkaXRvcilyZXR1cm47dGhpcy5vbkFubm90YXRpb25FZGl0b3IobnVsbCl9fXNldFZhbHVlKHQsZSl7Y29uc3Qgcz10aGlzLl9zdG9yYWdlLmdldCh0KTtsZXQgaT0hMTtpZih2b2lkIDAhPT1zKXtmb3IoY29uc3RbdCxuXW9mIE9iamVjdC5lbnRyaWVzKGUpKWlmKHNbdF0hPT1uKXtpPSEwO3NbdF09bn19ZWxzZXtpPSEwO3RoaXMuX3N0b3JhZ2Uuc2V0KHQsZSl9aSYmdGhpcy4jdSgpO2UgaW5zdGFuY2VvZiBuLkFubm90YXRpb25FZGl0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uQW5ub3RhdGlvbkVkaXRvciYmdGhpcy5vbkFubm90YXRpb25FZGl0b3IoZS5jb25zdHJ1Y3Rvci5fdHlwZSl9aGFzKHQpe3JldHVybiB0aGlzLl9zdG9yYWdlLmhhcyh0KX1nZXRBbGwoKXtyZXR1cm4gdGhpcy5fc3RvcmFnZS5zaXplPjA/KDAsaS5vYmplY3RGcm9tTWFwKSh0aGlzLl9zdG9yYWdlKTpudWxsfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3N0b3JhZ2Uuc2l6ZX0jdSgpe2lmKCF0aGlzLl9tb2RpZmllZCl7dGhpcy5fbW9kaWZpZWQ9ITA7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub25TZXRNb2RpZmllZCYmdGhpcy5vblNldE1vZGlmaWVkKCl9fXJlc2V0TW9kaWZpZWQoKXtpZih0aGlzLl9tb2RpZmllZCl7dGhpcy5fbW9kaWZpZWQ9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub25SZXNldE1vZGlmaWVkJiZ0aGlzLm9uUmVzZXRNb2RpZmllZCgpfX1nZXQgcHJpbnQoKXtyZXR1cm4gbmV3IFByaW50QW5ub3RhdGlvblN0b3JhZ2UodGhpcyl9Z2V0IHNlcmlhbGl6YWJsZSgpe2lmKDA9PT10aGlzLl9zdG9yYWdlLnNpemUpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdFtlLHNdb2YgdGhpcy5fc3RvcmFnZSl7Y29uc3QgaT1zIGluc3RhbmNlb2Ygbi5Bbm5vdGF0aW9uRWRpdG9yP3Muc2VyaWFsaXplKCk6cztpJiZ0LnNldChlLGkpfXJldHVybiB0fXN0YXRpYyBnZXRIYXNoKHQpe2lmKCF0KXJldHVybiIiO2NvbnN0IGU9bmV3IHIuTXVybXVySGFzaDNfNjQ7Zm9yKGNvbnN0W3MsaV1vZiB0KWUudXBkYXRlKGAke3N9OiR7SlNPTi5zdHJpbmdpZnkoaSl9YCk7cmV0dXJuIGUuaGV4ZGlnZXN0KCl9fWUuQW5ub3RhdGlvblN0b3JhZ2U9QW5ub3RhdGlvblN0b3JhZ2U7Y2xhc3MgUHJpbnRBbm5vdGF0aW9uU3RvcmFnZSBleHRlbmRzIEFubm90YXRpb25TdG9yYWdleyNwPW51bGw7Y29uc3RydWN0b3IodCl7c3VwZXIoKTt0aGlzLiNwPXN0cnVjdHVyZWRDbG9uZSh0LnNlcmlhbGl6YWJsZSl9Z2V0IHByaW50KCl7KDAsaS51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBQcmludEFubm90YXRpb25TdG9yYWdlLnByaW50Iil9Z2V0IHNlcmlhbGl6YWJsZSgpe3JldHVybiB0aGlzLiNwfX1lLlByaW50QW5ub3RhdGlvblN0b3JhZ2U9UHJpbnRBbm5vdGF0aW9uU3RvcmFnZX0sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLkFubm90YXRpb25FZGl0b3I9dm9pZCAwO3ZhciBpPXMoNSksbj1zKDEpO2NsYXNzIEFubm90YXRpb25FZGl0b3J7I2c9dGhpcy5mb2N1c2luLmJpbmQodGhpcyk7I209dGhpcy5mb2N1c291dC5iaW5kKHRoaXMpOyNmPSExOyNiPSExOyNBPSExOyNfPUFubm90YXRpb25FZGl0b3IuX3pJbmRleCsrO3N0YXRpYyBfY29sb3JNYW5hZ2VyPW5ldyBpLkNvbG9yTWFuYWdlcjtzdGF0aWMgX3pJbmRleD0xO2NvbnN0cnVjdG9yKHQpe3RoaXMuY29uc3RydWN0b3I9PT1Bbm5vdGF0aW9uRWRpdG9yJiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQW5ub3RhdGlvbkVkaXRvci4iKTt0aGlzLnBhcmVudD10LnBhcmVudDt0aGlzLmlkPXQuaWQ7dGhpcy53aWR0aD10aGlzLmhlaWdodD1udWxsO3RoaXMucGFnZUluZGV4PXQucGFyZW50LnBhZ2VJbmRleDt0aGlzLm5hbWU9dC5uYW1lO3RoaXMuZGl2PW51bGw7Y29uc3RbZSxzXT10aGlzLnBhcmVudC52aWV3cG9ydEJhc2VEaW1lbnNpb25zO3RoaXMueD10LngvZTt0aGlzLnk9dC55L3M7dGhpcy5yb3RhdGlvbj10aGlzLnBhcmVudC52aWV3cG9ydC5yb3RhdGlvbjt0aGlzLmlzQXR0YWNoZWRUb0RPTT0hMX1zdGF0aWMgZ2V0IF9kZWZhdWx0TGluZUNvbG9yKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIl9kZWZhdWx0TGluZUNvbG9yIix0aGlzLl9jb2xvck1hbmFnZXIuZ2V0SGV4Q29kZSgiQ2FudmFzVGV4dCIpKX1zZXRJbkJhY2tncm91bmQoKXt0aGlzLmRpdi5zdHlsZS56SW5kZXg9MH1zZXRJbkZvcmVncm91bmQoKXt0aGlzLmRpdi5zdHlsZS56SW5kZXg9dGhpcy4jX31mb2N1c2luKHQpe3RoaXMuI2Y/dGhpcy4jZj0hMTp0aGlzLnBhcmVudC5zZXRTZWxlY3RlZCh0aGlzKX1mb2N1c291dCh0KXtpZighdGhpcy5pc0F0dGFjaGVkVG9ET00pcmV0dXJuO2lmKCF0LnJlbGF0ZWRUYXJnZXQ/LmNsb3Nlc3QoYCMke3RoaXMuaWR9YCkpe3QucHJldmVudERlZmF1bHQoKTt0aGlzLnBhcmVudC5pc011bHRpcGxlU2VsZWN0aW9ufHx0aGlzLmNvbW1pdE9yUmVtb3ZlKCl9fWNvbW1pdE9yUmVtb3ZlKCl7dGhpcy5pc0VtcHR5KCk/dGhpcy5yZW1vdmUoKTp0aGlzLmNvbW1pdCgpfWNvbW1pdCgpe3RoaXMucGFyZW50LmFkZFRvQW5ub3RhdGlvblN0b3JhZ2UodGhpcyl9ZHJhZ3N0YXJ0KHQpe2NvbnN0IGU9dGhpcy5wYXJlbnQuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3RhcnRYPXQuY2xpZW50WC1lLng7dGhpcy5zdGFydFk9dC5jbGllbnRZLWUueTt0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0L3BsYWluIix0aGlzLmlkKTt0LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJtb3ZlIn1zZXRBdCh0LGUscyxpKXtjb25zdFtuLHJdPXRoaXMucGFyZW50LnZpZXdwb3J0QmFzZURpbWVuc2lvbnM7W3MsaV09dGhpcy5zY3JlZW5Ub1BhZ2VUcmFuc2xhdGlvbihzLGkpO3RoaXMueD0odCtzKS9uO3RoaXMueT0oZStpKS9yO3RoaXMuZGl2LnN0eWxlLmxlZnQ9MTAwKnRoaXMueCsiJSI7dGhpcy5kaXYuc3R5bGUudG9wPTEwMCp0aGlzLnkrIiUifXRyYW5zbGF0ZSh0LGUpe2NvbnN0W3MsaV09dGhpcy5wYXJlbnQudmlld3BvcnRCYXNlRGltZW5zaW9ucztbdCxlXT10aGlzLnNjcmVlblRvUGFnZVRyYW5zbGF0aW9uKHQsZSk7dGhpcy54Kz10L3M7dGhpcy55Kz1lL2k7dGhpcy5kaXYuc3R5bGUubGVmdD0xMDAqdGhpcy54KyIlIjt0aGlzLmRpdi5zdHlsZS50b3A9MTAwKnRoaXMueSsiJSJ9c2NyZWVuVG9QYWdlVHJhbnNsYXRpb24odCxlKXtjb25zdHtyb3RhdGlvbjpzfT10aGlzLnBhcmVudC52aWV3cG9ydDtzd2l0Y2gocyl7Y2FzZSA5MDpyZXR1cm5bZSwtdF07Y2FzZSAxODA6cmV0dXJuWy10LC1lXTtjYXNlIDI3MDpyZXR1cm5bLWUsdF07ZGVmYXVsdDpyZXR1cm5bdCxlXX19c2V0RGltcyh0LGUpe2NvbnN0W3MsaV09dGhpcy5wYXJlbnQudmlld3BvcnRCYXNlRGltZW5zaW9uczt0aGlzLmRpdi5zdHlsZS53aWR0aD0xMDAqdC9zKyIlIjt0aGlzLmRpdi5zdHlsZS5oZWlnaHQ9MTAwKmUvaSsiJSJ9Zml4RGltcygpe2NvbnN0e3N0eWxlOnR9PXRoaXMuZGl2LHtoZWlnaHQ6ZSx3aWR0aDpzfT10LGk9cy5lbmRzV2l0aCgiJSIpLG49ZS5lbmRzV2l0aCgiJSIpO2lmKGkmJm4pcmV0dXJuO2NvbnN0W3IsYV09dGhpcy5wYXJlbnQudmlld3BvcnRCYXNlRGltZW5zaW9ucztpfHwodC53aWR0aD0xMDAqcGFyc2VGbG9hdChzKS9yKyIlIik7bnx8KHQuaGVpZ2h0PTEwMCpwYXJzZUZsb2F0KGUpL2ErIiUiKX1nZXRJbml0aWFsVHJhbnNsYXRpb24oKXtyZXR1cm5bMCwwXX1yZW5kZXIoKXt0aGlzLmRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmRpdi5zZXRBdHRyaWJ1dGUoImRhdGEtZWRpdG9yLXJvdGF0aW9uIiwoMzYwLXRoaXMucm90YXRpb24pJTM2MCk7dGhpcy5kaXYuY2xhc3NOYW1lPXRoaXMubmFtZTt0aGlzLmRpdi5zZXRBdHRyaWJ1dGUoImlkIix0aGlzLmlkKTt0aGlzLmRpdi5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwwKTt0aGlzLnNldEluRm9yZWdyb3VuZCgpO3RoaXMuZGl2LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuI2cpO3RoaXMuZGl2LmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLiNtKTtjb25zdFt0LGVdPXRoaXMuZ2V0SW5pdGlhbFRyYW5zbGF0aW9uKCk7dGhpcy50cmFuc2xhdGUodCxlKTsoMCxpLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnc3RhcnQiLCJwb2ludGVyZG93biJdKTtyZXR1cm4gdGhpcy5kaXZ9cG9pbnRlcmRvd24odCl7Y29uc3QgZT1pLktleWJvYXJkTWFuYWdlci5wbGF0Zm9ybS5pc01hYztpZigwIT09dC5idXR0b258fHQuY3RybEtleSYmZSl0LnByZXZlbnREZWZhdWx0KCk7ZWxzZXt0LmN0cmxLZXkmJiFlfHx0LnNoaWZ0S2V5fHx0Lm1ldGFLZXkmJmU/dGhpcy5wYXJlbnQudG9nZ2xlU2VsZWN0ZWQodGhpcyk6dGhpcy5wYXJlbnQuc2V0U2VsZWN0ZWQodGhpcyk7dGhpcy4jZj0hMH19Z2V0UmVjdCh0LGUpe2NvbnN0W3MsaV09dGhpcy5wYXJlbnQudmlld3BvcnRCYXNlRGltZW5zaW9ucyxbbixyXT10aGlzLnBhcmVudC5wYWdlRGltZW5zaW9ucyxhPW4qdC9zLG89ciplL2ksbD10aGlzLngqbixjPXRoaXMueSpyLGg9dGhpcy53aWR0aCpuLGQ9dGhpcy5oZWlnaHQqcjtzd2l0Y2godGhpcy5yb3RhdGlvbil7Y2FzZSAwOnJldHVybltsK2Esci1jLW8tZCxsK2EraCxyLWMtb107Y2FzZSA5MDpyZXR1cm5bbCtvLHItYythLGwrbytkLHItYythK2hdO2Nhc2UgMTgwOnJldHVybltsLWEtaCxyLWMrbyxsLWEsci1jK28rZF07Y2FzZSAyNzA6cmV0dXJuW2wtby1kLHItYy1hLWgsbC1vLHItYy1hXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3RhdGlvbiIpfX1nZXRSZWN0SW5DdXJyZW50Q29vcmRzKHQsZSl7Y29uc3RbcyxpLG4scl09dCxhPW4tcyxvPXItaTtzd2l0Y2godGhpcy5yb3RhdGlvbil7Y2FzZSAwOnJldHVybltzLGUtcixhLG9dO2Nhc2UgOTA6cmV0dXJuW3MsZS1pLG8sYV07Y2FzZSAxODA6cmV0dXJuW24sZS1pLGEsb107Y2FzZSAyNzA6cmV0dXJuW24sZS1yLG8sYV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19b25jZUFkZGVkKCl7fWlzRW1wdHkoKXtyZXR1cm4hMX1lbmFibGVFZGl0TW9kZSgpe3RoaXMuI0E9ITB9ZGlzYWJsZUVkaXRNb2RlKCl7dGhpcy4jQT0hMX1pc0luRWRpdE1vZGUoKXtyZXR1cm4gdGhpcy4jQX1zaG91bGRHZXRLZXlib2FyZEV2ZW50cygpe3JldHVybiExfW5lZWRzVG9CZVJlYnVpbHQoKXtyZXR1cm4gdGhpcy5kaXYmJiF0aGlzLmlzQXR0YWNoZWRUb0RPTX1yZWJ1aWxkKCl7dGhpcy5kaXY/LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuI2cpfXNlcmlhbGl6ZSgpeygwLG4udW5yZWFjaGFibGUpKCJBbiBlZGl0b3IgbXVzdCBiZSBzZXJpYWxpemFibGUiKX1zdGF0aWMgZGVzZXJpYWxpemUodCxlKXtjb25zdCBzPW5ldyB0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7cGFyZW50OmUsaWQ6ZS5nZXROZXh0SWQoKX0pO3Mucm90YXRpb249dC5yb3RhdGlvbjtjb25zdFtpLG5dPWUucGFnZURpbWVuc2lvbnMsW3IsYSxvLGxdPXMuZ2V0UmVjdEluQ3VycmVudENvb3Jkcyh0LnJlY3Qsbik7cy54PXIvaTtzLnk9YS9uO3Mud2lkdGg9by9pO3MuaGVpZ2h0PWwvbjtyZXR1cm4gc31yZW1vdmUoKXt0aGlzLmRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c2luIix0aGlzLiNnKTt0aGlzLmRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c291dCIsdGhpcy4jbSk7dGhpcy5pc0VtcHR5KCl8fHRoaXMuY29tbWl0KCk7dGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpfXNlbGVjdCgpe3RoaXMuZGl2Py5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZEVkaXRvciIpfXVuc2VsZWN0KCl7dGhpcy5kaXY/LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkRWRpdG9yIil9dXBkYXRlUGFyYW1zKHQsZSl7fWRpc2FibGVFZGl0aW5nKCl7fWVuYWJsZUVkaXRpbmcoKXt9Z2V0IHByb3BlcnRpZXNUb1VwZGF0ZSgpe3JldHVybnt9fWdldCBjb250ZW50RGl2KCl7cmV0dXJuIHRoaXMuZGl2fWdldCBpc0VkaXRpbmcoKXtyZXR1cm4gdGhpcy4jYn1zZXQgaXNFZGl0aW5nKHQpe3RoaXMuI2I9dDtpZih0KXt0aGlzLnBhcmVudC5zZXRTZWxlY3RlZCh0aGlzKTt0aGlzLnBhcmVudC5zZXRBY3RpdmVFZGl0b3IodGhpcyl9ZWxzZSB0aGlzLnBhcmVudC5zZXRBY3RpdmVFZGl0b3IobnVsbCl9fWUuQW5ub3RhdGlvbkVkaXRvcj1Bbm5vdGF0aW9uRWRpdG9yfSwodCxlLHMpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuS2V5Ym9hcmRNYW5hZ2VyPWUuQ29tbWFuZE1hbmFnZXI9ZS5Db2xvck1hbmFnZXI9ZS5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyPXZvaWQgMDtlLmJpbmRFdmVudHM9ZnVuY3Rpb24gYmluZEV2ZW50cyh0LGUscyl7Zm9yKGNvbnN0IGkgb2YgcyllLmFkZEV2ZW50TGlzdGVuZXIoaSx0W2ldLmJpbmQodCkpfTtlLm9wYWNpdHlUb0hleD1mdW5jdGlvbiBvcGFjaXR5VG9IZXgodCl7cmV0dXJuIE1hdGgucm91bmQoTWF0aC5taW4oMjU1LE1hdGgubWF4KDEsMjU1KnQpKSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKX07dmFyIGk9cygxKSxuPXMoNik7Y2xhc3MgSWRNYW5hZ2VyeyN2PTA7Z2V0SWQoKXtyZXR1cm5gJHtpLkFubm90YXRpb25FZGl0b3JQcmVmaXh9JHt0aGlzLiN2Kyt9YH19Y2xhc3MgQ29tbWFuZE1hbmFnZXJ7I3k9W107I1M9ITE7I3g7I0U9LTE7Y29uc3RydWN0b3IodD0xMjgpe3RoaXMuI3g9dH1hZGQoe2NtZDp0LHVuZG86ZSxtdXN0RXhlYzpzLHR5cGU6aT1OYU4sb3ZlcndyaXRlSWZTYW1lVHlwZTpuPSExLGtlZXBVbmRvOnI9ITF9KXtzJiZ0KCk7aWYodGhpcy4jUylyZXR1cm47Y29uc3QgYT17Y21kOnQsdW5kbzplLHR5cGU6aX07aWYoLTE9PT10aGlzLiNFKXt0aGlzLiN5Lmxlbmd0aD4wJiYodGhpcy4jeS5sZW5ndGg9MCk7dGhpcy4jRT0wO3RoaXMuI3kucHVzaChhKTtyZXR1cm59aWYobiYmdGhpcy4jeVt0aGlzLiNFXS50eXBlPT09aSl7ciYmKGEudW5kbz10aGlzLiN5W3RoaXMuI0VdLnVuZG8pO3RoaXMuI3lbdGhpcy4jRV09YTtyZXR1cm59Y29uc3Qgbz10aGlzLiNFKzE7aWYobz09PXRoaXMuI3gpdGhpcy4jeS5zcGxpY2UoMCwxKTtlbHNle3RoaXMuI0U9bztvPHRoaXMuI3kubGVuZ3RoJiZ0aGlzLiN5LnNwbGljZShvKX10aGlzLiN5LnB1c2goYSl9dW5kbygpe2lmKC0xIT09dGhpcy4jRSl7dGhpcy4jUz0hMDt0aGlzLiN5W3RoaXMuI0VdLnVuZG8oKTt0aGlzLiNTPSExO3RoaXMuI0UtPTF9fXJlZG8oKXtpZih0aGlzLiNFPHRoaXMuI3kubGVuZ3RoLTEpe3RoaXMuI0UrPTE7dGhpcy4jUz0hMDt0aGlzLiN5W3RoaXMuI0VdLmNtZCgpO3RoaXMuI1M9ITF9fWhhc1NvbWV0aGluZ1RvVW5kbygpe3JldHVybi0xIT09dGhpcy4jRX1oYXNTb21ldGhpbmdUb1JlZG8oKXtyZXR1cm4gdGhpcy4jRTx0aGlzLiN5Lmxlbmd0aC0xfWRlc3Ryb3koKXt0aGlzLiN5PW51bGx9fWUuQ29tbWFuZE1hbmFnZXI9Q29tbWFuZE1hbmFnZXI7Y2xhc3MgS2V5Ym9hcmRNYW5hZ2Vye2NvbnN0cnVjdG9yKHQpe3RoaXMuYnVmZmVyPVtdO3RoaXMuY2FsbGJhY2tzPW5ldyBNYXA7dGhpcy5hbGxLZXlzPW5ldyBTZXQ7Y29uc3QgZT1LZXlib2FyZE1hbmFnZXIucGxhdGZvcm0uaXNNYWM7Zm9yKGNvbnN0W3MsaV1vZiB0KWZvcihjb25zdCB0IG9mIHMpe2NvbnN0IHM9dC5zdGFydHNXaXRoKCJtYWMrIik7aWYoZSYmcyl7dGhpcy5jYWxsYmFja3Muc2V0KHQuc2xpY2UoNCksaSk7dGhpcy5hbGxLZXlzLmFkZCh0LnNwbGl0KCIrIikuYXQoLTEpKX1lbHNlIGlmKCFlJiYhcyl7dGhpcy5jYWxsYmFja3Muc2V0KHQsaSk7dGhpcy5hbGxLZXlzLmFkZCh0LnNwbGl0KCIrIikuYXQoLTEpKX19fXN0YXRpYyBnZXQgcGxhdGZvcm0oKXtjb25zdCB0PSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yP25hdmlnYXRvci5wbGF0Zm9ybToiIjtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywicGxhdGZvcm0iLHtpc1dpbjp0LmluY2x1ZGVzKCJXaW4iKSxpc01hYzp0LmluY2x1ZGVzKCJNYWMiKX0pfSNDKHQpe3QuYWx0S2V5JiZ0aGlzLmJ1ZmZlci5wdXNoKCJhbHQiKTt0LmN0cmxLZXkmJnRoaXMuYnVmZmVyLnB1c2goImN0cmwiKTt0Lm1ldGFLZXkmJnRoaXMuYnVmZmVyLnB1c2goIm1ldGEiKTt0LnNoaWZ0S2V5JiZ0aGlzLmJ1ZmZlci5wdXNoKCJzaGlmdCIpO3RoaXMuYnVmZmVyLnB1c2godC5rZXkpO2NvbnN0IGU9dGhpcy5idWZmZXIuam9pbigiKyIpO3RoaXMuYnVmZmVyLmxlbmd0aD0wO3JldHVybiBlfWV4ZWModCxlKXtpZighdGhpcy5hbGxLZXlzLmhhcyhlLmtleSkpcmV0dXJuO2NvbnN0IHM9dGhpcy5jYWxsYmFja3MuZ2V0KHRoaXMuI0MoZSkpO2lmKHMpe3MuYmluZCh0KSgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpfX19ZS5LZXlib2FyZE1hbmFnZXI9S2V5Ym9hcmRNYW5hZ2VyO2NsYXNzIENvbG9yTWFuYWdlcntzdGF0aWMgX2NvbG9yc01hcHBpbmc9bmV3IE1hcChbWyJDYW52YXNUZXh0IixbMCwwLDBdXSxbIkNhbnZhcyIsWzI1NSwyNTUsMjU1XV1dKTtnZXQgX2NvbG9ycygpe2NvbnN0IHQ9bmV3IE1hcChbWyJDYW52YXNUZXh0IixudWxsXSxbIkNhbnZhcyIsbnVsbF1dKTsoMCxuLmdldENvbG9yVmFsdWVzKSh0KTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiX2NvbG9ycyIsdCl9Y29udmVydCh0KXtjb25zdCBlPSgwLG4uZ2V0UkdCKSh0KTtpZighd2luZG93Lm1hdGNoTWVkaWEoIihmb3JjZWQtY29sb3JzOiBhY3RpdmUpIikubWF0Y2hlcylyZXR1cm4gZTtmb3IoY29uc3RbdCxzXW9mIHRoaXMuX2NvbG9ycylpZihzLmV2ZXJ5KCgodCxzKT0+dD09PWVbc10pKSlyZXR1cm4gQ29sb3JNYW5hZ2VyLl9jb2xvcnNNYXBwaW5nLmdldCh0KTtyZXR1cm4gZX1nZXRIZXhDb2RlKHQpe2NvbnN0IGU9dGhpcy5fY29sb3JzLmdldCh0KTtyZXR1cm4gZT9pLlV0aWwubWFrZUhleENvbG9yKC4uLmUpOnR9fWUuQ29sb3JNYW5hZ2VyPUNvbG9yTWFuYWdlcjtjbGFzcyBBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyeyNQPW51bGw7I1Q9bmV3IE1hcDsjdz1uZXcgTWFwOyNrPW5ldyBDb21tYW5kTWFuYWdlcjsjRj0wOyNNPW51bGw7I1I9bnVsbDsjRD1uZXcgSWRNYW5hZ2VyOyNJPSExOyNPPWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuTk9ORTsjTD1uZXcgU2V0OyNOPXRoaXMuY29weS5iaW5kKHRoaXMpOyNCPXRoaXMuY3V0LmJpbmQodGhpcyk7I2o9dGhpcy5wYXN0ZS5iaW5kKHRoaXMpOyNVPXRoaXMua2V5ZG93bi5iaW5kKHRoaXMpOyNxPXRoaXMub25FZGl0aW5nQWN0aW9uLmJpbmQodGhpcyk7I1c9dGhpcy5vblBhZ2VDaGFuZ2luZy5iaW5kKHRoaXMpOyNHPXtpc0VkaXRpbmc6ITEsaXNFbXB0eTohMCxoYXNTb21ldGhpbmdUb1VuZG86ITEsaGFzU29tZXRoaW5nVG9SZWRvOiExLGhhc1NlbGVjdGVkRWRpdG9yOiExfTsjSD1udWxsO3N0YXRpYyBfa2V5Ym9hcmRNYW5hZ2VyPW5ldyBLZXlib2FyZE1hbmFnZXIoW1tbImN0cmwrYSIsIm1hYyttZXRhK2EiXSxBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyLnByb3RvdHlwZS5zZWxlY3RBbGxdLFtbImN0cmwreiIsIm1hYyttZXRhK3oiXSxBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyLnByb3RvdHlwZS51bmRvXSxbWyJjdHJsK3kiLCJjdHJsK3NoaWZ0K1oiLCJtYWMrbWV0YStzaGlmdCtaIl0sQW5ub3RhdGlvbkVkaXRvclVJTWFuYWdlci5wcm90b3R5cGUucmVkb10sW1siQmFja3NwYWNlIiwiYWx0K0JhY2tzcGFjZSIsImN0cmwrQmFja3NwYWNlIiwic2hpZnQrQmFja3NwYWNlIiwibWFjK0JhY2tzcGFjZSIsIm1hYythbHQrQmFja3NwYWNlIiwibWFjK2N0cmwrQmFja3NwYWNlIiwiRGVsZXRlIiwiY3RybCtEZWxldGUiLCJzaGlmdCtEZWxldGUiXSxBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyLnByb3RvdHlwZS5kZWxldGVdLFtbIkVzY2FwZSIsIm1hYytFc2NhcGUiXSxBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyLnByb3RvdHlwZS51bnNlbGVjdEFsbF1dKTtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuI0g9dDt0aGlzLiNSPWU7dGhpcy4jUi5fb24oImVkaXRpbmdhY3Rpb24iLHRoaXMuI3EpO3RoaXMuI1IuX29uKCJwYWdlY2hhbmdpbmciLHRoaXMuI1cpfWRlc3Ryb3koKXt0aGlzLiN6KCk7dGhpcy4jUi5fb2ZmKCJlZGl0aW5nYWN0aW9uIix0aGlzLiNxKTt0aGlzLiNSLl9vZmYoInBhZ2VjaGFuZ2luZyIsdGhpcy4jVyk7Zm9yKGNvbnN0IHQgb2YgdGhpcy4jdy52YWx1ZXMoKSl0LmRlc3Ryb3koKTt0aGlzLiN3LmNsZWFyKCk7dGhpcy4jVC5jbGVhcigpO3RoaXMuI1A9bnVsbDt0aGlzLiNMLmNsZWFyKCk7dGhpcy4jay5kZXN0cm95KCl9b25QYWdlQ2hhbmdpbmcoe3BhZ2VOdW1iZXI6dH0pe3RoaXMuI0Y9dC0xfWZvY3VzTWFpbkNvbnRhaW5lcigpe3RoaXMuI0guZm9jdXMoKX0jVigpe3RoaXMuI0guYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy4jVSl9I3ooKXt0aGlzLiNILnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuI1UpfSNYKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsdGhpcy4jTik7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY3V0Iix0aGlzLiNCKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsdGhpcy4jail9IyQoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb3B5Iix0aGlzLiNOKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjdXQiLHRoaXMuI0IpO2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhc3RlIix0aGlzLiNqKX1jb3B5KHQpe3QucHJldmVudERlZmF1bHQoKTt0aGlzLiNQJiZ0aGlzLiNQLmNvbW1pdE9yUmVtb3ZlKCk7aWYoIXRoaXMuaGFzU2VsZWN0aW9uKXJldHVybjtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHRoaXMuI0wpdC5pc0VtcHR5KCl8fGUucHVzaCh0LnNlcmlhbGl6ZSgpKTswIT09ZS5sZW5ndGgmJnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJhcHBsaWNhdGlvbi9wZGZqcyIsSlNPTi5zdHJpbmdpZnkoZSkpfWN1dCh0KXt0aGlzLmNvcHkodCk7dGhpcy5kZWxldGUoKX1wYXN0ZSh0KXt0LnByZXZlbnREZWZhdWx0KCk7bGV0IGU9dC5jbGlwYm9hcmREYXRhLmdldERhdGEoImFwcGxpY2F0aW9uL3BkZmpzIik7aWYoIWUpcmV0dXJuO3RyeXtlPUpTT04ucGFyc2UoZSl9Y2F0Y2godCl7KDAsaS53YXJuKShgcGFzdGU6ICIke3QubWVzc2FnZX0iLmApO3JldHVybn1pZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm47dGhpcy51bnNlbGVjdEFsbCgpO2NvbnN0IHM9dGhpcy4jdy5nZXQodGhpcy4jRik7dHJ5e2NvbnN0IHQ9W107Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgZT1zLmRlc2VyaWFsaXplKGkpO2lmKCFlKXJldHVybjt0LnB1c2goZSl9Y29uc3QgY21kPSgpPT57Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLiNZKGUpO3RoaXMuI0sodCl9LHVuZG89KCk9Pntmb3IoY29uc3QgZSBvZiB0KWUucmVtb3ZlKCl9O3RoaXMuYWRkQ29tbWFuZHMoe2NtZDpjbWQsdW5kbzp1bmRvLG11c3RFeGVjOiEwfSl9Y2F0Y2godCl7KDAsaS53YXJuKShgcGFzdGU6ICIke3QubWVzc2FnZX0iLmApfX1rZXlkb3duKHQpe3RoaXMuZ2V0QWN0aXZlKCk/LnNob3VsZEdldEtleWJvYXJkRXZlbnRzKCl8fEFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIuX2tleWJvYXJkTWFuYWdlci5leGVjKHRoaXMsdCl9b25FZGl0aW5nQWN0aW9uKHQpe1sidW5kbyIsInJlZG8iLCJkZWxldGUiLCJzZWxlY3RBbGwiXS5pbmNsdWRlcyh0Lm5hbWUpJiZ0aGlzW3QubmFtZV0oKX0jSih0KXtPYmplY3QuZW50cmllcyh0KS5zb21lKCgoW3QsZV0pPT50aGlzLiNHW3RdIT09ZSkpJiZ0aGlzLiNSLmRpc3BhdGNoKCJhbm5vdGF0aW9uZWRpdG9yc3RhdGVzY2hhbmdlZCIse3NvdXJjZTp0aGlzLGRldGFpbHM6T2JqZWN0LmFzc2lnbih0aGlzLiNHLHQpfSl9I1EodCl7dGhpcy4jUi5kaXNwYXRjaCgiYW5ub3RhdGlvbmVkaXRvcnBhcmFtc2NoYW5nZWQiLHtzb3VyY2U6dGhpcyxkZXRhaWxzOnR9KX1zZXRFZGl0aW5nU3RhdGUodCl7aWYodCl7dGhpcy4jVigpO3RoaXMuI1goKTt0aGlzLiNKKHtpc0VkaXRpbmc6dGhpcy4jTyE9PWkuQW5ub3RhdGlvbkVkaXRvclR5cGUuTk9ORSxpc0VtcHR5OnRoaXMuI1ooKSxoYXNTb21ldGhpbmdUb1VuZG86dGhpcy4jay5oYXNTb21ldGhpbmdUb1VuZG8oKSxoYXNTb21ldGhpbmdUb1JlZG86dGhpcy4jay5oYXNTb21ldGhpbmdUb1JlZG8oKSxoYXNTZWxlY3RlZEVkaXRvcjohMX0pfWVsc2V7dGhpcy4jeigpO3RoaXMuIyQoKTt0aGlzLiNKKHtpc0VkaXRpbmc6ITF9KX19cmVnaXN0ZXJFZGl0b3JUeXBlcyh0KXtpZighdGhpcy4jTSl7dGhpcy4jTT10O2Zvcihjb25zdCB0IG9mIHRoaXMuI00pdGhpcy4jUSh0LmRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUpfX1nZXRJZCgpe3JldHVybiB0aGlzLiNELmdldElkKCl9YWRkTGF5ZXIodCl7dGhpcy4jdy5zZXQodC5wYWdlSW5kZXgsdCk7dGhpcy4jST90LmVuYWJsZSgpOnQuZGlzYWJsZSgpfXJlbW92ZUxheWVyKHQpe3RoaXMuI3cuZGVsZXRlKHQucGFnZUluZGV4KX11cGRhdGVNb2RlKHQpe3RoaXMuI089dDtpZih0PT09aS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5OT05FKXt0aGlzLnNldEVkaXRpbmdTdGF0ZSghMSk7dGhpcy4jdHQoKX1lbHNle3RoaXMuc2V0RWRpdGluZ1N0YXRlKCEwKTt0aGlzLiNldCgpO2Zvcihjb25zdCBlIG9mIHRoaXMuI3cudmFsdWVzKCkpZS51cGRhdGVNb2RlKHQpfX11cGRhdGVUb29sYmFyKHQpe3QhPT10aGlzLiNPJiZ0aGlzLiNSLmRpc3BhdGNoKCJzd2l0Y2hhbm5vdGF0aW9uZWRpdG9ybW9kZSIse3NvdXJjZTp0aGlzLG1vZGU6dH0pfXVwZGF0ZVBhcmFtcyh0LGUpe2lmKHRoaXMuI00pe2Zvcihjb25zdCBzIG9mIHRoaXMuI0wpcy51cGRhdGVQYXJhbXModCxlKTtmb3IoY29uc3QgcyBvZiB0aGlzLiNNKXMudXBkYXRlRGVmYXVsdFBhcmFtcyh0LGUpfX0jZXQoKXtpZighdGhpcy4jSSl7dGhpcy4jST0hMDtmb3IoY29uc3QgdCBvZiB0aGlzLiN3LnZhbHVlcygpKXQuZW5hYmxlKCl9fSN0dCgpe3RoaXMudW5zZWxlY3RBbGwoKTtpZih0aGlzLiNJKXt0aGlzLiNJPSExO2Zvcihjb25zdCB0IG9mIHRoaXMuI3cudmFsdWVzKCkpdC5kaXNhYmxlKCl9fWdldEVkaXRvcnModCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgcyBvZiB0aGlzLiNULnZhbHVlcygpKXMucGFnZUluZGV4PT09dCYmZS5wdXNoKHMpO3JldHVybiBlfWdldEVkaXRvcih0KXtyZXR1cm4gdGhpcy4jVC5nZXQodCl9YWRkRWRpdG9yKHQpe3RoaXMuI1Quc2V0KHQuaWQsdCl9cmVtb3ZlRWRpdG9yKHQpe3RoaXMuI1QuZGVsZXRlKHQuaWQpO3RoaXMudW5zZWxlY3QodCl9I1kodCl7Y29uc3QgZT10aGlzLiN3LmdldCh0LnBhZ2VJbmRleCk7ZT9lLmFkZE9yUmVidWlsZCh0KTp0aGlzLmFkZEVkaXRvcih0KX1zZXRBY3RpdmVFZGl0b3IodCl7aWYodGhpcy4jUCE9PXQpe3RoaXMuI1A9dDt0JiZ0aGlzLiNRKHQucHJvcGVydGllc1RvVXBkYXRlKX19dG9nZ2xlU2VsZWN0ZWQodCl7aWYodGhpcy4jTC5oYXModCkpe3RoaXMuI0wuZGVsZXRlKHQpO3QudW5zZWxlY3QoKTt0aGlzLiNKKHtoYXNTZWxlY3RlZEVkaXRvcjp0aGlzLmhhc1NlbGVjdGlvbn0pfWVsc2V7dGhpcy4jTC5hZGQodCk7dC5zZWxlY3QoKTt0aGlzLiNRKHQucHJvcGVydGllc1RvVXBkYXRlKTt0aGlzLiNKKHtoYXNTZWxlY3RlZEVkaXRvcjohMH0pfX1zZXRTZWxlY3RlZCh0KXtmb3IoY29uc3QgZSBvZiB0aGlzLiNMKWUhPT10JiZlLnVuc2VsZWN0KCk7dGhpcy4jTC5jbGVhcigpO3RoaXMuI0wuYWRkKHQpO3Quc2VsZWN0KCk7dGhpcy4jUSh0LnByb3BlcnRpZXNUb1VwZGF0ZSk7dGhpcy4jSih7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLiNMLmhhcyh0KX11bnNlbGVjdCh0KXt0LnVuc2VsZWN0KCk7dGhpcy4jTC5kZWxldGUodCk7dGhpcy4jSih7aGFzU2VsZWN0ZWRFZGl0b3I6dGhpcy5oYXNTZWxlY3Rpb259KX1nZXQgaGFzU2VsZWN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLiNMLnNpemV9dW5kbygpe3RoaXMuI2sudW5kbygpO3RoaXMuI0ooe2hhc1NvbWV0aGluZ1RvVW5kbzp0aGlzLiNrLmhhc1NvbWV0aGluZ1RvVW5kbygpLGhhc1NvbWV0aGluZ1RvUmVkbzohMCxpc0VtcHR5OnRoaXMuI1ooKX0pfXJlZG8oKXt0aGlzLiNrLnJlZG8oKTt0aGlzLiNKKHtoYXNTb21ldGhpbmdUb1VuZG86ITAsaGFzU29tZXRoaW5nVG9SZWRvOnRoaXMuI2suaGFzU29tZXRoaW5nVG9SZWRvKCksaXNFbXB0eTp0aGlzLiNaKCl9KX1hZGRDb21tYW5kcyh0KXt0aGlzLiNrLmFkZCh0KTt0aGlzLiNKKHtoYXNTb21ldGhpbmdUb1VuZG86ITAsaGFzU29tZXRoaW5nVG9SZWRvOiExLGlzRW1wdHk6dGhpcy4jWigpfSl9I1ooKXtpZigwPT09dGhpcy4jVC5zaXplKXJldHVybiEwO2lmKDE9PT10aGlzLiNULnNpemUpZm9yKGNvbnN0IHQgb2YgdGhpcy4jVC52YWx1ZXMoKSlyZXR1cm4gdC5pc0VtcHR5KCk7cmV0dXJuITF9ZGVsZXRlKCl7dGhpcy5jb21taXRPclJlbW92ZSgpO2lmKCF0aGlzLmhhc1NlbGVjdGlvbilyZXR1cm47Y29uc3QgdD1bLi4udGhpcy4jTF07dGhpcy5hZGRDb21tYW5kcyh7Y21kOigpPT57Zm9yKGNvbnN0IGUgb2YgdCllLnJlbW92ZSgpfSx1bmRvOigpPT57Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLiNZKGUpfSxtdXN0RXhlYzohMH0pfWNvbW1pdE9yUmVtb3ZlKCl7dGhpcy4jUD8uY29tbWl0T3JSZW1vdmUoKX0jSyh0KXt0aGlzLiNMLmNsZWFyKCk7Zm9yKGNvbnN0IGUgb2YgdClpZighZS5pc0VtcHR5KCkpe3RoaXMuI0wuYWRkKGUpO2Uuc2VsZWN0KCl9dGhpcy4jSih7aGFzU2VsZWN0ZWRFZGl0b3I6ITB9KX1zZWxlY3RBbGwoKXtmb3IoY29uc3QgdCBvZiB0aGlzLiNMKXQuY29tbWl0KCk7dGhpcy4jSyh0aGlzLiNULnZhbHVlcygpKX11bnNlbGVjdEFsbCgpe2lmKHRoaXMuI1ApdGhpcy4jUC5jb21taXRPclJlbW92ZSgpO2Vsc2UgaWYoMCE9PXRoaXMuI0wuc2l6ZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy4jTCl0LnVuc2VsZWN0KCk7dGhpcy4jTC5jbGVhcigpO3RoaXMuI0ooe2hhc1NlbGVjdGVkRWRpdG9yOiExfSl9fWlzQWN0aXZlKHQpe3JldHVybiB0aGlzLiNQPT09dH1nZXRBY3RpdmUoKXtyZXR1cm4gdGhpcy4jUH1nZXRNb2RlKCl7cmV0dXJuIHRoaXMuI099fWUuQW5ub3RhdGlvbkVkaXRvclVJTWFuYWdlcj1Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyfSwodCxlLHMpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuU3RhdFRpbWVyPWUuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uPWUuUGl4ZWxzUGVySW5jaD1lLlBhZ2VWaWV3cG9ydD1lLlBERkRhdGVTdHJpbmc9ZS5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1lLkRPTVNWR0ZhY3Rvcnk9ZS5ET01DYW52YXNGYWN0b3J5PWUuRE9NQ01hcFJlYWRlckZhY3Rvcnk9ZS5Bbm5vdGF0aW9uUHJlZml4PXZvaWQgMDtlLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24gZGVwcmVjYXRlZCh0KXtjb25zb2xlLmxvZygiRGVwcmVjYXRlZCBBUEkgdXNhZ2U6ICIrdCl9O2UuZ2V0Q29sb3JWYWx1ZXM9ZnVuY3Rpb24gZ2V0Q29sb3JWYWx1ZXModCl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7ZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO2RvY3VtZW50LmJvZHkuYXBwZW5kKGUpO2Zvcihjb25zdCBzIG9mIHQua2V5cygpKXtlLnN0eWxlLmNvbG9yPXM7Y29uc3QgaT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5jb2xvcjt0LnNldChzLGdldFJHQihpKSl9ZS5yZW1vdmUoKX07ZS5nZXRDdXJyZW50VHJhbnNmb3JtPWZ1bmN0aW9uIGdldEN1cnJlbnRUcmFuc2Zvcm0odCl7Y29uc3R7YTplLGI6cyxjOmksZDpuLGU6cixmOmF9PXQuZ2V0VHJhbnNmb3JtKCk7cmV0dXJuW2UscyxpLG4scixhXX07ZS5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZT1mdW5jdGlvbiBnZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSh0KXtjb25zdHthOmUsYjpzLGM6aSxkOm4sZTpyLGY6YX09dC5nZXRUcmFuc2Zvcm0oKS5pbnZlcnRTZWxmKCk7cmV0dXJuW2UscyxpLG4scixhXX07ZS5nZXRGaWxlbmFtZUZyb21Vcmw9ZnVuY3Rpb24gZ2V0RmlsZW5hbWVGcm9tVXJsKHQpe2NvbnN0IGU9dC5pbmRleE9mKCIjIikscz10LmluZGV4T2YoIj8iKSxpPU1hdGgubWluKGU+MD9lOnQubGVuZ3RoLHM+MD9zOnQubGVuZ3RoKTtyZXR1cm4gdC5zdWJzdHJpbmcodC5sYXN0SW5kZXhPZigiLyIsaSkrMSxpKX07ZS5nZXRQZGZGaWxlbmFtZUZyb21Vcmw9ZnVuY3Rpb24gZ2V0UGRmRmlsZW5hbWVGcm9tVXJsKHQsZT0iZG9jdW1lbnQucGRmIil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiBlO2lmKGlzRGF0YVNjaGVtZSh0KSl7KDAsbi53YXJuKSgnZ2V0UGRmRmlsZW5hbWVGcm9tVXJsOiBpZ25vcmUgImRhdGE6Ii1VUkwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuJyk7cmV0dXJuIGV9Y29uc3Qgcz0vW14vPyM9XStcLnBkZlxiKD8hLipcLnBkZlxiKS9pLGk9L14oPzooPzpbXjpdKzopP1wvXC9bXi9dKyk/KFtePyNdKikoXD9bXiNdKik/KCMuKik/JC8uZXhlYyh0KTtsZXQgcj1zLmV4ZWMoaVsxXSl8fHMuZXhlYyhpWzJdKXx8cy5leGVjKGlbM10pO2lmKHIpe3I9clswXTtpZihyLmluY2x1ZGVzKCIlIikpdHJ5e3I9cy5leGVjKGRlY29kZVVSSUNvbXBvbmVudChyKSlbMF19Y2F0Y2godCl7fX1yZXR1cm4gcnx8ZX07ZS5nZXRSR0I9Z2V0UkdCO2UuZ2V0WGZhUGFnZVZpZXdwb3J0PWZ1bmN0aW9uIGdldFhmYVBhZ2VWaWV3cG9ydCh0LHtzY2FsZTplPTEscm90YXRpb246cz0wfSl7Y29uc3R7d2lkdGg6aSxoZWlnaHQ6bn09dC5hdHRyaWJ1dGVzLnN0eWxlLHI9WzAsMCxwYXJzZUludChpKSxwYXJzZUludChuKV07cmV0dXJuIG5ldyBQYWdlVmlld3BvcnQoe3ZpZXdCb3g6cixzY2FsZTplLHJvdGF0aW9uOnN9KX07ZS5pc0RhdGFTY2hlbWU9aXNEYXRhU2NoZW1lO2UuaXNQZGZGaWxlPWZ1bmN0aW9uIGlzUGRmRmlsZSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi9cLnBkZiQvaS50ZXN0KHQpfTtlLmlzVmFsaWRGZXRjaFVybD1pc1ZhbGlkRmV0Y2hVcmw7ZS5sb2FkU2NyaXB0PWZ1bmN0aW9uIGxvYWRTY3JpcHQodCxlPSExKXtyZXR1cm4gbmV3IFByb21pc2UoKChzLGkpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtuLnNyYz10O24ub25sb2FkPWZ1bmN0aW9uKHQpe2UmJm4ucmVtb3ZlKCk7cyh0KX07bi5vbmVycm9yPWZ1bmN0aW9uKCl7aShuZXcgRXJyb3IoYENhbm5vdCBsb2FkIHNjcmlwdCBhdDogJHtuLnNyY31gKSl9Oyhkb2N1bWVudC5oZWFkfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZChuKX0pKX07dmFyIGk9cyg3KSxuPXMoMSk7ZS5Bbm5vdGF0aW9uUHJlZml4PSJwZGZqc19pbnRlcm5hbF9pZF8iO2NsYXNzIFBpeGVsc1BlckluY2h7c3RhdGljIENTUz05NjtzdGF0aWMgUERGPTcyO3N0YXRpYyBQREZfVE9fQ1NTX1VOSVRTPXRoaXMuQ1NTL3RoaXMuUERGfWUuUGl4ZWxzUGVySW5jaD1QaXhlbHNQZXJJbmNoO2NsYXNzIERPTUNhbnZhc0ZhY3RvcnkgZXh0ZW5kcyBpLkJhc2VDYW52YXNGYWN0b3J5e2NvbnN0cnVjdG9yKHtvd25lckRvY3VtZW50OnQ9Z2xvYmFsVGhpcy5kb2N1bWVudH09e30pe3N1cGVyKCk7dGhpcy5fZG9jdW1lbnQ9dH1fY3JlYXRlQ2FudmFzKHQsZSl7Y29uc3Qgcz10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtzLndpZHRoPXQ7cy5oZWlnaHQ9ZTtyZXR1cm4gc319ZS5ET01DYW52YXNGYWN0b3J5PURPTUNhbnZhc0ZhY3Rvcnk7YXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKHQsZT0hMSl7aWYoaXNWYWxpZEZldGNoVXJsKHQsZG9jdW1lbnQuYmFzZVVSSSkpe2NvbnN0IHM9YXdhaXQgZmV0Y2godCk7aWYoIXMub2spdGhyb3cgbmV3IEVycm9yKHMuc3RhdHVzVGV4dCk7cmV0dXJuIGU/bmV3IFVpbnQ4QXJyYXkoYXdhaXQgcy5hcnJheUJ1ZmZlcigpKTooMCxuLnN0cmluZ1RvQnl0ZXMpKGF3YWl0IHMudGV4dCgpKX1yZXR1cm4gbmV3IFByb21pc2UoKChzLGkpPT57Y29uc3Qgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7ci5vcGVuKCJHRVQiLHQsITApO2UmJihyLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKTtyLm9ucmVhZHlzdGF0ZWNoYW5nZT0oKT0+e2lmKHIucmVhZHlTdGF0ZT09PVhNTEh0dHBSZXF1ZXN0LkRPTkUpe2lmKDIwMD09PXIuc3RhdHVzfHwwPT09ci5zdGF0dXMpe2xldCB0O2UmJnIucmVzcG9uc2U/dD1uZXcgVWludDhBcnJheShyLnJlc3BvbnNlKTohZSYmci5yZXNwb25zZVRleHQmJih0PSgwLG4uc3RyaW5nVG9CeXRlcykoci5yZXNwb25zZVRleHQpKTtpZih0KXtzKHQpO3JldHVybn19aShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9fTtyLnNlbmQobnVsbCl9KSl9Y2xhc3MgRE9NQ01hcFJlYWRlckZhY3RvcnkgZXh0ZW5kcyBpLkJhc2VDTWFwUmVhZGVyRmFjdG9yeXtfZmV0Y2hEYXRhKHQsZSl7cmV0dXJuIGZldGNoRGF0YSh0LHRoaXMuaXNDb21wcmVzc2VkKS50aGVuKCh0PT4oe2NNYXBEYXRhOnQsY29tcHJlc3Npb25UeXBlOmV9KSkpfX1lLkRPTUNNYXBSZWFkZXJGYWN0b3J5PURPTUNNYXBSZWFkZXJGYWN0b3J5O2NsYXNzIERPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5IGV4dGVuZHMgaS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnl7X2ZldGNoRGF0YSh0KXtyZXR1cm4gZmV0Y2hEYXRhKHQsITApfX1lLkRPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PURPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5O2NsYXNzIERPTVNWR0ZhY3RvcnkgZXh0ZW5kcyBpLkJhc2VTVkdGYWN0b3J5e19jcmVhdGVTVkcodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQpfX1lLkRPTVNWR0ZhY3Rvcnk9RE9NU1ZHRmFjdG9yeTtjbGFzcyBQYWdlVmlld3BvcnR7Y29uc3RydWN0b3Ioe3ZpZXdCb3g6dCxzY2FsZTplLHJvdGF0aW9uOnMsb2Zmc2V0WDppPTAsb2Zmc2V0WTpuPTAsZG9udEZsaXA6cj0hMX0pe3RoaXMudmlld0JveD10O3RoaXMuc2NhbGU9ZTt0aGlzLnJvdGF0aW9uPXM7dGhpcy5vZmZzZXRYPWk7dGhpcy5vZmZzZXRZPW47Y29uc3QgYT0odFsyXSt0WzBdKS8yLG89KHRbM10rdFsxXSkvMjtsZXQgbCxjLGgsZCx1LHAsZyxtOyhzJT0zNjApPDAmJihzKz0zNjApO3N3aXRjaChzKXtjYXNlIDE4MDpsPS0xO2M9MDtoPTA7ZD0xO2JyZWFrO2Nhc2UgOTA6bD0wO2M9MTtoPTE7ZD0wO2JyZWFrO2Nhc2UgMjcwOmw9MDtjPS0xO2g9LTE7ZD0wO2JyZWFrO2Nhc2UgMDpsPTE7Yz0wO2g9MDtkPS0xO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJQYWdlVmlld3BvcnQ6IEludmFsaWQgcm90YXRpb24sIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA5MCBkZWdyZWVzLiIpfWlmKHIpe2g9LWg7ZD0tZH1pZigwPT09bCl7dT1NYXRoLmFicyhvLXRbMV0pKmUraTtwPU1hdGguYWJzKGEtdFswXSkqZStuO2c9TWF0aC5hYnModFszXS10WzFdKSplO209TWF0aC5hYnModFsyXS10WzBdKSplfWVsc2V7dT1NYXRoLmFicyhhLXRbMF0pKmUraTtwPU1hdGguYWJzKG8tdFsxXSkqZStuO2c9TWF0aC5hYnModFsyXS10WzBdKSplO209TWF0aC5hYnModFszXS10WzFdKSplfXRoaXMudHJhbnNmb3JtPVtsKmUsYyplLGgqZSxkKmUsdS1sKmUqYS1oKmUqbyxwLWMqZSphLWQqZSpvXTt0aGlzLndpZHRoPWc7dGhpcy5oZWlnaHQ9bX1jbG9uZSh7c2NhbGU6dD10aGlzLnNjYWxlLHJvdGF0aW9uOmU9dGhpcy5yb3RhdGlvbixvZmZzZXRYOnM9dGhpcy5vZmZzZXRYLG9mZnNldFk6aT10aGlzLm9mZnNldFksZG9udEZsaXA6bj0hMX09e30pe3JldHVybiBuZXcgUGFnZVZpZXdwb3J0KHt2aWV3Qm94OnRoaXMudmlld0JveC5zbGljZSgpLHNjYWxlOnQscm90YXRpb246ZSxvZmZzZXRYOnMsb2Zmc2V0WTppLGRvbnRGbGlwOm59KX1jb252ZXJ0VG9WaWV3cG9ydFBvaW50KHQsZSl7cmV0dXJuIG4uVXRpbC5hcHBseVRyYW5zZm9ybShbdCxlXSx0aGlzLnRyYW5zZm9ybSl9Y29udmVydFRvVmlld3BvcnRSZWN0YW5nbGUodCl7Y29uc3QgZT1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3RbMF0sdFsxXV0sdGhpcy50cmFuc2Zvcm0pLHM9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFt0WzJdLHRbM11dLHRoaXMudHJhbnNmb3JtKTtyZXR1cm5bZVswXSxlWzFdLHNbMF0sc1sxXV19Y29udmVydFRvUGRmUG9pbnQodCxlKXtyZXR1cm4gbi5VdGlsLmFwcGx5SW52ZXJzZVRyYW5zZm9ybShbdCxlXSx0aGlzLnRyYW5zZm9ybSl9fWUuUGFnZVZpZXdwb3J0PVBhZ2VWaWV3cG9ydDtjbGFzcyBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24gZXh0ZW5kcyBuLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LCJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKTt0aGlzLnR5cGU9ZX19ZS5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249UmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO2Z1bmN0aW9uIGlzRGF0YVNjaGVtZSh0KXtjb25zdCBlPXQubGVuZ3RoO2xldCBzPTA7Zm9yKDtzPGUmJiIiPT09dFtzXS50cmltKCk7KXMrKztyZXR1cm4iZGF0YToiPT09dC5zdWJzdHJpbmcocyxzKzUpLnRvTG93ZXJDYXNlKCl9ZS5TdGF0VGltZXI9Y2xhc3MgU3RhdFRpbWVye2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydGVkPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy50aW1lcz1bXX10aW1lKHQpe3QgaW4gdGhpcy5zdGFydGVkJiYoMCxuLndhcm4pKGBUaW1lciBpcyBhbHJlYWR5IHJ1bm5pbmcgZm9yICR7dH1gKTt0aGlzLnN0YXJ0ZWRbdF09RGF0ZS5ub3coKX10aW1lRW5kKHQpe3QgaW4gdGhpcy5zdGFydGVkfHwoMCxuLndhcm4pKGBUaW1lciBoYXMgbm90IGJlZW4gc3RhcnRlZCBmb3IgJHt0fWApO3RoaXMudGltZXMucHVzaCh7bmFtZTp0LHN0YXJ0OnRoaXMuc3RhcnRlZFt0XSxlbmQ6RGF0ZS5ub3coKX0pO2RlbGV0ZSB0aGlzLnN0YXJ0ZWRbdF19dG9TdHJpbmcoKXtjb25zdCB0PVtdO2xldCBlPTA7Zm9yKGNvbnN0IHQgb2YgdGhpcy50aW1lcyl7Y29uc3Qgcz10Lm5hbWU7cy5sZW5ndGg+ZSYmKGU9cy5sZW5ndGgpfWZvcihjb25zdCBzIG9mIHRoaXMudGltZXMpe2NvbnN0IGk9cy5lbmQtcy5zdGFydDt0LnB1c2goYCR7cy5uYW1lLnBhZEVuZChlKX0gJHtpfW1zXG5gKX1yZXR1cm4gdC5qb2luKCIiKX19O2Z1bmN0aW9uIGlzVmFsaWRGZXRjaFVybCh0LGUpe3RyeXtjb25zdHtwcm90b2NvbDpzfT1lP25ldyBVUkwodCxlKTpuZXcgVVJMKHQpO3JldHVybiJodHRwOiI9PT1zfHwiaHR0cHM6Ij09PXN9Y2F0Y2godCl7cmV0dXJuITF9fWxldCByO2UuUERGRGF0ZVN0cmluZz1jbGFzcyBQREZEYXRlU3RyaW5ne3N0YXRpYyB0b0RhdGVPYmplY3QodCl7aWYoIXR8fCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gbnVsbDtyfHwocj1uZXcgUmVnRXhwKCJeRDooXFxkezR9KShcXGR7Mn0pPyhcXGR7Mn0pPyhcXGR7Mn0pPyhcXGR7Mn0pPyhcXGR7Mn0pPyhbWnwrfC1dKT8oXFxkezJ9KT8nPyhcXGR7Mn0pPyc/IikpO2NvbnN0IGU9ci5leGVjKHQpO2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHM9cGFyc2VJbnQoZVsxXSwxMCk7bGV0IGk9cGFyc2VJbnQoZVsyXSwxMCk7aT1pPj0xJiZpPD0xMj9pLTE6MDtsZXQgbj1wYXJzZUludChlWzNdLDEwKTtuPW4+PTEmJm48PTMxP246MTtsZXQgYT1wYXJzZUludChlWzRdLDEwKTthPWE+PTAmJmE8PTIzP2E6MDtsZXQgbz1wYXJzZUludChlWzVdLDEwKTtvPW8+PTAmJm88PTU5P286MDtsZXQgbD1wYXJzZUludChlWzZdLDEwKTtsPWw+PTAmJmw8PTU5P2w6MDtjb25zdCBjPWVbN118fCJaIjtsZXQgaD1wYXJzZUludChlWzhdLDEwKTtoPWg+PTAmJmg8PTIzP2g6MDtsZXQgZD1wYXJzZUludChlWzldLDEwKXx8MDtkPWQ+PTAmJmQ8PTU5P2Q6MDtpZigiLSI9PT1jKXthKz1oO28rPWR9ZWxzZSBpZigiKyI9PT1jKXthLT1oO28tPWR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHMsaSxuLGEsbyxsKSl9fTtmdW5jdGlvbiBnZXRSR0IodCl7aWYodC5zdGFydHNXaXRoKCIjIikpe2NvbnN0IGU9cGFyc2VJbnQodC5zbGljZSgxKSwxNik7cmV0dXJuWygxNjcxMTY4MCZlKT4+MTYsKDY1MjgwJmUpPj44LDI1NSZlXX1pZih0LnN0YXJ0c1dpdGgoInJnYigiKSlyZXR1cm4gdC5zbGljZSg0LC0xKS5zcGxpdCgiLCIpLm1hcCgodD0+cGFyc2VJbnQodCkpKTtpZih0LnN0YXJ0c1dpdGgoInJnYmEoIikpcmV0dXJuIHQuc2xpY2UoNSwtMSkuc3BsaXQoIiwiKS5tYXAoKHQ9PnBhcnNlSW50KHQpKSkuc2xpY2UoMCwzKTsoMCxuLndhcm4pKGBOb3QgYSB2YWxpZCBjb2xvciBmb3JtYXQ6ICIke3R9ImApO3JldHVyblswLDAsMF19fSwodCxlLHMpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWUuQmFzZVNWR0ZhY3Rvcnk9ZS5CYXNlQ2FudmFzRmFjdG9yeT1lLkJhc2VDTWFwUmVhZGVyRmFjdG9yeT12b2lkIDA7dmFyIGk9cygxKTtjbGFzcyBCYXNlQ2FudmFzRmFjdG9yeXtjb25zdHJ1Y3Rvcigpe3RoaXMuY29uc3RydWN0b3I9PT1CYXNlQ2FudmFzRmFjdG9yeSYmKDAsaS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VDYW52YXNGYWN0b3J5LiIpfWNyZWF0ZSh0LGUpe2lmKHQ8PTB8fGU8PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbnZhcyBzaXplIik7Y29uc3Qgcz10aGlzLl9jcmVhdGVDYW52YXModCxlKTtyZXR1cm57Y2FudmFzOnMsY29udGV4dDpzLmdldENvbnRleHQoIjJkIil9fXJlc2V0KHQsZSxzKXtpZighdC5jYW52YXMpdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgaXMgbm90IHNwZWNpZmllZCIpO2lmKGU8PTB8fHM8PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbnZhcyBzaXplIik7dC5jYW52YXMud2lkdGg9ZTt0LmNhbnZhcy5oZWlnaHQ9c31kZXN0cm95KHQpe2lmKCF0LmNhbnZhcyl0aHJvdyBuZXcgRXJyb3IoIkNhbnZhcyBpcyBub3Qgc3BlY2lmaWVkIik7dC5jYW52YXMud2lkdGg9MDt0LmNhbnZhcy5oZWlnaHQ9MDt0LmNhbnZhcz1udWxsO3QuY29udGV4dD1udWxsfV9jcmVhdGVDYW52YXModCxlKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBfY3JlYXRlQ2FudmFzYCBjYWxsZWQuIil9fWUuQmFzZUNhbnZhc0ZhY3Rvcnk9QmFzZUNhbnZhc0ZhY3Rvcnk7Y2xhc3MgQmFzZUNNYXBSZWFkZXJGYWN0b3J5e2NvbnN0cnVjdG9yKHtiYXNlVXJsOnQ9bnVsbCxpc0NvbXByZXNzZWQ6ZT0hMX0pe3RoaXMuY29uc3RydWN0b3I9PT1CYXNlQ01hcFJlYWRlckZhY3RvcnkmJigwLGkudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlQ01hcFJlYWRlckZhY3RvcnkuIik7dGhpcy5iYXNlVXJsPXQ7dGhpcy5pc0NvbXByZXNzZWQ9ZX1hc3luYyBmZXRjaCh7bmFtZTp0fSl7aWYoIXRoaXMuYmFzZVVybCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBDTWFwICJiYXNlVXJsIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQsIGVuc3VyZSB0aGF0IHRoZSAiY01hcFVybCIgYW5kICJjTWFwUGFja2VkIiBBUEkgcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQuJyk7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJDTWFwIG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuIik7Y29uc3QgZT10aGlzLmJhc2VVcmwrdCsodGhpcy5pc0NvbXByZXNzZWQ/Ii5iY21hcCI6IiIpLHM9dGhpcy5pc0NvbXByZXNzZWQ/aS5DTWFwQ29tcHJlc3Npb25UeXBlLkJJTkFSWTppLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORTtyZXR1cm4gdGhpcy5fZmV0Y2hEYXRhKGUscykuY2F0Y2goKHQ9Pnt0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkICR7dGhpcy5pc0NvbXByZXNzZWQ/ImJpbmFyeSAiOiIifUNNYXAgYXQ6ICR7ZX1gKX0pKX1fZmV0Y2hEYXRhKHQsZSl7KDAsaS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX2ZldGNoRGF0YWAgY2FsbGVkLiIpfX1lLkJhc2VDTWFwUmVhZGVyRmFjdG9yeT1CYXNlQ01hcFJlYWRlckZhY3Rvcnk7Y2xhc3MgQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5e2NvbnN0cnVjdG9yKHtiYXNlVXJsOnQ9bnVsbH0pe3RoaXMuY29uc3RydWN0b3I9PT1CYXNlU3RhbmRhcmRGb250RGF0YUZhY3RvcnkmJigwLGkudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RhbmRhcmRGb250RGF0YUZhY3RvcnkuIik7dGhpcy5iYXNlVXJsPXR9YXN5bmMgZmV0Y2goe2ZpbGVuYW1lOnR9KXtpZighdGhpcy5iYXNlVXJsKXRocm93IG5ldyBFcnJvcignVGhlIHN0YW5kYXJkIGZvbnQgImJhc2VVcmwiIHBhcmFtZXRlciBtdXN0IGJlIHNwZWNpZmllZCwgZW5zdXJlIHRoYXQgdGhlICJzdGFuZGFyZEZvbnREYXRhVXJsIiBBUEkgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLicpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiRm9udCBmaWxlbmFtZSBtdXN0IGJlIHNwZWNpZmllZC4iKTtjb25zdCBlPWAke3RoaXMuYmFzZVVybH0ke3R9YDtyZXR1cm4gdGhpcy5fZmV0Y2hEYXRhKGUpLmNhdGNoKCh0PT57dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmb250IGRhdGEgYXQ6ICR7ZX1gKX0pKX1fZmV0Y2hEYXRhKHQpeygwLGkudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYF9mZXRjaERhdGFgIGNhbGxlZC4iKX19ZS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk9QmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5O2NsYXNzIEJhc2VTVkdGYWN0b3J5e2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VTVkdGYWN0b3J5JiYoMCxpLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNWR0ZhY3RvcnkuIil9Y3JlYXRlKHQsZSxzPSExKXtpZih0PD0wfHxlPD0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTVkcgZGltZW5zaW9ucyIpO2NvbnN0IGk9dGhpcy5fY3JlYXRlU1ZHKCJzdmc6c3ZnIik7aS5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKTtpZighcyl7aS5zZXRBdHRyaWJ1dGUoIndpZHRoIixgJHt0fXB4YCk7aS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsYCR7ZX1weGApfWkuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwibm9uZSIpO2kuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixgMCAwICR7dH0gJHtlfWApO3JldHVybiBpfWNyZWF0ZUVsZW1lbnQodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTVkcgZWxlbWVudCB0eXBlIik7cmV0dXJuIHRoaXMuX2NyZWF0ZVNWRyh0KX1fY3JlYXRlU1ZHKHQpeygwLGkudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYF9jcmVhdGVTVkdgIGNhbGxlZC4iKX19ZS5CYXNlU1ZHRmFjdG9yeT1CYXNlU1ZHRmFjdG9yeX0sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLk11cm11ckhhc2gzXzY0PXZvaWQgMDt2YXIgaT1zKDEpO2NvbnN0IG49MzI4NTM3NzUyMCxyPTQyOTQ5MDE3NjAsYT02NTUzNTtlLk11cm11ckhhc2gzXzY0PWNsYXNzIE11cm11ckhhc2gzXzY0e2NvbnN0cnVjdG9yKHQpe3RoaXMuaDE9dD80Mjk0OTY3Mjk1JnQ6bjt0aGlzLmgyPXQ/NDI5NDk2NzI5NSZ0Om59dXBkYXRlKHQpe2xldCBlLHM7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtlPW5ldyBVaW50OEFycmF5KDIqdC5sZW5ndGgpO3M9MDtmb3IobGV0IGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspe2NvbnN0IG49dC5jaGFyQ29kZUF0KGkpO2lmKG48PTI1NSllW3MrK109bjtlbHNle2VbcysrXT1uPj4+ODtlW3MrK109MjU1Jm59fX1lbHNle2lmKCEoMCxpLmlzQXJyYXlCdWZmZXIpKHQpKXRocm93IG5ldyBFcnJvcigiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LiIpO2U9dC5zbGljZSgpO3M9ZS5ieXRlTGVuZ3RofWNvbnN0IG49cz4+MixvPXMtNCpuLGw9bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyLDAsbik7bGV0IGM9MCxoPTAsZD10aGlzLmgxLHU9dGhpcy5oMjtjb25zdCBwPTM0MzI5MTgzNTMsZz00NjE4NDU5MDcsbT0xMTYwMSxmPTEzNzE1O2ZvcihsZXQgdD0wO3Q8bjt0KyspaWYoMSZ0KXtjPWxbdF07Yz1jKnAmcnxjKm0mYTtjPWM8PDE1fGM+Pj4xNztjPWMqZyZyfGMqZiZhO2RePWM7ZD1kPDwxM3xkPj4+MTk7ZD01KmQrMzg2NDI5MjE5Nn1lbHNle2g9bFt0XTtoPWgqcCZyfGgqbSZhO2g9aDw8MTV8aD4+PjE3O2g9aCpnJnJ8aCpmJmE7dV49aDt1PXU8PDEzfHU+Pj4xOTt1PTUqdSszODY0MjkyMTk2fWM9MDtzd2l0Y2gobyl7Y2FzZSAzOmNePWVbNCpuKzJdPDwxNjtjYXNlIDI6Y149ZVs0Km4rMV08PDg7Y2FzZSAxOmNePWVbNCpuXTtjPWMqcCZyfGMqbSZhO2M9Yzw8MTV8Yz4+PjE3O2M9YypnJnJ8YypmJmE7MSZuP2RePWM6dV49Y310aGlzLmgxPWQ7dGhpcy5oMj11fWhleGRpZ2VzdCgpe2xldCB0PXRoaXMuaDEsZT10aGlzLmgyO3RePWU+Pj4xO3Q9Mzk4MTgwNjc5Nyp0JnJ8MzYwNDUqdCZhO2U9NDI4MzU0MzUxMSplJnJ8KDI5NTAxNjM3OTcqKGU8PDE2fHQ+Pj4xNikmcik+Pj4xNjt0Xj1lPj4+MTt0PTQ0NDk4NDQwMyp0JnJ8NjA0OTkqdCZhO2U9MzMwMTg4MjM2NiplJnJ8KDMxMjA0Mzc4OTMqKGU8PDE2fHQ+Pj4xNikmcik+Pj4xNjt0Xj1lPj4+MTtjb25zdCBzPSh0Pj4+MCkudG9TdHJpbmcoMTYpLGk9KGU+Pj4wKS50b1N0cmluZygxNik7cmV0dXJuIHMucGFkU3RhcnQoOCwiMCIpK2kucGFkU3RhcnQoOCwiMCIpfX19LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5Gb250TG9hZGVyPWUuRm9udEZhY2VPYmplY3Q9dm9pZCAwO3ZhciBpPXMoMSk7ZS5Gb250TG9hZGVyPWNsYXNzIEZvbnRMb2FkZXJ7Y29uc3RydWN0b3Ioe29uVW5zdXBwb3J0ZWRGZWF0dXJlOnQsb3duZXJEb2N1bWVudDplPWdsb2JhbFRoaXMuZG9jdW1lbnQsc3R5bGVFbGVtZW50OnM9bnVsbH0pe3RoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlPXQ7dGhpcy5fZG9jdW1lbnQ9ZTt0aGlzLm5hdGl2ZUZvbnRGYWNlcz1bXTt0aGlzLnN0eWxlRWxlbWVudD1udWxsO3RoaXMubG9hZGluZ1JlcXVlc3RzPVtdO3RoaXMubG9hZFRlc3RGb250SWQ9MH1hZGROYXRpdmVGb250RmFjZSh0KXt0aGlzLm5hdGl2ZUZvbnRGYWNlcy5wdXNoKHQpO3RoaXMuX2RvY3VtZW50LmZvbnRzLmFkZCh0KX1pbnNlcnRSdWxlKHQpe2lmKCF0aGlzLnN0eWxlRWxlbWVudCl7dGhpcy5zdHlsZUVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmQodGhpcy5zdHlsZUVsZW1lbnQpfWNvbnN0IGU9dGhpcy5zdHlsZUVsZW1lbnQuc2hlZXQ7ZS5pbnNlcnRSdWxlKHQsZS5jc3NSdWxlcy5sZW5ndGgpfWNsZWFyKCl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5uYXRpdmVGb250RmFjZXMpdGhpcy5fZG9jdW1lbnQuZm9udHMuZGVsZXRlKHQpO3RoaXMubmF0aXZlRm9udEZhY2VzLmxlbmd0aD0wO2lmKHRoaXMuc3R5bGVFbGVtZW50KXt0aGlzLnN0eWxlRWxlbWVudC5yZW1vdmUoKTt0aGlzLnN0eWxlRWxlbWVudD1udWxsfX1hc3luYyBiaW5kKHQpe2lmKHQuYXR0YWNoZWR8fHQubWlzc2luZ0ZpbGUpcmV0dXJuO3QuYXR0YWNoZWQ9ITA7aWYodGhpcy5pc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkKXtjb25zdCBlPXQuY3JlYXRlTmF0aXZlRm9udEZhY2UoKTtpZihlKXt0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKGUpO3RyeXthd2FpdCBlLmxvYWRlZH1jYXRjaChzKXt0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7ZmVhdHVyZUlkOmkuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250TG9hZE5hdGl2ZX0pOygwLGkud2FybikoYEZhaWxlZCB0byBsb2FkIGZvbnQgJyR7ZS5mYW1pbHl9JzogJyR7c30nLmApO3QuZGlzYWJsZUZvbnRGYWNlPSEwO3Rocm93IHN9fXJldHVybn1jb25zdCBlPXQuY3JlYXRlRm9udEZhY2VSdWxlKCk7aWYoZSl7dGhpcy5pbnNlcnRSdWxlKGUpO2lmKHRoaXMuaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQpcmV0dXJuO2F3YWl0IG5ldyBQcm9taXNlKChlPT57Y29uc3Qgcz10aGlzLl9xdWV1ZUxvYWRpbmdDYWxsYmFjayhlKTt0aGlzLl9wcmVwYXJlRm9udExvYWRFdmVudCh0LHMpfSkpfX1nZXQgaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCgpe2NvbnN0IHQ9ISF0aGlzLl9kb2N1bWVudD8uZm9udHM7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLHQpfWdldCBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCgpe2xldCB0PSExO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yKXQ9ITA7ZWxzZXsvTW96aWxsYVwvNS4wLio/cnY6KFxkKykuKj8gR2Vja28vLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk/LlsxXT49MTQmJih0PSEwKX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLHQpfV9xdWV1ZUxvYWRpbmdDYWxsYmFjayh0KXtjb25zdHtsb2FkaW5nUmVxdWVzdHM6ZX09dGhpcyxzPXtkb25lOiExLGNvbXBsZXRlOmZ1bmN0aW9uIGNvbXBsZXRlUmVxdWVzdCgpeygwLGkuYXNzZXJ0KSghcy5kb25lLCJjb21wbGV0ZVJlcXVlc3QoKSBjYW5ub3QgYmUgY2FsbGVkIHR3aWNlLiIpO3MuZG9uZT0hMDtmb3IoO2UubGVuZ3RoPjAmJmVbMF0uZG9uZTspe2NvbnN0IHQ9ZS5zaGlmdCgpO3NldFRpbWVvdXQodC5jYWxsYmFjaywwKX19LGNhbGxiYWNrOnR9O2UucHVzaChzKTtyZXR1cm4gc31nZXQgX2xvYWRUZXN0Rm9udCgpe2NvbnN0IHQ9YXRvYigiVDFSVVR3QUxBSUFBQXdBd1EwWkdJREh0Wmc0QUFBT1lBQUFBZ1VaR1ZFMWxrelp3QUFBRUhBQUFBQnhIUkVWR0FCUUFGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQUFMd0FBQUEyYUdobFlRZGtBK29BQUFEMEFBQUFKR2h0ZEhnRDZBQUFBQUFFV0FBQUFBWnRZWGh3QUFKUUFBQUFBUmdBQUFBR2JtRnRaVmptZEg0QUFBR0FBQUFBc1hCdmMzVC9oZ0F6QUFBRGVBQUFBQ0FBQVFBQUFBRUFBTFpSRnNSZkR6ejFBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRDZBQUFBQUFENkFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQVVBQUFBZ0FBQUFRRDZBSDBBQVVBQUFLS0Fyd0FBQUNNQW9vQ3ZBQUFBZUFBTVFFQ0FBQUNBQVlKQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFGQm1SV1FBd0FBdUFDNERJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQUFBRUFBUUFBQUFFQUFBQUFBQUlBQVFBQUFBRUFBQUFBQUFNQUFRQUFBQUVBQUFBQUFBUUFBUUFBQUFFQUFBQUFBQVVBQVFBQUFBRUFBQUFBQUFZQUFRQUFBQU1BQVFRSkFBQUFBZ0FCQUFNQUFRUUpBQUVBQWdBQkFBTUFBUVFKQUFJQUFnQUJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWUFBQUFBQUFBQXdBQUFBTUFBQUFjQUFFQUFBQUFBRHdBQXdBQkFBQUFIQUFFQUNBQUFBQUVBQVFBQVFBQUFDNy8vd0FBQUM3Ly8vL1RBQUVBQUFBQUFBQUJCZ0FBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQUFBQUFBRC9nd0F5QUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBUUVBQUVCQVFKWUFBRUJBU0g0RHdENEd3SEVBdmdjQS9nWEJJd01BWXVMK256NXRRWGtENWozQ0JMbkVRQUNBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90M0RvdjZmQUg2ZkFUK2ZQcDgrbndIRG9zTUN2bTFDdm0xREF6NmZCUUFBQUFBQUFBQkFBQUFBTW1KYnpFQUFBQUF6Z1RqRlFBQUFBRE9CT1FwQUFFQUFBQUFBQUFBREFBVUFBUUFBQUFCQUFBQUFnQUJBQUFBQUFBQUFBQUQ2QUFBQUFBQUFBPT0iKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiX2xvYWRUZXN0Rm9udCIsdCl9X3ByZXBhcmVGb250TG9hZEV2ZW50KHQsZSl7ZnVuY3Rpb24gaW50MzIodCxlKXtyZXR1cm4gdC5jaGFyQ29kZUF0KGUpPDwyNHx0LmNoYXJDb2RlQXQoZSsxKTw8MTZ8dC5jaGFyQ29kZUF0KGUrMik8PDh8MjU1JnQuY2hhckNvZGVBdChlKzMpfWZ1bmN0aW9uIHNwbGljZVN0cmluZyh0LGUscyxpKXtyZXR1cm4gdC5zdWJzdHJpbmcoMCxlKStpK3Quc3Vic3RyaW5nKGUrcyl9bGV0IHMsbjtjb25zdCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Iud2lkdGg9MTtyLmhlaWdodD0xO2NvbnN0IGE9ci5nZXRDb250ZXh0KCIyZCIpO2xldCBvPTA7Y29uc3QgbD1gbHQke0RhdGUubm93KCl9JHt0aGlzLmxvYWRUZXN0Rm9udElkKyt9YDtsZXQgYz10aGlzLl9sb2FkVGVzdEZvbnQ7Yz1zcGxpY2VTdHJpbmcoYyw5NzYsbC5sZW5ndGgsbCk7Y29uc3QgaD0xNDgyMTg0NzkyO2xldCBkPWludDMyKGMsMTYpO2ZvcihzPTAsbj1sLmxlbmd0aC0zO3M8bjtzKz00KWQ9ZC1oK2ludDMyKGwscyl8MDtzPGwubGVuZ3RoJiYoZD1kLWgraW50MzIobCsiWFhYIixzKXwwKTtjPXNwbGljZVN0cmluZyhjLDE2LDQsKDAsaS5zdHJpbmczMikoZCkpO2NvbnN0IHU9YEBmb250LWZhY2Uge2ZvbnQtZmFtaWx5OiIke2x9IjtzcmM6JHtgdXJsKGRhdGE6Zm9udC9vcGVudHlwZTtiYXNlNjQsJHtidG9hKGMpfSk7YH19YDt0aGlzLmluc2VydFJ1bGUodSk7Y29uc3QgcD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtwLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7cC5zdHlsZS53aWR0aD1wLnN0eWxlLmhlaWdodD0iMTBweCI7cC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO3Auc3R5bGUudG9wPXAuc3R5bGUubGVmdD0iMHB4Ijtmb3IoY29uc3QgZSBvZlt0LmxvYWRlZE5hbWUsbF0pe2NvbnN0IHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3QudGV4dENvbnRlbnQ9IkhpIjt0LnN0eWxlLmZvbnRGYW1pbHk9ZTtwLmFwcGVuZCh0KX10aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZChwKTshZnVuY3Rpb24gaXNGb250UmVhZHkodCxlKXtpZigrK28+MzApeygwLGkud2FybikoIkxvYWQgdGVzdCBmb250IG5ldmVyIGxvYWRlZC4iKTtlKCk7cmV0dXJufWEuZm9udD0iMzBweCAiK3Q7YS5maWxsVGV4dCgiLiIsMCwyMCk7YS5nZXRJbWFnZURhdGEoMCwwLDEsMSkuZGF0YVszXT4wP2UoKTpzZXRUaW1lb3V0KGlzRm9udFJlYWR5LmJpbmQobnVsbCx0LGUpKX0obCwoKCk9PntwLnJlbW92ZSgpO2UuY29tcGxldGUoKX0pKX19O2UuRm9udEZhY2VPYmplY3Q9Y2xhc3MgRm9udEZhY2VPYmplY3R7Y29uc3RydWN0b3IodCx7aXNFdmFsU3VwcG9ydGVkOmU9ITAsZGlzYWJsZUZvbnRGYWNlOnM9ITEsaWdub3JlRXJyb3JzOmk9ITEsb25VbnN1cHBvcnRlZEZlYXR1cmU6bixmb250UmVnaXN0cnk6cj1udWxsfSl7dGhpcy5jb21waWxlZEdseXBocz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCBlIGluIHQpdGhpc1tlXT10W2VdO3RoaXMuaXNFdmFsU3VwcG9ydGVkPSExIT09ZTt0aGlzLmRpc2FibGVGb250RmFjZT0hMD09PXM7dGhpcy5pZ25vcmVFcnJvcnM9ITA9PT1pO3RoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlPW47dGhpcy5mb250UmVnaXN0cnk9cn1jcmVhdGVOYXRpdmVGb250RmFjZSgpe2lmKCF0aGlzLmRhdGF8fHRoaXMuZGlzYWJsZUZvbnRGYWNlKXJldHVybiBudWxsO2xldCB0O2lmKHRoaXMuY3NzRm9udEluZm8pe2NvbnN0IGU9e3dlaWdodDp0aGlzLmNzc0ZvbnRJbmZvLmZvbnRXZWlnaHR9O3RoaXMuY3NzRm9udEluZm8uaXRhbGljQW5nbGUmJihlLnN0eWxlPWBvYmxpcXVlICR7dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZX1kZWdgKTt0PW5ldyBGb250RmFjZSh0aGlzLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHksdGhpcy5kYXRhLGUpfWVsc2UgdD1uZXcgRm9udEZhY2UodGhpcy5sb2FkZWROYW1lLHRoaXMuZGF0YSx7fSk7dGhpcy5mb250UmVnaXN0cnk/LnJlZ2lzdGVyRm9udCh0aGlzKTtyZXR1cm4gdH1jcmVhdGVGb250RmFjZVJ1bGUoKXtpZighdGhpcy5kYXRhfHx0aGlzLmRpc2FibGVGb250RmFjZSlyZXR1cm4gbnVsbDtjb25zdCB0PSgwLGkuYnl0ZXNUb1N0cmluZykodGhpcy5kYXRhKSxlPWB1cmwoZGF0YToke3RoaXMubWltZXR5cGV9O2Jhc2U2NCwke2J0b2EodCl9KTtgO2xldCBzO2lmKHRoaXMuY3NzRm9udEluZm8pe2xldCB0PWBmb250LXdlaWdodDogJHt0aGlzLmNzc0ZvbnRJbmZvLmZvbnRXZWlnaHR9O2A7dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSYmKHQrPWBmb250LXN0eWxlOiBvYmxpcXVlICR7dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZX1kZWc7YCk7cz1gQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6IiR7dGhpcy5jc3NGb250SW5mby5mb250RmFtaWx5fSI7JHt0fXNyYzoke2V9fWB9ZWxzZSBzPWBAZm9udC1mYWNlIHtmb250LWZhbWlseToiJHt0aGlzLmxvYWRlZE5hbWV9IjtzcmM6JHtlfX1gO3RoaXMuZm9udFJlZ2lzdHJ5Py5yZWdpc3RlckZvbnQodGhpcyxlKTtyZXR1cm4gc31nZXRQYXRoR2VuZXJhdG9yKHQsZSl7aWYodm9pZCAwIT09dGhpcy5jb21waWxlZEdseXBoc1tlXSlyZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1tlXTtsZXQgczt0cnl7cz10LmdldCh0aGlzLmxvYWRlZE5hbWUrIl9wYXRoXyIrZSl9Y2F0Y2godCl7aWYoIXRoaXMuaWdub3JlRXJyb3JzKXRocm93IHQ7dGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe2ZlYXR1cmVJZDppLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udEdldFBhdGh9KTsoMCxpLndhcm4pKGBnZXRQYXRoR2VuZXJhdG9yIC0gaWdub3JpbmcgY2hhcmFjdGVyOiAiJHt0fSIuYCk7cmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV09ZnVuY3Rpb24odCxlKXt9fWlmKHRoaXMuaXNFdmFsU3VwcG9ydGVkJiZpLkZlYXR1cmVUZXN0LmlzRXZhbFN1cHBvcnRlZCl7Y29uc3QgdD1bXTtmb3IoY29uc3QgZSBvZiBzKXtjb25zdCBzPXZvaWQgMCE9PWUuYXJncz9lLmFyZ3Muam9pbigiLCIpOiIiO3QucHVzaCgiYy4iLGUuY21kLCIoIixzLCIpO1xuIil9cmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV09bmV3IEZ1bmN0aW9uKCJjIiwic2l6ZSIsdC5qb2luKCIiKSl9cmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV09ZnVuY3Rpb24odCxlKXtmb3IoY29uc3QgaSBvZiBzKXsic2NhbGUiPT09aS5jbWQmJihpLmFyZ3M9W2UsLWVdKTt0W2kuY21kXS5hcHBseSh0LGkuYXJncyl9fX19fSwodCxlLHMpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuQ2FudmFzR3JhcGhpY3M9dm9pZCAwO3ZhciBpPXMoMSksbj1zKDYpLHI9cygxMSksYT1zKDEzKSxvPXMoMTIpO2NvbnN0IGw9NDA5NixjPW8uaXNOb2RlSlMmJiJ1bmRlZmluZWQiPT10eXBlb2YgUGF0aDJEPy0xOjFlMyxoPTE2O2NsYXNzIENhY2hlZENhbnZhc2Vze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FudmFzRmFjdG9yeT10O3RoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKX1nZXRDYW52YXModCxlLHMpe2xldCBpO2lmKHZvaWQgMCE9PXRoaXMuY2FjaGVbdF0pe2k9dGhpcy5jYWNoZVt0XTt0aGlzLmNhbnZhc0ZhY3RvcnkucmVzZXQoaSxlLHMpfWVsc2V7aT10aGlzLmNhbnZhc0ZhY3RvcnkuY3JlYXRlKGUscyk7dGhpcy5jYWNoZVt0XT1pfXJldHVybiBpfWRlbGV0ZSh0KXtkZWxldGUgdGhpcy5jYWNoZVt0XX1jbGVhcigpe2Zvcihjb25zdCB0IGluIHRoaXMuY2FjaGUpe2NvbnN0IGU9dGhpcy5jYWNoZVt0XTt0aGlzLmNhbnZhc0ZhY3RvcnkuZGVzdHJveShlKTtkZWxldGUgdGhpcy5jYWNoZVt0XX19fWZ1bmN0aW9uIGRyYXdJbWFnZUF0SW50ZWdlckNvb3Jkcyh0LGUscyxpLHIsYSxvLGwsYyxoKXtjb25zdFtkLHUscCxnLG0sZl09KDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtKSh0KTtpZigwPT09dSYmMD09PXApe2NvbnN0IG49bypkK20sYj1NYXRoLnJvdW5kKG4pLEE9bCpnK2YsXz1NYXRoLnJvdW5kKEEpLHY9KG8rYykqZCttLHk9TWF0aC5hYnMoTWF0aC5yb3VuZCh2KS1iKXx8MSxTPShsK2gpKmcrZix4PU1hdGguYWJzKE1hdGgucm91bmQoUyktXyl8fDE7dC5zZXRUcmFuc2Zvcm0oTWF0aC5zaWduKGQpLDAsMCxNYXRoLnNpZ24oZyksYixfKTt0LmRyYXdJbWFnZShlLHMsaSxyLGEsMCwwLHkseCk7dC5zZXRUcmFuc2Zvcm0oZCx1LHAsZyxtLGYpO3JldHVyblt5LHhdfWlmKDA9PT1kJiYwPT09Zyl7Y29uc3Qgbj1sKnArbSxiPU1hdGgucm91bmQobiksQT1vKnUrZixfPU1hdGgucm91bmQoQSksdj0obCtoKSpwK20seT1NYXRoLmFicyhNYXRoLnJvdW5kKHYpLWIpfHwxLFM9KG8rYykqdStmLHg9TWF0aC5hYnMoTWF0aC5yb3VuZChTKS1fKXx8MTt0LnNldFRyYW5zZm9ybSgwLE1hdGguc2lnbih1KSxNYXRoLnNpZ24ocCksMCxiLF8pO3QuZHJhd0ltYWdlKGUscyxpLHIsYSwwLDAseCx5KTt0LnNldFRyYW5zZm9ybShkLHUscCxnLG0sZik7cmV0dXJuW3gseV19dC5kcmF3SW1hZ2UoZSxzLGkscixhLG8sbCxjLGgpO3JldHVybltNYXRoLmh5cG90KGQsdSkqYyxNYXRoLmh5cG90KHAsZykqaF19Y2xhc3MgQ2FudmFzRXh0cmFTdGF0ZXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYWxwaGFJc1NoYXBlPSExO3RoaXMuZm9udFNpemU9MDt0aGlzLmZvbnRTaXplU2NhbGU9MTt0aGlzLnRleHRNYXRyaXg9aS5JREVOVElUWV9NQVRSSVg7dGhpcy50ZXh0TWF0cml4U2NhbGU9MTt0aGlzLmZvbnRNYXRyaXg9aS5GT05UX0lERU5USVRZX01BVFJJWDt0aGlzLmxlYWRpbmc9MDt0aGlzLng9MDt0aGlzLnk9MDt0aGlzLmxpbmVYPTA7dGhpcy5saW5lWT0wO3RoaXMuY2hhclNwYWNpbmc9MDt0aGlzLndvcmRTcGFjaW5nPTA7dGhpcy50ZXh0SFNjYWxlPTE7dGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1pLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7dGhpcy50ZXh0UmlzZT0wO3RoaXMuZmlsbENvbG9yPSIjMDAwMDAwIjt0aGlzLnN0cm9rZUNvbG9yPSIjMDAwMDAwIjt0aGlzLnBhdHRlcm5GaWxsPSExO3RoaXMuZmlsbEFscGhhPTE7dGhpcy5zdHJva2VBbHBoYT0xO3RoaXMubGluZVdpZHRoPTE7dGhpcy5hY3RpdmVTTWFzaz1udWxsO3RoaXMudHJhbnNmZXJNYXBzPW51bGw7dGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KFswLDAsdCxlXSl9Y2xvbmUoKXtjb25zdCB0PU9iamVjdC5jcmVhdGUodGhpcyk7dC5jbGlwQm94PXRoaXMuY2xpcEJveC5zbGljZSgpO3JldHVybiB0fXNldEN1cnJlbnRQb2ludCh0LGUpe3RoaXMueD10O3RoaXMueT1lfXVwZGF0ZVBhdGhNaW5NYXgodCxlLHMpe1tlLHNdPWkuVXRpbC5hcHBseVRyYW5zZm9ybShbZSxzXSx0KTt0aGlzLm1pblg9TWF0aC5taW4odGhpcy5taW5YLGUpO3RoaXMubWluWT1NYXRoLm1pbih0aGlzLm1pblkscyk7dGhpcy5tYXhYPU1hdGgubWF4KHRoaXMubWF4WCxlKTt0aGlzLm1heFk9TWF0aC5tYXgodGhpcy5tYXhZLHMpfXVwZGF0ZVJlY3RNaW5NYXgodCxlKXtjb25zdCBzPWkuVXRpbC5hcHBseVRyYW5zZm9ybShlLHQpLG49aS5VdGlsLmFwcGx5VHJhbnNmb3JtKGUuc2xpY2UoMiksdCk7dGhpcy5taW5YPU1hdGgubWluKHRoaXMubWluWCxzWzBdLG5bMF0pO3RoaXMubWluWT1NYXRoLm1pbih0aGlzLm1pblksc1sxXSxuWzFdKTt0aGlzLm1heFg9TWF0aC5tYXgodGhpcy5tYXhYLHNbMF0sblswXSk7dGhpcy5tYXhZPU1hdGgubWF4KHRoaXMubWF4WSxzWzFdLG5bMV0pfXVwZGF0ZVNjYWxpbmdQYXRoTWluTWF4KHQsZSl7aS5VdGlsLnNjYWxlTWluTWF4KHQsZSk7dGhpcy5taW5YPU1hdGgubWluKHRoaXMubWluWCxlWzBdKTt0aGlzLm1heFg9TWF0aC5tYXgodGhpcy5tYXhYLGVbMV0pO3RoaXMubWluWT1NYXRoLm1pbih0aGlzLm1pblksZVsyXSk7dGhpcy5tYXhZPU1hdGgubWF4KHRoaXMubWF4WSxlWzNdKX11cGRhdGVDdXJ2ZVBhdGhNaW5NYXgodCxlLHMsbixyLGEsbyxsLGMsaCl7Y29uc3QgZD1pLlV0aWwuYmV6aWVyQm91bmRpbmdCb3goZSxzLG4scixhLG8sbCxjKTtpZihoKXtoWzBdPU1hdGgubWluKGhbMF0sZFswXSxkWzJdKTtoWzFdPU1hdGgubWF4KGhbMV0sZFswXSxkWzJdKTtoWzJdPU1hdGgubWluKGhbMl0sZFsxXSxkWzNdKTtoWzNdPU1hdGgubWF4KGhbM10sZFsxXSxkWzNdKX1lbHNlIHRoaXMudXBkYXRlUmVjdE1pbk1heCh0LGQpfWdldFBhdGhCb3VuZGluZ0JveCh0PXIuUGF0aFR5cGUuRklMTCxlPW51bGwpe2NvbnN0IHM9W3RoaXMubWluWCx0aGlzLm1pblksdGhpcy5tYXhYLHRoaXMubWF4WV07aWYodD09PXIuUGF0aFR5cGUuU1RST0tFKXtlfHwoMCxpLnVucmVhY2hhYmxlKSgiU3Ryb2tlIGJvdW5kaW5nIGJveCBtdXN0IGluY2x1ZGUgdHJhbnNmb3JtLiIpO2NvbnN0IHQ9aS5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpLG49dFswXSp0aGlzLmxpbmVXaWR0aC8yLHI9dFsxXSp0aGlzLmxpbmVXaWR0aC8yO3NbMF0tPW47c1sxXS09cjtzWzJdKz1uO3NbM10rPXJ9cmV0dXJuIHN9dXBkYXRlQ2xpcEZyb21QYXRoKCl7Y29uc3QgdD1pLlV0aWwuaW50ZXJzZWN0KHRoaXMuY2xpcEJveCx0aGlzLmdldFBhdGhCb3VuZGluZ0JveCgpKTt0aGlzLnN0YXJ0TmV3UGF0aEFuZENsaXBCb3godHx8WzAsMCwwLDBdKX1pc0VtcHR5Q2xpcCgpe3JldHVybiB0aGlzLm1pblg9PT0xLzB9c3RhcnROZXdQYXRoQW5kQ2xpcEJveCh0KXt0aGlzLmNsaXBCb3g9dDt0aGlzLm1pblg9MS8wO3RoaXMubWluWT0xLzA7dGhpcy5tYXhYPTA7dGhpcy5tYXhZPTB9Z2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCh0PXIuUGF0aFR5cGUuRklMTCxlPW51bGwpe3JldHVybiBpLlV0aWwuaW50ZXJzZWN0KHRoaXMuY2xpcEJveCx0aGlzLmdldFBhdGhCb3VuZGluZ0JveCh0LGUpKX19ZnVuY3Rpb24gcHV0QmluYXJ5SW1hZ2VEYXRhKHQsZSxzPW51bGwpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VEYXRhJiZlIGluc3RhbmNlb2YgSW1hZ2VEYXRhKXt0LnB1dEltYWdlRGF0YShlLDAsMCk7cmV0dXJufWNvbnN0IG49ZS5oZWlnaHQscj1lLndpZHRoLGE9biVoLG89KG4tYSkvaCxsPTA9PT1hP286bysxLGM9dC5jcmVhdGVJbWFnZURhdGEocixoKTtsZXQgZCx1PTA7Y29uc3QgcD1lLmRhdGEsZz1jLmRhdGE7bGV0IG0sZixiLEEsXyx2LHksUztpZihzKXN3aXRjaChzLmxlbmd0aCl7Y2FzZSAxOl89c1swXTt2PXNbMF07eT1zWzBdO1M9c1swXTticmVhaztjYXNlIDQ6Xz1zWzBdO3Y9c1sxXTt5PXNbMl07Uz1zWzNdfWlmKGUua2luZD09PWkuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKXtjb25zdCBlPXAuYnl0ZUxlbmd0aCxzPW5ldyBVaW50MzJBcnJheShnLmJ1ZmZlciwwLGcuYnl0ZUxlbmd0aD4+Miksbj1zLmxlbmd0aCxBPXIrNz4+MztsZXQgXz00Mjk0OTY3Mjk1LHY9aS5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NTtTJiYyNTU9PT1TWzBdJiYwPT09U1syNTVdJiYoW18sdl09W3YsX10pO2ZvcihtPTA7bTxsO20rKyl7Yj1tPG8/aDphO2Q9MDtmb3IoZj0wO2Y8YjtmKyspe2NvbnN0IHQ9ZS11O2xldCBpPTA7Y29uc3Qgbj10PkE/cjo4KnQtNyxhPS04Jm47bGV0IG89MCxsPTA7Zm9yKDtpPGE7aSs9OCl7bD1wW3UrK107c1tkKytdPTEyOCZsP186djtzW2QrK109NjQmbD9fOnY7c1tkKytdPTMyJmw/Xzp2O3NbZCsrXT0xNiZsP186djtzW2QrK109OCZsP186djtzW2QrK109NCZsP186djtzW2QrK109MiZsP186djtzW2QrK109MSZsP186dn1mb3IoO2k8bjtpKyspe2lmKDA9PT1vKXtsPXBbdSsrXTtvPTEyOH1zW2QrK109bCZvP186djtvPj49MX19Zm9yKDtkPG47KXNbZCsrXT0wO3QucHV0SW1hZ2VEYXRhKGMsMCxtKmgpfX1lbHNlIGlmKGUua2luZD09PWkuSW1hZ2VLaW5kLlJHQkFfMzJCUFApe2NvbnN0IGU9ISEoX3x8dnx8eSk7Zj0wO0E9cipoKjQ7Zm9yKG09MDttPG87bSsrKXtnLnNldChwLnN1YmFycmF5KHUsdStBKSk7dSs9QTtpZihlKWZvcihsZXQgdD0wO3Q8QTt0Kz00KXtfJiYoZ1t0KzBdPV9bZ1t0KzBdXSk7diYmKGdbdCsxXT12W2dbdCsxXV0pO3kmJihnW3QrMl09eVtnW3QrMl1dKX10LnB1dEltYWdlRGF0YShjLDAsZik7Zis9aH1pZihtPGwpe0E9ciphKjQ7Zy5zZXQocC5zdWJhcnJheSh1LHUrQSkpO2lmKGUpZm9yKGxldCB0PTA7dDxBO3QrPTQpe18mJihnW3QrMF09X1tnW3QrMF1dKTt2JiYoZ1t0KzFdPXZbZ1t0KzFdXSk7eSYmKGdbdCsyXT15W2dbdCsyXV0pfXQucHV0SW1hZ2VEYXRhKGMsMCxmKX19ZWxzZXtpZihlLmtpbmQhPT1pLkltYWdlS2luZC5SR0JfMjRCUFApdGhyb3cgbmV3IEVycm9yKGBiYWQgaW1hZ2Uga2luZDogJHtlLmtpbmR9YCk7e2NvbnN0IGU9ISEoX3x8dnx8eSk7Yj1oO0E9cipiO2ZvcihtPTA7bTxsO20rKyl7aWYobT49byl7Yj1hO0E9cipifWQ9MDtmb3IoZj1BO2YtLTspe2dbZCsrXT1wW3UrK107Z1tkKytdPXBbdSsrXTtnW2QrK109cFt1KytdO2dbZCsrXT0yNTV9aWYoZSlmb3IobGV0IHQ9MDt0PGQ7dCs9NCl7XyYmKGdbdCswXT1fW2dbdCswXV0pO3YmJihnW3QrMV09dltnW3QrMV1dKTt5JiYoZ1t0KzJdPXlbZ1t0KzJdXSl9dC5wdXRJbWFnZURhdGEoYywwLG0qaCl9fX19ZnVuY3Rpb24gcHV0QmluYXJ5SW1hZ2VNYXNrKHQsZSl7aWYoZS5iaXRtYXApe3QuZHJhd0ltYWdlKGUuYml0bWFwLDAsMCk7cmV0dXJufWNvbnN0IHM9ZS5oZWlnaHQsaT1lLndpZHRoLG49cyVoLHI9KHMtbikvaCxvPTA9PT1uP3I6cisxLGw9dC5jcmVhdGVJbWFnZURhdGEoaSxoKTtsZXQgYz0wO2NvbnN0IGQ9ZS5kYXRhLHU9bC5kYXRhO2ZvcihsZXQgZT0wO2U8bztlKyspe2NvbnN0IHM9ZTxyP2g6bjsoe3NyY1BvczpjfT0oMCxhLmFwcGx5TWFza0ltYWdlRGF0YSkoe3NyYzpkLHNyY1BvczpjLGRlc3Q6dSx3aWR0aDppLGhlaWdodDpzfSkpO3QucHV0SW1hZ2VEYXRhKGwsMCxlKmgpfX1mdW5jdGlvbiBjb3B5Q3R4U3RhdGUodCxlKXtjb25zdCBzPVsic3Ryb2tlU3R5bGUiLCJmaWxsU3R5bGUiLCJmaWxsUnVsZSIsImdsb2JhbEFscGhhIiwibGluZVdpZHRoIiwibGluZUNhcCIsImxpbmVKb2luIiwibWl0ZXJMaW1pdCIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImZvbnQiXTtmb3IoY29uc3QgaSBvZiBzKXZvaWQgMCE9PXRbaV0mJihlW2ldPXRbaV0pO2lmKHZvaWQgMCE9PXQuc2V0TGluZURhc2gpe2Uuc2V0TGluZURhc2godC5nZXRMaW5lRGFzaCgpKTtlLmxpbmVEYXNoT2Zmc2V0PXQubGluZURhc2hPZmZzZXR9fWZ1bmN0aW9uIHJlc2V0Q3R4VG9EZWZhdWx0KHQsZSl7dC5zdHJva2VTdHlsZT10LmZpbGxTdHlsZT1lfHwiIzAwMDAwMCI7dC5maWxsUnVsZT0ibm9uemVybyI7dC5nbG9iYWxBbHBoYT0xO3QubGluZVdpZHRoPTE7dC5saW5lQ2FwPSJidXR0Ijt0LmxpbmVKb2luPSJtaXRlciI7dC5taXRlckxpbWl0PTEwO3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2Utb3ZlciI7dC5mb250PSIxMHB4IHNhbnMtc2VyaWYiO2lmKHZvaWQgMCE9PXQuc2V0TGluZURhc2gpe3Quc2V0TGluZURhc2goW10pO3QubGluZURhc2hPZmZzZXQ9MH19ZnVuY3Rpb24gY29tcG9zZVNNYXNrQmFja2Ryb3AodCxlLHMsaSl7Y29uc3Qgbj10Lmxlbmd0aDtmb3IobGV0IHI9MztyPG47cis9NCl7Y29uc3Qgbj10W3JdO2lmKDA9PT1uKXt0W3ItM109ZTt0W3ItMl09czt0W3ItMV09aX1lbHNlIGlmKG48MjU1KXtjb25zdCBhPTI1NS1uO3Rbci0zXT10W3ItM10qbitlKmE+Pjg7dFtyLTJdPXRbci0yXSpuK3MqYT4+ODt0W3ItMV09dFtyLTFdKm4raSphPj44fX19ZnVuY3Rpb24gY29tcG9zZVNNYXNrQWxwaGEodCxlLHMpe2NvbnN0IGk9dC5sZW5ndGg7Zm9yKGxldCBuPTM7bjxpO24rPTQpe2NvbnN0IGk9cz9zW3Rbbl1dOnRbbl07ZVtuXT1lW25dKmkqLjAwMzkyMTU2ODYyNzQ1MDk4fDB9fWZ1bmN0aW9uIGNvbXBvc2VTTWFza0x1bWlub3NpdHkodCxlLHMpe2NvbnN0IGk9dC5sZW5ndGg7Zm9yKGxldCBuPTM7bjxpO24rPTQpe2NvbnN0IGk9NzcqdFtuLTNdKzE1Mip0W24tMl0rMjgqdFtuLTFdO2Vbbl09cz9lW25dKnNbaT4+OF0+Pjg6ZVtuXSppPj4xNn19ZnVuY3Rpb24gY29tcG9zZVNNYXNrKHQsZSxzLGkpe2NvbnN0IG49aVswXSxyPWlbMV0sYT1pWzJdLW4sbz1pWzNdLXI7aWYoMCE9PWEmJjAhPT1vKXshZnVuY3Rpb24gZ2VuZXJpY0NvbXBvc2VTTWFzayh0LGUscyxpLG4scixhLG8sbCxjLGgpe2NvbnN0IGQ9ISFyLHU9ZD9yWzBdOjAscD1kP3JbMV06MCxnPWQ/clsyXTowO2xldCBtO209Ikx1bWlub3NpdHkiPT09bj9jb21wb3NlU01hc2tMdW1pbm9zaXR5OmNvbXBvc2VTTWFza0FscGhhO2NvbnN0IGY9TWF0aC5taW4oaSxNYXRoLmNlaWwoMTA0ODU3Ni9zKSk7Zm9yKGxldCBuPTA7bjxpO24rPWYpe2NvbnN0IHI9TWF0aC5taW4oZixpLW4pLGI9dC5nZXRJbWFnZURhdGEoby1jLG4rKGwtaCkscyxyKSxBPWUuZ2V0SW1hZ2VEYXRhKG8sbitsLHMscik7ZCYmY29tcG9zZVNNYXNrQmFja2Ryb3AoYi5kYXRhLHUscCxnKTttKGIuZGF0YSxBLmRhdGEsYSk7ZS5wdXRJbWFnZURhdGEoQSxvLG4rbCl9fShlLmNvbnRleHQscyxhLG8sZS5zdWJ0eXBlLGUuYmFja2Ryb3AsZS50cmFuc2Zlck1hcCxuLHIsZS5vZmZzZXRYLGUub2Zmc2V0WSk7dC5zYXZlKCk7dC5nbG9iYWxBbHBoYT0xO3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2Utb3ZlciI7dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApO3QuZHJhd0ltYWdlKHMuY2FudmFzLDAsMCk7dC5yZXN0b3JlKCl9fWZ1bmN0aW9uIGdldEltYWdlU21vb3RoaW5nRW5hYmxlZCh0LGUpe2NvbnN0IHM9aS5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHQpO3NbMF09TWF0aC5mcm91bmQoc1swXSk7c1sxXT1NYXRoLmZyb3VuZChzWzFdKTtjb25zdCByPU1hdGguZnJvdW5kKChnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW98fDEpKm4uUGl4ZWxzUGVySW5jaC5QREZfVE9fQ1NTX1VOSVRTKTtyZXR1cm4gdm9pZCAwIT09ZT9lOnNbMF08PXJ8fHNbMV08PXJ9Y29uc3QgZD1bImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdLHU9WyJtaXRlciIsInJvdW5kIiwiYmV2ZWwiXSxwPXt9LGc9e307Y2xhc3MgQ2FudmFzR3JhcGhpY3N7Y29uc3RydWN0b3IodCxlLHMsaSxuLHIsYSl7dGhpcy5jdHg9dDt0aGlzLmN1cnJlbnQ9bmV3IENhbnZhc0V4dHJhU3RhdGUodGhpcy5jdHguY2FudmFzLndpZHRoLHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQpO3RoaXMuc3RhdGVTdGFjaz1bXTt0aGlzLnBlbmRpbmdDbGlwPW51bGw7dGhpcy5wZW5kaW5nRU9GaWxsPSExO3RoaXMucmVzPW51bGw7dGhpcy54b2Jqcz1udWxsO3RoaXMuY29tbW9uT2Jqcz1lO3RoaXMub2Jqcz1zO3RoaXMuY2FudmFzRmFjdG9yeT1pO3RoaXMuZ3JvdXBTdGFjaz1bXTt0aGlzLnByb2Nlc3NpbmdUeXBlMz1udWxsO3RoaXMuYmFzZVRyYW5zZm9ybT1udWxsO3RoaXMuYmFzZVRyYW5zZm9ybVN0YWNrPVtdO3RoaXMuZ3JvdXBMZXZlbD0wO3RoaXMuc21hc2tTdGFjaz1bXTt0aGlzLnNtYXNrQ291bnRlcj0wO3RoaXMudGVtcFNNYXNrPW51bGw7dGhpcy5zdXNwZW5kZWRDdHg9bnVsbDt0aGlzLmNvbnRlbnRWaXNpYmxlPSEwO3RoaXMubWFya2VkQ29udGVudFN0YWNrPVtdO3RoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnPW47dGhpcy5jYWNoZWRDYW52YXNlcz1uZXcgQ2FjaGVkQ2FudmFzZXModGhpcy5jYW52YXNGYWN0b3J5KTt0aGlzLmNhY2hlZFBhdHRlcm5zPW5ldyBNYXA7dGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwPXI7dGhpcy52aWV3cG9ydFNjYWxlPTE7dGhpcy5vdXRwdXRTY2FsZVg9MTt0aGlzLm91dHB1dFNjYWxlWT0xO3RoaXMuYmFja2dyb3VuZENvbG9yPWE/LmJhY2tncm91bmR8fG51bGw7dGhpcy5mb3JlZ3JvdW5kQ29sb3I9YT8uZm9yZWdyb3VuZHx8bnVsbDt0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGw7dGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsO3RoaXMuX2NhY2hlZEJpdG1hcHNNYXA9bmV3IE1hcH1nZXRPYmplY3QodCxlPW51bGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnN0YXJ0c1dpdGgoImdfIik/dGhpcy5jb21tb25PYmpzLmdldCh0KTp0aGlzLm9ianMuZ2V0KHQpOmV9YmVnaW5EcmF3aW5nKHt0cmFuc2Zvcm06dCx2aWV3cG9ydDplLHRyYW5zcGFyZW5jeTpzPSExLGJhY2tncm91bmQ6aT1udWxsfSl7Y29uc3Qgcj10aGlzLmN0eC5jYW52YXMud2lkdGgsYT10aGlzLmN0eC5jYW52YXMuaGVpZ2h0LG89aXx8IiNmZmZmZmYiO3RoaXMuY3R4LnNhdmUoKTtpZih0aGlzLmZvcmVncm91bmRDb2xvciYmdGhpcy5iYWNrZ3JvdW5kQ29sb3Ipe3RoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmZvcmVncm91bmRDb2xvcjtjb25zdCB0PXRoaXMuZm9yZWdyb3VuZENvbG9yPXRoaXMuY3R4LmZpbGxTdHlsZTt0aGlzLmN0eC5maWxsU3R5bGU9dGhpcy5iYWNrZ3JvdW5kQ29sb3I7Y29uc3QgZT10aGlzLmJhY2tncm91bmRDb2xvcj10aGlzLmN0eC5maWxsU3R5bGU7bGV0IHM9ITAsaT1vO3RoaXMuY3R4LmZpbGxTdHlsZT1vO2k9dGhpcy5jdHguZmlsbFN0eWxlO3M9InN0cmluZyI9PXR5cGVvZiBpJiYvXiNbMC05QS1GYS1mXXs2fSQvLnRlc3QoaSk7aWYoIiMwMDAwMDAiPT09dCYmIiNmZmZmZmYiPT09ZXx8dD09PWV8fCFzKXRoaXMuZm9yZWdyb3VuZENvbG9yPXRoaXMuYmFja2dyb3VuZENvbG9yPW51bGw7ZWxzZXtjb25zdFtzLHIsYV09KDAsbi5nZXRSR0IpKGkpLG5ld0NvbXA9dD0+KHQvPTI1NSk8PS4wMzkyOD90LzEyLjkyOigodCsuMDU1KS8xLjA1NSkqKjIuNCxvPU1hdGgucm91bmQoLjIxMjYqbmV3Q29tcChzKSsuNzE1MipuZXdDb21wKHIpKy4wNzIyKm5ld0NvbXAoYSkpO3RoaXMuc2VsZWN0Q29sb3I9KHMsaSxuKT0+e2NvbnN0IHI9LjIxMjYqbmV3Q29tcChzKSsuNzE1MipuZXdDb21wKGkpKy4wNzIyKm5ld0NvbXAobik7cmV0dXJuIE1hdGgucm91bmQocik9PT1vP2U6dH19fXRoaXMuY3R4LmZpbGxTdHlsZT10aGlzLmJhY2tncm91bmRDb2xvcnx8bzt0aGlzLmN0eC5maWxsUmVjdCgwLDAscixhKTt0aGlzLmN0eC5yZXN0b3JlKCk7aWYocyl7Y29uc3QgdD10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygidHJhbnNwYXJlbnQiLHIsYSk7dGhpcy5jb21wb3NpdGVDdHg9dGhpcy5jdHg7dGhpcy50cmFuc3BhcmVudENhbnZhcz10LmNhbnZhczt0aGlzLmN0eD10LmNvbnRleHQ7dGhpcy5jdHguc2F2ZSgpO3RoaXMuY3R4LnRyYW5zZm9ybSguLi4oMCxuLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY29tcG9zaXRlQ3R4KSl9dGhpcy5jdHguc2F2ZSgpO3Jlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4LHRoaXMuZm9yZWdyb3VuZENvbG9yKTtpZih0KXt0aGlzLmN0eC50cmFuc2Zvcm0oLi4udCk7dGhpcy5vdXRwdXRTY2FsZVg9dFswXTt0aGlzLm91dHB1dFNjYWxlWT10WzBdfXRoaXMuY3R4LnRyYW5zZm9ybSguLi5lLnRyYW5zZm9ybSk7dGhpcy52aWV3cG9ydFNjYWxlPWUuc2NhbGU7dGhpcy5iYXNlVHJhbnNmb3JtPSgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpfWV4ZWN1dGVPcGVyYXRvckxpc3QodCxlLHMsbil7Y29uc3Qgcj10LmFyZ3NBcnJheSxhPXQuZm5BcnJheTtsZXQgbz1lfHwwO2NvbnN0IGw9ci5sZW5ndGg7aWYobD09PW8pcmV0dXJuIG87Y29uc3QgYz1sLW8+MTAmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLGg9Yz9EYXRlLm5vdygpKzE1OjA7bGV0IGQ9MDtjb25zdCB1PXRoaXMuY29tbW9uT2JqcyxwPXRoaXMub2JqcztsZXQgZztmb3IoOzspe2lmKHZvaWQgMCE9PW4mJm89PT1uLm5leHRCcmVha1BvaW50KXtuLmJyZWFrSXQobyxzKTtyZXR1cm4gb31nPWFbb107aWYoZyE9PWkuT1BTLmRlcGVuZGVuY3kpdGhpc1tnXS5hcHBseSh0aGlzLHJbb10pO2Vsc2UgZm9yKGNvbnN0IHQgb2YgcltvXSl7Y29uc3QgZT10LnN0YXJ0c1dpdGgoImdfIik/dTpwO2lmKCFlLmhhcyh0KSl7ZS5nZXQodCxzKTtyZXR1cm4gb319bysrO2lmKG89PT1sKXJldHVybiBvO2lmKGMmJisrZD4xMCl7aWYoRGF0ZS5ub3coKT5oKXtzKCk7cmV0dXJuIG99ZD0wfX19I3N0KCl7Zm9yKDt0aGlzLnN0YXRlU3RhY2subGVuZ3RofHx0aGlzLmluU01hc2tNb2RlOyl0aGlzLnJlc3RvcmUoKTt0aGlzLmN0eC5yZXN0b3JlKCk7aWYodGhpcy50cmFuc3BhcmVudENhbnZhcyl7dGhpcy5jdHg9dGhpcy5jb21wb3NpdGVDdHg7dGhpcy5jdHguc2F2ZSgpO3RoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCk7dGhpcy5jdHguZHJhd0ltYWdlKHRoaXMudHJhbnNwYXJlbnRDYW52YXMsMCwwKTt0aGlzLmN0eC5yZXN0b3JlKCk7dGhpcy50cmFuc3BhcmVudENhbnZhcz1udWxsfX1lbmREcmF3aW5nKCl7dGhpcy4jc3QoKTt0aGlzLmNhY2hlZENhbnZhc2VzLmNsZWFyKCk7dGhpcy5jYWNoZWRQYXR0ZXJucy5jbGVhcigpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2NhY2hlZEJpdG1hcHNNYXAudmFsdWVzKCkpe2Zvcihjb25zdCBlIG9mIHQudmFsdWVzKCkpInVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50JiYoZS53aWR0aD1lLmhlaWdodD0wKTt0LmNsZWFyKCl9dGhpcy5fY2FjaGVkQml0bWFwc01hcC5jbGVhcigpfV9zY2FsZUltYWdlKHQsZSl7Y29uc3Qgcz10LndpZHRoLGk9dC5oZWlnaHQ7bGV0IG4scixhPU1hdGgubWF4KE1hdGguaHlwb3QoZVswXSxlWzFdKSwxKSxvPU1hdGgubWF4KE1hdGguaHlwb3QoZVsyXSxlWzNdKSwxKSxsPXMsYz1pLGg9InByZXNjYWxlMSI7Zm9yKDthPjImJmw+MXx8bz4yJiZjPjE7KXtsZXQgZT1sLHM9YztpZihhPjImJmw+MSl7ZT1NYXRoLmNlaWwobC8yKTthLz1sL2V9aWYobz4yJiZjPjEpe3M9TWF0aC5jZWlsKGMvMik7by89Yy9zfW49dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoaCxlLHMpO3I9bi5jb250ZXh0O3IuY2xlYXJSZWN0KDAsMCxlLHMpO3IuZHJhd0ltYWdlKHQsMCwwLGwsYywwLDAsZSxzKTt0PW4uY2FudmFzO2w9ZTtjPXM7aD0icHJlc2NhbGUxIj09PWg/InByZXNjYWxlMiI6InByZXNjYWxlMSJ9cmV0dXJue2ltZzp0LHBhaW50V2lkdGg6bCxwYWludEhlaWdodDpjfX1fY3JlYXRlTWFza0NhbnZhcyh0KXtjb25zdCBlPXRoaXMuY3R4LHt3aWR0aDpzLGhlaWdodDphfT10LG89dGhpcy5jdXJyZW50LmZpbGxDb2xvcixsPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxjPSgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybSkoZSk7bGV0IGgsZCx1LHA7aWYoKHQuYml0bWFwfHx0LmRhdGEpJiZ0LmNvdW50PjEpe2NvbnN0IGU9dC5iaXRtYXB8fHQuZGF0YS5idWZmZXI7ZD1KU09OLnN0cmluZ2lmeShsP2M6W2Muc2xpY2UoMCw0KSxvXSk7aD10aGlzLl9jYWNoZWRCaXRtYXBzTWFwLmdldChlKTtpZighaCl7aD1uZXcgTWFwO3RoaXMuX2NhY2hlZEJpdG1hcHNNYXAuc2V0KGUsaCl9Y29uc3Qgcz1oLmdldChkKTtpZihzJiYhbCl7cmV0dXJue2NhbnZhczpzLG9mZnNldFg6TWF0aC5yb3VuZChNYXRoLm1pbihjWzBdLGNbMl0pK2NbNF0pLG9mZnNldFk6TWF0aC5yb3VuZChNYXRoLm1pbihjWzFdLGNbM10pK2NbNV0pfX11PXN9aWYoIXUpe3A9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoIm1hc2tDYW52YXMiLHMsYSk7cHV0QmluYXJ5SW1hZ2VNYXNrKHAuY29udGV4dCx0KX1sZXQgZz1pLlV0aWwudHJhbnNmb3JtKGMsWzEvcywwLDAsLTEvYSwwLDBdKTtnPWkuVXRpbC50cmFuc2Zvcm0oZyxbMSwwLDAsMSwwLC1hXSk7Y29uc3QgbT1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0sZyksZj1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3MsYV0sZyksYj1pLlV0aWwubm9ybWFsaXplUmVjdChbbVswXSxtWzFdLGZbMF0sZlsxXV0pLEE9TWF0aC5yb3VuZChiWzJdLWJbMF0pfHwxLF89TWF0aC5yb3VuZChiWzNdLWJbMV0pfHwxLHY9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImZpbGxDYW52YXMiLEEsXykseT12LmNvbnRleHQsUz1NYXRoLm1pbihtWzBdLGZbMF0pLHg9TWF0aC5taW4obVsxXSxmWzFdKTt5LnRyYW5zbGF0ZSgtUywteCk7eS50cmFuc2Zvcm0oLi4uZyk7aWYoIXUpe3U9dGhpcy5fc2NhbGVJbWFnZShwLmNhbnZhcywoMCxuLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKSh5KSk7dT11LmltZztoJiZsJiZoLnNldChkLHUpfXkuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPWdldEltYWdlU21vb3RoaW5nRW5hYmxlZCgoMCxuLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHkpLHQuaW50ZXJwb2xhdGUpO2RyYXdJbWFnZUF0SW50ZWdlckNvb3Jkcyh5LHUsMCwwLHUud2lkdGgsdS5oZWlnaHQsMCwwLHMsYSk7eS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiI7Y29uc3QgRT1pLlV0aWwudHJhbnNmb3JtKCgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKHkpLFsxLDAsMCwxLC1TLC14XSk7eS5maWxsU3R5bGU9bD9vLmdldFBhdHRlcm4oZSx0aGlzLEUsci5QYXRoVHlwZS5GSUxMKTpvO3kuZmlsbFJlY3QoMCwwLHMsYSk7aWYoaCYmIWwpe3RoaXMuY2FjaGVkQ2FudmFzZXMuZGVsZXRlKCJmaWxsQ2FudmFzIik7aC5zZXQoZCx2LmNhbnZhcyl9cmV0dXJue2NhbnZhczp2LmNhbnZhcyxvZmZzZXRYOk1hdGgucm91bmQoUyksb2Zmc2V0WTpNYXRoLnJvdW5kKHgpfX1zZXRMaW5lV2lkdGgodCl7dCE9PXRoaXMuY3VycmVudC5saW5lV2lkdGgmJih0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGwpO3RoaXMuY3VycmVudC5saW5lV2lkdGg9dDt0aGlzLmN0eC5saW5lV2lkdGg9dH1zZXRMaW5lQ2FwKHQpe3RoaXMuY3R4LmxpbmVDYXA9ZFt0XX1zZXRMaW5lSm9pbih0KXt0aGlzLmN0eC5saW5lSm9pbj11W3RdfXNldE1pdGVyTGltaXQodCl7dGhpcy5jdHgubWl0ZXJMaW1pdD10fXNldERhc2godCxlKXtjb25zdCBzPXRoaXMuY3R4O2lmKHZvaWQgMCE9PXMuc2V0TGluZURhc2gpe3Muc2V0TGluZURhc2godCk7cy5saW5lRGFzaE9mZnNldD1lfX1zZXRSZW5kZXJpbmdJbnRlbnQodCl7fXNldEZsYXRuZXNzKHQpe31zZXRHU3RhdGUodCl7Zm9yKGNvbnN0W2Usc11vZiB0KXN3aXRjaChlKXtjYXNlIkxXIjp0aGlzLnNldExpbmVXaWR0aChzKTticmVhaztjYXNlIkxDIjp0aGlzLnNldExpbmVDYXAocyk7YnJlYWs7Y2FzZSJMSiI6dGhpcy5zZXRMaW5lSm9pbihzKTticmVhaztjYXNlIk1MIjp0aGlzLnNldE1pdGVyTGltaXQocyk7YnJlYWs7Y2FzZSJEIjp0aGlzLnNldERhc2goc1swXSxzWzFdKTticmVhaztjYXNlIlJJIjp0aGlzLnNldFJlbmRlcmluZ0ludGVudChzKTticmVhaztjYXNlIkZMIjp0aGlzLnNldEZsYXRuZXNzKHMpO2JyZWFrO2Nhc2UiRm9udCI6dGhpcy5zZXRGb250KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSJDQSI6dGhpcy5jdXJyZW50LnN0cm9rZUFscGhhPXM7YnJlYWs7Y2FzZSJjYSI6dGhpcy5jdXJyZW50LmZpbGxBbHBoYT1zO3RoaXMuY3R4Lmdsb2JhbEFscGhhPXM7YnJlYWs7Y2FzZSJCTSI6dGhpcy5jdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPXM7YnJlYWs7Y2FzZSJTTWFzayI6dGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrPXM/dGhpcy50ZW1wU01hc2s6bnVsbDt0aGlzLnRlbXBTTWFzaz1udWxsO3RoaXMuY2hlY2tTTWFza1N0YXRlKCk7YnJlYWs7Y2FzZSJUUiI6dGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcz1zfX1nZXQgaW5TTWFza01vZGUoKXtyZXR1cm4hIXRoaXMuc3VzcGVuZGVkQ3R4fWNoZWNrU01hc2tTdGF0ZSgpe2NvbnN0IHQ9dGhpcy5pblNNYXNrTW9kZTt0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2smJiF0P3RoaXMuYmVnaW5TTWFza01vZGUoKTohdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrJiZ0JiZ0aGlzLmVuZFNNYXNrTW9kZSgpfWJlZ2luU01hc2tNb2RlKCl7aWYodGhpcy5pblNNYXNrTW9kZSl0aHJvdyBuZXcgRXJyb3IoImJlZ2luU01hc2tNb2RlIGNhbGxlZCB3aGlsZSBhbHJlYWR5IGluIHNtYXNrIG1vZGUiKTtjb25zdCB0PXRoaXMuY3R4LmNhbnZhcy53aWR0aCxlPXRoaXMuY3R4LmNhbnZhcy5oZWlnaHQscz0ic21hc2tHcm91cEF0Iit0aGlzLmdyb3VwTGV2ZWwsaT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhzLHQsZSk7dGhpcy5zdXNwZW5kZWRDdHg9dGhpcy5jdHg7dGhpcy5jdHg9aS5jb250ZXh0O2NvbnN0IHI9dGhpcy5jdHg7ci5zZXRUcmFuc2Zvcm0oLi4uKDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLnN1c3BlbmRlZEN0eCkpO2NvcHlDdHhTdGF0ZSh0aGlzLnN1c3BlbmRlZEN0eCxyKTshZnVuY3Rpb24gbWlycm9yQ29udGV4dE9wZXJhdGlvbnModCxlKXtpZih0Ll9yZW1vdmVNaXJyb3JpbmcpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IGlzIGFscmVhZHkgZm9yd2FyZGluZyBvcGVyYXRpb25zLiIpO3QuX19vcmlnaW5hbFNhdmU9dC5zYXZlO3QuX19vcmlnaW5hbFJlc3RvcmU9dC5yZXN0b3JlO3QuX19vcmlnaW5hbFJvdGF0ZT10LnJvdGF0ZTt0Ll9fb3JpZ2luYWxTY2FsZT10LnNjYWxlO3QuX19vcmlnaW5hbFRyYW5zbGF0ZT10LnRyYW5zbGF0ZTt0Ll9fb3JpZ2luYWxUcmFuc2Zvcm09dC50cmFuc2Zvcm07dC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtPXQuc2V0VHJhbnNmb3JtO3QuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtPXQucmVzZXRUcmFuc2Zvcm07dC5fX29yaWdpbmFsQ2xpcD10LmNsaXA7dC5fX29yaWdpbmFsTW92ZVRvPXQubW92ZVRvO3QuX19vcmlnaW5hbExpbmVUbz10LmxpbmVUbzt0Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvPXQuYmV6aWVyQ3VydmVUbzt0Ll9fb3JpZ2luYWxSZWN0PXQucmVjdDt0Ll9fb3JpZ2luYWxDbG9zZVBhdGg9dC5jbG9zZVBhdGg7dC5fX29yaWdpbmFsQmVnaW5QYXRoPXQuYmVnaW5QYXRoO3QuX3JlbW92ZU1pcnJvcmluZz0oKT0+e3Quc2F2ZT10Ll9fb3JpZ2luYWxTYXZlO3QucmVzdG9yZT10Ll9fb3JpZ2luYWxSZXN0b3JlO3Qucm90YXRlPXQuX19vcmlnaW5hbFJvdGF0ZTt0LnNjYWxlPXQuX19vcmlnaW5hbFNjYWxlO3QudHJhbnNsYXRlPXQuX19vcmlnaW5hbFRyYW5zbGF0ZTt0LnRyYW5zZm9ybT10Ll9fb3JpZ2luYWxUcmFuc2Zvcm07dC5zZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtO3QucmVzZXRUcmFuc2Zvcm09dC5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm07dC5jbGlwPXQuX19vcmlnaW5hbENsaXA7dC5tb3ZlVG89dC5fX29yaWdpbmFsTW92ZVRvO3QubGluZVRvPXQuX19vcmlnaW5hbExpbmVUbzt0LmJlemllckN1cnZlVG89dC5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbzt0LnJlY3Q9dC5fX29yaWdpbmFsUmVjdDt0LmNsb3NlUGF0aD10Ll9fb3JpZ2luYWxDbG9zZVBhdGg7dC5iZWdpblBhdGg9dC5fX29yaWdpbmFsQmVnaW5QYXRoO2RlbGV0ZSB0Ll9yZW1vdmVNaXJyb3Jpbmd9O3Quc2F2ZT1mdW5jdGlvbiBjdHhTYXZlKCl7ZS5zYXZlKCk7dGhpcy5fX29yaWdpbmFsU2F2ZSgpfTt0LnJlc3RvcmU9ZnVuY3Rpb24gY3R4UmVzdG9yZSgpe2UucmVzdG9yZSgpO3RoaXMuX19vcmlnaW5hbFJlc3RvcmUoKX07dC50cmFuc2xhdGU9ZnVuY3Rpb24gY3R4VHJhbnNsYXRlKHQscyl7ZS50cmFuc2xhdGUodCxzKTt0aGlzLl9fb3JpZ2luYWxUcmFuc2xhdGUodCxzKX07dC5zY2FsZT1mdW5jdGlvbiBjdHhTY2FsZSh0LHMpe2Uuc2NhbGUodCxzKTt0aGlzLl9fb3JpZ2luYWxTY2FsZSh0LHMpfTt0LnRyYW5zZm9ybT1mdW5jdGlvbiBjdHhUcmFuc2Zvcm0odCxzLGksbixyLGEpe2UudHJhbnNmb3JtKHQscyxpLG4scixhKTt0aGlzLl9fb3JpZ2luYWxUcmFuc2Zvcm0odCxzLGksbixyLGEpfTt0LnNldFRyYW5zZm9ybT1mdW5jdGlvbiBjdHhTZXRUcmFuc2Zvcm0odCxzLGksbixyLGEpe2Uuc2V0VHJhbnNmb3JtKHQscyxpLG4scixhKTt0aGlzLl9fb3JpZ2luYWxTZXRUcmFuc2Zvcm0odCxzLGksbixyLGEpfTt0LnJlc2V0VHJhbnNmb3JtPWZ1bmN0aW9uIGN0eFJlc2V0VHJhbnNmb3JtKCl7ZS5yZXNldFRyYW5zZm9ybSgpO3RoaXMuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtKCl9O3Qucm90YXRlPWZ1bmN0aW9uIGN0eFJvdGF0ZSh0KXtlLnJvdGF0ZSh0KTt0aGlzLl9fb3JpZ2luYWxSb3RhdGUodCl9O3QuY2xpcD1mdW5jdGlvbiBjdHhSb3RhdGUodCl7ZS5jbGlwKHQpO3RoaXMuX19vcmlnaW5hbENsaXAodCl9O3QubW92ZVRvPWZ1bmN0aW9uKHQscyl7ZS5tb3ZlVG8odCxzKTt0aGlzLl9fb3JpZ2luYWxNb3ZlVG8odCxzKX07dC5saW5lVG89ZnVuY3Rpb24odCxzKXtlLmxpbmVUbyh0LHMpO3RoaXMuX19vcmlnaW5hbExpbmVUbyh0LHMpfTt0LmJlemllckN1cnZlVG89ZnVuY3Rpb24odCxzLGksbixyLGEpe2UuYmV6aWVyQ3VydmVUbyh0LHMsaSxuLHIsYSk7dGhpcy5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyh0LHMsaSxuLHIsYSl9O3QucmVjdD1mdW5jdGlvbih0LHMsaSxuKXtlLnJlY3QodCxzLGksbik7dGhpcy5fX29yaWdpbmFsUmVjdCh0LHMsaSxuKX07dC5jbG9zZVBhdGg9ZnVuY3Rpb24oKXtlLmNsb3NlUGF0aCgpO3RoaXMuX19vcmlnaW5hbENsb3NlUGF0aCgpfTt0LmJlZ2luUGF0aD1mdW5jdGlvbigpe2UuYmVnaW5QYXRoKCk7dGhpcy5fX29yaWdpbmFsQmVnaW5QYXRoKCl9fShyLHRoaXMuc3VzcGVuZGVkQ3R4KTt0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKX1lbmRTTWFza01vZGUoKXtpZighdGhpcy5pblNNYXNrTW9kZSl0aHJvdyBuZXcgRXJyb3IoImVuZFNNYXNrTW9kZSBjYWxsZWQgd2hpbGUgbm90IGluIHNtYXNrIG1vZGUiKTt0aGlzLmN0eC5fcmVtb3ZlTWlycm9yaW5nKCk7Y29weUN0eFN0YXRlKHRoaXMuY3R4LHRoaXMuc3VzcGVuZGVkQ3R4KTt0aGlzLmN0eD10aGlzLnN1c3BlbmRlZEN0eDt0aGlzLnN1c3BlbmRlZEN0eD1udWxsfWNvbXBvc2UodCl7aWYoIXRoaXMuY3VycmVudC5hY3RpdmVTTWFzaylyZXR1cm47aWYodCl7dFswXT1NYXRoLmZsb29yKHRbMF0pO3RbMV09TWF0aC5mbG9vcih0WzFdKTt0WzJdPU1hdGguY2VpbCh0WzJdKTt0WzNdPU1hdGguY2VpbCh0WzNdKX1lbHNlIHQ9WzAsMCx0aGlzLmN0eC5jYW52YXMud2lkdGgsdGhpcy5jdHguY2FudmFzLmhlaWdodF07Y29uc3QgZT10aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s7Y29tcG9zZVNNYXNrKHRoaXMuc3VzcGVuZGVkQ3R4LGUsdGhpcy5jdHgsdCk7dGhpcy5jdHguc2F2ZSgpO3RoaXMuY3R4LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCk7dGhpcy5jdHguY2xlYXJSZWN0KDAsMCx0aGlzLmN0eC5jYW52YXMud2lkdGgsdGhpcy5jdHguY2FudmFzLmhlaWdodCk7dGhpcy5jdHgucmVzdG9yZSgpfXNhdmUoKXtpZih0aGlzLmluU01hc2tNb2RlKXtjb3B5Q3R4U3RhdGUodGhpcy5jdHgsdGhpcy5zdXNwZW5kZWRDdHgpO3RoaXMuc3VzcGVuZGVkQ3R4LnNhdmUoKX1lbHNlIHRoaXMuY3R4LnNhdmUoKTtjb25zdCB0PXRoaXMuY3VycmVudDt0aGlzLnN0YXRlU3RhY2sucHVzaCh0KTt0aGlzLmN1cnJlbnQ9dC5jbG9uZSgpfXJlc3RvcmUoKXswPT09dGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCYmdGhpcy5pblNNYXNrTW9kZSYmdGhpcy5lbmRTTWFza01vZGUoKTtpZigwIT09dGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCl7dGhpcy5jdXJyZW50PXRoaXMuc3RhdGVTdGFjay5wb3AoKTtpZih0aGlzLmluU01hc2tNb2RlKXt0aGlzLnN1c3BlbmRlZEN0eC5yZXN0b3JlKCk7Y29weUN0eFN0YXRlKHRoaXMuc3VzcGVuZGVkQ3R4LHRoaXMuY3R4KX1lbHNlIHRoaXMuY3R4LnJlc3RvcmUoKTt0aGlzLmNoZWNrU01hc2tTdGF0ZSgpO3RoaXMucGVuZGluZ0NsaXA9bnVsbDt0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGw7dGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsfX10cmFuc2Zvcm0odCxlLHMsaSxuLHIpe3RoaXMuY3R4LnRyYW5zZm9ybSh0LGUscyxpLG4scik7dGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZz1udWxsO3RoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9bnVsbH1jb25zdHJ1Y3RQYXRoKHQsZSxzKXtjb25zdCByPXRoaXMuY3R4LGE9dGhpcy5jdXJyZW50O2xldCBvLGwsYz1hLngsaD1hLnk7Y29uc3QgZD0oMCxuLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHIpLHU9MD09PWRbMF0mJjA9PT1kWzNdfHwwPT09ZFsxXSYmMD09PWRbMl0scD11P3Muc2xpY2UoMCk6bnVsbDtmb3IobGV0IHM9MCxuPTAsZz10Lmxlbmd0aDtzPGc7cysrKXN3aXRjaCgwfHRbc10pe2Nhc2UgaS5PUFMucmVjdGFuZ2xlOmM9ZVtuKytdO2g9ZVtuKytdO2NvbnN0IHQ9ZVtuKytdLHM9ZVtuKytdLGc9Yyt0LG09aCtzO3IubW92ZVRvKGMsaCk7aWYoMD09PXR8fDA9PT1zKXIubGluZVRvKGcsbSk7ZWxzZXtyLmxpbmVUbyhnLGgpO3IubGluZVRvKGcsbSk7ci5saW5lVG8oYyxtKX11fHxhLnVwZGF0ZVJlY3RNaW5NYXgoZCxbYyxoLGcsbV0pO3IuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSBpLk9QUy5tb3ZlVG86Yz1lW24rK107aD1lW24rK107ci5tb3ZlVG8oYyxoKTt1fHxhLnVwZGF0ZVBhdGhNaW5NYXgoZCxjLGgpO2JyZWFrO2Nhc2UgaS5PUFMubGluZVRvOmM9ZVtuKytdO2g9ZVtuKytdO3IubGluZVRvKGMsaCk7dXx8YS51cGRhdGVQYXRoTWluTWF4KGQsYyxoKTticmVhaztjYXNlIGkuT1BTLmN1cnZlVG86bz1jO2w9aDtjPWVbbis0XTtoPWVbbis1XTtyLmJlemllckN1cnZlVG8oZVtuXSxlW24rMV0sZVtuKzJdLGVbbiszXSxjLGgpO2EudXBkYXRlQ3VydmVQYXRoTWluTWF4KGQsbyxsLGVbbl0sZVtuKzFdLGVbbisyXSxlW24rM10sYyxoLHApO24rPTY7YnJlYWs7Y2FzZSBpLk9QUy5jdXJ2ZVRvMjpvPWM7bD1oO3IuYmV6aWVyQ3VydmVUbyhjLGgsZVtuXSxlW24rMV0sZVtuKzJdLGVbbiszXSk7YS51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoZCxvLGwsYyxoLGVbbl0sZVtuKzFdLGVbbisyXSxlW24rM10scCk7Yz1lW24rMl07aD1lW24rM107bis9NDticmVhaztjYXNlIGkuT1BTLmN1cnZlVG8zOm89YztsPWg7Yz1lW24rMl07aD1lW24rM107ci5iZXppZXJDdXJ2ZVRvKGVbbl0sZVtuKzFdLGMsaCxjLGgpO2EudXBkYXRlQ3VydmVQYXRoTWluTWF4KGQsbyxsLGVbbl0sZVtuKzFdLGMsaCxjLGgscCk7bis9NDticmVhaztjYXNlIGkuT1BTLmNsb3NlUGF0aDpyLmNsb3NlUGF0aCgpfXUmJmEudXBkYXRlU2NhbGluZ1BhdGhNaW5NYXgoZCxwKTthLnNldEN1cnJlbnRQb2ludChjLGgpfWNsb3NlUGF0aCgpe3RoaXMuY3R4LmNsb3NlUGF0aCgpfXN0cm9rZSh0KXt0PXZvaWQgMD09PXR8fHQ7Y29uc3QgZT10aGlzLmN0eCxzPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtlLmdsb2JhbEFscGhhPXRoaXMuY3VycmVudC5zdHJva2VBbHBoYTtpZih0aGlzLmNvbnRlbnRWaXNpYmxlKWlmKCJvYmplY3QiPT10eXBlb2YgcyYmcz8uZ2V0UGF0dGVybil7ZS5zYXZlKCk7ZS5zdHJva2VTdHlsZT1zLmdldFBhdHRlcm4oZSx0aGlzLCgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKGUpLHIuUGF0aFR5cGUuU1RST0tFKTt0aGlzLnJlc2NhbGVBbmRTdHJva2UoITEpO2UucmVzdG9yZSgpfWVsc2UgdGhpcy5yZXNjYWxlQW5kU3Ryb2tlKCEwKTt0JiZ0aGlzLmNvbnN1bWVQYXRoKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpO2UuZ2xvYmFsQWxwaGE9dGhpcy5jdXJyZW50LmZpbGxBbHBoYX1jbG9zZVN0cm9rZSgpe3RoaXMuY2xvc2VQYXRoKCk7dGhpcy5zdHJva2UoKX1maWxsKHQpe3Q9dm9pZCAwPT09dHx8dDtjb25zdCBlPXRoaXMuY3R4LHM9dGhpcy5jdXJyZW50LmZpbGxDb2xvcjtsZXQgaT0hMTtpZih0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwpe2Uuc2F2ZSgpO2UuZmlsbFN0eWxlPXMuZ2V0UGF0dGVybihlLHRoaXMsKDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoZSksci5QYXRoVHlwZS5GSUxMKTtpPSEwfWNvbnN0IGE9dGhpcy5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goKTtpZih0aGlzLmNvbnRlbnRWaXNpYmxlJiZudWxsIT09YSlpZih0aGlzLnBlbmRpbmdFT0ZpbGwpe2UuZmlsbCgiZXZlbm9kZCIpO3RoaXMucGVuZGluZ0VPRmlsbD0hMX1lbHNlIGUuZmlsbCgpO2kmJmUucmVzdG9yZSgpO3QmJnRoaXMuY29uc3VtZVBhdGgoYSl9ZW9GaWxsKCl7dGhpcy5wZW5kaW5nRU9GaWxsPSEwO3RoaXMuZmlsbCgpfWZpbGxTdHJva2UoKXt0aGlzLmZpbGwoITEpO3RoaXMuc3Ryb2tlKCExKTt0aGlzLmNvbnN1bWVQYXRoKCl9ZW9GaWxsU3Ryb2tlKCl7dGhpcy5wZW5kaW5nRU9GaWxsPSEwO3RoaXMuZmlsbFN0cm9rZSgpfWNsb3NlRmlsbFN0cm9rZSgpe3RoaXMuY2xvc2VQYXRoKCk7dGhpcy5maWxsU3Ryb2tlKCl9Y2xvc2VFT0ZpbGxTdHJva2UoKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITA7dGhpcy5jbG9zZVBhdGgoKTt0aGlzLmZpbGxTdHJva2UoKX1lbmRQYXRoKCl7dGhpcy5jb25zdW1lUGF0aCgpfWNsaXAoKXt0aGlzLnBlbmRpbmdDbGlwPXB9ZW9DbGlwKCl7dGhpcy5wZW5kaW5nQ2xpcD1nfWJlZ2luVGV4dCgpe3RoaXMuY3VycmVudC50ZXh0TWF0cml4PWkuSURFTlRJVFlfTUFUUklYO3RoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGU9MTt0aGlzLmN1cnJlbnQueD10aGlzLmN1cnJlbnQubGluZVg9MDt0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVk9MH1lbmRUZXh0KCl7Y29uc3QgdD10aGlzLnBlbmRpbmdUZXh0UGF0aHMsZT10aGlzLmN0eDtpZih2b2lkIDAhPT10KXtlLnNhdmUoKTtlLmJlZ2luUGF0aCgpO2Zvcihjb25zdCBzIG9mIHQpe2Uuc2V0VHJhbnNmb3JtKC4uLnMudHJhbnNmb3JtKTtlLnRyYW5zbGF0ZShzLngscy55KTtzLmFkZFRvUGF0aChlLHMuZm9udFNpemUpfWUucmVzdG9yZSgpO2UuY2xpcCgpO2UuYmVnaW5QYXRoKCk7ZGVsZXRlIHRoaXMucGVuZGluZ1RleHRQYXRoc31lbHNlIGUuYmVnaW5QYXRoKCl9c2V0Q2hhclNwYWNpbmcodCl7dGhpcy5jdXJyZW50LmNoYXJTcGFjaW5nPXR9c2V0V29yZFNwYWNpbmcodCl7dGhpcy5jdXJyZW50LndvcmRTcGFjaW5nPXR9c2V0SFNjYWxlKHQpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPXQvMTAwfXNldExlYWRpbmcodCl7dGhpcy5jdXJyZW50LmxlYWRpbmc9LXR9c2V0Rm9udCh0LGUpe2NvbnN0IHM9dGhpcy5jb21tb25PYmpzLmdldCh0KSxuPXRoaXMuY3VycmVudDtpZighcyl0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgZm9udCBmb3IgJHt0fWApO24uZm9udE1hdHJpeD1zLmZvbnRNYXRyaXh8fGkuRk9OVF9JREVOVElUWV9NQVRSSVg7MCE9PW4uZm9udE1hdHJpeFswXSYmMCE9PW4uZm9udE1hdHJpeFszXXx8KDAsaS53YXJuKSgiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCAiK3QpO2lmKGU8MCl7ZT0tZTtuLmZvbnREaXJlY3Rpb249LTF9ZWxzZSBuLmZvbnREaXJlY3Rpb249MTt0aGlzLmN1cnJlbnQuZm9udD1zO3RoaXMuY3VycmVudC5mb250U2l6ZT1lO2lmKHMuaXNUeXBlM0ZvbnQpcmV0dXJuO2NvbnN0IHI9cy5sb2FkZWROYW1lfHwic2Fucy1zZXJpZiI7bGV0IGE9Im5vcm1hbCI7cy5ibGFjaz9hPSI5MDAiOnMuYm9sZCYmKGE9ImJvbGQiKTtjb25zdCBvPXMuaXRhbGljPyJpdGFsaWMiOiJub3JtYWwiLGw9YCIke3J9IiwgJHtzLmZhbGxiYWNrTmFtZX1gO2xldCBjPWU7ZTwxNj9jPTE2OmU+MTAwJiYoYz0xMDApO3RoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlPWUvYzt0aGlzLmN0eC5mb250PWAke299ICR7YX0gJHtjfXB4ICR7bH1gfXNldFRleHRSZW5kZXJpbmdNb2RlKHQpe3RoaXMuY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZT10fXNldFRleHRSaXNlKHQpe3RoaXMuY3VycmVudC50ZXh0UmlzZT10fW1vdmVUZXh0KHQsZSl7dGhpcy5jdXJyZW50Lng9dGhpcy5jdXJyZW50LmxpbmVYKz10O3RoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWSs9ZX1zZXRMZWFkaW5nTW92ZVRleHQodCxlKXt0aGlzLnNldExlYWRpbmcoLWUpO3RoaXMubW92ZVRleHQodCxlKX1zZXRUZXh0TWF0cml4KHQsZSxzLGksbixyKXt0aGlzLmN1cnJlbnQudGV4dE1hdHJpeD1bdCxlLHMsaSxuLHJdO3RoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGU9TWF0aC5oeXBvdCh0LGUpO3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wO3RoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfW5leHRMaW5lKCl7dGhpcy5tb3ZlVGV4dCgwLHRoaXMuY3VycmVudC5sZWFkaW5nKX1wYWludENoYXIodCxlLHMscil7Y29uc3QgYT10aGlzLmN0eCxvPXRoaXMuY3VycmVudCxsPW8uZm9udCxjPW8udGV4dFJlbmRlcmluZ01vZGUsaD1vLmZvbnRTaXplL28uZm9udFNpemVTY2FsZSxkPWMmaS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLLHU9ISEoYyZpLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpLHA9by5wYXR0ZXJuRmlsbCYmIWwubWlzc2luZ0ZpbGU7bGV0IGc7KGwuZGlzYWJsZUZvbnRGYWNlfHx1fHxwKSYmKGc9bC5nZXRQYXRoR2VuZXJhdG9yKHRoaXMuY29tbW9uT2Jqcyx0KSk7aWYobC5kaXNhYmxlRm9udEZhY2V8fHApe2Euc2F2ZSgpO2EudHJhbnNsYXRlKGUscyk7YS5iZWdpblBhdGgoKTtnKGEsaCk7ciYmYS5zZXRUcmFuc2Zvcm0oLi4ucik7ZCE9PWkuVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmZCE9PWkuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fGEuZmlsbCgpO2QhPT1pLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSYmZCE9PWkuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fGEuc3Ryb2tlKCk7YS5yZXN0b3JlKCl9ZWxzZXtkIT09aS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMJiZkIT09aS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8YS5maWxsVGV4dCh0LGUscyk7ZCE9PWkuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZkIT09aS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8YS5zdHJva2VUZXh0KHQsZSxzKX1pZih1KXsodGhpcy5wZW5kaW5nVGV4dFBhdGhzfHwodGhpcy5wZW5kaW5nVGV4dFBhdGhzPVtdKSkucHVzaCh7dHJhbnNmb3JtOigwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybSkoYSkseDplLHk6cyxmb250U2l6ZTpoLGFkZFRvUGF0aDpnfSl9fWdldCBpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCgpe2NvbnN0e2NvbnRleHQ6dH09dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlzRm9udFN1YnBpeGVsQUFFbmFibGVkIiwxMCwxMCk7dC5zY2FsZSgxLjUsMSk7dC5maWxsVGV4dCgiSSIsMCwxMCk7Y29uc3QgZT10LmdldEltYWdlRGF0YSgwLDAsMTAsMTApLmRhdGE7bGV0IHM9ITE7Zm9yKGxldCB0PTM7dDxlLmxlbmd0aDt0Kz00KWlmKGVbdF0+MCYmZVt0XTwyNTUpe3M9ITA7YnJlYWt9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImlzRm9udFN1YnBpeGVsQUFFbmFibGVkIixzKX1zaG93VGV4dCh0KXtjb25zdCBlPXRoaXMuY3VycmVudCxzPWUuZm9udDtpZihzLmlzVHlwZTNGb250KXJldHVybiB0aGlzLnNob3dUeXBlM1RleHQodCk7Y29uc3QgYT1lLmZvbnRTaXplO2lmKDA9PT1hKXJldHVybjtjb25zdCBvPXRoaXMuY3R4LGw9ZS5mb250U2l6ZVNjYWxlLGM9ZS5jaGFyU3BhY2luZyxoPWUud29yZFNwYWNpbmcsZD1lLmZvbnREaXJlY3Rpb24sdT1lLnRleHRIU2NhbGUqZCxwPXQubGVuZ3RoLGc9cy52ZXJ0aWNhbCxtPWc/MTotMSxmPXMuZGVmYXVsdFZNZXRyaWNzLGI9YSplLmZvbnRNYXRyaXhbMF0sQT1lLnRleHRSZW5kZXJpbmdNb2RlPT09aS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMJiYhcy5kaXNhYmxlRm9udEZhY2UmJiFlLnBhdHRlcm5GaWxsO28uc2F2ZSgpO28udHJhbnNmb3JtKC4uLmUudGV4dE1hdHJpeCk7by50cmFuc2xhdGUoZS54LGUueStlLnRleHRSaXNlKTtkPjA/by5zY2FsZSh1LC0xKTpvLnNjYWxlKHUsMSk7bGV0IF87aWYoZS5wYXR0ZXJuRmlsbCl7by5zYXZlKCk7Y29uc3QgdD1lLmZpbGxDb2xvci5nZXRQYXR0ZXJuKG8sdGhpcywoMCxuLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShvKSxyLlBhdGhUeXBlLkZJTEwpO189KDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtKShvKTtvLnJlc3RvcmUoKTtvLmZpbGxTdHlsZT10fWxldCB2PWUubGluZVdpZHRoO2NvbnN0IHk9ZS50ZXh0TWF0cml4U2NhbGU7aWYoMD09PXl8fDA9PT12KXtjb25zdCB0PWUudGV4dFJlbmRlcmluZ01vZGUmaS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLO3QhPT1pLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSYmdCE9PWkuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fCh2PXRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpKX1lbHNlIHYvPXk7aWYoMSE9PWwpe28uc2NhbGUobCxsKTt2Lz1sfW8ubGluZVdpZHRoPXY7bGV0IFMseD0wO2ZvcihTPTA7UzxwOysrUyl7Y29uc3QgZT10W1NdO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7eCs9bSplKmEvMWUzO2NvbnRpbnVlfWxldCBpPSExO2NvbnN0IG49KGUuaXNTcGFjZT9oOjApK2Mscj1lLmZvbnRDaGFyLHU9ZS5hY2NlbnQ7bGV0IHAsdix5LEU9ZS53aWR0aDtpZihnKXtjb25zdCB0PWUudm1ldHJpY3x8ZixzPS0oZS52bWV0cmljP3RbMV06LjUqRSkqYixpPXRbMl0qYjtFPXQ/LXRbMF06RTtwPXMvbDt2PSh4K2kpL2x9ZWxzZXtwPXgvbDt2PTB9aWYocy5yZW1lYXN1cmUmJkU+MCl7Y29uc3QgdD0xZTMqby5tZWFzdXJlVGV4dChyKS53aWR0aC9hKmw7aWYoRTx0JiZ0aGlzLmlzRm9udFN1YnBpeGVsQUFFbmFibGVkKXtjb25zdCBlPUUvdDtpPSEwO28uc2F2ZSgpO28uc2NhbGUoZSwxKTtwLz1lfWVsc2UgRSE9PXQmJihwKz0oRS10KS8yZTMqYS9sKX1pZih0aGlzLmNvbnRlbnRWaXNpYmxlJiYoZS5pc0luRm9udHx8cy5taXNzaW5nRmlsZSkpaWYoQSYmIXUpby5maWxsVGV4dChyLHAsdik7ZWxzZXt0aGlzLnBhaW50Q2hhcihyLHAsdixfKTtpZih1KXtjb25zdCB0PXArYSp1Lm9mZnNldC54L2wsZT12LWEqdS5vZmZzZXQueS9sO3RoaXMucGFpbnRDaGFyKHUuZm9udENoYXIsdCxlLF8pfX15PWc/RSpiLW4qZDpFKmIrbipkO3grPXk7aSYmby5yZXN0b3JlKCl9Zz9lLnktPXg6ZS54Kz14KnU7by5yZXN0b3JlKCk7dGhpcy5jb21wb3NlKCl9c2hvd1R5cGUzVGV4dCh0KXtjb25zdCBlPXRoaXMuY3R4LHM9dGhpcy5jdXJyZW50LG49cy5mb250LHI9cy5mb250U2l6ZSxhPXMuZm9udERpcmVjdGlvbixvPW4udmVydGljYWw/MTotMSxsPXMuY2hhclNwYWNpbmcsYz1zLndvcmRTcGFjaW5nLGg9cy50ZXh0SFNjYWxlKmEsZD1zLmZvbnRNYXRyaXh8fGkuRk9OVF9JREVOVElUWV9NQVRSSVgsdT10Lmxlbmd0aDtsZXQgcCxnLG0sZjtpZighKHMudGV4dFJlbmRlcmluZ01vZGU9PT1pLlRleHRSZW5kZXJpbmdNb2RlLklOVklTSUJMRSkmJjAhPT1yKXt0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nPW51bGw7dGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsO2Uuc2F2ZSgpO2UudHJhbnNmb3JtKC4uLnMudGV4dE1hdHJpeCk7ZS50cmFuc2xhdGUocy54LHMueSk7ZS5zY2FsZShoLGEpO2ZvcihwPTA7cDx1OysrcCl7Zz10W3BdO2lmKCJudW1iZXIiPT10eXBlb2YgZyl7Zj1vKmcqci8xZTM7dGhpcy5jdHgudHJhbnNsYXRlKGYsMCk7cy54Kz1mKmg7Y29udGludWV9Y29uc3QgYT0oZy5pc1NwYWNlP2M6MCkrbCx1PW4uY2hhclByb2NPcGVyYXRvckxpc3RbZy5vcGVyYXRvckxpc3RJZF07aWYoIXUpeygwLGkud2FybikoYFR5cGUzIGNoYXJhY3RlciAiJHtnLm9wZXJhdG9yTGlzdElkfSIgaXMgbm90IGF2YWlsYWJsZS5gKTtjb250aW51ZX1pZih0aGlzLmNvbnRlbnRWaXNpYmxlKXt0aGlzLnByb2Nlc3NpbmdUeXBlMz1nO3RoaXMuc2F2ZSgpO2Uuc2NhbGUocixyKTtlLnRyYW5zZm9ybSguLi5kKTt0aGlzLmV4ZWN1dGVPcGVyYXRvckxpc3QodSk7dGhpcy5yZXN0b3JlKCl9bT1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2cud2lkdGgsMF0sZClbMF0qcithO2UudHJhbnNsYXRlKG0sMCk7cy54Kz1tKmh9ZS5yZXN0b3JlKCk7dGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbH19c2V0Q2hhcldpZHRoKHQsZSl7fXNldENoYXJXaWR0aEFuZEJvdW5kcyh0LGUscyxpLG4scil7dGhpcy5jdHgucmVjdChzLGksbi1zLHItaSk7dGhpcy5jdHguY2xpcCgpO3RoaXMuZW5kUGF0aCgpfWdldENvbG9yTl9QYXR0ZXJuKHQpe2xldCBlO2lmKCJUaWxpbmdQYXR0ZXJuIj09PXRbMF0pe2NvbnN0IHM9dFsxXSxpPXRoaXMuYmFzZVRyYW5zZm9ybXx8KDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCksYT17Y3JlYXRlQ2FudmFzR3JhcGhpY3M6dD0+bmV3IENhbnZhc0dyYXBoaWNzKHQsdGhpcy5jb21tb25PYmpzLHRoaXMub2Jqcyx0aGlzLmNhbnZhc0ZhY3RvcnkpfTtlPW5ldyByLlRpbGluZ1BhdHRlcm4odCxzLHRoaXMuY3R4LGEsaSl9ZWxzZSBlPXRoaXMuX2dldFBhdHRlcm4odFsxXSx0WzJdKTtyZXR1cm4gZX1zZXRTdHJva2VDb2xvck4oKXt0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3I9dGhpcy5nZXRDb2xvck5fUGF0dGVybihhcmd1bWVudHMpfXNldEZpbGxDb2xvck4oKXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPXRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKTt0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw9ITB9c2V0U3Ryb2tlUkdCQ29sb3IodCxlLHMpe2NvbnN0IG49dGhpcy5zZWxlY3RDb2xvcj8uKHQsZSxzKXx8aS5VdGlsLm1ha2VIZXhDb2xvcih0LGUscyk7dGhpcy5jdHguc3Ryb2tlU3R5bGU9bjt0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3I9bn1zZXRGaWxsUkdCQ29sb3IodCxlLHMpe2NvbnN0IG49dGhpcy5zZWxlY3RDb2xvcj8uKHQsZSxzKXx8aS5VdGlsLm1ha2VIZXhDb2xvcih0LGUscyk7dGhpcy5jdHguZmlsbFN0eWxlPW47dGhpcy5jdXJyZW50LmZpbGxDb2xvcj1uO3RoaXMuY3VycmVudC5wYXR0ZXJuRmlsbD0hMX1fZ2V0UGF0dGVybih0LGU9bnVsbCl7bGV0IHM7aWYodGhpcy5jYWNoZWRQYXR0ZXJucy5oYXModCkpcz10aGlzLmNhY2hlZFBhdHRlcm5zLmdldCh0KTtlbHNle3M9KDAsci5nZXRTaGFkaW5nUGF0dGVybikodGhpcy5vYmpzLmdldCh0KSk7dGhpcy5jYWNoZWRQYXR0ZXJucy5zZXQodCxzKX1lJiYocy5tYXRyaXg9ZSk7cmV0dXJuIHN9c2hhZGluZ0ZpbGwodCl7aWYoIXRoaXMuY29udGVudFZpc2libGUpcmV0dXJuO2NvbnN0IGU9dGhpcy5jdHg7dGhpcy5zYXZlKCk7Y29uc3Qgcz10aGlzLl9nZXRQYXR0ZXJuKHQpO2UuZmlsbFN0eWxlPXMuZ2V0UGF0dGVybihlLHRoaXMsKDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoZSksci5QYXRoVHlwZS5TSEFESU5HKTtjb25zdCBhPSgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKGUpO2lmKGEpe2NvbnN0IHQ9ZS5jYW52YXMscz10LndpZHRoLG49dC5oZWlnaHQscj1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0sYSksbz1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsbl0sYSksbD1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3MsMF0sYSksYz1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3Msbl0sYSksaD1NYXRoLm1pbihyWzBdLG9bMF0sbFswXSxjWzBdKSxkPU1hdGgubWluKHJbMV0sb1sxXSxsWzFdLGNbMV0pLHU9TWF0aC5tYXgoclswXSxvWzBdLGxbMF0sY1swXSkscD1NYXRoLm1heChyWzFdLG9bMV0sbFsxXSxjWzFdKTt0aGlzLmN0eC5maWxsUmVjdChoLGQsdS1oLHAtZCl9ZWxzZSB0aGlzLmN0eC5maWxsUmVjdCgtMWUxMCwtMWUxMCwyZTEwLDJlMTApO3RoaXMuY29tcG9zZSh0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpKTt0aGlzLnJlc3RvcmUoKX1iZWdpbklubGluZUltYWdlKCl7KDAsaS51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlIil9YmVnaW5JbWFnZURhdGEoKXsoMCxpLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhIil9cGFpbnRGb3JtWE9iamVjdEJlZ2luKHQsZSl7aWYodGhpcy5jb250ZW50VmlzaWJsZSl7dGhpcy5zYXZlKCk7dGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sucHVzaCh0aGlzLmJhc2VUcmFuc2Zvcm0pO0FycmF5LmlzQXJyYXkodCkmJjY9PT10Lmxlbmd0aCYmdGhpcy50cmFuc2Zvcm0oLi4udCk7dGhpcy5iYXNlVHJhbnNmb3JtPSgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpO2lmKGUpe2NvbnN0IHQ9ZVsyXS1lWzBdLHM9ZVszXS1lWzFdO3RoaXMuY3R4LnJlY3QoZVswXSxlWzFdLHQscyk7dGhpcy5jdXJyZW50LnVwZGF0ZVJlY3RNaW5NYXgoKDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCksZSk7dGhpcy5jbGlwKCk7dGhpcy5lbmRQYXRoKCl9fX1wYWludEZvcm1YT2JqZWN0RW5kKCl7aWYodGhpcy5jb250ZW50VmlzaWJsZSl7dGhpcy5yZXN0b3JlKCk7dGhpcy5iYXNlVHJhbnNmb3JtPXRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnBvcCgpfX1iZWdpbkdyb3VwKHQpe2lmKCF0aGlzLmNvbnRlbnRWaXNpYmxlKXJldHVybjt0aGlzLnNhdmUoKTtpZih0aGlzLmluU01hc2tNb2RlKXt0aGlzLmVuZFNNYXNrTW9kZSgpO3RoaXMuY3VycmVudC5hY3RpdmVTTWFzaz1udWxsfWNvbnN0IGU9dGhpcy5jdHg7dC5pc29sYXRlZHx8KDAsaS5pbmZvKSgiVE9ETzogU3VwcG9ydCBub24taXNvbGF0ZWQgZ3JvdXBzLiIpO3Qua25vY2tvdXQmJigwLGkud2FybikoIktub2Nrb3V0IGdyb3VwcyBub3Qgc3VwcG9ydGVkLiIpO2NvbnN0IHM9KDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtKShlKTt0Lm1hdHJpeCYmZS50cmFuc2Zvcm0oLi4udC5tYXRyaXgpO2lmKCF0LmJib3gpdGhyb3cgbmV3IEVycm9yKCJCb3VuZGluZyBib3ggaXMgcmVxdWlyZWQuIik7bGV0IHI9aS5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHQuYmJveCwoMCxuLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGUpKTtjb25zdCBhPVswLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0XTtyPWkuVXRpbC5pbnRlcnNlY3QocixhKXx8WzAsMCwwLDBdO2NvbnN0IG89TWF0aC5mbG9vcihyWzBdKSxjPU1hdGguZmxvb3IoclsxXSk7bGV0IGg9TWF0aC5tYXgoTWF0aC5jZWlsKHJbMl0pLW8sMSksZD1NYXRoLm1heChNYXRoLmNlaWwoclszXSktYywxKSx1PTEscD0xO2lmKGg+bCl7dT1oL2w7aD1sfWlmKGQ+bCl7cD1kL2w7ZD1sfXRoaXMuY3VycmVudC5zdGFydE5ld1BhdGhBbmRDbGlwQm94KFswLDAsaCxkXSk7bGV0IGc9Imdyb3VwQXQiK3RoaXMuZ3JvdXBMZXZlbDt0LnNtYXNrJiYoZys9Il9zbWFza18iK3RoaXMuc21hc2tDb3VudGVyKyslMik7Y29uc3QgbT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhnLGgsZCksZj1tLmNvbnRleHQ7Zi5zY2FsZSgxL3UsMS9wKTtmLnRyYW5zbGF0ZSgtbywtYyk7Zi50cmFuc2Zvcm0oLi4ucyk7aWYodC5zbWFzayl0aGlzLnNtYXNrU3RhY2sucHVzaCh7Y2FudmFzOm0uY2FudmFzLGNvbnRleHQ6ZixvZmZzZXRYOm8sb2Zmc2V0WTpjLHNjYWxlWDp1LHNjYWxlWTpwLHN1YnR5cGU6dC5zbWFzay5zdWJ0eXBlLGJhY2tkcm9wOnQuc21hc2suYmFja2Ryb3AsdHJhbnNmZXJNYXA6dC5zbWFzay50cmFuc2Zlck1hcHx8bnVsbCxzdGFydFRyYW5zZm9ybUludmVyc2U6bnVsbH0pO2Vsc2V7ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApO2UudHJhbnNsYXRlKG8sYyk7ZS5zY2FsZSh1LHApO2Uuc2F2ZSgpfWNvcHlDdHhTdGF0ZShlLGYpO3RoaXMuY3R4PWY7dGhpcy5zZXRHU3RhdGUoW1siQk0iLCJzb3VyY2Utb3ZlciJdLFsiY2EiLDFdLFsiQ0EiLDFdXSk7dGhpcy5ncm91cFN0YWNrLnB1c2goZSk7dGhpcy5ncm91cExldmVsKyt9ZW5kR3JvdXAodCl7aWYoIXRoaXMuY29udGVudFZpc2libGUpcmV0dXJuO3RoaXMuZ3JvdXBMZXZlbC0tO2NvbnN0IGU9dGhpcy5jdHgscz10aGlzLmdyb3VwU3RhY2sucG9wKCk7dGhpcy5jdHg9czt0aGlzLmN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITE7aWYodC5zbWFzayl7dGhpcy50ZW1wU01hc2s9dGhpcy5zbWFza1N0YWNrLnBvcCgpO3RoaXMucmVzdG9yZSgpfWVsc2V7dGhpcy5jdHgucmVzdG9yZSgpO2NvbnN0IHQ9KDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCk7dGhpcy5yZXN0b3JlKCk7dGhpcy5jdHguc2F2ZSgpO3RoaXMuY3R4LnNldFRyYW5zZm9ybSguLi50KTtjb25zdCBzPWkuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChbMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodF0sdCk7dGhpcy5jdHguZHJhd0ltYWdlKGUuY2FudmFzLDAsMCk7dGhpcy5jdHgucmVzdG9yZSgpO3RoaXMuY29tcG9zZShzKX19YmVnaW5Bbm5vdGF0aW9uKHQsZSxzLHIsYSl7dGhpcy4jc3QoKTtyZXNldEN0eFRvRGVmYXVsdCh0aGlzLmN0eCx0aGlzLmZvcmVncm91bmRDb2xvcik7dGhpcy5jdHguc2F2ZSgpO3RoaXMuc2F2ZSgpO3RoaXMuYmFzZVRyYW5zZm9ybSYmdGhpcy5jdHguc2V0VHJhbnNmb3JtKC4uLnRoaXMuYmFzZVRyYW5zZm9ybSk7aWYoQXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoKXtjb25zdCByPWVbMl0tZVswXSxvPWVbM10tZVsxXTtpZihhJiZ0aGlzLmFubm90YXRpb25DYW52YXNNYXApeyhzPXMuc2xpY2UoKSlbNF0tPWVbMF07c1s1XS09ZVsxXTsoZT1lLnNsaWNlKCkpWzBdPWVbMV09MDtlWzJdPXI7ZVszXT1vO2NvbnN0W2EsbF09aS5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKCgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpKSx7dmlld3BvcnRTY2FsZTpjfT10aGlzLGg9TWF0aC5jZWlsKHIqdGhpcy5vdXRwdXRTY2FsZVgqYyksZD1NYXRoLmNlaWwobyp0aGlzLm91dHB1dFNjYWxlWSpjKTt0aGlzLmFubm90YXRpb25DYW52YXM9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZShoLGQpO2NvbnN0e2NhbnZhczp1LGNvbnRleHQ6cH09dGhpcy5hbm5vdGF0aW9uQ2FudmFzO3RoaXMuYW5ub3RhdGlvbkNhbnZhc01hcC5zZXQodCx1KTt0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg9dGhpcy5jdHg7dGhpcy5jdHg9cDt0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oYSwwLDAsLWwsMCxvKmwpO3Jlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4LHRoaXMuZm9yZWdyb3VuZENvbG9yKX1lbHNle3Jlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4LHRoaXMuZm9yZWdyb3VuZENvbG9yKTt0aGlzLmN0eC5yZWN0KGVbMF0sZVsxXSxyLG8pO3RoaXMuY3R4LmNsaXAoKTt0aGlzLmVuZFBhdGgoKX19dGhpcy5jdXJyZW50PW5ldyBDYW52YXNFeHRyYVN0YXRlKHRoaXMuY3R4LmNhbnZhcy53aWR0aCx0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KTt0aGlzLnRyYW5zZm9ybSguLi5zKTt0aGlzLnRyYW5zZm9ybSguLi5yKX1lbmRBbm5vdGF0aW9uKCl7aWYodGhpcy5hbm5vdGF0aW9uQ2FudmFzKXt0aGlzLmN0eD10aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg7ZGVsZXRlIHRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eDtkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzfX1wYWludEltYWdlTWFza1hPYmplY3QodCl7aWYoIXRoaXMuY29udGVudFZpc2libGUpcmV0dXJuO2NvbnN0IGU9dC5jb3VudDsodD10aGlzLmdldE9iamVjdCh0LmRhdGEsdCkpLmNvdW50PWU7Y29uc3Qgcz10aGlzLmN0eCxpPXRoaXMucHJvY2Vzc2luZ1R5cGUzO2lmKGkpe3ZvaWQgMD09PWkuY29tcGlsZWQmJihpLmNvbXBpbGVkPWZ1bmN0aW9uIGNvbXBpbGVUeXBlM0dseXBoKHQpe2NvbnN0e3dpZHRoOmUsaGVpZ2h0OnN9PXQ7aWYoZT5jfHxzPmMpcmV0dXJuIG51bGw7Y29uc3QgaT1uZXcgVWludDhBcnJheShbMCwyLDQsMCwxLDAsNSw0LDgsMTAsMCw4LDAsMiwxLDBdKSxuPWUrMTtsZXQgcixhLG8sbD1uZXcgVWludDhBcnJheShuKihzKzEpKTtjb25zdCBoPWUrNyYtODtsZXQgZD1uZXcgVWludDhBcnJheShoKnMpLHU9MDtmb3IoY29uc3QgZSBvZiB0LmRhdGEpe2xldCB0PTEyODtmb3IoO3Q+MDspe2RbdSsrXT1lJnQ/MDoyNTU7dD4+PTF9fWxldCBwPTA7dT0wO2lmKDAhPT1kW3VdKXtsWzBdPTE7KytwfWZvcihhPTE7YTxlO2ErKyl7aWYoZFt1XSE9PWRbdSsxXSl7bFthXT1kW3VdPzI6MTsrK3B9dSsrfWlmKDAhPT1kW3VdKXtsW2FdPTI7KytwfWZvcihyPTE7cjxzO3IrKyl7dT1yKmg7bz1yKm47aWYoZFt1LWhdIT09ZFt1XSl7bFtvXT1kW3VdPzE6ODsrK3B9bGV0IHQ9KGRbdV0/NDowKSsoZFt1LWhdPzg6MCk7Zm9yKGE9MTthPGU7YSsrKXt0PSh0Pj4yKSsoZFt1KzFdPzQ6MCkrKGRbdS1oKzFdPzg6MCk7aWYoaVt0XSl7bFtvK2FdPWlbdF07KytwfXUrK31pZihkW3UtaF0hPT1kW3VdKXtsW28rYV09ZFt1XT8yOjQ7KytwfWlmKHA+MWUzKXJldHVybiBudWxsfXU9aCoocy0xKTtvPXIqbjtpZigwIT09ZFt1XSl7bFtvXT04OysrcH1mb3IoYT0xO2E8ZTthKyspe2lmKGRbdV0hPT1kW3UrMV0pe2xbbythXT1kW3VdPzQ6ODsrK3B9dSsrfWlmKDAhPT1kW3VdKXtsW28rYV09NDsrK3B9aWYocD4xZTMpcmV0dXJuIG51bGw7Y29uc3QgZz1uZXcgSW50MzJBcnJheShbMCxuLC0xLDAsLW4sMCwwLDAsMV0pLG09bmV3IFBhdGgyRDtmb3Iocj0wO3AmJnI8PXM7cisrKXtsZXQgdD1yKm47Y29uc3Qgcz10K2U7Zm9yKDt0PHMmJiFsW3RdOyl0Kys7aWYodD09PXMpY29udGludWU7bS5tb3ZlVG8odCVuLHIpO2NvbnN0IGk9dDtsZXQgYT1sW3RdO2Rve2NvbnN0IGU9Z1thXTtkb3t0Kz1lfXdoaWxlKCFsW3RdKTtjb25zdCBzPWxbdF07aWYoNSE9PXMmJjEwIT09cyl7YT1zO2xbdF09MH1lbHNle2E9cyY1MSphPj40O2xbdF0mPWE+PjJ8YTw8Mn1tLmxpbmVUbyh0JW4sdC9ufDApO2xbdF18fC0tcH13aGlsZShpIT09dCk7LS1yfWQ9bnVsbDtsPW51bGw7cmV0dXJuIGZ1bmN0aW9uKHQpe3Quc2F2ZSgpO3Quc2NhbGUoMS9lLC0xL3MpO3QudHJhbnNsYXRlKDAsLXMpO3QuZmlsbChtKTt0LmJlZ2luUGF0aCgpO3QucmVzdG9yZSgpfX0odCkpO2lmKGkuY29tcGlsZWQpe2kuY29tcGlsZWQocyk7cmV0dXJufX1jb25zdCBuPXRoaXMuX2NyZWF0ZU1hc2tDYW52YXModCkscj1uLmNhbnZhcztzLnNhdmUoKTtzLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCk7cy5kcmF3SW1hZ2UocixuLm9mZnNldFgsbi5vZmZzZXRZKTtzLnJlc3RvcmUoKTt0aGlzLmNvbXBvc2UoKX1wYWludEltYWdlTWFza1hPYmplY3RSZXBlYXQodCxlLHM9MCxyPTAsYSxvKXtpZighdGhpcy5jb250ZW50VmlzaWJsZSlyZXR1cm47dD10aGlzLmdldE9iamVjdCh0LmRhdGEsdCk7Y29uc3QgbD10aGlzLmN0eDtsLnNhdmUoKTtjb25zdCBjPSgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybSkobCk7bC50cmFuc2Zvcm0oZSxzLHIsYSwwLDApO2NvbnN0IGg9dGhpcy5fY3JlYXRlTWFza0NhbnZhcyh0KTtsLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCk7Zm9yKGxldCB0PTAsbj1vLmxlbmd0aDt0PG47dCs9Mil7Y29uc3Qgbj1pLlV0aWwudHJhbnNmb3JtKGMsW2UscyxyLGEsb1t0XSxvW3QrMV1dKSxbZCx1XT1pLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsMF0sbik7bC5kcmF3SW1hZ2UoaC5jYW52YXMsZCx1KX1sLnJlc3RvcmUoKTt0aGlzLmNvbXBvc2UoKX1wYWludEltYWdlTWFza1hPYmplY3RHcm91cCh0KXtpZighdGhpcy5jb250ZW50VmlzaWJsZSlyZXR1cm47Y29uc3QgZT10aGlzLmN0eCxzPXRoaXMuY3VycmVudC5maWxsQ29sb3IsaT10aGlzLmN1cnJlbnQucGF0dGVybkZpbGw7Zm9yKGNvbnN0IGEgb2YgdCl7Y29uc3R7ZGF0YTp0LHdpZHRoOm8saGVpZ2h0OmwsdHJhbnNmb3JtOmN9PWEsaD10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsbyxsKSxkPWguY29udGV4dDtkLnNhdmUoKTtwdXRCaW5hcnlJbWFnZU1hc2soZCx0aGlzLmdldE9iamVjdCh0LGEpKTtkLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLWluIjtkLmZpbGxTdHlsZT1pP3MuZ2V0UGF0dGVybihkLHRoaXMsKDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoZSksci5QYXRoVHlwZS5GSUxMKTpzO2QuZmlsbFJlY3QoMCwwLG8sbCk7ZC5yZXN0b3JlKCk7ZS5zYXZlKCk7ZS50cmFuc2Zvcm0oLi4uYyk7ZS5zY2FsZSgxLC0xKTtkcmF3SW1hZ2VBdEludGVnZXJDb29yZHMoZSxoLmNhbnZhcywwLDAsbyxsLDAsLTEsMSwxKTtlLnJlc3RvcmUoKX10aGlzLmNvbXBvc2UoKX1wYWludEltYWdlWE9iamVjdCh0KXtpZighdGhpcy5jb250ZW50VmlzaWJsZSlyZXR1cm47Y29uc3QgZT10aGlzLmdldE9iamVjdCh0KTtlP3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSk6KDAsaS53YXJuKSgiRGVwZW5kZW50IGltYWdlIGlzbid0IHJlYWR5IHlldCIpfXBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0KHQsZSxzLG4pe2lmKCF0aGlzLmNvbnRlbnRWaXNpYmxlKXJldHVybjtjb25zdCByPXRoaXMuZ2V0T2JqZWN0KHQpO2lmKCFyKXsoMCxpLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iik7cmV0dXJufWNvbnN0IGE9ci53aWR0aCxvPXIuaGVpZ2h0LGw9W107Zm9yKGxldCB0PTAsaT1uLmxlbmd0aDt0PGk7dCs9MilsLnB1c2goe3RyYW5zZm9ybTpbZSwwLDAscyxuW3RdLG5bdCsxXV0seDowLHk6MCx3OmEsaDpvfSk7dGhpcy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwKHIsbCl9cGFpbnRJbmxpbmVJbWFnZVhPYmplY3QodCl7aWYoIXRoaXMuY29udGVudFZpc2libGUpcmV0dXJuO2NvbnN0IGU9dC53aWR0aCxzPXQuaGVpZ2h0LGk9dGhpcy5jdHg7dGhpcy5zYXZlKCk7aS5zY2FsZSgxL2UsLTEvcyk7bGV0IHI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEhUTUxFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fCF0LmRhdGEpcj10O2Vsc2V7Y29uc3QgaT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygiaW5saW5lSW1hZ2UiLGUscyk7cHV0QmluYXJ5SW1hZ2VEYXRhKGkuY29udGV4dCx0LHRoaXMuY3VycmVudC50cmFuc2Zlck1hcHMpO3I9aS5jYW52YXN9Y29uc3QgYT10aGlzLl9zY2FsZUltYWdlKHIsKDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoaSkpO2kuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPWdldEltYWdlU21vb3RoaW5nRW5hYmxlZCgoMCxuLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGkpLHQuaW50ZXJwb2xhdGUpO2RyYXdJbWFnZUF0SW50ZWdlckNvb3JkcyhpLGEuaW1nLDAsMCxhLnBhaW50V2lkdGgsYS5wYWludEhlaWdodCwwLC1zLGUscyk7dGhpcy5jb21wb3NlKCk7dGhpcy5yZXN0b3JlKCl9cGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCh0LGUpe2lmKCF0aGlzLmNvbnRlbnRWaXNpYmxlKXJldHVybjtjb25zdCBzPXRoaXMuY3R4LGk9dC53aWR0aCxuPXQuaGVpZ2h0LHI9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixpLG4pO3B1dEJpbmFyeUltYWdlRGF0YShyLmNvbnRleHQsdCx0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzKTtmb3IoY29uc3QgdCBvZiBlKXtzLnNhdmUoKTtzLnRyYW5zZm9ybSguLi50LnRyYW5zZm9ybSk7cy5zY2FsZSgxLC0xKTtkcmF3SW1hZ2VBdEludGVnZXJDb29yZHMocyxyLmNhbnZhcyx0LngsdC55LHQudyx0LmgsMCwtMSwxLDEpO3MucmVzdG9yZSgpfXRoaXMuY29tcG9zZSgpfXBhaW50U29saWRDb2xvckltYWdlTWFzaygpe2lmKHRoaXMuY29udGVudFZpc2libGUpe3RoaXMuY3R4LmZpbGxSZWN0KDAsMCwxLDEpO3RoaXMuY29tcG9zZSgpfX1tYXJrUG9pbnQodCl7fW1hcmtQb2ludFByb3BzKHQsZSl7fWJlZ2luTWFya2VkQ29udGVudCh0KXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOiEwfSl9YmVnaW5NYXJrZWRDb250ZW50UHJvcHModCxlKXsiT0MiPT09dD90aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHt2aXNpYmxlOnRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShlKX0pOnRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe3Zpc2libGU6ITB9KTt0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfWVuZE1hcmtlZENvbnRlbnQoKXt0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wb3AoKTt0aGlzLmNvbnRlbnRWaXNpYmxlPXRoaXMuaXNDb250ZW50VmlzaWJsZSgpfWJlZ2luQ29tcGF0KCl7fWVuZENvbXBhdCgpe31jb25zdW1lUGF0aCh0KXtjb25zdCBlPXRoaXMuY3VycmVudC5pc0VtcHR5Q2xpcCgpO3RoaXMucGVuZGluZ0NsaXAmJnRoaXMuY3VycmVudC51cGRhdGVDbGlwRnJvbVBhdGgoKTt0aGlzLnBlbmRpbmdDbGlwfHx0aGlzLmNvbXBvc2UodCk7Y29uc3Qgcz10aGlzLmN0eDtpZih0aGlzLnBlbmRpbmdDbGlwKXtlfHwodGhpcy5wZW5kaW5nQ2xpcD09PWc/cy5jbGlwKCJldmVub2RkIik6cy5jbGlwKCkpO3RoaXMucGVuZGluZ0NsaXA9bnVsbH10aGlzLmN1cnJlbnQuc3RhcnROZXdQYXRoQW5kQ2xpcEJveCh0aGlzLmN1cnJlbnQuY2xpcEJveCk7cy5iZWdpblBhdGgoKX1nZXRTaW5nbGVQaXhlbFdpZHRoKCl7aWYoIXRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGgpe2NvbnN0IHQ9KDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCk7aWYoMD09PXRbMV0mJjA9PT10WzJdKXRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9MS9NYXRoLm1pbihNYXRoLmFicyh0WzBdKSxNYXRoLmFicyh0WzNdKSk7ZWxzZXtjb25zdCBlPU1hdGguYWJzKHRbMF0qdFszXS10WzJdKnRbMV0pLHM9TWF0aC5oeXBvdCh0WzBdLHRbMl0pLGk9TWF0aC5oeXBvdCh0WzFdLHRbM10pO3RoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9TWF0aC5tYXgocyxpKS9lfX1yZXR1cm4gdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aH1nZXRTY2FsZUZvclN0cm9raW5nKCl7aWYoIXRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmcpe2NvbnN0e2xpbmVXaWR0aDp0fT10aGlzLmN1cnJlbnQsZT0oMCxuLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KTtsZXQgcyxpO2lmKDA9PT1lWzFdJiYwPT09ZVsyXSl7Y29uc3Qgbj1NYXRoLmFicyhlWzBdKSxyPU1hdGguYWJzKGVbM10pO2lmKDA9PT10KXtzPTEvbjtpPTEvcn1lbHNle2NvbnN0IGU9bip0LGE9cip0O3M9ZTwxPzEvZToxO2k9YTwxPzEvYToxfX1lbHNle2NvbnN0IG49TWF0aC5hYnMoZVswXSplWzNdLWVbMl0qZVsxXSkscj1NYXRoLmh5cG90KGVbMF0sZVsxXSksYT1NYXRoLmh5cG90KGVbMl0sZVszXSk7aWYoMD09PXQpe3M9YS9uO2k9ci9ufWVsc2V7Y29uc3QgZT10Km47cz1hPmU/YS9lOjE7aT1yPmU/ci9lOjF9fXRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmc9W3MsaV19cmV0dXJuIHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmd9cmVzY2FsZUFuZFN0cm9rZSh0KXtjb25zdHtjdHg6ZX09dGhpcyx7bGluZVdpZHRoOnN9PXRoaXMuY3VycmVudCxbaSxyXT10aGlzLmdldFNjYWxlRm9yU3Ryb2tpbmcoKTtlLmxpbmVXaWR0aD1zfHwxO2lmKDE9PT1pJiYxPT09cil7ZS5zdHJva2UoKTtyZXR1cm59bGV0IGEsbyxsO2lmKHQpe2E9KDAsbi5nZXRDdXJyZW50VHJhbnNmb3JtKShlKTtvPWUuZ2V0TGluZURhc2goKS5zbGljZSgpO2w9ZS5saW5lRGFzaE9mZnNldH1lLnNjYWxlKGkscik7Y29uc3QgYz1NYXRoLm1heChpLHIpO2Uuc2V0TGluZURhc2goZS5nZXRMaW5lRGFzaCgpLm1hcCgodD0+dC9jKSkpO2UubGluZURhc2hPZmZzZXQvPWM7ZS5zdHJva2UoKTtpZih0KXtlLnNldFRyYW5zZm9ybSguLi5hKTtlLnNldExpbmVEYXNoKG8pO2UubGluZURhc2hPZmZzZXQ9bH19aXNDb250ZW50VmlzaWJsZSgpe2ZvcihsZXQgdD10aGlzLm1hcmtlZENvbnRlbnRTdGFjay5sZW5ndGgtMTt0Pj0wO3QtLSlpZighdGhpcy5tYXJrZWRDb250ZW50U3RhY2tbdF0udmlzaWJsZSlyZXR1cm4hMTtyZXR1cm4hMH19ZS5DYW52YXNHcmFwaGljcz1DYW52YXNHcmFwaGljcztmb3IoY29uc3QgdCBpbiBpLk9QUyl2b2lkIDAhPT1DYW52YXNHcmFwaGljcy5wcm90b3R5cGVbdF0mJihDYW52YXNHcmFwaGljcy5wcm90b3R5cGVbaS5PUFNbdF1dPUNhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVt0XSl9LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5UaWxpbmdQYXR0ZXJuPWUuUGF0aFR5cGU9dm9pZCAwO2UuZ2V0U2hhZGluZ1BhdHRlcm49ZnVuY3Rpb24gZ2V0U2hhZGluZ1BhdHRlcm4odCl7c3dpdGNoKHRbMF0pe2Nhc2UiUmFkaWFsQXhpYWwiOnJldHVybiBuZXcgUmFkaWFsQXhpYWxTaGFkaW5nUGF0dGVybih0KTtjYXNlIk1lc2giOnJldHVybiBuZXcgTWVzaFNoYWRpbmdQYXR0ZXJuKHQpO2Nhc2UiRHVtbXkiOnJldHVybiBuZXcgRHVtbXlTaGFkaW5nUGF0dGVybn10aHJvdyBuZXcgRXJyb3IoYFVua25vd24gSVIgdHlwZTogJHt0WzBdfWApfTt2YXIgaT1zKDEpLG49cyg2KSxyPXMoMTIpO2NvbnN0IGE9e0ZJTEw6IkZpbGwiLFNUUk9LRToiU3Ryb2tlIixTSEFESU5HOiJTaGFkaW5nIn07ZS5QYXRoVHlwZT1hO2Z1bmN0aW9uIGFwcGx5Qm91bmRpbmdCb3godCxlKXtpZighZXx8ci5pc05vZGVKUylyZXR1cm47Y29uc3Qgcz1lWzJdLWVbMF0saT1lWzNdLWVbMV0sbj1uZXcgUGF0aDJEO24ucmVjdChlWzBdLGVbMV0scyxpKTt0LmNsaXAobil9Y2xhc3MgQmFzZVNoYWRpbmdQYXR0ZXJue2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VTaGFkaW5nUGF0dGVybiYmKDAsaS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTaGFkaW5nUGF0dGVybi4iKX1nZXRQYXR0ZXJuKCl7KDAsaS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGF0dGVybmAgY2FsbGVkLiIpfX1jbGFzcyBSYWRpYWxBeGlhbFNoYWRpbmdQYXR0ZXJuIGV4dGVuZHMgQmFzZVNoYWRpbmdQYXR0ZXJue2NvbnN0cnVjdG9yKHQpe3N1cGVyKCk7dGhpcy5fdHlwZT10WzFdO3RoaXMuX2Jib3g9dFsyXTt0aGlzLl9jb2xvclN0b3BzPXRbM107dGhpcy5fcDA9dFs0XTt0aGlzLl9wMT10WzVdO3RoaXMuX3IwPXRbNl07dGhpcy5fcjE9dFs3XTt0aGlzLm1hdHJpeD1udWxsfV9jcmVhdGVHcmFkaWVudCh0KXtsZXQgZTsiYXhpYWwiPT09dGhpcy5fdHlwZT9lPXQuY3JlYXRlTGluZWFyR3JhZGllbnQodGhpcy5fcDBbMF0sdGhpcy5fcDBbMV0sdGhpcy5fcDFbMF0sdGhpcy5fcDFbMV0pOiJyYWRpYWwiPT09dGhpcy5fdHlwZSYmKGU9dC5jcmVhdGVSYWRpYWxHcmFkaWVudCh0aGlzLl9wMFswXSx0aGlzLl9wMFsxXSx0aGlzLl9yMCx0aGlzLl9wMVswXSx0aGlzLl9wMVsxXSx0aGlzLl9yMSkpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2NvbG9yU3RvcHMpZS5hZGRDb2xvclN0b3AodFswXSx0WzFdKTtyZXR1cm4gZX1nZXRQYXR0ZXJuKHQsZSxzLHIpe2xldCBvO2lmKHI9PT1hLlNUUk9LRXx8cj09PWEuRklMTCl7Y29uc3QgYT1lLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveChyLCgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybSkodCkpfHxbMCwwLDAsMF0sbD1NYXRoLmNlaWwoYVsyXS1hWzBdKXx8MSxjPU1hdGguY2VpbChhWzNdLWFbMV0pfHwxLGg9ZS5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoInBhdHRlcm4iLGwsYywhMCksZD1oLmNvbnRleHQ7ZC5jbGVhclJlY3QoMCwwLGQuY2FudmFzLndpZHRoLGQuY2FudmFzLmhlaWdodCk7ZC5iZWdpblBhdGgoKTtkLnJlY3QoMCwwLGQuY2FudmFzLndpZHRoLGQuY2FudmFzLmhlaWdodCk7ZC50cmFuc2xhdGUoLWFbMF0sLWFbMV0pO3M9aS5VdGlsLnRyYW5zZm9ybShzLFsxLDAsMCwxLGFbMF0sYVsxXV0pO2QudHJhbnNmb3JtKC4uLmUuYmFzZVRyYW5zZm9ybSk7dGhpcy5tYXRyaXgmJmQudHJhbnNmb3JtKC4uLnRoaXMubWF0cml4KTthcHBseUJvdW5kaW5nQm94KGQsdGhpcy5fYmJveCk7ZC5maWxsU3R5bGU9dGhpcy5fY3JlYXRlR3JhZGllbnQoZCk7ZC5maWxsKCk7bz10LmNyZWF0ZVBhdHRlcm4oaC5jYW52YXMsIm5vLXJlcGVhdCIpO2NvbnN0IHU9bmV3IERPTU1hdHJpeChzKTtvLnNldFRyYW5zZm9ybSh1KX1lbHNle2FwcGx5Qm91bmRpbmdCb3godCx0aGlzLl9iYm94KTtvPXRoaXMuX2NyZWF0ZUdyYWRpZW50KHQpfXJldHVybiBvfX1mdW5jdGlvbiBkcmF3VHJpYW5nbGUodCxlLHMsaSxuLHIsYSxvKXtjb25zdCBsPWUuY29vcmRzLGM9ZS5jb2xvcnMsaD10LmRhdGEsZD00KnQud2lkdGg7bGV0IHU7aWYobFtzKzFdPmxbaSsxXSl7dT1zO3M9aTtpPXU7dT1yO3I9YTthPXV9aWYobFtpKzFdPmxbbisxXSl7dT1pO2k9bjtuPXU7dT1hO2E9bztvPXV9aWYobFtzKzFdPmxbaSsxXSl7dT1zO3M9aTtpPXU7dT1yO3I9YTthPXV9Y29uc3QgcD0obFtzXStlLm9mZnNldFgpKmUuc2NhbGVYLGc9KGxbcysxXStlLm9mZnNldFkpKmUuc2NhbGVZLG09KGxbaV0rZS5vZmZzZXRYKSplLnNjYWxlWCxmPShsW2krMV0rZS5vZmZzZXRZKSplLnNjYWxlWSxiPShsW25dK2Uub2Zmc2V0WCkqZS5zY2FsZVgsQT0obFtuKzFdK2Uub2Zmc2V0WSkqZS5zY2FsZVk7aWYoZz49QSlyZXR1cm47Y29uc3QgXz1jW3JdLHY9Y1tyKzFdLHk9Y1tyKzJdLFM9Y1thXSx4PWNbYSsxXSxFPWNbYSsyXSxDPWNbb10sUD1jW28rMV0sVD1jW28rMl0sdz1NYXRoLnJvdW5kKGcpLGs9TWF0aC5yb3VuZChBKTtsZXQgRixNLFIsRCxJLE8sTCxOO2ZvcihsZXQgdD13O3Q8PWs7dCsrKXtpZih0PGYpe2xldCBlO2U9dDxnPzA6KGctdCkvKGctZik7Rj1wLShwLW0pKmU7TT1fLShfLVMpKmU7Uj12LSh2LXgpKmU7RD15LSh5LUUpKmV9ZWxzZXtsZXQgZTtlPXQ+QT8xOmY9PT1BPzA6KGYtdCkvKGYtQSk7Rj1tLShtLWIpKmU7TT1TLShTLUMpKmU7Uj14LSh4LVApKmU7RD1FLShFLVQpKmV9bGV0IGU7ZT10PGc/MDp0PkE/MTooZy10KS8oZy1BKTtJPXAtKHAtYikqZTtPPV8tKF8tQykqZTtMPXYtKHYtUCkqZTtOPXktKHktVCkqZTtjb25zdCBzPU1hdGgucm91bmQoTWF0aC5taW4oRixJKSksaT1NYXRoLnJvdW5kKE1hdGgubWF4KEYsSSkpO2xldCBuPWQqdCs0KnM7Zm9yKGxldCB0PXM7dDw9aTt0Kyspe2U9KEYtdCkvKEYtSSk7ZTwwP2U9MDplPjEmJihlPTEpO2hbbisrXT1NLShNLU8pKmV8MDtoW24rK109Ui0oUi1MKSplfDA7aFtuKytdPUQtKEQtTikqZXwwO2hbbisrXT0yNTV9fX1mdW5jdGlvbiBkcmF3RmlndXJlKHQsZSxzKXtjb25zdCBpPWUuY29vcmRzLG49ZS5jb2xvcnM7bGV0IHIsYTtzd2l0Y2goZS50eXBlKXtjYXNlImxhdHRpY2UiOmNvbnN0IG89ZS52ZXJ0aWNlc1BlclJvdyxsPU1hdGguZmxvb3IoaS5sZW5ndGgvbyktMSxjPW8tMTtmb3Iocj0wO3I8bDtyKyspe2xldCBlPXIqbztmb3IobGV0IHI9MDtyPGM7cisrLGUrKyl7ZHJhd1RyaWFuZ2xlKHQscyxpW2VdLGlbZSsxXSxpW2Urb10sbltlXSxuW2UrMV0sbltlK29dKTtkcmF3VHJpYW5nbGUodCxzLGlbZStvKzFdLGlbZSsxXSxpW2Urb10sbltlK28rMV0sbltlKzFdLG5bZStvXSl9fWJyZWFrO2Nhc2UidHJpYW5nbGVzIjpmb3Iocj0wLGE9aS5sZW5ndGg7cjxhO3IrPTMpZHJhd1RyaWFuZ2xlKHQscyxpW3JdLGlbcisxXSxpW3IrMl0sbltyXSxuW3IrMV0sbltyKzJdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBmaWd1cmUiKX19Y2xhc3MgTWVzaFNoYWRpbmdQYXR0ZXJuIGV4dGVuZHMgQmFzZVNoYWRpbmdQYXR0ZXJue2NvbnN0cnVjdG9yKHQpe3N1cGVyKCk7dGhpcy5fY29vcmRzPXRbMl07dGhpcy5fY29sb3JzPXRbM107dGhpcy5fZmlndXJlcz10WzRdO3RoaXMuX2JvdW5kcz10WzVdO3RoaXMuX2Jib3g9dFs3XTt0aGlzLl9iYWNrZ3JvdW5kPXRbOF07dGhpcy5tYXRyaXg9bnVsbH1fY3JlYXRlTWVzaENhbnZhcyh0LGUscyl7Y29uc3QgaT1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1swXSksbj1NYXRoLmZsb29yKHRoaXMuX2JvdW5kc1sxXSkscj1NYXRoLmNlaWwodGhpcy5fYm91bmRzWzJdKS1pLGE9TWF0aC5jZWlsKHRoaXMuX2JvdW5kc1szXSktbixvPU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhyKnRbMF0qMS4xKSksM2UzKSxsPU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhhKnRbMV0qMS4xKSksM2UzKSxjPXIvbyxoPWEvbCxkPXtjb29yZHM6dGhpcy5fY29vcmRzLGNvbG9yczp0aGlzLl9jb2xvcnMsb2Zmc2V0WDotaSxvZmZzZXRZOi1uLHNjYWxlWDoxL2Msc2NhbGVZOjEvaH0sdT1vKzQscD1sKzQsZz1zLmdldENhbnZhcygibWVzaCIsdSxwLCExKSxtPWcuY29udGV4dCxmPW0uY3JlYXRlSW1hZ2VEYXRhKG8sbCk7aWYoZSl7Y29uc3QgdD1mLmRhdGE7Zm9yKGxldCBzPTAsaT10Lmxlbmd0aDtzPGk7cys9NCl7dFtzXT1lWzBdO3RbcysxXT1lWzFdO3RbcysyXT1lWzJdO3RbcyszXT0yNTV9fWZvcihjb25zdCB0IG9mIHRoaXMuX2ZpZ3VyZXMpZHJhd0ZpZ3VyZShmLHQsZCk7bS5wdXRJbWFnZURhdGEoZiwyLDIpO3JldHVybntjYW52YXM6Zy5jYW52YXMsb2Zmc2V0WDppLTIqYyxvZmZzZXRZOm4tMipoLHNjYWxlWDpjLHNjYWxlWTpofX1nZXRQYXR0ZXJuKHQsZSxzLHIpe2FwcGx5Qm91bmRpbmdCb3godCx0aGlzLl9iYm94KTtsZXQgbztpZihyPT09YS5TSEFESU5HKW89aS5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKCgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybSkodCkpO2Vsc2V7bz1pLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUoZS5iYXNlVHJhbnNmb3JtKTtpZih0aGlzLm1hdHJpeCl7Y29uc3QgdD1pLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5tYXRyaXgpO289W29bMF0qdFswXSxvWzFdKnRbMV1dfX1jb25zdCBsPXRoaXMuX2NyZWF0ZU1lc2hDYW52YXMobyxyPT09YS5TSEFESU5HP251bGw6dGhpcy5fYmFja2dyb3VuZCxlLmNhY2hlZENhbnZhc2VzKTtpZihyIT09YS5TSEFESU5HKXt0LnNldFRyYW5zZm9ybSguLi5lLmJhc2VUcmFuc2Zvcm0pO3RoaXMubWF0cml4JiZ0LnRyYW5zZm9ybSguLi50aGlzLm1hdHJpeCl9dC50cmFuc2xhdGUobC5vZmZzZXRYLGwub2Zmc2V0WSk7dC5zY2FsZShsLnNjYWxlWCxsLnNjYWxlWSk7cmV0dXJuIHQuY3JlYXRlUGF0dGVybihsLmNhbnZhcywibm8tcmVwZWF0Iil9fWNsYXNzIER1bW15U2hhZGluZ1BhdHRlcm4gZXh0ZW5kcyBCYXNlU2hhZGluZ1BhdHRlcm57Z2V0UGF0dGVybigpe3JldHVybiJob3RwaW5rIn19Y29uc3Qgbz0xLGw9MjtjbGFzcyBUaWxpbmdQYXR0ZXJue3N0YXRpYyBnZXQgTUFYX1BBVFRFUk5fU0laRSgpe3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJNQVhfUEFUVEVSTl9TSVpFIiwzZTMpfWNvbnN0cnVjdG9yKHQsZSxzLGksbil7dGhpcy5vcGVyYXRvckxpc3Q9dFsyXTt0aGlzLm1hdHJpeD10WzNdfHxbMSwwLDAsMSwwLDBdO3RoaXMuYmJveD10WzRdO3RoaXMueHN0ZXA9dFs1XTt0aGlzLnlzdGVwPXRbNl07dGhpcy5wYWludFR5cGU9dFs3XTt0aGlzLnRpbGluZ1R5cGU9dFs4XTt0aGlzLmNvbG9yPWU7dGhpcy5jdHg9czt0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeT1pO3RoaXMuYmFzZVRyYW5zZm9ybT1ufWNyZWF0ZVBhdHRlcm5DYW52YXModCl7Y29uc3QgZT10aGlzLm9wZXJhdG9yTGlzdCxzPXRoaXMuYmJveCxyPXRoaXMueHN0ZXAsYT10aGlzLnlzdGVwLG89dGhpcy5wYWludFR5cGUsbD10aGlzLnRpbGluZ1R5cGUsYz10aGlzLmNvbG9yLGg9dGhpcy5jYW52YXNHcmFwaGljc0ZhY3Rvcnk7KDAsaS5pbmZvKSgiVGlsaW5nVHlwZTogIitsKTtjb25zdCBkPXNbMF0sdT1zWzFdLHA9c1syXSxnPXNbM10sbT1pLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5tYXRyaXgpLGY9aS5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSksYj1bbVswXSpmWzBdLG1bMV0qZlsxXV0sQT10aGlzLmdldFNpemVBbmRTY2FsZShyLHRoaXMuY3R4LmNhbnZhcy53aWR0aCxiWzBdKSxfPXRoaXMuZ2V0U2l6ZUFuZFNjYWxlKGEsdGhpcy5jdHguY2FudmFzLmhlaWdodCxiWzFdKSx2PXQuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIixBLnNpemUsXy5zaXplLCEwKSx5PXYuY29udGV4dCxTPWguY3JlYXRlQ2FudmFzR3JhcGhpY3MoeSk7Uy5ncm91cExldmVsPXQuZ3JvdXBMZXZlbDt0aGlzLnNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChTLG8sYyk7bGV0IHg9ZCxFPXUsQz1wLFA9ZztpZihkPDApe3g9MDtDKz1NYXRoLmFicyhkKX1pZih1PDApe0U9MDtQKz1NYXRoLmFicyh1KX15LnRyYW5zbGF0ZSgtQS5zY2FsZSp4LC1fLnNjYWxlKkUpO1MudHJhbnNmb3JtKEEuc2NhbGUsMCwwLF8uc2NhbGUsMCwwKTt5LnNhdmUoKTt0aGlzLmNsaXBCYm94KFMseCxFLEMsUCk7Uy5iYXNlVHJhbnNmb3JtPSgwLG4uZ2V0Q3VycmVudFRyYW5zZm9ybSkoUy5jdHgpO1MuZXhlY3V0ZU9wZXJhdG9yTGlzdChlKTtTLmVuZERyYXdpbmcoKTtyZXR1cm57Y2FudmFzOnYuY2FudmFzLHNjYWxlWDpBLnNjYWxlLHNjYWxlWTpfLnNjYWxlLG9mZnNldFg6eCxvZmZzZXRZOkV9fWdldFNpemVBbmRTY2FsZSh0LGUscyl7dD1NYXRoLmFicyh0KTtjb25zdCBpPU1hdGgubWF4KFRpbGluZ1BhdHRlcm4uTUFYX1BBVFRFUk5fU0laRSxlKTtsZXQgbj1NYXRoLmNlaWwodCpzKTtuPj1pP249aTpzPW4vdDtyZXR1cm57c2NhbGU6cyxzaXplOm59fWNsaXBCYm94KHQsZSxzLGkscil7Y29uc3QgYT1pLWUsbz1yLXM7dC5jdHgucmVjdChlLHMsYSxvKTt0LmN1cnJlbnQudXBkYXRlUmVjdE1pbk1heCgoMCxuLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHQuY3R4KSxbZSxzLGkscl0pO3QuY2xpcCgpO3QuZW5kUGF0aCgpfXNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dCh0LGUscyl7Y29uc3Qgbj10LmN0eCxyPXQuY3VycmVudDtzd2l0Y2goZSl7Y2FzZSBvOmNvbnN0IHQ9dGhpcy5jdHg7bi5maWxsU3R5bGU9dC5maWxsU3R5bGU7bi5zdHJva2VTdHlsZT10LnN0cm9rZVN0eWxlO3IuZmlsbENvbG9yPXQuZmlsbFN0eWxlO3Iuc3Ryb2tlQ29sb3I9dC5zdHJva2VTdHlsZTticmVhaztjYXNlIGw6Y29uc3QgYT1pLlV0aWwubWFrZUhleENvbG9yKHNbMF0sc1sxXSxzWzJdKTtuLmZpbGxTdHlsZT1hO24uc3Ryb2tlU3R5bGU9YTtyLmZpbGxDb2xvcj1hO3Iuc3Ryb2tlQ29sb3I9YTticmVhaztkZWZhdWx0OnRocm93IG5ldyBpLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwYWludCB0eXBlOiAke2V9YCl9fWdldFBhdHRlcm4odCxlLHMsbil7bGV0IHI9cztpZihuIT09YS5TSEFESU5HKXtyPWkuVXRpbC50cmFuc2Zvcm0ocixlLmJhc2VUcmFuc2Zvcm0pO3RoaXMubWF0cml4JiYocj1pLlV0aWwudHJhbnNmb3JtKHIsdGhpcy5tYXRyaXgpKX1jb25zdCBvPXRoaXMuY3JlYXRlUGF0dGVybkNhbnZhcyhlKTtsZXQgbD1uZXcgRE9NTWF0cml4KHIpO2w9bC50cmFuc2xhdGUoby5vZmZzZXRYLG8ub2Zmc2V0WSk7bD1sLnNjYWxlKDEvby5zY2FsZVgsMS9vLnNjYWxlWSk7Y29uc3QgYz10LmNyZWF0ZVBhdHRlcm4oby5jYW52YXMsInJlcGVhdCIpO2Muc2V0VHJhbnNmb3JtKGwpO3JldHVybiBjfX1lLlRpbGluZ1BhdHRlcm49VGlsaW5nUGF0dGVybn0sKHQsZSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5pc05vZGVKUz12b2lkIDA7Y29uc3Qgcz0hKCJvYmplY3QiIT10eXBlb2YgcHJvY2Vzc3x8cHJvY2VzcysiIiE9IltvYmplY3QgcHJvY2Vzc10ifHxwcm9jZXNzLnZlcnNpb25zLm53fHxwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uJiZwcm9jZXNzLnR5cGUmJiJicm93c2VyIiE9PXByb2Nlc3MudHlwZSk7ZS5pc05vZGVKUz1zfSwodCxlLHMpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuYXBwbHlNYXNrSW1hZ2VEYXRhPWZ1bmN0aW9uIGFwcGx5TWFza0ltYWdlRGF0YSh7c3JjOnQsc3JjUG9zOmU9MCxkZXN0OnMsZGVzdFBvczpuPTAsd2lkdGg6cixoZWlnaHQ6YSxpbnZlcnNlRGVjb2RlOm89ITF9KXtjb25zdCBsPWkuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUsW2MsaF09bz9bMCxsXTpbbCwwXSxkPXI+PjMsdT03JnIscD10Lmxlbmd0aDtzPW5ldyBVaW50MzJBcnJheShzLmJ1ZmZlcik7Zm9yKGxldCBpPTA7aTxhO2krKyl7Zm9yKGNvbnN0IGk9ZStkO2U8aTtlKyspe2NvbnN0IGk9ZTxwP3RbZV06MjU1O3NbbisrXT0xMjgmaT9oOmM7c1tuKytdPTY0Jmk/aDpjO3NbbisrXT0zMiZpP2g6YztzW24rK109MTYmaT9oOmM7c1tuKytdPTgmaT9oOmM7c1tuKytdPTQmaT9oOmM7c1tuKytdPTImaT9oOmM7c1tuKytdPTEmaT9oOmN9aWYoMD09PXUpY29udGludWU7Y29uc3QgaT1lPHA/dFtlKytdOjI1NTtmb3IobGV0IHQ9MDt0PHU7dCsrKXNbbisrXT1pJjE8PDctdD9oOmN9cmV0dXJue3NyY1BvczplLGRlc3RQb3M6bn19O3ZhciBpPXMoMSl9LCh0LGUpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuR2xvYmFsV29ya2VyT3B0aW9ucz12b2lkIDA7Y29uc3Qgcz1PYmplY3QuY3JlYXRlKG51bGwpO2UuR2xvYmFsV29ya2VyT3B0aW9ucz1zO3Mud29ya2VyUG9ydD12b2lkIDA9PT1zLndvcmtlclBvcnQ/bnVsbDpzLndvcmtlclBvcnQ7cy53b3JrZXJTcmM9dm9pZCAwPT09cy53b3JrZXJTcmM/IiI6cy53b3JrZXJTcmN9LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5NZXNzYWdlSGFuZGxlcj12b2lkIDA7dmFyIGk9cygxKTtjb25zdCBuPTEscj0yLGE9MSxvPTIsbD0zLGM9NCxoPTUsZD02LHU9NyxwPTg7ZnVuY3Rpb24gd3JhcFJlYXNvbih0KXt0IGluc3RhbmNlb2YgRXJyb3J8fCJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXR8fCgwLGkudW5yZWFjaGFibGUpKCd3cmFwUmVhc29uOiBFeHBlY3RlZCAicmVhc29uIiB0byBiZSBhIChwb3NzaWJseSBjbG9uZWQpIEVycm9yLicpO3N3aXRjaCh0Lm5hbWUpe2Nhc2UiQWJvcnRFeGNlcHRpb24iOnJldHVybiBuZXcgaS5BYm9ydEV4Y2VwdGlvbih0Lm1lc3NhZ2UpO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBpLk1pc3NpbmdQREZFeGNlcHRpb24odC5tZXNzYWdlKTtjYXNlIlBhc3N3b3JkRXhjZXB0aW9uIjpyZXR1cm4gbmV3IGkuUGFzc3dvcmRFeGNlcHRpb24odC5tZXNzYWdlLHQuY29kZSk7Y2FzZSJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iOnJldHVybiBuZXcgaS5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24odC5tZXNzYWdlLHQuc3RhdHVzKTtjYXNlIlVua25vd25FcnJvckV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBpLlVua25vd25FcnJvckV4Y2VwdGlvbih0Lm1lc3NhZ2UsdC5kZXRhaWxzKTtkZWZhdWx0OnJldHVybiBuZXcgaS5Vbmtub3duRXJyb3JFeGNlcHRpb24odC5tZXNzYWdlLHQudG9TdHJpbmcoKSl9fWUuTWVzc2FnZUhhbmRsZXI9Y2xhc3MgTWVzc2FnZUhhbmRsZXJ7Y29uc3RydWN0b3IodCxlLHMpe3RoaXMuc291cmNlTmFtZT10O3RoaXMudGFyZ2V0TmFtZT1lO3RoaXMuY29tT2JqPXM7dGhpcy5jYWxsYmFja0lkPTE7dGhpcy5zdHJlYW1JZD0xO3RoaXMuc3RyZWFtU2lua3M9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllcz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuYWN0aW9uSGFuZGxlcj1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuX29uQ29tT2JqT25NZXNzYWdlPXQ9Pntjb25zdCBlPXQuZGF0YTtpZihlLnRhcmdldE5hbWUhPT10aGlzLnNvdXJjZU5hbWUpcmV0dXJuO2lmKGUuc3RyZWFtKXt0aGlzLl9wcm9jZXNzU3RyZWFtTWVzc2FnZShlKTtyZXR1cm59aWYoZS5jYWxsYmFjayl7Y29uc3QgdD1lLmNhbGxiYWNrSWQscz10aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW3RdO2lmKCFzKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgJHt0fWApO2RlbGV0ZSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW3RdO2lmKGUuY2FsbGJhY2s9PT1uKXMucmVzb2x2ZShlLmRhdGEpO2Vsc2V7aWYoZS5jYWxsYmFjayE9PXIpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNhbGxiYWNrIGNhc2UiKTtzLnJlamVjdCh3cmFwUmVhc29uKGUucmVhc29uKSl9cmV0dXJufWNvbnN0IGk9dGhpcy5hY3Rpb25IYW5kbGVyW2UuYWN0aW9uXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIGZyb20gd29ya2VyOiAke2UuYWN0aW9ufWApO2lmKGUuY2FsbGJhY2tJZCl7Y29uc3QgdD10aGlzLnNvdXJjZU5hbWUsYT1lLnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QoaShlLmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihpKXtzLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnQsdGFyZ2V0TmFtZTphLGNhbGxiYWNrOm4sY2FsbGJhY2tJZDplLmNhbGxiYWNrSWQsZGF0YTppfSl9KSwoZnVuY3Rpb24oaSl7cy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTp0LHRhcmdldE5hbWU6YSxjYWxsYmFjazpyLGNhbGxiYWNrSWQ6ZS5jYWxsYmFja0lkLHJlYXNvbjp3cmFwUmVhc29uKGkpfSl9KSl9ZWxzZSBlLnN0cmVhbUlkP3RoaXMuX2NyZWF0ZVN0cmVhbVNpbmsoZSk6aShlLmRhdGEpfTtzLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX1vbih0LGUpe2NvbnN0IHM9dGhpcy5hY3Rpb25IYW5kbGVyO2lmKHNbdF0pdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFjdGlvbk5hbWUgY2FsbGVkICIke3R9ImApO3NbdF09ZX1zZW5kKHQsZSxzKXt0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOnQsZGF0YTplfSxzKX1zZW5kV2l0aFByb21pc2UodCxlLHMpe2NvbnN0IG49dGhpcy5jYWxsYmFja0lkKysscj0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbbl09cjt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjp0LGNhbGxiYWNrSWQ6bixkYXRhOmV9LHMpfWNhdGNoKHQpe3IucmVqZWN0KHQpfXJldHVybiByLnByb21pc2V9c2VuZFdpdGhTdHJlYW0odCxlLHMsbil7Y29uc3Qgcj10aGlzLnN0cmVhbUlkKyssbz10aGlzLnNvdXJjZU5hbWUsbD10aGlzLnRhcmdldE5hbWUsYz10aGlzLmNvbU9iajtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydDpzPT57Y29uc3QgYT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbcl09e2NvbnRyb2xsZXI6cyxzdGFydENhbGw6YSxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX07Yy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpvLHRhcmdldE5hbWU6bCxhY3Rpb246dCxzdHJlYW1JZDpyLGRhdGE6ZSxkZXNpcmVkU2l6ZTpzLmRlc2lyZWRTaXplfSxuKTtyZXR1cm4gYS5wcm9taXNlfSxwdWxsOnQ9Pntjb25zdCBlPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tyXS5wdWxsQ2FsbD1lO2MucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6byx0YXJnZXROYW1lOmwsc3RyZWFtOmQsc3RyZWFtSWQ6cixkZXNpcmVkU2l6ZTp0LmRlc2lyZWRTaXplfSk7cmV0dXJuIGUucHJvbWlzZX0sY2FuY2VsOnQ9PnsoMCxpLmFzc2VydCkodCBpbnN0YW5jZW9mIEVycm9yLCJjYW5jZWwgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIik7Y29uc3QgZT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbcl0uY2FuY2VsQ2FsbD1lO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbcl0uaXNDbG9zZWQ9ITA7Yy5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpvLHRhcmdldE5hbWU6bCxzdHJlYW06YSxzdHJlYW1JZDpyLHJlYXNvbjp3cmFwUmVhc29uKHQpfSk7cmV0dXJuIGUucHJvbWlzZX19LHMpfV9jcmVhdGVTdHJlYW1TaW5rKHQpe2NvbnN0IGU9dC5zdHJlYW1JZCxzPXRoaXMuc291cmNlTmFtZSxuPXQuc291cmNlTmFtZSxyPXRoaXMuY29tT2JqLGE9dGhpcyxvPXRoaXMuYWN0aW9uSGFuZGxlclt0LmFjdGlvbl0sZD17ZW5xdWV1ZSh0LGE9MSxvKXtpZih0aGlzLmlzQ2FuY2VsbGVkKXJldHVybjtjb25zdCBsPXRoaXMuZGVzaXJlZFNpemU7dGhpcy5kZXNpcmVkU2l6ZS09YTtpZihsPjAmJnRoaXMuZGVzaXJlZFNpemU8PTApe3RoaXMuc2lua0NhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLnJlYWR5PXRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZX1yLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpuLHN0cmVhbTpjLHN0cmVhbUlkOmUsY2h1bms6dH0sbyl9LGNsb3NlKCl7aWYoIXRoaXMuaXNDYW5jZWxsZWQpe3RoaXMuaXNDYW5jZWxsZWQ9ITA7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6bixzdHJlYW06bCxzdHJlYW1JZDplfSk7ZGVsZXRlIGEuc3RyZWFtU2lua3NbZV19fSxlcnJvcih0KXsoMCxpLmFzc2VydCkodCBpbnN0YW5jZW9mIEVycm9yLCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb24iKTtpZighdGhpcy5pc0NhbmNlbGxlZCl7dGhpcy5pc0NhbmNlbGxlZD0hMDtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpuLHN0cmVhbTpoLHN0cmVhbUlkOmUscmVhc29uOndyYXBSZWFzb24odCl9KX19LHNpbmtDYXBhYmlsaXR5OigwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksb25QdWxsOm51bGwsb25DYW5jZWw6bnVsbCxpc0NhbmNlbGxlZDohMSxkZXNpcmVkU2l6ZTp0LmRlc2lyZWRTaXplLHJlYWR5Om51bGx9O2Quc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO2QucmVhZHk9ZC5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlO3RoaXMuc3RyZWFtU2lua3NbZV09ZDtuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ZShvKHQuZGF0YSxkKSl9KSkudGhlbigoZnVuY3Rpb24oKXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpuLHN0cmVhbTpwLHN0cmVhbUlkOmUsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKHQpe3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOm4sc3RyZWFtOnAsc3RyZWFtSWQ6ZSxyZWFzb246d3JhcFJlYXNvbih0KX0pfSkpfV9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KXtjb25zdCBlPXQuc3RyZWFtSWQscz10aGlzLnNvdXJjZU5hbWUsbj10LnNvdXJjZU5hbWUscj10aGlzLmNvbU9iaixnPXRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZV0sbT10aGlzLnN0cmVhbVNpbmtzW2VdO3N3aXRjaCh0LnN0cmVhbSl7Y2FzZSBwOnQuc3VjY2Vzcz9nLnN0YXJ0Q2FsbC5yZXNvbHZlKCk6Zy5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24odC5yZWFzb24pKTticmVhaztjYXNlIHU6dC5zdWNjZXNzP2cucHVsbENhbGwucmVzb2x2ZSgpOmcucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24odC5yZWFzb24pKTticmVhaztjYXNlIGQ6aWYoIW0pe3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOm4sc3RyZWFtOnUsc3RyZWFtSWQ6ZSxzdWNjZXNzOiEwfSk7YnJlYWt9bS5kZXNpcmVkU2l6ZTw9MCYmdC5kZXNpcmVkU2l6ZT4wJiZtLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTttLmRlc2lyZWRTaXplPXQuZGVzaXJlZFNpemU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QobS5vblB1bGwmJm0ub25QdWxsKCkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6bixzdHJlYW06dSxzdHJlYW1JZDplLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbih0KXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpuLHN0cmVhbTp1LHN0cmVhbUlkOmUscmVhc29uOndyYXBSZWFzb24odCl9KX0pKTticmVhaztjYXNlIGM6KDAsaS5hc3NlcnQpKGcsImVucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihnLmlzQ2xvc2VkKWJyZWFrO2cuY29udHJvbGxlci5lbnF1ZXVlKHQuY2h1bmspO2JyZWFrO2Nhc2UgbDooMCxpLmFzc2VydCkoZywiY2xvc2Ugc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihnLmlzQ2xvc2VkKWJyZWFrO2cuaXNDbG9zZWQ9ITA7Zy5jb250cm9sbGVyLmNsb3NlKCk7dGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihnLGUpO2JyZWFrO2Nhc2UgaDooMCxpLmFzc2VydCkoZywiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtnLmNvbnRyb2xsZXIuZXJyb3Iod3JhcFJlYXNvbih0LnJlYXNvbikpO3RoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoZyxlKTticmVhaztjYXNlIG86dC5zdWNjZXNzP2cuY2FuY2VsQ2FsbC5yZXNvbHZlKCk6Zy5jYW5jZWxDYWxsLnJlamVjdCh3cmFwUmVhc29uKHQucmVhc29uKSk7dGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihnLGUpO2JyZWFrO2Nhc2UgYTppZighbSlicmVhaztuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ZShtLm9uQ2FuY2VsJiZtLm9uQ2FuY2VsKHdyYXBSZWFzb24odC5yZWFzb24pKSl9KSkudGhlbigoZnVuY3Rpb24oKXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpuLHN0cmVhbTpvLHN0cmVhbUlkOmUsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKHQpe3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOm4sc3RyZWFtOm8sc3RyZWFtSWQ6ZSxyZWFzb246d3JhcFJlYXNvbih0KX0pfSkpO20uc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24odC5yZWFzb24pKTttLmlzQ2FuY2VsbGVkPSEwO2RlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW2VdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fWFzeW5jIF9kZWxldGVTdHJlYW1Db250cm9sbGVyKHQsZSl7YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFt0LnN0YXJ0Q2FsbCYmdC5zdGFydENhbGwucHJvbWlzZSx0LnB1bGxDYWxsJiZ0LnB1bGxDYWxsLnByb21pc2UsdC5jYW5jZWxDYWxsJiZ0LmNhbmNlbENhbGwucHJvbWlzZV0pO2RlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2VdfWRlc3Ryb3koKXt0aGlzLmNvbU9iai5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9fX0sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLk1ldGFkYXRhPXZvaWQgMDt2YXIgaT1zKDEpO2UuTWV0YWRhdGE9Y2xhc3MgTWV0YWRhdGF7I2l0OyNudDtjb25zdHJ1Y3Rvcih7cGFyc2VkRGF0YTp0LHJhd0RhdGE6ZX0pe3RoaXMuI2l0PXQ7dGhpcy4jbnQ9ZX1nZXRSYXcoKXtyZXR1cm4gdGhpcy4jbnR9Z2V0KHQpe3JldHVybiB0aGlzLiNpdC5nZXQodCk/P251bGx9Z2V0QWxsKCl7cmV0dXJuKDAsaS5vYmplY3RGcm9tTWFwKSh0aGlzLiNpdCl9aGFzKHQpe3JldHVybiB0aGlzLiNpdC5oYXModCl9fX0sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLk9wdGlvbmFsQ29udGVudENvbmZpZz12b2lkIDA7dmFyIGk9cygxKSxuPXMoOCk7Y29uc3Qgcj1TeW1ib2woIklOVEVSTkFMIik7Y2xhc3MgT3B0aW9uYWxDb250ZW50R3JvdXB7I3J0PSEwO2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5uYW1lPXQ7dGhpcy5pbnRlbnQ9ZX1nZXQgdmlzaWJsZSgpe3JldHVybiB0aGlzLiNydH1fc2V0VmlzaWJsZSh0LGUpe3QhPT1yJiYoMCxpLnVucmVhY2hhYmxlKSgiSW50ZXJuYWwgbWV0aG9kIGBfc2V0VmlzaWJsZWAgY2FsbGVkLiIpO3RoaXMuI3J0PWV9fWUuT3B0aW9uYWxDb250ZW50Q29uZmlnPWNsYXNzIE9wdGlvbmFsQ29udGVudENvbmZpZ3sjYXQ9bnVsbDsjb3Q9bmV3IE1hcDsjbHQ9bnVsbDsjY3Q9bnVsbDtjb25zdHJ1Y3Rvcih0KXt0aGlzLm5hbWU9bnVsbDt0aGlzLmNyZWF0b3I9bnVsbDtpZihudWxsIT09dCl7dGhpcy5uYW1lPXQubmFtZTt0aGlzLmNyZWF0b3I9dC5jcmVhdG9yO3RoaXMuI2N0PXQub3JkZXI7Zm9yKGNvbnN0IGUgb2YgdC5ncm91cHMpdGhpcy4jb3Quc2V0KGUuaWQsbmV3IE9wdGlvbmFsQ29udGVudEdyb3VwKGUubmFtZSxlLmludGVudCkpO2lmKCJPRkYiPT09dC5iYXNlU3RhdGUpZm9yKGNvbnN0IHQgb2YgdGhpcy4jb3QudmFsdWVzKCkpdC5fc2V0VmlzaWJsZShyLCExKTtmb3IoY29uc3QgZSBvZiB0Lm9uKXRoaXMuI290LmdldChlKS5fc2V0VmlzaWJsZShyLCEwKTtmb3IoY29uc3QgZSBvZiB0Lm9mZil0aGlzLiNvdC5nZXQoZSkuX3NldFZpc2libGUociwhMSk7dGhpcy4jbHQ9dGhpcy5nZXRIYXNoKCl9fSNodCh0KXtjb25zdCBlPXQubGVuZ3RoO2lmKGU8MilyZXR1cm4hMDtjb25zdCBzPXRbMF07Zm9yKGxldCBuPTE7bjxlO24rKyl7Y29uc3QgZT10W25dO2xldCByO2lmKEFycmF5LmlzQXJyYXkoZSkpcj10aGlzLiNodChlKTtlbHNle2lmKCF0aGlzLiNvdC5oYXMoZSkpeygwLGkud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2V9YCk7cmV0dXJuITB9cj10aGlzLiNvdC5nZXQoZSkudmlzaWJsZX1zd2l0Y2gocyl7Y2FzZSJBbmQiOmlmKCFyKXJldHVybiExO2JyZWFrO2Nhc2UiT3IiOmlmKHIpcmV0dXJuITA7YnJlYWs7Y2FzZSJOb3QiOnJldHVybiFyO2RlZmF1bHQ6cmV0dXJuITB9fXJldHVybiJBbmQiPT09c31pc1Zpc2libGUodCl7aWYoMD09PXRoaXMuI290LnNpemUpcmV0dXJuITA7aWYoIXQpeygwLGkud2FybikoIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGRlZmluZWQuIik7cmV0dXJuITB9aWYoIk9DRyI9PT10LnR5cGUpe2lmKCF0aGlzLiNvdC5oYXModC5pZCkpeygwLGkud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke3QuaWR9YCk7cmV0dXJuITB9cmV0dXJuIHRoaXMuI290LmdldCh0LmlkKS52aXNpYmxlfWlmKCJPQ01EIj09PXQudHlwZSl7aWYodC5leHByZXNzaW9uKXJldHVybiB0aGlzLiNodCh0LmV4cHJlc3Npb24pO2lmKCF0LnBvbGljeXx8IkFueU9uIj09PXQucG9saWN5KXtmb3IoY29uc3QgZSBvZiB0Lmlkcyl7aWYoIXRoaXMuI290LmhhcyhlKSl7KDAsaS53YXJuKShgT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4hMH1pZih0aGlzLiNvdC5nZXQoZSkudmlzaWJsZSlyZXR1cm4hMH1yZXR1cm4hMX1pZigiQWxsT24iPT09dC5wb2xpY3kpe2Zvcihjb25zdCBlIG9mIHQuaWRzKXtpZighdGhpcy4jb3QuaGFzKGUpKXsoMCxpLndhcm4pKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtlfWApO3JldHVybiEwfWlmKCF0aGlzLiNvdC5nZXQoZSkudmlzaWJsZSlyZXR1cm4hMX1yZXR1cm4hMH1pZigiQW55T2ZmIj09PXQucG9saWN5KXtmb3IoY29uc3QgZSBvZiB0Lmlkcyl7aWYoIXRoaXMuI290LmhhcyhlKSl7KDAsaS53YXJuKShgT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4hMH1pZighdGhpcy4jb3QuZ2V0KGUpLnZpc2libGUpcmV0dXJuITB9cmV0dXJuITF9aWYoIkFsbE9mZiI9PT10LnBvbGljeSl7Zm9yKGNvbnN0IGUgb2YgdC5pZHMpe2lmKCF0aGlzLiNvdC5oYXMoZSkpeygwLGkud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2V9YCk7cmV0dXJuITB9aWYodGhpcy4jb3QuZ2V0KGUpLnZpc2libGUpcmV0dXJuITF9cmV0dXJuITB9KDAsaS53YXJuKShgVW5rbm93biBvcHRpb25hbCBjb250ZW50IHBvbGljeSAke3QucG9saWN5fS5gKTtyZXR1cm4hMH0oMCxpLndhcm4pKGBVbmtub3duIGdyb3VwIHR5cGUgJHt0LnR5cGV9LmApO3JldHVybiEwfXNldFZpc2liaWxpdHkodCxlPSEwKXtpZih0aGlzLiNvdC5oYXModCkpe3RoaXMuI290LmdldCh0KS5fc2V0VmlzaWJsZShyLCEhZSk7dGhpcy4jYXQ9bnVsbH1lbHNlKDAsaS53YXJuKShgT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICR7dH1gKX1nZXQgaGFzSW5pdGlhbFZpc2liaWxpdHkoKXtyZXR1cm4gdGhpcy5nZXRIYXNoKCk9PT10aGlzLiNsdH1nZXRPcmRlcigpe3JldHVybiB0aGlzLiNvdC5zaXplP3RoaXMuI2N0P3RoaXMuI2N0LnNsaWNlKCk6Wy4uLnRoaXMuI290LmtleXMoKV06bnVsbH1nZXRHcm91cHMoKXtyZXR1cm4gdGhpcy4jb3Quc2l6ZT4wPygwLGkub2JqZWN0RnJvbU1hcCkodGhpcy4jb3QpOm51bGx9Z2V0R3JvdXAodCl7cmV0dXJuIHRoaXMuI290LmdldCh0KXx8bnVsbH1nZXRIYXNoKCl7aWYobnVsbCE9PXRoaXMuI2F0KXJldHVybiB0aGlzLiNhdDtjb25zdCB0PW5ldyBuLk11cm11ckhhc2gzXzY0O2Zvcihjb25zdFtlLHNdb2YgdGhpcy4jb3QpdC51cGRhdGUoYCR7ZX06JHtzLnZpc2libGV9YCk7cmV0dXJuIHRoaXMuI2F0PXQuaGV4ZGlnZXN0KCl9fX0sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLlBERkRhdGFUcmFuc3BvcnRTdHJlYW09dm9pZCAwO3ZhciBpPXMoMSksbj1zKDYpO2UuUERGRGF0YVRyYW5zcG9ydFN0cmVhbT1jbGFzcyBQREZEYXRhVHJhbnNwb3J0U3RyZWFte2NvbnN0cnVjdG9yKHQsZSl7KDAsaS5hc3NlcnQpKGUsJ1BERkRhdGFUcmFuc3BvcnRTdHJlYW0gLSBtaXNzaW5nIHJlcXVpcmVkICJwZGZEYXRhUmFuZ2VUcmFuc3BvcnQiIGFyZ3VtZW50LicpO3RoaXMuX3F1ZXVlZENodW5rcz1bXTt0aGlzLl9wcm9ncmVzc2l2ZURvbmU9dC5wcm9ncmVzc2l2ZURvbmV8fCExO3RoaXMuX2NvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lPXQuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWV8fG51bGw7Y29uc3Qgcz10LmluaXRpYWxEYXRhO2lmKHM/Lmxlbmd0aD4wKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KHMpLmJ1ZmZlcjt0aGlzLl9xdWV1ZWRDaHVua3MucHVzaCh0KX10aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQ9ZTt0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hdC5kaXNhYmxlU3RyZWFtO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9IXQuZGlzYWJsZVJhbmdlO3RoaXMuX2NvbnRlbnRMZW5ndGg9dC5sZW5ndGg7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbDt0aGlzLl9yYW5nZVJlYWRlcnM9W107dGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFJhbmdlTGlzdGVuZXIoKCh0LGUpPT57dGhpcy5fb25SZWNlaXZlRGF0YSh7YmVnaW46dCxjaHVuazplfSl9KSk7dGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzTGlzdGVuZXIoKCh0LGUpPT57dGhpcy5fb25Qcm9ncmVzcyh7bG9hZGVkOnQsdG90YWw6ZX0pfSkpO3RoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRQcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcigodD0+e3RoaXMuX29uUmVjZWl2ZURhdGEoe2NodW5rOnR9KX0pKTt0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIoKCgpPT57dGhpcy5fb25Qcm9ncmVzc2l2ZURvbmUoKX0pKTt0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQudHJhbnNwb3J0UmVhZHkoKX1fb25SZWNlaXZlRGF0YSh0KXtjb25zdCBlPW5ldyBVaW50OEFycmF5KHQuY2h1bmspLmJ1ZmZlcjtpZih2b2lkIDA9PT10LmJlZ2luKXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyP3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGUpOnRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGUpO2Vsc2V7Y29uc3Qgcz10aGlzLl9yYW5nZVJlYWRlcnMuc29tZSgoZnVuY3Rpb24ocyl7aWYocy5fYmVnaW4hPT10LmJlZ2luKXJldHVybiExO3MuX2VucXVldWUoZSk7cmV0dXJuITB9KSk7KDAsaS5hc3NlcnQpKHMsIl9vblJlY2VpdmVEYXRhIC0gbm8gYFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcmAgaW5zdGFuY2UgZm91bmQuIil9fWdldCBfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPy5fbG9hZGVkPz8wfV9vblByb2dyZXNzKHQpe3ZvaWQgMD09PXQudG90YWw/dGhpcy5fcmFuZ2VSZWFkZXJzWzBdPy5vblByb2dyZXNzPy4oe2xvYWRlZDp0LmxvYWRlZH0pOnRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPy5vblByb2dyZXNzPy4oe2xvYWRlZDp0LmxvYWRlZCx0b3RhbDp0LnRvdGFsfSl9X29uUHJvZ3Jlc3NpdmVEb25lKCl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/LnByb2dyZXNzaXZlRG9uZSgpO3RoaXMuX3Byb2dyZXNzaXZlRG9uZT0hMH1fcmVtb3ZlUmFuZ2VSZWFkZXIodCl7Y29uc3QgZT10aGlzLl9yYW5nZVJlYWRlcnMuaW5kZXhPZih0KTtlPj0wJiZ0aGlzLl9yYW5nZVJlYWRlcnMuc3BsaWNlKGUsMSl9Z2V0RnVsbFJlYWRlcigpeygwLGkuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERkRhdGFUcmFuc3BvcnRTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4iKTtjb25zdCB0PXRoaXMuX3F1ZXVlZENodW5rczt0aGlzLl9xdWV1ZWRDaHVua3M9bnVsbDtyZXR1cm4gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SZWFkZXIodGhpcyx0LHRoaXMuX3Byb2dyZXNzaXZlRG9uZSx0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSl9Z2V0UmFuZ2VSZWFkZXIodCxlKXtpZihlPD10aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuIG51bGw7Y29uc3Qgcz1uZXcgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyKHRoaXMsdCxlKTt0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZSh0LGUpO3RoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHMpO3JldHVybiBzfWNhbmNlbEFsbFJlcXVlc3RzKHQpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPy5jYW5jZWwodCk7Zm9yKGNvbnN0IGUgb2YgdGhpcy5fcmFuZ2VSZWFkZXJzLnNsaWNlKDApKWUuY2FuY2VsKHQpO3RoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpfX07Y2xhc3MgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJlYWRlcntjb25zdHJ1Y3Rvcih0LGUscz0hMSxpPW51bGwpe3RoaXMuX3N0cmVhbT10O3RoaXMuX2RvbmU9c3x8ITE7dGhpcy5fZmlsZW5hbWU9KDAsbi5pc1BkZkZpbGUpKGkpP2k6bnVsbDt0aGlzLl9xdWV1ZWRDaHVua3M9ZXx8W107dGhpcy5fbG9hZGVkPTA7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcXVldWVkQ2h1bmtzKXRoaXMuX2xvYWRlZCs9dC5ieXRlTGVuZ3RoO3RoaXMuX3JlcXVlc3RzPVtdO3RoaXMuX2hlYWRlcnNSZWFkeT1Qcm9taXNlLnJlc29sdmUoKTt0Ll9mdWxsUmVxdWVzdFJlYWRlcj10aGlzO3RoaXMub25Qcm9ncmVzcz1udWxsfV9lbnF1ZXVlKHQpe2lmKCF0aGlzLl9kb25lKXtpZih0aGlzLl9yZXF1ZXN0cy5sZW5ndGg+MCl7dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KX1lbHNlIHRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKHQpO3RoaXMuX2xvYWRlZCs9dC5ieXRlTGVuZ3RofX1nZXQgaGVhZGVyc1JlYWR5KCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeX1nZXQgZmlsZW5hbWUoKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9Z2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1JhbmdlU3VwcG9ydGVkfWdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9zdHJlYW0uX2lzU3RyZWFtaW5nU3VwcG9ydGVkfWdldCBjb250ZW50TGVuZ3RoKCl7cmV0dXJuIHRoaXMuX3N0cmVhbS5fY29udGVudExlbmd0aH1hc3luYyByZWFkKCl7aWYodGhpcy5fcXVldWVkQ2h1bmtzLmxlbmd0aD4wKXtyZXR1cm57dmFsdWU6dGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCksZG9uZTohMX19aWYodGhpcy5fZG9uZSlyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9O2NvbnN0IHQ9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9yZXF1ZXN0cy5wdXNoKHQpO3JldHVybiB0LnByb21pc2V9Y2FuY2VsKHQpe3RoaXMuX2RvbmU9ITA7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcmVxdWVzdHMpdC5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO3RoaXMuX3JlcXVlc3RzLmxlbmd0aD0wfXByb2dyZXNzaXZlRG9uZSgpe3RoaXMuX2RvbmV8fCh0aGlzLl9kb25lPSEwKX19Y2xhc3MgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVye2NvbnN0cnVjdG9yKHQsZSxzKXt0aGlzLl9zdHJlYW09dDt0aGlzLl9iZWdpbj1lO3RoaXMuX2VuZD1zO3RoaXMuX3F1ZXVlZENodW5rPW51bGw7dGhpcy5fcmVxdWVzdHM9W107dGhpcy5fZG9uZT0hMTt0aGlzLm9uUHJvZ3Jlc3M9bnVsbH1fZW5xdWV1ZSh0KXtpZighdGhpcy5fZG9uZSl7aWYoMD09PXRoaXMuX3JlcXVlc3RzLmxlbmd0aCl0aGlzLl9xdWV1ZWRDaHVuaz10O2Vsc2V7dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTtmb3IoY29uc3QgdCBvZiB0aGlzLl9yZXF1ZXN0cyl0LnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTB9dGhpcy5fZG9uZT0hMDt0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpfX1nZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4hMX1hc3luYyByZWFkKCl7aWYodGhpcy5fcXVldWVkQ2h1bmspe2NvbnN0IHQ9dGhpcy5fcXVldWVkQ2h1bms7dGhpcy5fcXVldWVkQ2h1bms9bnVsbDtyZXR1cm57dmFsdWU6dCxkb25lOiExfX1pZih0aGlzLl9kb25lKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07Y29uc3QgdD0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuX3JlcXVlc3RzLnB1c2godCk7cmV0dXJuIHQucHJvbWlzZX1jYW5jZWwodCl7dGhpcy5fZG9uZT0hMDtmb3IoY29uc3QgdCBvZiB0aGlzLl9yZXF1ZXN0cyl0LnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7dGhpcy5fcmVxdWVzdHMubGVuZ3RoPTA7dGhpcy5fc3RyZWFtLl9yZW1vdmVSYW5nZVJlYWRlcih0aGlzKX19fSwodCxlKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLlhmYVRleHQ9dm9pZCAwO2NsYXNzIFhmYVRleHR7c3RhdGljIHRleHRDb250ZW50KHQpe2NvbnN0IGU9W10scz17aXRlbXM6ZSxzdHlsZXM6T2JqZWN0LmNyZWF0ZShudWxsKX07IWZ1bmN0aW9uIHdhbGsodCl7aWYoIXQpcmV0dXJuO2xldCBzPW51bGw7Y29uc3QgaT10Lm5hbWU7aWYoIiN0ZXh0Ij09PWkpcz10LnZhbHVlO2Vsc2V7aWYoIVhmYVRleHQuc2hvdWxkQnVpbGRUZXh0KGkpKXJldHVybjt0Py5hdHRyaWJ1dGVzPy50ZXh0Q29udGVudD9zPXQuYXR0cmlidXRlcy50ZXh0Q29udGVudDp0LnZhbHVlJiYocz10LnZhbHVlKX1udWxsIT09cyYmZS5wdXNoKHtzdHI6c30pO2lmKHQuY2hpbGRyZW4pZm9yKGNvbnN0IGUgb2YgdC5jaGlsZHJlbil3YWxrKGUpfSh0KTtyZXR1cm4gc31zdGF0aWMgc2hvdWxkQnVpbGRUZXh0KHQpe3JldHVybiEoInRleHRhcmVhIj09PXR8fCJpbnB1dCI9PT10fHwib3B0aW9uIj09PXR8fCJzZWxlY3QiPT09dCl9fWUuWGZhVGV4dD1YZmFUZXh0fSwodCxlLHMpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5PWUuTm9kZUNhbnZhc0ZhY3Rvcnk9ZS5Ob2RlQ01hcFJlYWRlckZhY3Rvcnk9dm9pZCAwO3ZhciBpPXMoNyk7Y29uc3QgZmV0Y2hEYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoKGUscyk9PntyZXF1aXJlKCJmcyIpLnJlYWRGaWxlKHQsKCh0LGkpPT57IXQmJmk/ZShuZXcgVWludDhBcnJheShpKSk6cyhuZXcgRXJyb3IodCkpfSkpfSkpfTtjbGFzcyBOb2RlQ2FudmFzRmFjdG9yeSBleHRlbmRzIGkuQmFzZUNhbnZhc0ZhY3Rvcnl7X2NyZWF0ZUNhbnZhcyh0LGUpe3JldHVybiByZXF1aXJlKCJjYW52YXMiKS5jcmVhdGVDYW52YXModCxlKX19ZS5Ob2RlQ2FudmFzRmFjdG9yeT1Ob2RlQ2FudmFzRmFjdG9yeTtjbGFzcyBOb2RlQ01hcFJlYWRlckZhY3RvcnkgZXh0ZW5kcyBpLkJhc2VDTWFwUmVhZGVyRmFjdG9yeXtfZmV0Y2hEYXRhKHQsZSl7cmV0dXJuIGZldGNoRGF0YSh0KS50aGVuKCh0PT4oe2NNYXBEYXRhOnQsY29tcHJlc3Npb25UeXBlOmV9KSkpfX1lLk5vZGVDTWFwUmVhZGVyRmFjdG9yeT1Ob2RlQ01hcFJlYWRlckZhY3Rvcnk7Y2xhc3MgTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5IGV4dGVuZHMgaS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnl7X2ZldGNoRGF0YSh0KXtyZXR1cm4gZmV0Y2hEYXRhKHQpfX1lLk5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeT1Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnl9LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXI9dm9pZCAwO3ZhciBpPXMoNSksbj1zKDEpLHI9cygyMiksYT1zKDIzKTtjbGFzcyBBbm5vdGF0aW9uRWRpdG9yTGF5ZXJ7I2R0OyN1dD0hMTsjcHQ9dGhpcy5wb2ludGVydXAuYmluZCh0aGlzKTsjZ3Q9dGhpcy5wb2ludGVyZG93bi5iaW5kKHRoaXMpOyNtdD1uZXcgTWFwOyNmdD0hMTsjYnQ9ITE7I0F0O3N0YXRpYyBfaW5pdGlhbGl6ZWQ9ITE7Y29uc3RydWN0b3IodCl7aWYoIUFubm90YXRpb25FZGl0b3JMYXllci5faW5pdGlhbGl6ZWQpe0Fubm90YXRpb25FZGl0b3JMYXllci5faW5pdGlhbGl6ZWQ9ITA7ci5GcmVlVGV4dEVkaXRvci5pbml0aWFsaXplKHQubDEwbik7YS5JbmtFZGl0b3IuaW5pdGlhbGl6ZSh0LmwxMG4pfXQudWlNYW5hZ2VyLnJlZ2lzdGVyRWRpdG9yVHlwZXMoW3IuRnJlZVRleHRFZGl0b3IsYS5JbmtFZGl0b3JdKTt0aGlzLiNBdD10LnVpTWFuYWdlcjt0aGlzLmFubm90YXRpb25TdG9yYWdlPXQuYW5ub3RhdGlvblN0b3JhZ2U7dGhpcy5wYWdlSW5kZXg9dC5wYWdlSW5kZXg7dGhpcy5kaXY9dC5kaXY7dGhpcy4jZHQ9dC5hY2Nlc3NpYmlsaXR5TWFuYWdlcjt0aGlzLiNBdC5hZGRMYXllcih0aGlzKX11cGRhdGVUb29sYmFyKHQpe3RoaXMuI0F0LnVwZGF0ZVRvb2xiYXIodCl9dXBkYXRlTW9kZSh0PXRoaXMuI0F0LmdldE1vZGUoKSl7dGhpcy4jX3QoKTtpZih0PT09bi5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkspe3RoaXMuYWRkSW5rRWRpdG9ySWZOZWVkZWQoITEpO3RoaXMuZGlzYWJsZUNsaWNrKCl9ZWxzZSB0aGlzLmVuYWJsZUNsaWNrKCk7dGhpcy4jQXQudW5zZWxlY3RBbGwoKTt0aGlzLmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJmcmVlVGV4dEVkaXRpbmciLHQ9PT1uLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUKTt0aGlzLmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJpbmtFZGl0aW5nIix0PT09bi5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkspfWFkZElua0VkaXRvcklmTmVlZGVkKHQpe2lmKCF0JiZ0aGlzLiNBdC5nZXRNb2RlKCkhPT1uLkFubm90YXRpb25FZGl0b3JUeXBlLklOSylyZXR1cm47aWYoIXQpZm9yKGNvbnN0IHQgb2YgdGhpcy4jbXQudmFsdWVzKCkpaWYodC5pc0VtcHR5KCkpe3Quc2V0SW5CYWNrZ3JvdW5kKCk7cmV0dXJufXRoaXMuI3Z0KHtvZmZzZXRYOjAsb2Zmc2V0WTowfSkuc2V0SW5CYWNrZ3JvdW5kKCl9c2V0RWRpdGluZ1N0YXRlKHQpe3RoaXMuI0F0LnNldEVkaXRpbmdTdGF0ZSh0KX1hZGRDb21tYW5kcyh0KXt0aGlzLiNBdC5hZGRDb21tYW5kcyh0KX1lbmFibGUoKXt0aGlzLmRpdi5zdHlsZS5wb2ludGVyRXZlbnRzPSJhdXRvIjtmb3IoY29uc3QgdCBvZiB0aGlzLiNtdC52YWx1ZXMoKSl0LmVuYWJsZUVkaXRpbmcoKX1kaXNhYmxlKCl7dGhpcy5kaXYuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSI7Zm9yKGNvbnN0IHQgb2YgdGhpcy4jbXQudmFsdWVzKCkpdC5kaXNhYmxlRWRpdGluZygpfXNldEFjdGl2ZUVkaXRvcih0KXt0aGlzLiNBdC5nZXRBY3RpdmUoKSE9PXQmJnRoaXMuI0F0LnNldEFjdGl2ZUVkaXRvcih0KX1lbmFibGVDbGljaygpe3RoaXMuZGl2LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix0aGlzLiNndCk7dGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIix0aGlzLiNwdCl9ZGlzYWJsZUNsaWNrKCl7dGhpcy5kaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuI2d0KTt0aGlzLmRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHRoaXMuI3B0KX1hdHRhY2godCl7dGhpcy4jbXQuc2V0KHQuaWQsdCl9ZGV0YWNoKHQpe3RoaXMuI210LmRlbGV0ZSh0LmlkKTt0aGlzLiNkdD8ucmVtb3ZlUG9pbnRlckluVGV4dExheWVyKHQuY29udGVudERpdil9cmVtb3ZlKHQpe3RoaXMuI0F0LnJlbW92ZUVkaXRvcih0KTt0aGlzLmRldGFjaCh0KTt0aGlzLmFubm90YXRpb25TdG9yYWdlLnJlbW92ZSh0LmlkKTt0LmRpdi5zdHlsZS5kaXNwbGF5PSJub25lIjtzZXRUaW1lb3V0KCgoKT0+e3QuZGl2LnN0eWxlLmRpc3BsYXk9IiI7dC5kaXYucmVtb3ZlKCk7dC5pc0F0dGFjaGVkVG9ET009ITE7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWRvY3VtZW50LmJvZHkmJnRoaXMuI0F0LmZvY3VzTWFpbkNvbnRhaW5lcigpfSksMCk7dGhpcy4jYnR8fHRoaXMuYWRkSW5rRWRpdG9ySWZOZWVkZWQoITEpfSN5dCh0KXtpZih0LnBhcmVudCE9PXRoaXMpe3RoaXMuYXR0YWNoKHQpO3QucGFnZUluZGV4PXRoaXMucGFnZUluZGV4O3QucGFyZW50Py5kZXRhY2godCk7dC5wYXJlbnQ9dGhpcztpZih0LmRpdiYmdC5pc0F0dGFjaGVkVG9ET00pe3QuZGl2LnJlbW92ZSgpO3RoaXMuZGl2LmFwcGVuZCh0LmRpdil9fX1hZGQodCl7dGhpcy4jeXQodCk7dGhpcy4jQXQuYWRkRWRpdG9yKHQpO3RoaXMuYXR0YWNoKHQpO2lmKCF0LmlzQXR0YWNoZWRUb0RPTSl7Y29uc3QgZT10LnJlbmRlcigpO3RoaXMuZGl2LmFwcGVuZChlKTt0LmlzQXR0YWNoZWRUb0RPTT0hMH10aGlzLm1vdmVFZGl0b3JJbkRPTSh0KTt0Lm9uY2VBZGRlZCgpO3RoaXMuYWRkVG9Bbm5vdGF0aW9uU3RvcmFnZSh0KX1tb3ZlRWRpdG9ySW5ET00odCl7dGhpcy4jZHQ/Lm1vdmVFbGVtZW50SW5ET00odGhpcy5kaXYsdC5kaXYsdC5jb250ZW50RGl2LCEwKX1hZGRUb0Fubm90YXRpb25TdG9yYWdlKHQpe3QuaXNFbXB0eSgpfHx0aGlzLmFubm90YXRpb25TdG9yYWdlLmhhcyh0LmlkKXx8dGhpcy5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0LmlkLHQpfWFkZE9yUmVidWlsZCh0KXt0Lm5lZWRzVG9CZVJlYnVpbHQoKT90LnJlYnVpbGQoKTp0aGlzLmFkZCh0KX1hZGRBTmV3RWRpdG9yKHQpe3RoaXMuYWRkQ29tbWFuZHMoe2NtZDooKT0+e3RoaXMuYWRkT3JSZWJ1aWxkKHQpfSx1bmRvOigpPT57dC5yZW1vdmUoKX0sbXVzdEV4ZWM6ITB9KX1hZGRVbmRvYWJsZUVkaXRvcih0KXt0aGlzLmFkZENvbW1hbmRzKHtjbWQ6KCk9Pnt0aGlzLmFkZE9yUmVidWlsZCh0KX0sdW5kbzooKT0+e3QucmVtb3ZlKCl9LG11c3RFeGVjOiExfSl9Z2V0TmV4dElkKCl7cmV0dXJuIHRoaXMuI0F0LmdldElkKCl9I1N0KHQpe3N3aXRjaCh0aGlzLiNBdC5nZXRNb2RlKCkpe2Nhc2Ugbi5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDpyZXR1cm4gbmV3IHIuRnJlZVRleHRFZGl0b3IodCk7Y2FzZSBuLkFubm90YXRpb25FZGl0b3JUeXBlLklOSzpyZXR1cm4gbmV3IGEuSW5rRWRpdG9yKHQpfXJldHVybiBudWxsfWRlc2VyaWFsaXplKHQpe3N3aXRjaCh0LmFubm90YXRpb25UeXBlKXtjYXNlIG4uQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6cmV0dXJuIHIuRnJlZVRleHRFZGl0b3IuZGVzZXJpYWxpemUodCx0aGlzKTtjYXNlIG4uQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOnJldHVybiBhLklua0VkaXRvci5kZXNlcmlhbGl6ZSh0LHRoaXMpfXJldHVybiBudWxsfSN2dCh0KXtjb25zdCBlPXRoaXMuZ2V0TmV4dElkKCkscz10aGlzLiNTdCh7cGFyZW50OnRoaXMsaWQ6ZSx4OnQub2Zmc2V0WCx5OnQub2Zmc2V0WX0pO3MmJnRoaXMuYWRkKHMpO3JldHVybiBzfXNldFNlbGVjdGVkKHQpe3RoaXMuI0F0LnNldFNlbGVjdGVkKHQpfXRvZ2dsZVNlbGVjdGVkKHQpe3RoaXMuI0F0LnRvZ2dsZVNlbGVjdGVkKHQpfWlzU2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuI0F0LmlzU2VsZWN0ZWQodCl9dW5zZWxlY3QodCl7dGhpcy4jQXQudW5zZWxlY3QodCl9cG9pbnRlcnVwKHQpe2NvbnN0IGU9aS5LZXlib2FyZE1hbmFnZXIucGxhdGZvcm0uaXNNYWM7aWYoISgwIT09dC5idXR0b258fHQuY3RybEtleSYmZSkmJnQudGFyZ2V0PT09dGhpcy5kaXYmJnRoaXMuI2Z0KXt0aGlzLiNmdD0hMTt0aGlzLiN1dD90aGlzLiN2dCh0KTp0aGlzLiN1dD0hMH19cG9pbnRlcmRvd24odCl7Y29uc3QgZT1pLktleWJvYXJkTWFuYWdlci5wbGF0Zm9ybS5pc01hYztpZigwIT09dC5idXR0b258fHQuY3RybEtleSYmZSlyZXR1cm47aWYodC50YXJnZXQhPT10aGlzLmRpdilyZXR1cm47dGhpcy4jZnQ9ITA7Y29uc3Qgcz10aGlzLiNBdC5nZXRBY3RpdmUoKTt0aGlzLiN1dD0hc3x8cy5pc0VtcHR5KCl9ZHJvcCh0KXtjb25zdCBlPXQuZGF0YVRyYW5zZmVyLmdldERhdGEoInRleHQvcGxhaW4iKSxzPXRoaXMuI0F0LmdldEVkaXRvcihlKTtpZighcylyZXR1cm47dC5wcmV2ZW50RGVmYXVsdCgpO3QuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9Im1vdmUiO3RoaXMuI3l0KHMpO2NvbnN0IGk9dGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10LmNsaWVudFgtaS54LHI9dC5jbGllbnRZLWkueTtzLnRyYW5zbGF0ZShuLXMuc3RhcnRYLHItcy5zdGFydFkpO3RoaXMubW92ZUVkaXRvckluRE9NKHMpO3MuZGl2LmZvY3VzKCl9ZHJhZ292ZXIodCl7dC5wcmV2ZW50RGVmYXVsdCgpfWRlc3Ryb3koKXt0aGlzLiNBdC5nZXRBY3RpdmUoKT8ucGFyZW50PT09dGhpcyYmdGhpcy4jQXQuc2V0QWN0aXZlRWRpdG9yKG51bGwpO2Zvcihjb25zdCB0IG9mIHRoaXMuI210LnZhbHVlcygpKXt0aGlzLiNkdD8ucmVtb3ZlUG9pbnRlckluVGV4dExheWVyKHQuY29udGVudERpdik7dC5pc0F0dGFjaGVkVG9ET009ITE7dC5kaXYucmVtb3ZlKCk7dC5wYXJlbnQ9bnVsbH10aGlzLmRpdj1udWxsO3RoaXMuI210LmNsZWFyKCk7dGhpcy4jQXQucmVtb3ZlTGF5ZXIodGhpcyl9I190KCl7dGhpcy4jYnQ9ITA7Zm9yKGNvbnN0IHQgb2YgdGhpcy4jbXQudmFsdWVzKCkpdC5pc0VtcHR5KCkmJnQucmVtb3ZlKCk7dGhpcy4jYnQ9ITF9cmVuZGVyKHQpe3RoaXMudmlld3BvcnQ9dC52aWV3cG9ydDsoMCxpLmJpbmRFdmVudHMpKHRoaXMsdGhpcy5kaXYsWyJkcmFnb3ZlciIsImRyb3AiXSk7dGhpcy5zZXREaW1lbnNpb25zKCk7Zm9yKGNvbnN0IHQgb2YgdGhpcy4jQXQuZ2V0RWRpdG9ycyh0aGlzLnBhZ2VJbmRleCkpdGhpcy5hZGQodCk7dGhpcy51cGRhdGVNb2RlKCl9dXBkYXRlKHQpe3RoaXMuI0F0LmNvbW1pdE9yUmVtb3ZlKCk7dGhpcy52aWV3cG9ydD10LnZpZXdwb3J0O3RoaXMuc2V0RGltZW5zaW9ucygpO3RoaXMudXBkYXRlTW9kZSgpfWdldCBzY2FsZUZhY3Rvcigpe3JldHVybiB0aGlzLnZpZXdwb3J0LnNjYWxlfWdldCBwYWdlRGltZW5zaW9ucygpe2NvbnN0W3QsZSxzLGldPXRoaXMudmlld3BvcnQudmlld0JveDtyZXR1cm5bcy10LGktZV19Z2V0IHZpZXdwb3J0QmFzZURpbWVuc2lvbnMoKXtjb25zdHt3aWR0aDp0LGhlaWdodDplLHJvdGF0aW9uOnN9PXRoaXMudmlld3BvcnQ7cmV0dXJuIHMlMTgwPT0wP1t0LGVdOltlLHRdfXNldERpbWVuc2lvbnMoKXtjb25zdHt3aWR0aDp0LGhlaWdodDplLHJvdGF0aW9uOnN9PXRoaXMudmlld3BvcnQsaT1zJTE4MCE9MCxuPU1hdGguZmxvb3IodCkrInB4IixyPU1hdGguZmxvb3IoZSkrInB4Ijt0aGlzLmRpdi5zdHlsZS53aWR0aD1pP3I6bjt0aGlzLmRpdi5zdHlsZS5oZWlnaHQ9aT9uOnI7dGhpcy5kaXYuc2V0QXR0cmlidXRlKCJkYXRhLW1haW4tcm90YXRpb24iLHMpfX1lLkFubm90YXRpb25FZGl0b3JMYXllcj1Bbm5vdGF0aW9uRWRpdG9yTGF5ZXJ9LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5GcmVlVGV4dEVkaXRvcj12b2lkIDA7dmFyIGk9cygxKSxuPXMoNSkscj1zKDQpO2NsYXNzIEZyZWVUZXh0RWRpdG9yIGV4dGVuZHMgci5Bbm5vdGF0aW9uRWRpdG9yeyN4dD10aGlzLmVkaXRvckRpdkJsdXIuYmluZCh0aGlzKTsjRXQ9dGhpcy5lZGl0b3JEaXZGb2N1cy5iaW5kKHRoaXMpOyNDdD10aGlzLmVkaXRvckRpdklucHV0LmJpbmQodGhpcyk7I1B0PXRoaXMuZWRpdG9yRGl2S2V5ZG93bi5iaW5kKHRoaXMpOyNUdDsjd3Q9IiI7I2t0PWAke3RoaXMuaWR9LWVkaXRvcmA7I0Z0PSExOyNNdDtzdGF0aWMgX2ZyZWVUZXh0RGVmYXVsdENvbnRlbnQ9IiI7c3RhdGljIF9sMTBuUHJvbWlzZTtzdGF0aWMgX2ludGVybmFsUGFkZGluZz0wO3N0YXRpYyBfZGVmYXVsdENvbG9yPW51bGw7c3RhdGljIF9kZWZhdWx0Rm9udFNpemU9MTA7c3RhdGljIF9rZXlib2FyZE1hbmFnZXI9bmV3IG4uS2V5Ym9hcmRNYW5hZ2VyKFtbWyJjdHJsK0VudGVyIiwibWFjK21ldGErRW50ZXIiLCJFc2NhcGUiLCJtYWMrRXNjYXBlIl0sRnJlZVRleHRFZGl0b3IucHJvdG90eXBlLmNvbW1pdE9yUmVtb3ZlXV0pO3N0YXRpYyBfdHlwZT0iZnJlZXRleHQiO2NvbnN0cnVjdG9yKHQpe3N1cGVyKHsuLi50LG5hbWU6ImZyZWVUZXh0RWRpdG9yIn0pO3RoaXMuI1R0PXQuY29sb3J8fEZyZWVUZXh0RWRpdG9yLl9kZWZhdWx0Q29sb3J8fHIuQW5ub3RhdGlvbkVkaXRvci5fZGVmYXVsdExpbmVDb2xvcjt0aGlzLiNNdD10LmZvbnRTaXplfHxGcmVlVGV4dEVkaXRvci5fZGVmYXVsdEZvbnRTaXplfXN0YXRpYyBpbml0aWFsaXplKHQpe3RoaXMuX2wxMG5Qcm9taXNlPW5ldyBNYXAoWyJmcmVlX3RleHQyX2RlZmF1bHRfY29udGVudCIsImVkaXRvcl9mcmVlX3RleHQyX2FyaWFfbGFiZWwiXS5tYXAoKGU9PltlLHQuZ2V0KGUpXSkpKTtjb25zdCBlPWdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTt0aGlzLl9pbnRlcm5hbFBhZGRpbmc9cGFyc2VGbG9hdChlLmdldFByb3BlcnR5VmFsdWUoIi0tZnJlZXRleHQtcGFkZGluZyIpKX1zdGF0aWMgdXBkYXRlRGVmYXVsdFBhcmFtcyh0LGUpe3N3aXRjaCh0KXtjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRTpGcmVlVGV4dEVkaXRvci5fZGVmYXVsdEZvbnRTaXplPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOkZyZWVUZXh0RWRpdG9yLl9kZWZhdWx0Q29sb3I9ZX19dXBkYXRlUGFyYW1zKHQsZSl7c3dpdGNoKHQpe2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFOnRoaXMuI1J0KGUpO2JyZWFrO2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9DT0xPUjp0aGlzLiNEdChlKX19c3RhdGljIGdldCBkZWZhdWx0UHJvcGVydGllc1RvVXBkYXRlKCl7cmV0dXJuW1tpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkUsRnJlZVRleHRFZGl0b3IuX2RlZmF1bHRGb250U2l6ZV0sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1IsRnJlZVRleHRFZGl0b3IuX2RlZmF1bHRDb2xvcnx8ci5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXV19Z2V0IHByb3BlcnRpZXNUb1VwZGF0ZSgpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLHRoaXMuI010XSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9DT0xPUix0aGlzLiNUdF1dfSNSdCh0KXtjb25zdCBzZXRGb250c2l6ZT10PT57dGhpcy5lZGl0b3JEaXYuc3R5bGUuZm9udFNpemU9YGNhbGMoJHt0fXB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSlgO3RoaXMudHJhbnNsYXRlKDAsLSh0LXRoaXMuI010KSp0aGlzLnBhcmVudC5zY2FsZUZhY3Rvcik7dGhpcy4jTXQ9dDt0aGlzLiNJdCgpfSxlPXRoaXMuI010O3RoaXMucGFyZW50LmFkZENvbW1hbmRzKHtjbWQ6KCk9PntzZXRGb250c2l6ZSh0KX0sdW5kbzooKT0+e3NldEZvbnRzaXplKGUpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRSxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9I0R0KHQpe2NvbnN0IGU9dGhpcy4jVHQ7dGhpcy5wYXJlbnQuYWRkQ29tbWFuZHMoe2NtZDooKT0+e3RoaXMuI1R0PXQ7dGhpcy5lZGl0b3JEaXYuc3R5bGUuY29sb3I9dH0sdW5kbzooKT0+e3RoaXMuI1R0PWU7dGhpcy5lZGl0b3JEaXYuc3R5bGUuY29sb3I9ZX0sbXVzdEV4ZWM6ITAsdHlwZTppLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SLG92ZXJ3cml0ZUlmU2FtZVR5cGU6ITAsa2VlcFVuZG86ITB9KX1nZXRJbml0aWFsVHJhbnNsYXRpb24oKXtyZXR1cm5bLUZyZWVUZXh0RWRpdG9yLl9pbnRlcm5hbFBhZGRpbmcqdGhpcy5wYXJlbnQuc2NhbGVGYWN0b3IsLShGcmVlVGV4dEVkaXRvci5faW50ZXJuYWxQYWRkaW5nK3RoaXMuI010KSp0aGlzLnBhcmVudC5zY2FsZUZhY3Rvcl19cmVidWlsZCgpe3N1cGVyLnJlYnVpbGQoKTtudWxsIT09dGhpcy5kaXYmJih0aGlzLmlzQXR0YWNoZWRUb0RPTXx8dGhpcy5wYXJlbnQuYWRkKHRoaXMpKX1lbmFibGVFZGl0TW9kZSgpe2lmKCF0aGlzLmlzSW5FZGl0TW9kZSgpKXt0aGlzLnBhcmVudC5zZXRFZGl0aW5nU3RhdGUoITEpO3RoaXMucGFyZW50LnVwZGF0ZVRvb2xiYXIoaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVCk7c3VwZXIuZW5hYmxlRWRpdE1vZGUoKTt0aGlzLm92ZXJsYXlEaXYuY2xhc3NMaXN0LnJlbW92ZSgiZW5hYmxlZCIpO3RoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZT0hMDt0aGlzLmRpdi5kcmFnZ2FibGU9ITE7dGhpcy5kaXYucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKTt0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLiNQdCk7dGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuI0V0KTt0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLiN4dCk7dGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHRoaXMuI0N0KX19ZGlzYWJsZUVkaXRNb2RlKCl7aWYodGhpcy5pc0luRWRpdE1vZGUoKSl7dGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCEwKTtzdXBlci5kaXNhYmxlRWRpdE1vZGUoKTt0aGlzLm92ZXJsYXlEaXYuY2xhc3NMaXN0LmFkZCgiZW5hYmxlZCIpO3RoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZT0hMTt0aGlzLmRpdi5zZXRBdHRyaWJ1dGUoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsdGhpcy4ja3QpO3RoaXMuZGl2LmRyYWdnYWJsZT0hMDt0aGlzLmVkaXRvckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLiNQdCk7dGhpcy5lZGl0b3JEaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuI0V0KTt0aGlzLmVkaXRvckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLiN4dCk7dGhpcy5lZGl0b3JEaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHRoaXMuI0N0KTt0aGlzLmRpdi5mb2N1cygpO3RoaXMuaXNFZGl0aW5nPSExO3RoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QuYWRkKCJmcmVlVGV4dEVkaXRpbmciKX19Zm9jdXNpbih0KXtzdXBlci5mb2N1c2luKHQpO3QudGFyZ2V0IT09dGhpcy5lZGl0b3JEaXYmJnRoaXMuZWRpdG9yRGl2LmZvY3VzKCl9b25jZUFkZGVkKCl7aWYoIXRoaXMud2lkdGgpe3RoaXMuZW5hYmxlRWRpdE1vZGUoKTt0aGlzLmVkaXRvckRpdi5mb2N1cygpfX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMuZWRpdG9yRGl2fHwiIj09PXRoaXMuZWRpdG9yRGl2LmlubmVyVGV4dC50cmltKCl9cmVtb3ZlKCl7dGhpcy5pc0VkaXRpbmc9ITE7dGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCEwKTt0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZVRleHRFZGl0aW5nIik7c3VwZXIucmVtb3ZlKCl9I090KCl7Y29uc3QgdD10aGlzLmVkaXRvckRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVkaXRvckRpdi5pbm5lclRleHQ7Y29uc3QgZT1bXTtmb3IoY29uc3QgcyBvZiB0KXtjb25zdCB0PXMuZmlyc3RDaGlsZDsiI3RleHQiPT09dD8ubm9kZU5hbWU/ZS5wdXNoKHQuZGF0YSk6ZS5wdXNoKCIiKX1yZXR1cm4gZS5qb2luKCJcbiIpfSNJdCgpe2NvbnN0W3QsZV09dGhpcy5wYXJlbnQudmlld3BvcnRCYXNlRGltZW5zaW9ucyxzPXRoaXMuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMud2lkdGg9cy53aWR0aC90O3RoaXMuaGVpZ2h0PXMuaGVpZ2h0L2V9Y29tbWl0KCl7c3VwZXIuY29tbWl0KCk7aWYoIXRoaXMuI0Z0KXt0aGlzLiNGdD0hMDt0aGlzLnBhcmVudC5hZGRVbmRvYWJsZUVkaXRvcih0aGlzKX10aGlzLmRpc2FibGVFZGl0TW9kZSgpO3RoaXMuI3d0PXRoaXMuI090KCkudHJpbUVuZCgpO3RoaXMuI0l0KCl9c2hvdWxkR2V0S2V5Ym9hcmRFdmVudHMoKXtyZXR1cm4gdGhpcy5pc0luRWRpdE1vZGUoKX1kYmxjbGljayh0KXt0aGlzLmVuYWJsZUVkaXRNb2RlKCk7dGhpcy5lZGl0b3JEaXYuZm9jdXMoKX1rZXlkb3duKHQpe2lmKHQudGFyZ2V0PT09dGhpcy5kaXYmJiJFbnRlciI9PT10LmtleSl7dGhpcy5lbmFibGVFZGl0TW9kZSgpO3RoaXMuZWRpdG9yRGl2LmZvY3VzKCl9fWVkaXRvckRpdktleWRvd24odCl7RnJlZVRleHRFZGl0b3IuX2tleWJvYXJkTWFuYWdlci5leGVjKHRoaXMsdCl9ZWRpdG9yRGl2Rm9jdXModCl7dGhpcy5pc0VkaXRpbmc9ITB9ZWRpdG9yRGl2Qmx1cih0KXt0aGlzLmlzRWRpdGluZz0hMX1lZGl0b3JEaXZJbnB1dCh0KXt0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LnRvZ2dsZSgiZnJlZVRleHRFZGl0aW5nIix0aGlzLmlzRW1wdHkoKSl9ZGlzYWJsZUVkaXRpbmcoKXt0aGlzLmVkaXRvckRpdi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjb21tZW50Iik7dGhpcy5lZGl0b3JEaXYucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpbGluZSIpfWVuYWJsZUVkaXRpbmcoKXt0aGlzLmVkaXRvckRpdi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0ZXh0Ym94Iik7dGhpcy5lZGl0b3JEaXYuc2V0QXR0cmlidXRlKCJhcmlhLW11bHRpbGluZSIsITApfXJlbmRlcigpe2lmKHRoaXMuZGl2KXJldHVybiB0aGlzLmRpdjtsZXQgdCxlO2lmKHRoaXMud2lkdGgpe3Q9dGhpcy54O2U9dGhpcy55fXN1cGVyLnJlbmRlcigpO3RoaXMuZWRpdG9yRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuZWRpdG9yRGl2LmNsYXNzTmFtZT0iaW50ZXJuYWwiO3RoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuI2t0KTt0aGlzLmVuYWJsZUVkaXRpbmcoKTtGcmVlVGV4dEVkaXRvci5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfZnJlZV90ZXh0Ml9hcmlhX2xhYmVsIikudGhlbigodD0+dGhpcy5lZGl0b3JEaXY/LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCkpKTtGcmVlVGV4dEVkaXRvci5fbDEwblByb21pc2UuZ2V0KCJmcmVlX3RleHQyX2RlZmF1bHRfY29udGVudCIpLnRoZW4oKHQ9PnRoaXMuZWRpdG9yRGl2Py5zZXRBdHRyaWJ1dGUoImRlZmF1bHQtY29udGVudCIsdCkpKTt0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGU9ITA7Y29uc3R7c3R5bGU6c309dGhpcy5lZGl0b3JEaXY7cy5mb250U2l6ZT1gY2FsYygke3RoaXMuI010fXB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSlgO3MuY29sb3I9dGhpcy4jVHQ7dGhpcy5kaXYuYXBwZW5kKHRoaXMuZWRpdG9yRGl2KTt0aGlzLm92ZXJsYXlEaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5vdmVybGF5RGl2LmNsYXNzTGlzdC5hZGQoIm92ZXJsYXkiLCJlbmFibGVkIik7dGhpcy5kaXYuYXBwZW5kKHRoaXMub3ZlcmxheURpdik7KDAsbi5iaW5kRXZlbnRzKSh0aGlzLHRoaXMuZGl2LFsiZGJsY2xpY2siLCJrZXlkb3duIl0pO2lmKHRoaXMud2lkdGgpe2NvbnN0W3MsaV09dGhpcy5wYXJlbnQudmlld3BvcnRCYXNlRGltZW5zaW9uczt0aGlzLnNldEF0KHQqcyxlKmksdGhpcy53aWR0aCpzLHRoaXMuaGVpZ2h0KmkpO2Zvcihjb25zdCB0IG9mIHRoaXMuI3d0LnNwbGl0KCJcbiIpKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuYXBwZW5kKHQ/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7dGhpcy5lZGl0b3JEaXYuYXBwZW5kKGUpfXRoaXMuZGl2LmRyYWdnYWJsZT0hMDt0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGU9ITF9ZWxzZXt0aGlzLmRpdi5kcmFnZ2FibGU9ITE7dGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlPSEwfXJldHVybiB0aGlzLmRpdn1nZXQgY29udGVudERpdigpe3JldHVybiB0aGlzLmVkaXRvckRpdn1zdGF0aWMgZGVzZXJpYWxpemUodCxlKXtjb25zdCBzPXN1cGVyLmRlc2VyaWFsaXplKHQsZSk7cy4jTXQ9dC5mb250U2l6ZTtzLiNUdD1pLlV0aWwubWFrZUhleENvbG9yKC4uLnQuY29sb3IpO3MuI3d0PXQudmFsdWU7cmV0dXJuIHN9c2VyaWFsaXplKCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuIG51bGw7Y29uc3QgdD1GcmVlVGV4dEVkaXRvci5faW50ZXJuYWxQYWRkaW5nKnRoaXMucGFyZW50LnNjYWxlRmFjdG9yLGU9dGhpcy5nZXRSZWN0KHQsdCkscz1yLkFubm90YXRpb25FZGl0b3IuX2NvbG9yTWFuYWdlci5jb252ZXJ0KGdldENvbXB1dGVkU3R5bGUodGhpcy5lZGl0b3JEaXYpLmNvbG9yKTtyZXR1cm57YW5ub3RhdGlvblR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVCxjb2xvcjpzLGZvbnRTaXplOnRoaXMuI010LHZhbHVlOnRoaXMuI3d0LHBhZ2VJbmRleDp0aGlzLnBhcmVudC5wYWdlSW5kZXgscmVjdDplLHJvdGF0aW9uOnRoaXMucm90YXRpb259fX1lLkZyZWVUZXh0RWRpdG9yPUZyZWVUZXh0RWRpdG9yfSwodCxlLHMpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuSW5rRWRpdG9yPXZvaWQgMDtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZml0Q3VydmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmZpdEN1cnZlfX0pO3ZhciBpPXMoMSksbj1zKDQpLHI9cygyNCksYT1zKDUpO2NvbnN0IG89MTY7Y2xhc3MgSW5rRWRpdG9yIGV4dGVuZHMgbi5Bbm5vdGF0aW9uRWRpdG9yeyNMdD0wOyNOdD0wOyNCdD0wOyNqdD10aGlzLmNhbnZhc1BvaW50ZXJtb3ZlLmJpbmQodGhpcyk7I1V0PXRoaXMuY2FudmFzUG9pbnRlcmxlYXZlLmJpbmQodGhpcyk7I3F0PXRoaXMuY2FudmFzUG9pbnRlcnVwLmJpbmQodGhpcyk7I1d0PXRoaXMuY2FudmFzUG9pbnRlcmRvd24uYmluZCh0aGlzKTsjR3Q9ITE7I0h0PSExOyN6dD1udWxsOyNWdD1udWxsOyNYdD0wOyMkdD0wOyNZdD1udWxsO3N0YXRpYyBfZGVmYXVsdENvbG9yPW51bGw7c3RhdGljIF9kZWZhdWx0T3BhY2l0eT0xO3N0YXRpYyBfZGVmYXVsdFRoaWNrbmVzcz0xO3N0YXRpYyBfbDEwblByb21pc2U7c3RhdGljIF90eXBlPSJpbmsiO2NvbnN0cnVjdG9yKHQpe3N1cGVyKHsuLi50LG5hbWU6Imlua0VkaXRvciJ9KTt0aGlzLmNvbG9yPXQuY29sb3J8fG51bGw7dGhpcy50aGlja25lc3M9dC50aGlja25lc3N8fG51bGw7dGhpcy5vcGFjaXR5PXQub3BhY2l0eXx8bnVsbDt0aGlzLnBhdGhzPVtdO3RoaXMuYmV6aWVyUGF0aDJEPVtdO3RoaXMuY3VycmVudFBhdGg9W107dGhpcy5zY2FsZUZhY3Rvcj0xO3RoaXMudHJhbnNsYXRpb25YPXRoaXMudHJhbnNsYXRpb25ZPTA7dGhpcy54PTA7dGhpcy55PTB9c3RhdGljIGluaXRpYWxpemUodCl7dGhpcy5fbDEwblByb21pc2U9bmV3IE1hcChbImVkaXRvcl9pbmtfY2FudmFzX2FyaWFfbGFiZWwiLCJlZGl0b3JfaW5rMl9hcmlhX2xhYmVsIl0ubWFwKChlPT5bZSx0LmdldChlKV0pKSl9c3RhdGljIHVwZGF0ZURlZmF1bHRQYXJhbXModCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1M6SW5rRWRpdG9yLl9kZWZhdWx0VGhpY2tuZXNzPWU7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUjpJbmtFZGl0b3IuX2RlZmF1bHRDb2xvcj1lO2JyZWFrO2Nhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWTpJbmtFZGl0b3IuX2RlZmF1bHRPcGFjaXR5PWUvMTAwfX11cGRhdGVQYXJhbXModCxlKXtzd2l0Y2godCl7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1M6dGhpcy4jS3QoZSk7YnJlYWs7Y2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUjp0aGlzLiNEdChlKTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFk6dGhpcy4jSnQoZSl9fXN0YXRpYyBnZXQgZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSgpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfVEhJQ0tORVNTLElua0VkaXRvci5fZGVmYXVsdFRoaWNrbmVzc10sW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SLElua0VkaXRvci5fZGVmYXVsdENvbG9yfHxuLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3JdLFtpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19PUEFDSVRZLE1hdGgucm91bmQoMTAwKklua0VkaXRvci5fZGVmYXVsdE9wYWNpdHkpXV19Z2V0IHByb3BlcnRpZXNUb1VwZGF0ZSgpe3JldHVybltbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfVEhJQ0tORVNTLHRoaXMudGhpY2tuZXNzfHxJbmtFZGl0b3IuX2RlZmF1bHRUaGlja25lc3NdLFtpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUix0aGlzLmNvbG9yfHxJbmtFZGl0b3IuX2RlZmF1bHRDb2xvcnx8bi5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yXSxbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxNYXRoLnJvdW5kKDEwMCoodGhpcy5vcGFjaXR5Pz9JbmtFZGl0b3IuX2RlZmF1bHRPcGFjaXR5KSldXX0jS3QodCl7Y29uc3QgZT10aGlzLnRoaWNrbmVzczt0aGlzLnBhcmVudC5hZGRDb21tYW5kcyh7Y21kOigpPT57dGhpcy50aGlja25lc3M9dDt0aGlzLiNRdCgpfSx1bmRvOigpPT57dGhpcy50aGlja25lc3M9ZTt0aGlzLiNRdCgpfSxtdXN0RXhlYzohMCx0eXBlOmkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUyxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9I0R0KHQpe2NvbnN0IGU9dGhpcy5jb2xvcjt0aGlzLnBhcmVudC5hZGRDb21tYW5kcyh7Y21kOigpPT57dGhpcy5jb2xvcj10O3RoaXMuI1p0KCl9LHVuZG86KCk9Pnt0aGlzLmNvbG9yPWU7dGhpcy4jWnQoKX0sbXVzdEV4ZWM6ITAsdHlwZTppLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUixvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9I0p0KHQpe3QvPTEwMDtjb25zdCBlPXRoaXMub3BhY2l0eTt0aGlzLnBhcmVudC5hZGRDb21tYW5kcyh7Y21kOigpPT57dGhpcy5vcGFjaXR5PXQ7dGhpcy4jWnQoKX0sdW5kbzooKT0+e3RoaXMub3BhY2l0eT1lO3RoaXMuI1p0KCl9LG11c3RFeGVjOiEwLHR5cGU6aS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSxvdmVyd3JpdGVJZlNhbWVUeXBlOiEwLGtlZXBVbmRvOiEwfSl9cmVidWlsZCgpe3N1cGVyLnJlYnVpbGQoKTtpZihudWxsIT09dGhpcy5kaXYpe2lmKCF0aGlzLmNhbnZhcyl7dGhpcy4jdGUoKTt0aGlzLiNlZSgpfWlmKCF0aGlzLmlzQXR0YWNoZWRUb0RPTSl7dGhpcy5wYXJlbnQuYWRkKHRoaXMpO3RoaXMuI3NlKCl9dGhpcy4jUXQoKX19cmVtb3ZlKCl7aWYobnVsbCE9PXRoaXMuY2FudmFzKXt0aGlzLmlzRW1wdHkoKXx8dGhpcy5jb21taXQoKTt0aGlzLmNhbnZhcy53aWR0aD10aGlzLmNhbnZhcy5oZWlnaHQ9MDt0aGlzLmNhbnZhcy5yZW1vdmUoKTt0aGlzLmNhbnZhcz1udWxsO3RoaXMuI1Z0LmRpc2Nvbm5lY3QoKTt0aGlzLiNWdD1udWxsO3N1cGVyLnJlbW92ZSgpfX1lbmFibGVFZGl0TW9kZSgpe2lmKCF0aGlzLiNHdCYmbnVsbCE9PXRoaXMuY2FudmFzKXtzdXBlci5lbmFibGVFZGl0TW9kZSgpO3RoaXMuZGl2LmRyYWdnYWJsZT0hMTt0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy4jV3QpO3RoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsdGhpcy4jcXQpfX1kaXNhYmxlRWRpdE1vZGUoKXtpZih0aGlzLmlzSW5FZGl0TW9kZSgpJiZudWxsIT09dGhpcy5jYW52YXMpe3N1cGVyLmRpc2FibGVFZGl0TW9kZSgpO3RoaXMuZGl2LmRyYWdnYWJsZT0hdGhpcy5pc0VtcHR5KCk7dGhpcy5kaXYuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdGluZyIpO3RoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix0aGlzLiNXdCk7dGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIix0aGlzLiNxdCl9fW9uY2VBZGRlZCgpe3RoaXMuZGl2LmRyYWdnYWJsZT0hdGhpcy5pc0VtcHR5KCl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5wYXRocy5sZW5ndGh8fDE9PT10aGlzLnBhdGhzLmxlbmd0aCYmMD09PXRoaXMucGF0aHNbMF0ubGVuZ3RofSNpZSgpe2NvbnN0e3dpZHRoOnQsaGVpZ2h0OmUscm90YXRpb246c309dGhpcy5wYXJlbnQudmlld3BvcnQ7c3dpdGNoKHMpe2Nhc2UgOTA6cmV0dXJuWzAsdCx0LGVdO2Nhc2UgMTgwOnJldHVyblt0LGUsdCxlXTtjYXNlIDI3MDpyZXR1cm5bZSwwLHQsZV07ZGVmYXVsdDpyZXR1cm5bMCwwLHQsZV19fSNuZSgpe3RoaXMuY3R4LmxpbmVXaWR0aD10aGlzLnRoaWNrbmVzcyp0aGlzLnBhcmVudC5zY2FsZUZhY3Rvci90aGlzLnNjYWxlRmFjdG9yO3RoaXMuY3R4LmxpbmVDYXA9InJvdW5kIjt0aGlzLmN0eC5saW5lSm9pbj0icm91bmQiO3RoaXMuY3R4Lm1pdGVyTGltaXQ9MTA7dGhpcy5jdHguc3Ryb2tlU3R5bGU9YCR7dGhpcy5jb2xvcn0keygwLGEub3BhY2l0eVRvSGV4KSh0aGlzLm9wYWNpdHkpfWB9I3JlKHQsZSl7dGhpcy5pc0VkaXRpbmc9ITA7aWYoIXRoaXMuI0h0KXt0aGlzLiNIdD0hMDt0aGlzLiNzZSgpO3RoaXMudGhpY2tuZXNzfHw9SW5rRWRpdG9yLl9kZWZhdWx0VGhpY2tuZXNzO3RoaXMuY29sb3J8fD1JbmtFZGl0b3IuX2RlZmF1bHRDb2xvcnx8bi5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yO3RoaXMub3BhY2l0eT8/PUlua0VkaXRvci5fZGVmYXVsdE9wYWNpdHl9dGhpcy5jdXJyZW50UGF0aC5wdXNoKFt0LGVdKTt0aGlzLiN6dD1udWxsO3RoaXMuI25lKCk7dGhpcy5jdHguYmVnaW5QYXRoKCk7dGhpcy5jdHgubW92ZVRvKHQsZSk7dGhpcy4jWXQ9KCk9PntpZih0aGlzLiNZdCl7aWYodGhpcy4jenQpe2lmKHRoaXMuaXNFbXB0eSgpKXt0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApO3RoaXMuY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0KX1lbHNlIHRoaXMuI1p0KCk7dGhpcy5jdHgubGluZVRvKC4uLnRoaXMuI3p0KTt0aGlzLiN6dD1udWxsO3RoaXMuY3R4LnN0cm9rZSgpfXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy4jWXQpfX07d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLiNZdCl9I2FlKHQsZSl7Y29uc3RbcyxpXT10aGlzLmN1cnJlbnRQYXRoLmF0KC0xKTtpZih0IT09c3x8ZSE9PWkpe3RoaXMuY3VycmVudFBhdGgucHVzaChbdCxlXSk7dGhpcy4jenQ9W3QsZV19fSNvZSh0LGUpe3RoaXMuY3R4LmNsb3NlUGF0aCgpO3RoaXMuI1l0PW51bGw7dD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuY2FudmFzLndpZHRoKTtlPU1hdGgubWluKE1hdGgubWF4KGUsMCksdGhpcy5jYW52YXMuaGVpZ2h0KTtjb25zdFtzLGldPXRoaXMuY3VycmVudFBhdGguYXQoLTEpO3Q9PT1zJiZlPT09aXx8dGhpcy5jdXJyZW50UGF0aC5wdXNoKFt0LGVdKTtsZXQgbjtpZigxIT09dGhpcy5jdXJyZW50UGF0aC5sZW5ndGgpbj0oMCxyLmZpdEN1cnZlKSh0aGlzLmN1cnJlbnRQYXRoLDMwLG51bGwpO2Vsc2V7Y29uc3Qgcz1bdCxlXTtuPVtbcyxzLnNsaWNlKCkscy5zbGljZSgpLHNdXX1jb25zdCBhPUlua0VkaXRvci4jbGUobik7dGhpcy5jdXJyZW50UGF0aC5sZW5ndGg9MDt0aGlzLnBhcmVudC5hZGRDb21tYW5kcyh7Y21kOigpPT57dGhpcy5wYXRocy5wdXNoKG4pO3RoaXMuYmV6aWVyUGF0aDJELnB1c2goYSk7dGhpcy5yZWJ1aWxkKCl9LHVuZG86KCk9Pnt0aGlzLnBhdGhzLnBvcCgpO3RoaXMuYmV6aWVyUGF0aDJELnBvcCgpO2lmKDA9PT10aGlzLnBhdGhzLmxlbmd0aCl0aGlzLnJlbW92ZSgpO2Vsc2V7aWYoIXRoaXMuY2FudmFzKXt0aGlzLiN0ZSgpO3RoaXMuI2VlKCl9dGhpcy4jUXQoKX19LG11c3RFeGVjOiEwfSl9I1p0KCl7aWYodGhpcy5pc0VtcHR5KCkpe3RoaXMuI2NlKCk7cmV0dXJufXRoaXMuI25lKCk7Y29uc3R7Y2FudmFzOnQsY3R4OmV9PXRoaXM7ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApO2UuY2xlYXJSZWN0KDAsMCx0LndpZHRoLHQuaGVpZ2h0KTt0aGlzLiNjZSgpO2Zvcihjb25zdCB0IG9mIHRoaXMuYmV6aWVyUGF0aDJEKWUuc3Ryb2tlKHQpfWNvbW1pdCgpe2lmKCF0aGlzLiNHdCl7c3VwZXIuY29tbWl0KCk7dGhpcy5pc0VkaXRpbmc9ITE7dGhpcy5kaXNhYmxlRWRpdE1vZGUoKTt0aGlzLnNldEluRm9yZWdyb3VuZCgpO3RoaXMuI0d0PSEwO3RoaXMuZGl2LmNsYXNzTGlzdC5hZGQoImRpc2FibGVkIik7dGhpcy4jUXQoITApO3RoaXMucGFyZW50LmFkZElua0VkaXRvcklmTmVlZGVkKCEwKTt0aGlzLnBhcmVudC5tb3ZlRWRpdG9ySW5ET00odGhpcyk7dGhpcy5kaXYuZm9jdXMoKX19Zm9jdXNpbih0KXtzdXBlci5mb2N1c2luKHQpO3RoaXMuZW5hYmxlRWRpdE1vZGUoKX1jYW52YXNQb2ludGVyZG93bih0KXtpZigwPT09dC5idXR0b24mJnRoaXMuaXNJbkVkaXRNb2RlKCkmJiF0aGlzLiNHdCl7dGhpcy5zZXRJbkZvcmVncm91bmQoKTsibW91c2UiIT09dC50eXBlJiZ0aGlzLmRpdi5mb2N1cygpO3Quc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIix0aGlzLiNVdCk7dGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHRoaXMuI2p0KTt0aGlzLiNyZSh0Lm9mZnNldFgsdC5vZmZzZXRZKX19Y2FudmFzUG9pbnRlcm1vdmUodCl7dC5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLiNhZSh0Lm9mZnNldFgsdC5vZmZzZXRZKX1jYW52YXNQb2ludGVydXAodCl7aWYoMD09PXQuYnV0dG9uJiZ0aGlzLmlzSW5FZGl0TW9kZSgpJiYwIT09dGhpcy5jdXJyZW50UGF0aC5sZW5ndGgpe3Quc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy4jaGUodCk7dGhpcy5zZXRJbkJhY2tncm91bmQoKX19Y2FudmFzUG9pbnRlcmxlYXZlKHQpe3RoaXMuI2hlKHQpO3RoaXMuc2V0SW5CYWNrZ3JvdW5kKCl9I2hlKHQpe3RoaXMuI29lKHQub2Zmc2V0WCx0Lm9mZnNldFkpO3RoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsdGhpcy4jVXQpO3RoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix0aGlzLiNqdCk7dGhpcy5wYXJlbnQuYWRkVG9Bbm5vdGF0aW9uU3RvcmFnZSh0aGlzKX0jdGUoKXt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTt0aGlzLmNhbnZhcy53aWR0aD10aGlzLmNhbnZhcy5oZWlnaHQ9MDt0aGlzLmNhbnZhcy5jbGFzc05hbWU9Imlua0VkaXRvckNhbnZhcyI7SW5rRWRpdG9yLl9sMTBuUHJvbWlzZS5nZXQoImVkaXRvcl9pbmtfY2FudmFzX2FyaWFfbGFiZWwiKS50aGVuKCh0PT50aGlzLmNhbnZhcz8uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KSkpO3RoaXMuZGl2LmFwcGVuZCh0aGlzLmNhbnZhcyk7dGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKX0jZWUoKXtsZXQgdD1udWxsO3RoaXMuI1Z0PW5ldyBSZXNpemVPYnNlcnZlcigoZT0+e2NvbnN0IHM9ZVswXS5jb250ZW50UmVjdDtpZihzLndpZHRoJiZzLmhlaWdodCl7bnVsbCE9PXQmJmNsZWFyVGltZW91dCh0KTt0PXNldFRpbWVvdXQoKCgpPT57dGhpcy5maXhEaW1zKCk7dD1udWxsfSksMTAwKTt0aGlzLnNldERpbWVuc2lvbnMocy53aWR0aCxzLmhlaWdodCl9fSkpO3RoaXMuI1Z0Lm9ic2VydmUodGhpcy5kaXYpfXJlbmRlcigpe2lmKHRoaXMuZGl2KXJldHVybiB0aGlzLmRpdjtsZXQgdCxlO2lmKHRoaXMud2lkdGgpe3Q9dGhpcy54O2U9dGhpcy55fXN1cGVyLnJlbmRlcigpO0lua0VkaXRvci5fbDEwblByb21pc2UuZ2V0KCJlZGl0b3JfaW5rMl9hcmlhX2xhYmVsIikudGhlbigodD0+dGhpcy5kaXY/LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdCkpKTtjb25zdFtzLGksbixyXT10aGlzLiNpZSgpO3RoaXMuc2V0QXQocyxpLDAsMCk7dGhpcy5zZXREaW1zKG4scik7dGhpcy4jdGUoKTtpZih0aGlzLndpZHRoKXtjb25zdFtzLGldPXRoaXMucGFyZW50LnZpZXdwb3J0QmFzZURpbWVuc2lvbnM7dGhpcy5zZXRBdCh0KnMsZSppLHRoaXMud2lkdGgqcyx0aGlzLmhlaWdodCppKTt0aGlzLiNIdD0hMDt0aGlzLiNzZSgpO3RoaXMuc2V0RGltcyh0aGlzLndpZHRoKnMsdGhpcy5oZWlnaHQqaSk7dGhpcy4jWnQoKTt0aGlzLiNkZSgpO3RoaXMuZGl2LmNsYXNzTGlzdC5hZGQoImRpc2FibGVkIil9ZWxzZXt0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKCJlZGl0aW5nIik7dGhpcy5lbmFibGVFZGl0TW9kZSgpfXRoaXMuI2VlKCk7cmV0dXJuIHRoaXMuZGl2fSNzZSgpe2lmKCF0aGlzLiNIdClyZXR1cm47Y29uc3RbdCxlXT10aGlzLnBhcmVudC52aWV3cG9ydEJhc2VEaW1lbnNpb25zO3RoaXMuY2FudmFzLndpZHRoPU1hdGguY2VpbCh0aGlzLndpZHRoKnQpO3RoaXMuY2FudmFzLmhlaWdodD1NYXRoLmNlaWwodGhpcy5oZWlnaHQqZSk7dGhpcy4jY2UoKX1zZXREaW1lbnNpb25zKHQsZSl7Y29uc3Qgcz1NYXRoLnJvdW5kKHQpLGk9TWF0aC5yb3VuZChlKTtpZih0aGlzLiNYdD09PXMmJnRoaXMuIyR0PT09aSlyZXR1cm47dGhpcy4jWHQ9czt0aGlzLiMkdD1pO3RoaXMuY2FudmFzLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7aWYodGhpcy4jTHQmJk1hdGguYWJzKHRoaXMuI0x0LXQvZSk+LjAxKXtlPU1hdGguY2VpbCh0L3RoaXMuI0x0KTt0aGlzLnNldERpbXModCxlKX1jb25zdFtuLHJdPXRoaXMucGFyZW50LnZpZXdwb3J0QmFzZURpbWVuc2lvbnM7dGhpcy53aWR0aD10L247dGhpcy5oZWlnaHQ9ZS9yO3RoaXMuI0d0JiZ0aGlzLiN1ZSh0LGUpO3RoaXMuI3NlKCk7dGhpcy4jWnQoKTt0aGlzLmNhbnZhcy5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIn0jdWUodCxlKXtjb25zdCBzPXRoaXMuI3BlKCksaT0odC1zKS90aGlzLiNCdCxuPShlLXMpL3RoaXMuI050O3RoaXMuc2NhbGVGYWN0b3I9TWF0aC5taW4oaSxuKX0jY2UoKXtjb25zdCB0PXRoaXMuI3BlKCkvMjt0aGlzLmN0eC5zZXRUcmFuc2Zvcm0odGhpcy5zY2FsZUZhY3RvciwwLDAsdGhpcy5zY2FsZUZhY3Rvcix0aGlzLnRyYW5zbGF0aW9uWCp0aGlzLnNjYWxlRmFjdG9yK3QsdGhpcy50cmFuc2xhdGlvblkqdGhpcy5zY2FsZUZhY3Rvcit0KX1zdGF0aWMjbGUodCl7Y29uc3QgZT1uZXcgUGF0aDJEO2ZvcihsZXQgcz0wLGk9dC5sZW5ndGg7czxpO3MrKyl7Y29uc3RbaSxuLHIsYV09dFtzXTswPT09cyYmZS5tb3ZlVG8oLi4uaSk7ZS5iZXppZXJDdXJ2ZVRvKG5bMF0sblsxXSxyWzBdLHJbMV0sYVswXSxhWzFdKX1yZXR1cm4gZX0jZ2UodCxlLHMsaSl7Y29uc3Qgbj1bXSxyPXRoaXMudGhpY2tuZXNzLzI7bGV0IGEsbztmb3IoY29uc3QgbCBvZiB0aGlzLnBhdGhzKXthPVtdO289W107Zm9yKGxldCBuPTAsYz1sLmxlbmd0aDtuPGM7bisrKXtjb25zdFtjLGgsZCx1XT1sW25dLHA9dCooY1swXStlKStyLGc9aS10KihjWzFdK3MpLXIsbT10KihoWzBdK2UpK3IsZj1pLXQqKGhbMV0rcyktcixiPXQqKGRbMF0rZSkrcixBPWktdCooZFsxXStzKS1yLF89dCoodVswXStlKStyLHY9aS10Kih1WzFdK3MpLXI7aWYoMD09PW4pe2EucHVzaChwLGcpO28ucHVzaChwLGcpfWEucHVzaChtLGYsYixBLF8sdik7dGhpcy4jbWUocCxnLG0sZixiLEEsXyx2LDQsbyl9bi5wdXNoKHtiZXppZXI6YSxwb2ludHM6b30pfXJldHVybiBufSNtZSh0LGUscyxpLG4scixhLG8sbCxjKXtpZih0aGlzLiNmZSh0LGUscyxpLG4scixhLG8pKWMucHVzaChhLG8pO2Vsc2V7Zm9yKGxldCBoPTE7aDxsLTE7aCsrKXtjb25zdCBkPWgvbCx1PTEtZDtsZXQgcD1kKnQrdSpzLGc9ZCplK3UqaSxtPWQqcyt1Km4sZj1kKmkrdSpyO3A9ZCpwK3UqbTtnPWQqZyt1KmY7bT1kKm0rdSooZCpuK3UqYSk7Zj1kKmYrdSooZCpyK3Uqbyk7cD1kKnArdSptO2c9ZCpnK3UqZjtjLnB1c2gocCxnKX1jLnB1c2goYSxvKX19I2ZlKHQsZSxzLGksbixyLGEsbyl7Y29uc3QgbD0oMypzLTIqdC1hKSoqMixjPSgzKmktMiplLW8pKioyLGg9KDMqbi10LTIqYSkqKjIsZD0oMypyLWUtMipvKSoqMjtyZXR1cm4gTWF0aC5tYXgobCxoKStNYXRoLm1heChjLGQpPD0xMH0jYmUoKXtsZXQgdD0xLzAsZT0tMS8wLHM9MS8wLG49LTEvMDtmb3IoY29uc3QgciBvZiB0aGlzLnBhdGhzKWZvcihjb25zdFthLG8sbCxjXW9mIHIpe2NvbnN0IHI9aS5VdGlsLmJlemllckJvdW5kaW5nQm94KC4uLmEsLi4ubywuLi5sLC4uLmMpO3Q9TWF0aC5taW4odCxyWzBdKTtzPU1hdGgubWluKHMsclsxXSk7ZT1NYXRoLm1heChlLHJbMl0pO249TWF0aC5tYXgobixyWzNdKX1yZXR1cm5bdCxzLGUsbl19I3BlKCl7cmV0dXJuIHRoaXMuI0d0P01hdGguY2VpbCh0aGlzLnRoaWNrbmVzcyp0aGlzLnBhcmVudC5zY2FsZUZhY3Rvcik6MH0jUXQodD0hMSl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuO2lmKCF0aGlzLiNHdCl7dGhpcy4jWnQoKTtyZXR1cm59Y29uc3QgZT10aGlzLiNiZSgpLHM9dGhpcy4jcGUoKTt0aGlzLiNCdD1NYXRoLm1heChvLGVbMl0tZVswXSk7dGhpcy4jTnQ9TWF0aC5tYXgobyxlWzNdLWVbMV0pO2NvbnN0IGk9TWF0aC5jZWlsKHMrdGhpcy4jQnQqdGhpcy5zY2FsZUZhY3Rvciksbj1NYXRoLmNlaWwocyt0aGlzLiNOdCp0aGlzLnNjYWxlRmFjdG9yKSxbcixhXT10aGlzLnBhcmVudC52aWV3cG9ydEJhc2VEaW1lbnNpb25zO3RoaXMud2lkdGg9aS9yO3RoaXMuaGVpZ2h0PW4vYTt0aGlzLiNMdD1pL247dGhpcy4jZGUoKTtjb25zdCBsPXRoaXMudHJhbnNsYXRpb25YLGM9dGhpcy50cmFuc2xhdGlvblk7dGhpcy50cmFuc2xhdGlvblg9LWVbMF07dGhpcy50cmFuc2xhdGlvblk9LWVbMV07dGhpcy4jc2UoKTt0aGlzLiNadCgpO3RoaXMuI1h0PWk7dGhpcy4jJHQ9bjt0aGlzLnNldERpbXMoaSxuKTtjb25zdCBoPXQ/cy90aGlzLnNjYWxlRmFjdG9yLzI6MDt0aGlzLnRyYW5zbGF0ZShsLXRoaXMudHJhbnNsYXRpb25YLWgsYy10aGlzLnRyYW5zbGF0aW9uWS1oKX0jZGUoKXtjb25zdHtzdHlsZTp0fT10aGlzLmRpdjtpZih0aGlzLiNMdD49MSl7dC5taW5IZWlnaHQ9IjE2cHgiO3QubWluV2lkdGg9YCR7TWF0aC5yb3VuZCh0aGlzLiNMdCpvKX1weGB9ZWxzZXt0Lm1pbldpZHRoPSIxNnB4Ijt0Lm1pbkhlaWdodD1gJHtNYXRoLnJvdW5kKG8vdGhpcy4jTHQpfXB4YH19c3RhdGljIGRlc2VyaWFsaXplKHQsZSl7Y29uc3Qgcz1zdXBlci5kZXNlcmlhbGl6ZSh0LGUpO3MudGhpY2tuZXNzPXQudGhpY2tuZXNzO3MuY29sb3I9aS5VdGlsLm1ha2VIZXhDb2xvciguLi50LmNvbG9yKTtzLm9wYWNpdHk9dC5vcGFjaXR5O2NvbnN0W24scl09ZS5wYWdlRGltZW5zaW9ucyxhPXMud2lkdGgqbixsPXMuaGVpZ2h0KnIsYz1lLnNjYWxlRmFjdG9yLGg9dC50aGlja25lc3MvMjtzLiNMdD1hL2w7cy4jR3Q9ITA7cy4jWHQ9TWF0aC5yb3VuZChhKTtzLiMkdD1NYXRoLnJvdW5kKGwpO2Zvcihjb25zdHtiZXppZXI6ZX1vZiB0LnBhdGhzKXtjb25zdCB0PVtdO3MucGF0aHMucHVzaCh0KTtsZXQgaT1jKihlWzBdLWgpLG49YyoobC1lWzFdLWgpO2ZvcihsZXQgcz0yLHI9ZS5sZW5ndGg7czxyO3MrPTYpe2NvbnN0IHI9YyooZVtzXS1oKSxhPWMqKGwtZVtzKzFdLWgpLG89YyooZVtzKzJdLWgpLGQ9YyoobC1lW3MrM10taCksdT1jKihlW3MrNF0taCkscD1jKihsLWVbcys1XS1oKTt0LnB1c2goW1tpLG5dLFtyLGFdLFtvLGRdLFt1LHBdXSk7aT11O249cH1jb25zdCByPXRoaXMuI2xlKHQpO3MuYmV6aWVyUGF0aDJELnB1c2gocil9Y29uc3QgZD1zLiNiZSgpO3MuI0J0PU1hdGgubWF4KG8sZFsyXS1kWzBdKTtzLiNOdD1NYXRoLm1heChvLGRbM10tZFsxXSk7cy4jdWUoYSxsKTtyZXR1cm4gc31zZXJpYWxpemUoKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMuZ2V0UmVjdCgwLDApLGU9dGhpcy5yb3RhdGlvbiUxODA9PTA/dFszXS10WzFdOnRbMl0tdFswXSxzPW4uQW5ub3RhdGlvbkVkaXRvci5fY29sb3JNYW5hZ2VyLmNvbnZlcnQodGhpcy5jdHguc3Ryb2tlU3R5bGUpO3JldHVybnthbm5vdGF0aW9uVHlwZTppLkFubm90YXRpb25FZGl0b3JUeXBlLklOSyxjb2xvcjpzLHRoaWNrbmVzczp0aGlzLnRoaWNrbmVzcyxvcGFjaXR5OnRoaXMub3BhY2l0eSxwYXRoczp0aGlzLiNnZSh0aGlzLnNjYWxlRmFjdG9yL3RoaXMucGFyZW50LnNjYWxlRmFjdG9yLHRoaXMudHJhbnNsYXRpb25YLHRoaXMudHJhbnNsYXRpb25ZLGUpLHBhZ2VJbmRleDp0aGlzLnBhcmVudC5wYWdlSW5kZXgscmVjdDp0LHJvdGF0aW9uOnRoaXMucm90YXRpb259fX1lLklua0VkaXRvcj1JbmtFZGl0b3J9LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5maXRDdXJ2ZT12b2lkIDA7Y29uc3QgaT1zKDI1KTtlLmZpdEN1cnZlPWl9LHQ9PntmdW5jdGlvbiBmaXRDdWJpYyh0LGUscyxpLG4pe3ZhciByLGEsbyxsLGMsaCxkLHUscCxnLG0sZixiO2lmKDI9PT10Lmxlbmd0aCl7Zj1tYXRocy52ZWN0b3JMZW4obWF0aHMuc3VidHJhY3QodFswXSx0WzFdKSkvMztyZXR1cm5bcj1bdFswXSxtYXRocy5hZGRBcnJheXModFswXSxtYXRocy5tdWxJdGVtcyhlLGYpKSxtYXRocy5hZGRBcnJheXModFsxXSxtYXRocy5tdWxJdGVtcyhzLGYpKSx0WzFdXV19YT1mdW5jdGlvbiBjaG9yZExlbmd0aFBhcmFtZXRlcml6ZSh0KXt2YXIgZSxzLGksbj1bXTt0LmZvckVhY2goKCh0LHIpPT57ZT1yP3MrbWF0aHMudmVjdG9yTGVuKG1hdGhzLnN1YnRyYWN0KHQsaSkpOjA7bi5wdXNoKGUpO3M9ZTtpPXR9KSk7cmV0dXJuIG49bi5tYXAoKHQ9PnQvcykpfSh0KTtbcixsLGhdPWdlbmVyYXRlQW5kUmVwb3J0KHQsYSxhLGUscyxuKTtpZigwPT09bHx8bDxpKXJldHVybltyXTtpZihsPGkqaSl7bz1hO2M9bDtkPWg7Zm9yKGI9MDtiPDIwO2IrKyl7bz1yZXBhcmFtZXRlcml6ZShyLHQsbyk7W3IsbCxoXT1nZW5lcmF0ZUFuZFJlcG9ydCh0LGEsbyxlLHMsbik7aWYobDxpKXJldHVybltyXTtpZihoPT09ZCl7bGV0IHQ9bC9jO2lmKHQ+Ljk5OTkmJnQ8MS4wMDAxKWJyZWFrfWM9bDtkPWh9fW09W107aWYoKHU9bWF0aHMuc3VidHJhY3QodFtoLTFdLHRbaCsxXSkpLmV2ZXJ5KCh0PT4wPT09dCkpKXt1PW1hdGhzLnN1YnRyYWN0KHRbaC0xXSx0W2hdKTtbdVswXSx1WzFdXT1bLXVbMV0sdVswXV19cD1tYXRocy5ub3JtYWxpemUodSk7Zz1tYXRocy5tdWxJdGVtcyhwLC0xKTtyZXR1cm4gbT0obT1tLmNvbmNhdChmaXRDdWJpYyh0LnNsaWNlKDAsaCsxKSxlLHAsaSxuKSkpLmNvbmNhdChmaXRDdWJpYyh0LnNsaWNlKGgpLGcscyxpLG4pKX1mdW5jdGlvbiBnZW5lcmF0ZUFuZFJlcG9ydCh0LGUscyxpLG4scil7dmFyIGEsbyxsO2E9ZnVuY3Rpb24gZ2VuZXJhdGVCZXppZXIodCxlLHMsaSl7dmFyIG4scixhLG8sbCxjLGgsZCx1LHAsZyxtLGYsYixBLF8sdix5PXRbMF0sUz10W3QubGVuZ3RoLTFdO249W3ksbnVsbCxudWxsLFNdO3I9bWF0aHMuemVyb3NfWHgyeDIoZS5sZW5ndGgpO2ZvcihmPTAsYj1lLmxlbmd0aDtmPGI7ZisrKXt2PTEtKF89ZVtmXSk7KGE9cltmXSlbMF09bWF0aHMubXVsSXRlbXMocywzKl8qKHYqdikpO2FbMV09bWF0aHMubXVsSXRlbXMoaSwzKnYqKF8qXykpfW89W1swLDBdLFswLDBdXTtsPVswLDBdO2ZvcihmPTAsYj10Lmxlbmd0aDtmPGI7ZisrKXtfPWVbZl07YT1yW2ZdO29bMF1bMF0rPW1hdGhzLmRvdChhWzBdLGFbMF0pO29bMF1bMV0rPW1hdGhzLmRvdChhWzBdLGFbMV0pO29bMV1bMF0rPW1hdGhzLmRvdChhWzBdLGFbMV0pO29bMV1bMV0rPW1hdGhzLmRvdChhWzFdLGFbMV0pO0E9bWF0aHMuc3VidHJhY3QodFtmXSxiZXppZXIucShbeSx5LFMsU10sXykpO2xbMF0rPW1hdGhzLmRvdChhWzBdLEEpO2xbMV0rPW1hdGhzLmRvdChhWzFdLEEpfWM9b1swXVswXSpvWzFdWzFdLW9bMV1bMF0qb1swXVsxXTtoPW9bMF1bMF0qbFsxXS1vWzFdWzBdKmxbMF07ZD1sWzBdKm9bMV1bMV0tbFsxXSpvWzBdWzFdO3U9MD09PWM/MDpkL2M7cD0wPT09Yz8wOmgvYzttPW1hdGhzLnZlY3RvckxlbihtYXRocy5zdWJ0cmFjdCh5LFMpKTtpZih1PChnPTFlLTYqbSl8fHA8Zyl7blsxXT1tYXRocy5hZGRBcnJheXMoeSxtYXRocy5tdWxJdGVtcyhzLG0vMykpO25bMl09bWF0aHMuYWRkQXJyYXlzKFMsbWF0aHMubXVsSXRlbXMoaSxtLzMpKX1lbHNle25bMV09bWF0aHMuYWRkQXJyYXlzKHksbWF0aHMubXVsSXRlbXMocyx1KSk7blsyXT1tYXRocy5hZGRBcnJheXMoUyxtYXRocy5tdWxJdGVtcyhpLHApKX1yZXR1cm4gbn0odCxzLGksbik7W28sbF09ZnVuY3Rpb24gY29tcHV0ZU1heEVycm9yKHQsZSxzKXt2YXIgaSxuLHIsYSxvLGwsYyxoO249MDtyPU1hdGguZmxvb3IodC5sZW5ndGgvMik7Y29uc3QgZD1tYXBUdG9SZWxhdGl2ZURpc3RhbmNlcyhlLDEwKTtmb3Iobz0wLGw9dC5sZW5ndGg7bzxsO28rKyl7Yz10W29dO2g9ZmluZF90KGUsc1tvXSxkLDEwKTtpZigoaT0oYT1tYXRocy5zdWJ0cmFjdChiZXppZXIucShlLGgpLGMpKVswXSphWzBdK2FbMV0qYVsxXSk+bil7bj1pO3I9b319cmV0dXJuW24scl19KHQsYSxlKTtyJiZyKHtiZXo6YSxwb2ludHM6dCxwYXJhbXM6ZSxtYXhFcnI6byxtYXhQb2ludDpsfSk7cmV0dXJuW2EsbyxsXX1mdW5jdGlvbiByZXBhcmFtZXRlcml6ZSh0LGUscyl7cmV0dXJuIHMubWFwKCgocyxpKT0+bmV3dG9uUmFwaHNvblJvb3RGaW5kKHQsZVtpXSxzKSkpfWZ1bmN0aW9uIG5ld3RvblJhcGhzb25Sb290RmluZCh0LGUscyl7dmFyIGk9bWF0aHMuc3VidHJhY3QoYmV6aWVyLnEodCxzKSxlKSxuPWJlemllci5xcHJpbWUodCxzKSxyPW1hdGhzLm11bE1hdHJpeChpLG4pLGE9bWF0aHMuc3VtKG1hdGhzLnNxdWFyZUl0ZW1zKG4pKSsyKm1hdGhzLm11bE1hdHJpeChpLGJlemllci5xcHJpbWVwcmltZSh0LHMpKTtyZXR1cm4gMD09PWE/czpzLXIvYX12YXIgbWFwVHRvUmVsYXRpdmVEaXN0YW5jZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHMsaT1bMF0sbj10WzBdLHI9MCxhPTE7YTw9ZTthKyspe3M9YmV6aWVyLnEodCxhL2UpO3IrPW1hdGhzLnZlY3RvckxlbihtYXRocy5zdWJ0cmFjdChzLG4pKTtpLnB1c2gocik7bj1zfXJldHVybiBpPWkubWFwKCh0PT50L3IpKX07ZnVuY3Rpb24gZmluZF90KHQsZSxzLGkpe2lmKGU8MClyZXR1cm4gMDtpZihlPjEpcmV0dXJuIDE7Zm9yKHZhciBuLHIsYSxvLGw9MTtsPD1pO2wrKylpZihlPD1zW2xdKXthPShsLTEpL2k7cj1sL2k7bz0oZS0obj1zW2wtMV0pKS8oc1tsXS1uKSooci1hKSthO2JyZWFrfXJldHVybiBvfWZ1bmN0aW9uIGNyZWF0ZVRhbmdlbnQodCxlKXtyZXR1cm4gbWF0aHMubm9ybWFsaXplKG1hdGhzLnN1YnRyYWN0KHQsZSkpfWNsYXNzIG1hdGhze3N0YXRpYyB6ZXJvc19YeDJ4Mih0KXtmb3IodmFyIGU9W107dC0tOyllLnB1c2goWzAsMF0pO3JldHVybiBlfXN0YXRpYyBtdWxJdGVtcyh0LGUpe3JldHVybiB0Lm1hcCgodD0+dCplKSl9c3RhdGljIG11bE1hdHJpeCh0LGUpe3JldHVybiB0LnJlZHVjZSgoKHQscyxpKT0+dCtzKmVbaV0pLDApfXN0YXRpYyBzdWJ0cmFjdCh0LGUpe3JldHVybiB0Lm1hcCgoKHQscyk9PnQtZVtzXSkpfXN0YXRpYyBhZGRBcnJheXModCxlKXtyZXR1cm4gdC5tYXAoKCh0LHMpPT50K2Vbc10pKX1zdGF0aWMgYWRkSXRlbXModCxlKXtyZXR1cm4gdC5tYXAoKHQ9PnQrZSkpfXN0YXRpYyBzdW0odCl7cmV0dXJuIHQucmVkdWNlKCgodCxlKT0+dCtlKSl9c3RhdGljIGRvdCh0LGUpe3JldHVybiBtYXRocy5tdWxNYXRyaXgodCxlKX1zdGF0aWMgdmVjdG9yTGVuKHQpe3JldHVybiBNYXRoLmh5cG90KC4uLnQpfXN0YXRpYyBkaXZJdGVtcyh0LGUpe3JldHVybiB0Lm1hcCgodD0+dC9lKSl9c3RhdGljIHNxdWFyZUl0ZW1zKHQpe3JldHVybiB0Lm1hcCgodD0+dCp0KSl9c3RhdGljIG5vcm1hbGl6ZSh0KXtyZXR1cm4gdGhpcy5kaXZJdGVtcyh0LHRoaXMudmVjdG9yTGVuKHQpKX19Y2xhc3MgYmV6aWVye3N0YXRpYyBxKHQsZSl7dmFyIHM9MS1lLGk9bWF0aHMubXVsSXRlbXModFswXSxzKnMqcyksbj1tYXRocy5tdWxJdGVtcyh0WzFdLDMqcypzKmUpLHI9bWF0aHMubXVsSXRlbXModFsyXSwzKnMqZSplKSxhPW1hdGhzLm11bEl0ZW1zKHRbM10sZSplKmUpO3JldHVybiBtYXRocy5hZGRBcnJheXMobWF0aHMuYWRkQXJyYXlzKGksbiksbWF0aHMuYWRkQXJyYXlzKHIsYSkpfXN0YXRpYyBxcHJpbWUodCxlKXt2YXIgcz0xLWUsaT1tYXRocy5tdWxJdGVtcyhtYXRocy5zdWJ0cmFjdCh0WzFdLHRbMF0pLDMqcypzKSxuPW1hdGhzLm11bEl0ZW1zKG1hdGhzLnN1YnRyYWN0KHRbMl0sdFsxXSksNipzKmUpLHI9bWF0aHMubXVsSXRlbXMobWF0aHMuc3VidHJhY3QodFszXSx0WzJdKSwzKmUqZSk7cmV0dXJuIG1hdGhzLmFkZEFycmF5cyhtYXRocy5hZGRBcnJheXMoaSxuKSxyKX1zdGF0aWMgcXByaW1lcHJpbWUodCxlKXtyZXR1cm4gbWF0aHMuYWRkQXJyYXlzKG1hdGhzLm11bEl0ZW1zKG1hdGhzLmFkZEFycmF5cyhtYXRocy5zdWJ0cmFjdCh0WzJdLG1hdGhzLm11bEl0ZW1zKHRbMV0sMikpLHRbMF0pLDYqKDEtZSkpLG1hdGhzLm11bEl0ZW1zKG1hdGhzLmFkZEFycmF5cyhtYXRocy5zdWJ0cmFjdCh0WzNdLG1hdGhzLm11bEl0ZW1zKHRbMl0sMikpLHRbMV0pLDYqZSkpfX10LmV4cG9ydHM9ZnVuY3Rpb24gZml0Q3VydmUodCxlLHMpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSIpO3QuZm9yRWFjaCgoZT0+e2lmKCFBcnJheS5pc0FycmF5KGUpfHxlLnNvbWUoKHQ9PiJudW1iZXIiIT10eXBlb2YgdCkpfHxlLmxlbmd0aCE9PXRbMF0ubGVuZ3RoKXRocm93IEVycm9yKCJFYWNoIHBvaW50IHNob3VsZCBiZSBhbiBhcnJheSBvZiBudW1iZXJzLiBFYWNoIHBvaW50IHNob3VsZCBoYXZlIHRoZSBzYW1lIGFtb3VudCBvZiBudW1iZXJzLiIpfSkpO2lmKCh0PXQuZmlsdGVyKCgoZSxzKT0+MD09PXN8fCFlLmV2ZXJ5KCgoZSxpKT0+ZT09PXRbcy0xXVtpXSkpKSkpLmxlbmd0aDwyKXJldHVybltdO2NvbnN0IGk9dC5sZW5ndGgsbj1jcmVhdGVUYW5nZW50KHRbMV0sdFswXSkscj1jcmVhdGVUYW5nZW50KHRbaS0yXSx0W2ktMV0pO3JldHVybiBmaXRDdWJpYyh0LG4scixlLHMpfTt0LmV4cG9ydHMuZml0Q3ViaWM9Zml0Q3ViaWM7dC5leHBvcnRzLmNyZWF0ZVRhbmdlbnQ9Y3JlYXRlVGFuZ2VudH0sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLkFubm90YXRpb25MYXllcj12b2lkIDA7dmFyIGk9cygxKSxuPXMoNikscj1zKDMpLGE9cygyNyksbz1zKDI4KTtjb25zdCBsPTFlMyxjPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIGdldFJlY3REaW1zKHQpe3JldHVybnt3aWR0aDp0WzJdLXRbMF0saGVpZ2h0OnRbM10tdFsxXX19Y2xhc3MgQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5e3N0YXRpYyBjcmVhdGUodCl7c3dpdGNoKHQuZGF0YS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBpLkFubm90YXRpb25UeXBlLkxJTks6cmV0dXJuIG5ldyBMaW5rQW5ub3RhdGlvbkVsZW1lbnQodCk7Y2FzZSBpLkFubm90YXRpb25UeXBlLlRFWFQ6cmV0dXJuIG5ldyBUZXh0QW5ub3RhdGlvbkVsZW1lbnQodCk7Y2FzZSBpLkFubm90YXRpb25UeXBlLldJREdFVDpzd2l0Y2godC5kYXRhLmZpZWxkVHlwZSl7Y2FzZSJUeCI6cmV0dXJuIG5ldyBUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQodCk7Y2FzZSJCdG4iOnJldHVybiB0LmRhdGEucmFkaW9CdXR0b24/bmV3IFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQodCk6dC5kYXRhLmNoZWNrQm94P25ldyBDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50KHQpOm5ldyBQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQodCk7Y2FzZSJDaCI6cmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCh0KX1yZXR1cm4gbmV3IFdpZGdldEFubm90YXRpb25FbGVtZW50KHQpO2Nhc2UgaS5Bbm5vdGF0aW9uVHlwZS5QT1BVUDpyZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQodCk7Y2FzZSBpLkFubm90YXRpb25UeXBlLkZSRUVURVhUOnJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudCh0KTtjYXNlIGkuQW5ub3RhdGlvblR5cGUuTElORTpyZXR1cm4gbmV3IExpbmVBbm5vdGF0aW9uRWxlbWVudCh0KTtjYXNlIGkuQW5ub3RhdGlvblR5cGUuU1FVQVJFOnJldHVybiBuZXcgU3F1YXJlQW5ub3RhdGlvbkVsZW1lbnQodCk7Y2FzZSBpLkFubm90YXRpb25UeXBlLkNJUkNMRTpyZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb25FbGVtZW50KHQpO2Nhc2UgaS5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTpyZXR1cm4gbmV3IFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQodCk7Y2FzZSBpLkFubm90YXRpb25UeXBlLkNBUkVUOnJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uRWxlbWVudCh0KTtjYXNlIGkuQW5ub3RhdGlvblR5cGUuSU5LOnJldHVybiBuZXcgSW5rQW5ub3RhdGlvbkVsZW1lbnQodCk7Y2FzZSBpLkFubm90YXRpb25UeXBlLlBPTFlHT046cmV0dXJuIG5ldyBQb2x5Z29uQW5ub3RhdGlvbkVsZW1lbnQodCk7Y2FzZSBpLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVDpyZXR1cm4gbmV3IEhpZ2hsaWdodEFubm90YXRpb25FbGVtZW50KHQpO2Nhc2UgaS5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU6cmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uRWxlbWVudCh0KTtjYXNlIGkuQW5ub3RhdGlvblR5cGUuU1FVSUdHTFk6cmV0dXJuIG5ldyBTcXVpZ2dseUFubm90YXRpb25FbGVtZW50KHQpO2Nhc2UgaS5Bbm5vdGF0aW9uVHlwZS5TVFJJS0VPVVQ6cmV0dXJuIG5ldyBTdHJpa2VPdXRBbm5vdGF0aW9uRWxlbWVudCh0KTtjYXNlIGkuQW5ub3RhdGlvblR5cGUuU1RBTVA6cmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb25FbGVtZW50KHQpO2Nhc2UgaS5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDpyZXR1cm4gbmV3IEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQodCk7ZGVmYXVsdDpyZXR1cm4gbmV3IEFubm90YXRpb25FbGVtZW50KHQpfX19Y2xhc3MgQW5ub3RhdGlvbkVsZW1lbnR7Y29uc3RydWN0b3IodCx7aXNSZW5kZXJhYmxlOmU9ITEsaWdub3JlQm9yZGVyOnM9ITEsY3JlYXRlUXVhZHJpbGF0ZXJhbHM6aT0hMX09e30pe3RoaXMuaXNSZW5kZXJhYmxlPWU7dGhpcy5kYXRhPXQuZGF0YTt0aGlzLmxheWVyPXQubGF5ZXI7dGhpcy5wYWdlPXQucGFnZTt0aGlzLnZpZXdwb3J0PXQudmlld3BvcnQ7dGhpcy5saW5rU2VydmljZT10LmxpbmtTZXJ2aWNlO3RoaXMuZG93bmxvYWRNYW5hZ2VyPXQuZG93bmxvYWRNYW5hZ2VyO3RoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoPXQuaW1hZ2VSZXNvdXJjZXNQYXRoO3RoaXMucmVuZGVyRm9ybXM9dC5yZW5kZXJGb3Jtczt0aGlzLnN2Z0ZhY3Rvcnk9dC5zdmdGYWN0b3J5O3RoaXMuYW5ub3RhdGlvblN0b3JhZ2U9dC5hbm5vdGF0aW9uU3RvcmFnZTt0aGlzLmVuYWJsZVNjcmlwdGluZz10LmVuYWJsZVNjcmlwdGluZzt0aGlzLmhhc0pTQWN0aW9ucz10Lmhhc0pTQWN0aW9uczt0aGlzLl9maWVsZE9iamVjdHM9dC5maWVsZE9iamVjdHM7dGhpcy5fbW91c2VTdGF0ZT10Lm1vdXNlU3RhdGU7ZSYmKHRoaXMuY29udGFpbmVyPXRoaXMuX2NyZWF0ZUNvbnRhaW5lcihzKSk7aSYmKHRoaXMucXVhZHJpbGF0ZXJhbHM9dGhpcy5fY3JlYXRlUXVhZHJpbGF0ZXJhbHMocykpfV9jcmVhdGVDb250YWluZXIodD0hMSl7Y29uc3QgZT10aGlzLmRhdGEscz10aGlzLnBhZ2Usbj10aGlzLnZpZXdwb3J0LHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIpLHt3aWR0aDphLGhlaWdodDpvfT1nZXRSZWN0RGltcyhlLnJlY3QpLFtsLGMsaCxkXT1uLnZpZXdCb3gsdT1oLWwscD1kLWM7ci5zZXRBdHRyaWJ1dGUoImRhdGEtYW5ub3RhdGlvbi1pZCIsZS5pZCk7Y29uc3QgZz1pLlV0aWwubm9ybWFsaXplUmVjdChbZS5yZWN0WzBdLHMudmlld1szXS1lLnJlY3RbMV0rcy52aWV3WzFdLGUucmVjdFsyXSxzLnZpZXdbM10tZS5yZWN0WzNdK3Mudmlld1sxXV0pO2lmKCF0JiZlLmJvcmRlclN0eWxlLndpZHRoPjApe3Iuc3R5bGUuYm9yZGVyV2lkdGg9YCR7ZS5ib3JkZXJTdHlsZS53aWR0aH1weGA7Y29uc3QgdD1lLmJvcmRlclN0eWxlLmhvcml6b250YWxDb3JuZXJSYWRpdXMscz1lLmJvcmRlclN0eWxlLnZlcnRpY2FsQ29ybmVyUmFkaXVzO2lmKHQ+MHx8cz4wKXtjb25zdCBlPWBjYWxjKCR7dH1weCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIC8gY2FsYygke3N9cHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWA7ci5zdHlsZS5ib3JkZXJSYWRpdXM9ZX1lbHNlIGlmKHRoaXMgaW5zdGFuY2VvZiBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KXtjb25zdCB0PWBjYWxjKCR7YX1weCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIC8gY2FsYygke299cHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWA7ci5zdHlsZS5ib3JkZXJSYWRpdXM9dH1zd2l0Y2goZS5ib3JkZXJTdHlsZS5zdHlsZSl7Y2FzZSBpLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ6ci5zdHlsZS5ib3JkZXJTdHlsZT0ic29saWQiO2JyZWFrO2Nhc2UgaS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkRBU0hFRDpyLnN0eWxlLmJvcmRlclN0eWxlPSJkYXNoZWQiO2JyZWFrO2Nhc2UgaS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ6KDAsaS53YXJuKSgiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGJldmVsZWQiKTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDooMCxpLndhcm4pKCJVbmltcGxlbWVudGVkIGJvcmRlciBzdHlsZTogaW5zZXQiKTticmVhaztjYXNlIGkuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkU6ci5zdHlsZS5ib3JkZXJCb3R0b21TdHlsZT0ic29saWQifWNvbnN0IG49ZS5ib3JkZXJDb2xvcnx8bnVsbDtuP3Iuc3R5bGUuYm9yZGVyQ29sb3I9aS5VdGlsLm1ha2VIZXhDb2xvcigwfG5bMF0sMHxuWzFdLDB8blsyXSk6ci5zdHlsZS5ib3JkZXJXaWR0aD0wfXIuc3R5bGUubGVmdD0xMDAqKGdbMF0tbCkvdSsiJSI7ci5zdHlsZS50b3A9MTAwKihnWzFdLWMpL3ArIiUiO2NvbnN0e3JvdGF0aW9uOm19PWU7aWYoZS5oYXNPd25DYW52YXN8fDA9PT1tKXtyLnN0eWxlLndpZHRoPTEwMCphL3UrIiUiO3Iuc3R5bGUuaGVpZ2h0PTEwMCpvL3ArIiUifWVsc2UgdGhpcy5zZXRSb3RhdGlvbihtLHIpO3JldHVybiByfXNldFJvdGF0aW9uKHQsZT10aGlzLmNvbnRhaW5lcil7Y29uc3RbcyxpLG4scl09dGhpcy52aWV3cG9ydC52aWV3Qm94LGE9bi1zLG89ci1pLHt3aWR0aDpsLGhlaWdodDpjfT1nZXRSZWN0RGltcyh0aGlzLmRhdGEucmVjdCk7bGV0IGgsZDtpZih0JTE4MD09MCl7aD0xMDAqbC9hO2Q9MTAwKmMvb31lbHNle2g9MTAwKmMvYTtkPTEwMCpsL299ZS5zdHlsZS53aWR0aD1gJHtofSVgO2Uuc3R5bGUuaGVpZ2h0PWAke2R9JWA7ZS5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsKDM2MC10KSUzNjApfWdldCBfY29tbW9uQWN0aW9ucygpe2NvbnN0IHNldENvbG9yPSh0LGUscyk9Pntjb25zdCBpPXMuZGV0YWlsW3RdO3MudGFyZ2V0LnN0eWxlW2VdPWEuQ29sb3JDb252ZXJ0ZXJzW2Ake2lbMF19X0hUTUxgXShpLnNsaWNlKDEpKX07cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIl9jb21tb25BY3Rpb25zIix7ZGlzcGxheTp0PT57Y29uc3QgZT10LmRldGFpbC5kaXNwbGF5JTI9PTE7dGhpcy5jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT1lPyJoaWRkZW4iOiJ2aXNpYmxlIjt0aGlzLmFubm90YXRpb25TdG9yYWdlLnNldFZhbHVlKHRoaXMuZGF0YS5pZCx7aGlkZGVuOmUscHJpbnQ6MD09PXQuZGV0YWlsLmRpc3BsYXl8fDM9PT10LmRldGFpbC5kaXNwbGF5fSl9LHByaW50OnQ9Pnt0aGlzLmFubm90YXRpb25TdG9yYWdlLnNldFZhbHVlKHRoaXMuZGF0YS5pZCx7cHJpbnQ6dC5kZXRhaWwucHJpbnR9KX0saGlkZGVuOnQ9Pnt0aGlzLmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PXQuZGV0YWlsLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSI7dGhpcy5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0aGlzLmRhdGEuaWQse2hpZGRlbjp0LmRldGFpbC5oaWRkZW59KX0sZm9jdXM6dD0+e3NldFRpbWVvdXQoKCgpPT50LnRhcmdldC5mb2N1cyh7cHJldmVudFNjcm9sbDohMX0pKSwwKX0sdXNlck5hbWU6dD0+e3QudGFyZ2V0LnRpdGxlPXQuZGV0YWlsLnVzZXJOYW1lfSxyZWFkb25seTp0PT57dC5kZXRhaWwucmVhZG9ubHk/dC50YXJnZXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpOnQudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgicmVhZG9ubHkiKX0scmVxdWlyZWQ6dD0+e3RoaXMuX3NldFJlcXVpcmVkKHQudGFyZ2V0LHQuZGV0YWlsLnJlcXVpcmVkKX0sYmdDb2xvcjp0PT57c2V0Q29sb3IoImJnQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLHQpfSxmaWxsQ29sb3I6dD0+e3NldENvbG9yKCJmaWxsQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLHQpfSxmZ0NvbG9yOnQ9PntzZXRDb2xvcigiZmdDb2xvciIsImNvbG9yIix0KX0sdGV4dENvbG9yOnQ9PntzZXRDb2xvcigidGV4dENvbG9yIiwiY29sb3IiLHQpfSxib3JkZXJDb2xvcjp0PT57c2V0Q29sb3IoImJvcmRlckNvbG9yIiwiYm9yZGVyQ29sb3IiLHQpfSxzdHJva2VDb2xvcjp0PT57c2V0Q29sb3IoInN0cm9rZUNvbG9yIiwiYm9yZGVyQ29sb3IiLHQpfSxyb3RhdGlvbjp0PT57Y29uc3QgZT10LmRldGFpbC5yb3RhdGlvbjt0aGlzLnNldFJvdGF0aW9uKGUpO3RoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodGhpcy5kYXRhLmlkLHtyb3RhdGlvbjplfSl9fSl9X2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveCh0LGUpe2NvbnN0IHM9dGhpcy5fY29tbW9uQWN0aW9ucztmb3IoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhlLmRldGFpbCkpeyh0W2ldfHxzW2ldKT8uKGUpfX1fc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlModCl7aWYoIXRoaXMuZW5hYmxlU2NyaXB0aW5nKXJldHVybjtjb25zdCBlPXRoaXMuYW5ub3RhdGlvblN0b3JhZ2UuZ2V0UmF3VmFsdWUodGhpcy5kYXRhLmlkKTtpZighZSlyZXR1cm47Y29uc3Qgcz10aGlzLl9jb21tb25BY3Rpb25zO2Zvcihjb25zdFtpLG5db2YgT2JqZWN0LmVudHJpZXMoZSkpe2NvbnN0IHI9c1tpXTtpZihyKXtyKHtkZXRhaWw6e1tpXTpufSx0YXJnZXQ6dH0pO2RlbGV0ZSBlW2ldfX19X2NyZWF0ZVF1YWRyaWxhdGVyYWxzKHQ9ITEpe2lmKCF0aGlzLmRhdGEucXVhZFBvaW50cylyZXR1cm4gbnVsbDtjb25zdCBlPVtdLHM9dGhpcy5kYXRhLnJlY3Q7Zm9yKGNvbnN0IHMgb2YgdGhpcy5kYXRhLnF1YWRQb2ludHMpe3RoaXMuZGF0YS5yZWN0PVtzWzJdLngsc1syXS55LHNbMV0ueCxzWzFdLnldO2UucHVzaCh0aGlzLl9jcmVhdGVDb250YWluZXIodCkpfXRoaXMuZGF0YS5yZWN0PXM7cmV0dXJuIGV9X2NyZWF0ZVBvcHVwKHQsZSl7bGV0IHM9dGhpcy5jb250YWluZXI7aWYodGhpcy5xdWFkcmlsYXRlcmFscyl7dD10fHx0aGlzLnF1YWRyaWxhdGVyYWxzO3M9dGhpcy5xdWFkcmlsYXRlcmFsc1swXX1pZighdCl7KHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmNsYXNzTmFtZT0icG9wdXBUcmlnZ2VyQXJlYSI7cy5hcHBlbmQodCl9Y29uc3QgaT1uZXcgUG9wdXBFbGVtZW50KHtjb250YWluZXI6cyx0cmlnZ2VyOnQsY29sb3I6ZS5jb2xvcix0aXRsZU9iajplLnRpdGxlT2JqLG1vZGlmaWNhdGlvbkRhdGU6ZS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOmUuY29udGVudHNPYmoscmljaFRleHQ6ZS5yaWNoVGV4dCxoaWRlV3JhcHBlcjohMH0pLnJlbmRlcigpO2kuc3R5bGUubGVmdD0iMTAwJSI7cy5hcHBlbmQoaSl9X3JlbmRlclF1YWRyaWxhdGVyYWxzKHQpe2Zvcihjb25zdCBlIG9mIHRoaXMucXVhZHJpbGF0ZXJhbHMpZS5jbGFzc05hbWU9dDtyZXR1cm4gdGhpcy5xdWFkcmlsYXRlcmFsc31yZW5kZXIoKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBBbm5vdGF0aW9uRWxlbWVudC5yZW5kZXJgIGNhbGxlZCIpfV9nZXRFbGVtZW50c0J5TmFtZSh0LGU9bnVsbCl7Y29uc3Qgcz1bXTtpZih0aGlzLl9maWVsZE9iamVjdHMpe2NvbnN0IG49dGhpcy5fZmllbGRPYmplY3RzW3RdO2lmKG4pZm9yKGNvbnN0e3BhZ2U6dCxpZDpyLGV4cG9ydFZhbHVlczphfW9mIG4pe2lmKC0xPT09dCljb250aW51ZTtpZihyPT09ZSljb250aW51ZTtjb25zdCBuPSJzdHJpbmciPT10eXBlb2YgYT9hOm51bGwsbz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1lbGVtZW50LWlkPSIke3J9Il1gKTshb3x8Yy5oYXMobyk/cy5wdXNoKHtpZDpyLGV4cG9ydFZhbHVlOm4sZG9tRWxlbWVudDpvfSk6KDAsaS53YXJuKShgX2dldEVsZW1lbnRzQnlOYW1lIC0gZWxlbWVudCBub3QgYWxsb3dlZDogJHtyfWApfXJldHVybiBzfWZvcihjb25zdCBpIG9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHQpKXtjb25zdHtleHBvcnRWYWx1ZTp0fT1pLG49aS5nZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIpO24hPT1lJiYoYy5oYXMoaSkmJnMucHVzaCh7aWQ6bixleHBvcnRWYWx1ZTp0LGRvbUVsZW1lbnQ6aX0pKX1yZXR1cm4gc31zdGF0aWMgZ2V0IHBsYXRmb3JtKCl7Y29uc3QgdD0idW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvcj9uYXZpZ2F0b3IucGxhdGZvcm06IiI7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInBsYXRmb3JtIix7aXNXaW46dC5pbmNsdWRlcygiV2luIiksaXNNYWM6dC5pbmNsdWRlcygiTWFjIil9KX19Y2xhc3MgTGlua0Fubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnR7Y29uc3RydWN0b3IodCxlPW51bGwpe3N1cGVyKHQse2lzUmVuZGVyYWJsZTohMCxpZ25vcmVCb3JkZXI6ISFlPy5pZ25vcmVCb3JkZXIsY3JlYXRlUXVhZHJpbGF0ZXJhbHM6ITB9KTt0aGlzLmlzVG9vbHRpcE9ubHk9dC5kYXRhLmlzVG9vbHRpcE9ubHl9cmVuZGVyKCl7Y29uc3R7ZGF0YTp0LGxpbmtTZXJ2aWNlOmV9PXRoaXMscz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cy5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIsdC5pZCk7bGV0IGk9ITE7aWYodC51cmwpe2UuYWRkTGlua0F0dHJpYnV0ZXMocyx0LnVybCx0Lm5ld1dpbmRvdyk7aT0hMH1lbHNlIGlmKHQuYWN0aW9uKXt0aGlzLl9iaW5kTmFtZWRBY3Rpb24ocyx0LmFjdGlvbik7aT0hMH1lbHNlIGlmKHQuYXR0YWNobWVudCl7dGhpcy5fYmluZEF0dGFjaG1lbnQocyx0LmF0dGFjaG1lbnQpO2k9ITB9ZWxzZSBpZih0LnNldE9DR1N0YXRlKXt0aGlzLiNBZShzLHQuc2V0T0NHU3RhdGUpO2k9ITB9ZWxzZSBpZih0LmRlc3Qpe3RoaXMuX2JpbmRMaW5rKHMsdC5kZXN0KTtpPSEwfWVsc2V7aWYodC5hY3Rpb25zJiYodC5hY3Rpb25zLkFjdGlvbnx8dC5hY3Rpb25zWyJNb3VzZSBVcCJdfHx0LmFjdGlvbnNbIk1vdXNlIERvd24iXSkmJnRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyl7dGhpcy5fYmluZEpTQWN0aW9uKHMsdCk7aT0hMH1pZih0LnJlc2V0Rm9ybSl7dGhpcy5fYmluZFJlc2V0Rm9ybUFjdGlvbihzLHQucmVzZXRGb3JtKTtpPSEwfWVsc2UgaWYodGhpcy5pc1Rvb2x0aXBPbmx5JiYhaSl7dGhpcy5fYmluZExpbmsocywiIik7aT0hMH19aWYodGhpcy5xdWFkcmlsYXRlcmFscylyZXR1cm4gdGhpcy5fcmVuZGVyUXVhZHJpbGF0ZXJhbHMoImxpbmtBbm5vdGF0aW9uIikubWFwKCgodCxlKT0+e2NvbnN0IGk9MD09PWU/czpzLmNsb25lTm9kZSgpO3QuYXBwZW5kKGkpO3JldHVybiB0fSkpO3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ibGlua0Fubm90YXRpb24iO2kmJnRoaXMuY29udGFpbmVyLmFwcGVuZChzKTtyZXR1cm4gdGhpcy5jb250YWluZXJ9X2JpbmRMaW5rKHQsZSl7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0RGVzdGluYXRpb25IYXNoKGUpO3Qub25jbGljaz0oKT0+e2UmJnRoaXMubGlua1NlcnZpY2UuZ29Ub0Rlc3RpbmF0aW9uKGUpO3JldHVybiExfTsoZXx8IiI9PT1lKSYmKHQuY2xhc3NOYW1lPSJpbnRlcm5hbExpbmsiKX1fYmluZE5hbWVkQWN0aW9uKHQsZSl7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTt0Lm9uY2xpY2s9KCk9Pnt0aGlzLmxpbmtTZXJ2aWNlLmV4ZWN1dGVOYW1lZEFjdGlvbihlKTtyZXR1cm4hMX07dC5jbGFzc05hbWU9ImludGVybmFsTGluayJ9X2JpbmRBdHRhY2htZW50KHQsZSl7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTt0Lm9uY2xpY2s9KCk9Pnt0aGlzLmRvd25sb2FkTWFuYWdlcj8ub3Blbk9yRG93bmxvYWREYXRhKHRoaXMuY29udGFpbmVyLGUuY29udGVudCxlLmZpbGVuYW1lKTtyZXR1cm4hMX07dC5jbGFzc05hbWU9ImludGVybmFsTGluayJ9I0FlKHQsZSl7dC5ocmVmPXRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTt0Lm9uY2xpY2s9KCk9Pnt0aGlzLmxpbmtTZXJ2aWNlLmV4ZWN1dGVTZXRPQ0dTdGF0ZShlKTtyZXR1cm4hMX07dC5jbGFzc05hbWU9ImludGVybmFsTGluayJ9X2JpbmRKU0FjdGlvbih0LGUpe3QuaHJlZj10aGlzLmxpbmtTZXJ2aWNlLmdldEFuY2hvclVybCgiIik7Y29uc3Qgcz1uZXcgTWFwKFtbIkFjdGlvbiIsIm9uY2xpY2siXSxbIk1vdXNlIFVwIiwib25tb3VzZXVwIl0sWyJNb3VzZSBEb3duIiwib25tb3VzZWRvd24iXV0pO2Zvcihjb25zdCBpIG9mIE9iamVjdC5rZXlzKGUuYWN0aW9ucykpe2NvbnN0IG49cy5nZXQoaSk7biYmKHRbbl09KCk9Pnt0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0aGlzLGRldGFpbDp7aWQ6ZS5pZCxuYW1lOml9fSk7cmV0dXJuITF9KX10Lm9uY2xpY2t8fCh0Lm9uY2xpY2s9KCk9PiExKTt0LmNsYXNzTmFtZT0iaW50ZXJuYWxMaW5rIn1fYmluZFJlc2V0Rm9ybUFjdGlvbih0LGUpe2NvbnN0IHM9dC5vbmNsaWNrO3N8fCh0LmhyZWY9dGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpKTt0LmNsYXNzTmFtZT0iaW50ZXJuYWxMaW5rIjtpZih0aGlzLl9maWVsZE9iamVjdHMpdC5vbmNsaWNrPSgpPT57cz8uKCk7Y29uc3R7ZmllbGRzOnQscmVmczpuLGluY2x1ZGU6cn09ZSxhPVtdO2lmKDAhPT10Lmxlbmd0aHx8MCE9PW4ubGVuZ3RoKXtjb25zdCBlPW5ldyBTZXQobik7Zm9yKGNvbnN0IHMgb2YgdCl7Y29uc3QgdD10aGlzLl9maWVsZE9iamVjdHNbc118fFtdO2Zvcihjb25zdHtpZDpzfW9mIHQpZS5hZGQocyl9Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9maWVsZE9iamVjdHMpKWZvcihjb25zdCBzIG9mIHQpZS5oYXMocy5pZCk9PT1yJiZhLnB1c2gocyl9ZWxzZSBmb3IoY29uc3QgdCBvZiBPYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkT2JqZWN0cykpYS5wdXNoKC4uLnQpO2NvbnN0IG89dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxsPVtdO2Zvcihjb25zdCB0IG9mIGEpe2NvbnN0e2lkOmV9PXQ7bC5wdXNoKGUpO3N3aXRjaCh0LnR5cGUpe2Nhc2UidGV4dCI6e2NvbnN0IHM9dC5kZWZhdWx0VmFsdWV8fCIiO28uc2V0VmFsdWUoZSx7dmFsdWU6c30pO2JyZWFrfWNhc2UiY2hlY2tib3giOmNhc2UicmFkaW9idXR0b24iOntjb25zdCBzPXQuZGVmYXVsdFZhbHVlPT09dC5leHBvcnRWYWx1ZXM7by5zZXRWYWx1ZShlLHt2YWx1ZTpzfSk7YnJlYWt9Y2FzZSJjb21ib2JveCI6Y2FzZSJsaXN0Ym94Ijp7Y29uc3Qgcz10LmRlZmF1bHRWYWx1ZXx8IiI7by5zZXRWYWx1ZShlLHt2YWx1ZTpzfSk7YnJlYWt9ZGVmYXVsdDpjb250aW51ZX1jb25zdCBzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWVsZW1lbnQtaWQ9IiR7ZX0iXWApO3MmJihjLmhhcyhzKT9zLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNldGZvcm0iKSk6KDAsaS53YXJuKShgX2JpbmRSZXNldEZvcm1BY3Rpb24gLSBlbGVtZW50IG5vdCBhbGxvd2VkOiAke2V9YCkpfXRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0aGlzLGRldGFpbDp7aWQ6ImFwcCIsaWRzOmwsbmFtZToiUmVzZXRGb3JtIn19KTtyZXR1cm4hMX07ZWxzZXsoMCxpLndhcm4pKCdfYmluZFJlc2V0Rm9ybUFjdGlvbiAtICJyZXNldEZvcm0iIGFjdGlvbiBub3Qgc3VwcG9ydGVkLCBlbnN1cmUgdGhhdCB0aGUgYGZpZWxkT2JqZWN0c2AgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLicpO3N8fCh0Lm9uY2xpY2s9KCk9PiExKX19fWNsYXNzIFRleHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQse2lzUmVuZGVyYWJsZTohISh0LmRhdGEuaGFzUG9wdXB8fHQuZGF0YS50aXRsZU9iaj8uc3RyfHx0LmRhdGEuY29udGVudHNPYmo/LnN0cnx8dC5kYXRhLnJpY2hUZXh0Py5zdHIpfSl9cmVuZGVyKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ0ZXh0QW5ub3RhdGlvbiI7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTt0LnNyYz10aGlzLmltYWdlUmVzb3VyY2VzUGF0aCsiYW5ub3RhdGlvbi0iK3RoaXMuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkrIi5zdmciO3QuYWx0PSJbe3t0eXBlfX0gQW5ub3RhdGlvbl0iO3QuZGF0YXNldC5sMTBuSWQ9InRleHRfYW5ub3RhdGlvbl90eXBlIjt0LmRhdGFzZXQubDEwbkFyZ3M9SlNPTi5zdHJpbmdpZnkoe3R5cGU6dGhpcy5kYXRhLm5hbWV9KTt0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKHQsdGhpcy5kYXRhKTt0aGlzLmNvbnRhaW5lci5hcHBlbmQodCk7cmV0dXJuIHRoaXMuY29udGFpbmVyfX1jbGFzcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50e3JlbmRlcigpe3RoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQmJih0aGlzLmNvbnRhaW5lci50aXRsZT10aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KTtyZXR1cm4gdGhpcy5jb250YWluZXJ9X2dldEtleU1vZGlmaWVyKHQpe2NvbnN0e2lzV2luOmUsaXNNYWM6c309QW5ub3RhdGlvbkVsZW1lbnQucGxhdGZvcm07cmV0dXJuIGUmJnQuY3RybEtleXx8cyYmdC5tZXRhS2V5fV9zZXRFdmVudExpc3RlbmVyKHQsZSxzLGkpe2UuaW5jbHVkZXMoIm1vdXNlIik/dC5hZGRFdmVudExpc3RlbmVyKGUsKHQ9Pnt0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0aGlzLGRldGFpbDp7aWQ6dGhpcy5kYXRhLmlkLG5hbWU6cyx2YWx1ZTppKHQpLHNoaWZ0OnQuc2hpZnRLZXksbW9kaWZpZXI6dGhpcy5fZ2V0S2V5TW9kaWZpZXIodCl9fSl9KSk6dC5hZGRFdmVudExpc3RlbmVyKGUsKHQ9Pnt0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIse3NvdXJjZTp0aGlzLGRldGFpbDp7aWQ6dGhpcy5kYXRhLmlkLG5hbWU6cyx2YWx1ZTppKHQpfX0pfSkpfV9zZXRFdmVudExpc3RlbmVycyh0LGUscyl7Zm9yKGNvbnN0W2ksbl1vZiBlKSgiQWN0aW9uIj09PW58fHRoaXMuZGF0YS5hY3Rpb25zPy5bbl0pJiZ0aGlzLl9zZXRFdmVudExpc3RlbmVyKHQsaSxuLHMpfV9zZXRCYWNrZ3JvdW5kQ29sb3IodCl7Y29uc3QgZT10aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yfHxudWxsO3Quc3R5bGUuYmFja2dyb3VuZENvbG9yPW51bGw9PT1lPyJ0cmFuc3BhcmVudCI6aS5VdGlsLm1ha2VIZXhDb2xvcihlWzBdLGVbMV0sZVsyXSl9X3NldFRleHRTdHlsZSh0KXtjb25zdCBlPVsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0se2ZvbnRDb2xvcjpzfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLG49dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZXx8OSxyPXQuc3R5bGU7bGV0IGE7Y29uc3Qgcm91bmRUb09uZURlY2ltYWw9dD0+TWF0aC5yb3VuZCgxMCp0KS8xMDtpZih0aGlzLmRhdGEubXVsdGlMaW5lKXtjb25zdCB0PU1hdGguYWJzKHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLTIpLGU9dC8oTWF0aC5yb3VuZCh0LyhpLkxJTkVfRkFDVE9SKm4pKXx8MSk7YT1NYXRoLm1pbihuLHJvdW5kVG9PbmVEZWNpbWFsKGUvaS5MSU5FX0ZBQ1RPUikpfWVsc2V7Y29uc3QgdD1NYXRoLmFicyh0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXS0yKTthPU1hdGgubWluKG4scm91bmRUb09uZURlY2ltYWwodC9pLkxJTkVfRkFDVE9SKSl9ci5mb250U2l6ZT1gY2FsYygke2F9cHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWA7ci5jb2xvcj1pLlV0aWwubWFrZUhleENvbG9yKHNbMF0sc1sxXSxzWzJdKTtudWxsIT09dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQmJihyLnRleHRBbGlnbj1lW3RoaXMuZGF0YS50ZXh0QWxpZ25tZW50XSl9X3NldFJlcXVpcmVkKHQsZSl7ZT90LnNldEF0dHJpYnV0ZSgicmVxdWlyZWQiLCEwKTp0LnJlbW92ZUF0dHJpYnV0ZSgicmVxdWlyZWQiKTt0LnNldEF0dHJpYnV0ZSgiYXJpYS1yZXF1aXJlZCIsZSl9fWNsYXNzIFRleHRXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQse2lzUmVuZGVyYWJsZTp0LnJlbmRlckZvcm1zfHwhdC5kYXRhLmhhc0FwcGVhcmFuY2UmJiEhdC5kYXRhLmZpZWxkVmFsdWV9KX1zZXRQcm9wZXJ0eU9uU2libGluZ3ModCxlLHMsaSl7Y29uc3Qgbj10aGlzLmFubm90YXRpb25TdG9yYWdlO2Zvcihjb25zdCByIG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKHQubmFtZSx0LmlkKSl7ci5kb21FbGVtZW50JiYoci5kb21FbGVtZW50W2VdPXMpO24uc2V0VmFsdWUoci5pZCx7W2ldOnN9KX19cmVuZGVyKCl7Y29uc3QgdD10aGlzLmFubm90YXRpb25TdG9yYWdlLGU9dGhpcy5kYXRhLmlkO3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0idGV4dFdpZGdldEFubm90YXRpb24iO2xldCBzPW51bGw7aWYodGhpcy5yZW5kZXJGb3Jtcyl7Y29uc3QgaT10LmdldFZhbHVlKGUse3ZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlfSk7bGV0IG49aS5mb3JtYXR0ZWRWYWx1ZXx8aS52YWx1ZXx8IiI7Y29uc3Qgcj10LmdldFZhbHVlKGUse2NoYXJMaW1pdDp0aGlzLmRhdGEubWF4TGVufSkuY2hhckxpbWl0O3ImJm4ubGVuZ3RoPnImJihuPW4uc2xpY2UoMCxyKSk7Y29uc3QgYT17dXNlclZhbHVlOm4sZm9ybWF0dGVkVmFsdWU6bnVsbCx2YWx1ZU9uRm9jdXM6IiJ9O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpe3M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtzLnRleHRDb250ZW50PW47dGhpcy5kYXRhLmRvTm90U2Nyb2xsJiYocy5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpfWVsc2V7cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3MudHlwZT0idGV4dCI7cy5zZXRBdHRyaWJ1dGUoInZhbHVlIixuKTt0aGlzLmRhdGEuZG9Ob3RTY3JvbGwmJihzLnN0eWxlLm92ZXJmbG93WD0iaGlkZGVuIil9Yy5hZGQocyk7cy5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIsZSk7cy5kaXNhYmxlZD10aGlzLmRhdGEucmVhZE9ubHk7cy5uYW1lPXRoaXMuZGF0YS5maWVsZE5hbWU7cy50YWJJbmRleD1sO3RoaXMuX3NldFJlcXVpcmVkKHMsdGhpcy5kYXRhLnJlcXVpcmVkKTtyJiYocy5tYXhMZW5ndGg9cik7cy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKGk9Pnt0LnNldFZhbHVlKGUse3ZhbHVlOmkudGFyZ2V0LnZhbHVlfSk7dGhpcy5zZXRQcm9wZXJ0eU9uU2libGluZ3MocywidmFsdWUiLGkudGFyZ2V0LnZhbHVlLCJ2YWx1ZSIpfSkpO3MuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwodD0+e2NvbnN0IGU9dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlPz8iIjtzLnZhbHVlPWEudXNlclZhbHVlPWU7YS5mb3JtYXR0ZWRWYWx1ZT1udWxsfSkpO2xldCBibHVyTGlzdGVuZXI9dD0+e2NvbnN0e2Zvcm1hdHRlZFZhbHVlOmV9PWE7bnVsbCE9ZSYmKHQudGFyZ2V0LnZhbHVlPWUpO3QudGFyZ2V0LnNjcm9sbExlZnQ9MH07aWYodGhpcy5lbmFibGVTY3JpcHRpbmcmJnRoaXMuaGFzSlNBY3Rpb25zKXtzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwodD0+e2EudXNlclZhbHVlJiYodC50YXJnZXQudmFsdWU9YS51c2VyVmFsdWUpO2EudmFsdWVPbkZvY3VzPXQudGFyZ2V0LnZhbHVlfSkpO3MuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLChzPT57Y29uc3QgaT17dmFsdWUocyl7YS51c2VyVmFsdWU9cy5kZXRhaWwudmFsdWU/PyIiO3Quc2V0VmFsdWUoZSx7dmFsdWU6YS51c2VyVmFsdWUudG9TdHJpbmcoKX0pO3MudGFyZ2V0LnZhbHVlPWEudXNlclZhbHVlfSxmb3JtYXR0ZWRWYWx1ZShzKXtjb25zdHtmb3JtYXR0ZWRWYWx1ZTppfT1zLmRldGFpbDthLmZvcm1hdHRlZFZhbHVlPWk7bnVsbCE9aSYmcy50YXJnZXQhPT1kb2N1bWVudC5hY3RpdmVFbGVtZW50JiYocy50YXJnZXQudmFsdWU9aSk7dC5zZXRWYWx1ZShlLHtmb3JtYXR0ZWRWYWx1ZTppfSl9LHNlbFJhbmdlKHQpe3QudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKC4uLnQuZGV0YWlsLnNlbFJhbmdlKX0sY2hhckxpbWl0OnM9Pntjb25zdHtjaGFyTGltaXQ6aX09cy5kZXRhaWwse3RhcmdldDpufT1zO2lmKDA9PT1pKXtuLnJlbW92ZUF0dHJpYnV0ZSgibWF4TGVuZ3RoIik7cmV0dXJufW4uc2V0QXR0cmlidXRlKCJtYXhMZW5ndGgiLGkpO2xldCByPWEudXNlclZhbHVlO2lmKHImJiEoci5sZW5ndGg8PWkpKXtyPXIuc2xpY2UoMCxpKTtuLnZhbHVlPWEudXNlclZhbHVlPXI7dC5zZXRWYWx1ZShlLHt2YWx1ZTpyfSk7dGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLHtzb3VyY2U6dGhpcyxkZXRhaWw6e2lkOmUsbmFtZToiS2V5c3Ryb2tlIix2YWx1ZTpyLHdpbGxDb21taXQ6ITAsY29tbWl0S2V5OjEsc2VsU3RhcnQ6bi5zZWxlY3Rpb25TdGFydCxzZWxFbmQ6bi5zZWxlY3Rpb25FbmR9fSl9fX07dGhpcy5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGkscyl9KSk7cy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwodD0+e2xldCBzPS0xOyJFc2NhcGUiPT09dC5rZXk/cz0wOiJFbnRlciIhPT10LmtleXx8dGhpcy5kYXRhLm11bHRpTGluZT8iVGFiIj09PXQua2V5JiYocz0zKTpzPTI7aWYoLTE9PT1zKXJldHVybjtjb25zdHt2YWx1ZTppfT10LnRhcmdldDtpZihhLnZhbHVlT25Gb2N1cyE9PWkpe2EudXNlclZhbHVlPWk7dGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLHtzb3VyY2U6dGhpcyxkZXRhaWw6e2lkOmUsbmFtZToiS2V5c3Ryb2tlIix2YWx1ZTppLHdpbGxDb21taXQ6ITAsY29tbWl0S2V5OnMsc2VsU3RhcnQ6dC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsc2VsRW5kOnQudGFyZ2V0LnNlbGVjdGlvbkVuZH19KX19KSk7Y29uc3QgaT1ibHVyTGlzdGVuZXI7Ymx1ckxpc3RlbmVyPW51bGw7cy5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwodD0+e2NvbnN0e3ZhbHVlOnN9PXQudGFyZ2V0O2EudXNlclZhbHVlPXM7dGhpcy5fbW91c2VTdGF0ZS5pc0Rvd24mJmEudmFsdWVPbkZvY3VzIT09cyYmdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLHtzb3VyY2U6dGhpcyxkZXRhaWw6e2lkOmUsbmFtZToiS2V5c3Ryb2tlIix2YWx1ZTpzLHdpbGxDb21taXQ6ITAsY29tbWl0S2V5OjEsc2VsU3RhcnQ6dC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsc2VsRW5kOnQudGFyZ2V0LnNlbGVjdGlvbkVuZH19KTtpKHQpfSkpO3RoaXMuZGF0YS5hY3Rpb25zPy5LZXlzdHJva2UmJnMuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5wdXQiLCh0PT57Y29uc3R7ZGF0YTpzLHRhcmdldDppfT10LHt2YWx1ZTpuLHNlbGVjdGlvblN0YXJ0OnIsc2VsZWN0aW9uRW5kOmF9PWk7bGV0IG89cixsPWE7c3dpdGNoKHQuaW5wdXRUeXBlKXtjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6e2NvbnN0IHQ9bi5zdWJzdHJpbmcoMCxyKS5tYXRjaCgvXHcqW15cd10qJC8pO3QmJihvLT10WzBdLmxlbmd0aCk7YnJlYWt9Y2FzZSJkZWxldGVXb3JkRm9yd2FyZCI6e2NvbnN0IHQ9bi5zdWJzdHJpbmcocikubWF0Y2goL15bXlx3XSpcdyovKTt0JiYobCs9dFswXS5sZW5ndGgpO2JyZWFrfWNhc2UiZGVsZXRlQ29udGVudEJhY2t3YXJkIjpyPT09YSYmKG8tPTEpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEZvcndhcmQiOnI9PT1hJiYobCs9MSl9dC5wcmV2ZW50RGVmYXVsdCgpO3RoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnRoaXMsZGV0YWlsOntpZDplLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6bixjaGFuZ2U6c3x8IiIsd2lsbENvbW1pdDohMSxzZWxTdGFydDpvLHNlbEVuZDpsfX0pfSkpO3RoaXMuX3NldEV2ZW50TGlzdGVuZXJzKHMsW1siZm9jdXMiLCJGb2N1cyJdLFsiYmx1ciIsIkJsdXIiXSxbIm1vdXNlZG93biIsIk1vdXNlIERvd24iXSxbIm1vdXNlZW50ZXIiLCJNb3VzZSBFbnRlciJdLFsibW91c2VsZWF2ZSIsIk1vdXNlIEV4aXQiXSxbIm1vdXNldXAiLCJNb3VzZSBVcCJdXSwodD0+dC50YXJnZXQudmFsdWUpKX1ibHVyTGlzdGVuZXImJnMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsYmx1ckxpc3RlbmVyKTtpZih0aGlzLmRhdGEuY29tYil7Y29uc3QgdD0odGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0pL3I7cy5jbGFzc0xpc3QuYWRkKCJjb21iIik7cy5zdHlsZS5sZXR0ZXJTcGFjaW5nPWBjYWxjKCR7dH1weCAqIHZhcigtLXNjYWxlLWZhY3RvcikgLSAxY2gpYH19ZWxzZXtzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3MudGV4dENvbnRlbnQ9dGhpcy5kYXRhLmZpZWxkVmFsdWU7cy5zdHlsZS52ZXJ0aWNhbEFsaWduPSJtaWRkbGUiO3Muc3R5bGUuZGlzcGxheT0idGFibGUtY2VsbCJ9dGhpcy5fc2V0VGV4dFN0eWxlKHMpO3RoaXMuX3NldEJhY2tncm91bmRDb2xvcihzKTt0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhzKTt0aGlzLmNvbnRhaW5lci5hcHBlbmQocyk7cmV0dXJuIHRoaXMuY29udGFpbmVyfX1jbGFzcyBDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCx7aXNSZW5kZXJhYmxlOnQucmVuZGVyRm9ybXN9KX1yZW5kZXIoKXtjb25zdCB0PXRoaXMuYW5ub3RhdGlvblN0b3JhZ2UsZT10aGlzLmRhdGEscz1lLmlkO2xldCBpPXQuZ2V0VmFsdWUocyx7dmFsdWU6ZS5leHBvcnRWYWx1ZT09PWUuZmllbGRWYWx1ZX0pLnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgaSl7aT0iT2ZmIiE9PWk7dC5zZXRWYWx1ZShzLHt2YWx1ZTppfSl9dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJidXR0b25XaWRnZXRBbm5vdGF0aW9uIGNoZWNrQm94Ijtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yy5hZGQobik7bi5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIscyk7bi5kaXNhYmxlZD1lLnJlYWRPbmx5O3RoaXMuX3NldFJlcXVpcmVkKG4sdGhpcy5kYXRhLnJlcXVpcmVkKTtuLnR5cGU9ImNoZWNrYm94IjtuLm5hbWU9ZS5maWVsZE5hbWU7aSYmbi5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCEwKTtuLnNldEF0dHJpYnV0ZSgiZXhwb3J0VmFsdWUiLGUuZXhwb3J0VmFsdWUpO24udGFiSW5kZXg9bDtuLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKGk9Pntjb25zdHtuYW1lOm4sY2hlY2tlZDpyfT1pLnRhcmdldDtmb3IoY29uc3QgaSBvZiB0aGlzLl9nZXRFbGVtZW50c0J5TmFtZShuLHMpKXtjb25zdCBzPXImJmkuZXhwb3J0VmFsdWU9PT1lLmV4cG9ydFZhbHVlO2kuZG9tRWxlbWVudCYmKGkuZG9tRWxlbWVudC5jaGVja2VkPXMpO3Quc2V0VmFsdWUoaS5pZCx7dmFsdWU6c30pfXQuc2V0VmFsdWUocyx7dmFsdWU6cn0pfSkpO24uYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwodD0+e2NvbnN0IHM9ZS5kZWZhdWx0RmllbGRWYWx1ZXx8Ik9mZiI7dC50YXJnZXQuY2hlY2tlZD1zPT09ZS5leHBvcnRWYWx1ZX0pKTtpZih0aGlzLmVuYWJsZVNjcmlwdGluZyYmdGhpcy5oYXNKU0FjdGlvbnMpe24uYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLChlPT57Y29uc3QgaT17dmFsdWUoZSl7ZS50YXJnZXQuY2hlY2tlZD0iT2ZmIiE9PWUuZGV0YWlsLnZhbHVlO3Quc2V0VmFsdWUocyx7dmFsdWU6ZS50YXJnZXQuY2hlY2tlZH0pfX07dGhpcy5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGksZSl9KSk7dGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMobixbWyJjaGFuZ2UiLCJWYWxpZGF0ZSJdLFsiY2hhbmdlIiwiQWN0aW9uIl0sWyJmb2N1cyIsIkZvY3VzIl0sWyJibHVyIiwiQmx1ciJdLFsibW91c2Vkb3duIiwiTW91c2UgRG93biJdLFsibW91c2VlbnRlciIsIk1vdXNlIEVudGVyIl0sWyJtb3VzZWxlYXZlIiwiTW91c2UgRXhpdCJdLFsibW91c2V1cCIsIk1vdXNlIFVwIl1dLCh0PT50LnRhcmdldC5jaGVja2VkKSl9dGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKG4pO3RoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKG4pO3RoaXMuY29udGFpbmVyLmFwcGVuZChuKTtyZXR1cm4gdGhpcy5jb250YWluZXJ9fWNsYXNzIFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LHtpc1JlbmRlcmFibGU6dC5yZW5kZXJGb3Jtc30pfXJlbmRlcigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiByYWRpb0J1dHRvbiI7Y29uc3QgdD10aGlzLmFubm90YXRpb25TdG9yYWdlLGU9dGhpcy5kYXRhLHM9ZS5pZDtsZXQgaT10LmdldFZhbHVlKHMse3ZhbHVlOmUuZmllbGRWYWx1ZT09PWUuYnV0dG9uVmFsdWV9KS52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIGkpe2k9aSE9PWUuYnV0dG9uVmFsdWU7dC5zZXRWYWx1ZShzLHt2YWx1ZTppfSl9Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2MuYWRkKG4pO24uc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLHMpO24uZGlzYWJsZWQ9ZS5yZWFkT25seTt0aGlzLl9zZXRSZXF1aXJlZChuLHRoaXMuZGF0YS5yZXF1aXJlZCk7bi50eXBlPSJyYWRpbyI7bi5uYW1lPWUuZmllbGROYW1lO2kmJm4uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwhMCk7bi50YWJJbmRleD1sO24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwoZT0+e2NvbnN0e25hbWU6aSxjaGVja2VkOm59PWUudGFyZ2V0O2Zvcihjb25zdCBlIG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKGkscykpdC5zZXRWYWx1ZShlLmlkLHt2YWx1ZTohMX0pO3Quc2V0VmFsdWUocyx7dmFsdWU6bn0pfSkpO24uYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwodD0+e2NvbnN0IHM9ZS5kZWZhdWx0RmllbGRWYWx1ZTt0LnRhcmdldC5jaGVja2VkPW51bGwhPXMmJnM9PT1lLmJ1dHRvblZhbHVlfSkpO2lmKHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyl7Y29uc3QgaT1lLmJ1dHRvblZhbHVlO24uYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLChlPT57Y29uc3Qgbj17dmFsdWU6ZT0+e2NvbnN0IG49aT09PWUuZGV0YWlsLnZhbHVlO2Zvcihjb25zdCBpIG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKGUudGFyZ2V0Lm5hbWUpKXtjb25zdCBlPW4mJmkuaWQ9PT1zO2kuZG9tRWxlbWVudCYmKGkuZG9tRWxlbWVudC5jaGVja2VkPWUpO3Quc2V0VmFsdWUoaS5pZCx7dmFsdWU6ZX0pfX19O3RoaXMuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChuLGUpfSkpO3RoaXMuX3NldEV2ZW50TGlzdGVuZXJzKG4sW1siY2hhbmdlIiwiVmFsaWRhdGUiXSxbImNoYW5nZSIsIkFjdGlvbiJdLFsiZm9jdXMiLCJGb2N1cyJdLFsiYmx1ciIsIkJsdXIiXSxbIm1vdXNlZG93biIsIk1vdXNlIERvd24iXSxbIm1vdXNlZW50ZXIiLCJNb3VzZSBFbnRlciJdLFsibW91c2VsZWF2ZSIsIk1vdXNlIEV4aXQiXSxbIm1vdXNldXAiLCJNb3VzZSBVcCJdXSwodD0+dC50YXJnZXQuY2hlY2tlZCkpfXRoaXMuX3NldEJhY2tncm91bmRDb2xvcihuKTt0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKTt0aGlzLmNvbnRhaW5lci5hcHBlbmQobik7cmV0dXJuIHRoaXMuY29udGFpbmVyfX1jbGFzcyBQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBMaW5rQW5ub3RhdGlvbkVsZW1lbnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCx7aWdub3JlQm9yZGVyOnQuZGF0YS5oYXNBcHBlYXJhbmNlfSl9cmVuZGVyKCl7Y29uc3QgdD1zdXBlci5yZW5kZXIoKTt0LmNsYXNzTmFtZT0iYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBwdXNoQnV0dG9uIjt0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0JiYodC50aXRsZT10aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KTtjb25zdCBlPXQubGFzdENoaWxkO2lmKHRoaXMuZW5hYmxlU2NyaXB0aW5nJiZ0aGlzLmhhc0pTQWN0aW9ucyYmZSl7dGhpcy5fc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlMoZSk7ZS5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsKHQ9Pnt0aGlzLl9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goe30sdCl9KSl9cmV0dXJuIHR9fWNsYXNzIENob2ljZVdpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCx7aXNSZW5kZXJhYmxlOnQucmVuZGVyRm9ybXN9KX1yZW5kZXIoKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImNob2ljZVdpZGdldEFubm90YXRpb24iO2NvbnN0IHQ9dGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxlPXRoaXMuZGF0YS5pZCxzPXQuZ2V0VmFsdWUoZSx7dmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV9KSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO2MuYWRkKGkpO2kuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLGUpO2kuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5O3RoaXMuX3NldFJlcXVpcmVkKGksdGhpcy5kYXRhLnJlcXVpcmVkKTtpLm5hbWU9dGhpcy5kYXRhLmZpZWxkTmFtZTtpLnRhYkluZGV4PWw7bGV0IG49dGhpcy5kYXRhLmNvbWJvJiZ0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg+MDtpZighdGhpcy5kYXRhLmNvbWJvKXtpLnNpemU9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoO3RoaXMuZGF0YS5tdWx0aVNlbGVjdCYmKGkubXVsdGlwbGU9ITApfWkuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwodD0+e2NvbnN0IGU9dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlO2Zvcihjb25zdCB0IG9mIGkub3B0aW9ucyl0LnNlbGVjdGVkPXQudmFsdWU9PT1lfSkpO2Zvcihjb25zdCB0IG9mIHRoaXMuZGF0YS5vcHRpb25zKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpO2UudGV4dENvbnRlbnQ9dC5kaXNwbGF5VmFsdWU7ZS52YWx1ZT10LmV4cG9ydFZhbHVlO2lmKHMudmFsdWUuaW5jbHVkZXModC5leHBvcnRWYWx1ZSkpe2Uuc2V0QXR0cmlidXRlKCJzZWxlY3RlZCIsITApO249ITF9aS5hcHBlbmQoZSl9bGV0IHI9bnVsbDtpZihuKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpO3QudmFsdWU9IiAiO3Quc2V0QXR0cmlidXRlKCJoaWRkZW4iLCEwKTt0LnNldEF0dHJpYnV0ZSgic2VsZWN0ZWQiLCEwKTtpLnByZXBlbmQodCk7cj0oKT0+e3QucmVtb3ZlKCk7aS5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnB1dCIscik7cj1udWxsfTtpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixyKX1jb25zdCBnZXRWYWx1ZT0odCxlKT0+e2NvbnN0IHM9ZT8idmFsdWUiOiJ0ZXh0Q29udGVudCIsaT10LnRhcmdldC5vcHRpb25zO3JldHVybiB0LnRhcmdldC5tdWx0aXBsZT9BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoaSwodD0+dC5zZWxlY3RlZCkpLm1hcCgodD0+dFtzXSkpOi0xPT09aS5zZWxlY3RlZEluZGV4P251bGw6aVtpLnNlbGVjdGVkSW5kZXhdW3NdfSxnZXRJdGVtcz10PT57Y29uc3QgZT10LnRhcmdldC5vcHRpb25zO3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoZSwodD0+KHtkaXNwbGF5VmFsdWU6dC50ZXh0Q29udGVudCxleHBvcnRWYWx1ZTp0LnZhbHVlfSkpKX07aWYodGhpcy5lbmFibGVTY3JpcHRpbmcmJnRoaXMuaGFzSlNBY3Rpb25zKXtpLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94Iiwocz0+e2NvbnN0IG49e3ZhbHVlKHMpe3I/LigpO2NvbnN0IG49cy5kZXRhaWwudmFsdWUsYT1uZXcgU2V0KEFycmF5LmlzQXJyYXkobik/bjpbbl0pO2Zvcihjb25zdCB0IG9mIGkub3B0aW9ucyl0LnNlbGVjdGVkPWEuaGFzKHQudmFsdWUpO3Quc2V0VmFsdWUoZSx7dmFsdWU6Z2V0VmFsdWUocywhMCl9KX0sbXVsdGlwbGVTZWxlY3Rpb24odCl7aS5tdWx0aXBsZT0hMH0scmVtb3ZlKHMpe2NvbnN0IG49aS5vcHRpb25zLHI9cy5kZXRhaWwucmVtb3ZlO25bcl0uc2VsZWN0ZWQ9ITE7aS5yZW1vdmUocik7aWYobi5sZW5ndGg+MCl7LTE9PT1BcnJheS5wcm90b3R5cGUuZmluZEluZGV4LmNhbGwobiwodD0+dC5zZWxlY3RlZCkpJiYoblswXS5zZWxlY3RlZD0hMCl9dC5zZXRWYWx1ZShlLHt2YWx1ZTpnZXRWYWx1ZShzLCEwKSxpdGVtczpnZXRJdGVtcyhzKX0pfSxjbGVhcihzKXtmb3IoOzAhPT1pLmxlbmd0aDspaS5yZW1vdmUoMCk7dC5zZXRWYWx1ZShlLHt2YWx1ZTpudWxsLGl0ZW1zOltdfSl9LGluc2VydChzKXtjb25zdHtpbmRleDpuLGRpc3BsYXlWYWx1ZTpyLGV4cG9ydFZhbHVlOmF9PXMuZGV0YWlsLmluc2VydCxvPWkuY2hpbGRyZW5bbl0sbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTtsLnRleHRDb250ZW50PXI7bC52YWx1ZT1hO28/by5iZWZvcmUobCk6aS5hcHBlbmQobCk7dC5zZXRWYWx1ZShlLHt2YWx1ZTpnZXRWYWx1ZShzLCEwKSxpdGVtczpnZXRJdGVtcyhzKX0pfSxpdGVtcyhzKXtjb25zdHtpdGVtczpufT1zLmRldGFpbDtmb3IoOzAhPT1pLmxlbmd0aDspaS5yZW1vdmUoMCk7Zm9yKGNvbnN0IHQgb2Ygbil7Y29uc3R7ZGlzcGxheVZhbHVlOmUsZXhwb3J0VmFsdWU6c309dCxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpO24udGV4dENvbnRlbnQ9ZTtuLnZhbHVlPXM7aS5hcHBlbmQobil9aS5vcHRpb25zLmxlbmd0aD4wJiYoaS5vcHRpb25zWzBdLnNlbGVjdGVkPSEwKTt0LnNldFZhbHVlKGUse3ZhbHVlOmdldFZhbHVlKHMsITApLGl0ZW1zOmdldEl0ZW1zKHMpfSl9LGluZGljZXMocyl7Y29uc3QgaT1uZXcgU2V0KHMuZGV0YWlsLmluZGljZXMpO2Zvcihjb25zdCB0IG9mIHMudGFyZ2V0Lm9wdGlvbnMpdC5zZWxlY3RlZD1pLmhhcyh0LmluZGV4KTt0LnNldFZhbHVlKGUse3ZhbHVlOmdldFZhbHVlKHMsITApfSl9LGVkaXRhYmxlKHQpe3QudGFyZ2V0LmRpc2FibGVkPSF0LmRldGFpbC5lZGl0YWJsZX19O3RoaXMuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChuLHMpfSkpO2kuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLChzPT57Y29uc3QgaT1nZXRWYWx1ZShzLCEwKSxuPWdldFZhbHVlKHMsITEpO3Quc2V0VmFsdWUoZSx7dmFsdWU6aX0pO3RoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94Iix7c291cmNlOnRoaXMsZGV0YWlsOntpZDplLG5hbWU6IktleXN0cm9rZSIsdmFsdWU6bixjaGFuZ2VFeDppLHdpbGxDb21taXQ6ITAsY29tbWl0S2V5OjEsa2V5RG93bjohMX19KX0pKTt0aGlzLl9zZXRFdmVudExpc3RlbmVycyhpLFtbImZvY3VzIiwiRm9jdXMiXSxbImJsdXIiLCJCbHVyIl0sWyJtb3VzZWRvd24iLCJNb3VzZSBEb3duIl0sWyJtb3VzZWVudGVyIiwiTW91c2UgRW50ZXIiXSxbIm1vdXNlbGVhdmUiLCJNb3VzZSBFeGl0Il0sWyJtb3VzZXVwIiwiTW91c2UgVXAiXSxbImlucHV0IiwiQWN0aW9uIl1dLCh0PT50LnRhcmdldC5jaGVja2VkKSl9ZWxzZSBpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoZnVuY3Rpb24ocyl7dC5zZXRWYWx1ZShlLHt2YWx1ZTpnZXRWYWx1ZShzLCEwKX0pfSkpO3RoaXMuZGF0YS5jb21ibyYmdGhpcy5fc2V0VGV4dFN0eWxlKGkpO3RoaXMuX3NldEJhY2tncm91bmRDb2xvcihpKTt0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhpKTt0aGlzLmNvbnRhaW5lci5hcHBlbmQoaSk7cmV0dXJuIHRoaXMuY29udGFpbmVyfX1jbGFzcyBQb3B1cEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnR7c3RhdGljIElHTk9SRV9UWVBFUz1uZXcgU2V0KFsiTGluZSIsIlNxdWFyZSIsIkNpcmNsZSIsIlBvbHlMaW5lIiwiUG9seWdvbiIsIkluayJdKTtjb25zdHJ1Y3Rvcih0KXtjb25zdHtkYXRhOmV9PXQ7c3VwZXIodCx7aXNSZW5kZXJhYmxlOiFQb3B1cEFubm90YXRpb25FbGVtZW50LklHTk9SRV9UWVBFUy5oYXMoZS5wYXJlbnRUeXBlKSYmISEoZS50aXRsZU9iaj8uc3RyfHxlLmNvbnRlbnRzT2JqPy5zdHJ8fGUucmljaFRleHQ/LnN0cil9KX1yZW5kZXIoKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InBvcHVwQW5ub3RhdGlvbiI7Y29uc3QgdD10aGlzLmxheWVyLnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLWFubm90YXRpb24taWQ9IiR7dGhpcy5kYXRhLnBhcmVudElkfSJdYCk7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmNvbnRhaW5lcjtjb25zdCBlPW5ldyBQb3B1cEVsZW1lbnQoe2NvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcix0cmlnZ2VyOkFycmF5LmZyb20odCksY29sb3I6dGhpcy5kYXRhLmNvbG9yLHRpdGxlT2JqOnRoaXMuZGF0YS50aXRsZU9iaixtb2RpZmljYXRpb25EYXRlOnRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlLGNvbnRlbnRzT2JqOnRoaXMuZGF0YS5jb250ZW50c09iaixyaWNoVGV4dDp0aGlzLmRhdGEucmljaFRleHR9KSxzPXRoaXMucGFnZSxuPWkuVXRpbC5ub3JtYWxpemVSZWN0KFt0aGlzLmRhdGEucGFyZW50UmVjdFswXSxzLnZpZXdbM10tdGhpcy5kYXRhLnBhcmVudFJlY3RbMV0rcy52aWV3WzFdLHRoaXMuZGF0YS5wYXJlbnRSZWN0WzJdLHMudmlld1szXS10aGlzLmRhdGEucGFyZW50UmVjdFszXStzLnZpZXdbMV1dKSxyPW5bMF0rdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0tdGhpcy5kYXRhLnBhcmVudFJlY3RbMF0sYT1uWzFdLFtvLGwsYyxoXT10aGlzLnZpZXdwb3J0LnZpZXdCb3gsZD1jLW8sdT1oLWw7dGhpcy5jb250YWluZXIuc3R5bGUubGVmdD0xMDAqKHItbykvZCsiJSI7dGhpcy5jb250YWluZXIuc3R5bGUudG9wPTEwMCooYS1sKS91KyIlIjt0aGlzLmNvbnRhaW5lci5hcHBlbmQoZS5yZW5kZXIoKSk7cmV0dXJuIHRoaXMuY29udGFpbmVyfX1jbGFzcyBQb3B1cEVsZW1lbnR7Y29uc3RydWN0b3IodCl7dGhpcy5jb250YWluZXI9dC5jb250YWluZXI7dGhpcy50cmlnZ2VyPXQudHJpZ2dlcjt0aGlzLmNvbG9yPXQuY29sb3I7dGhpcy50aXRsZU9iaj10LnRpdGxlT2JqO3RoaXMubW9kaWZpY2F0aW9uRGF0ZT10Lm1vZGlmaWNhdGlvbkRhdGU7dGhpcy5jb250ZW50c09iaj10LmNvbnRlbnRzT2JqO3RoaXMucmljaFRleHQ9dC5yaWNoVGV4dDt0aGlzLmhpZGVXcmFwcGVyPXQuaGlkZVdyYXBwZXJ8fCExO3RoaXMucGlubmVkPSExfXJlbmRlcigpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9InBvcHVwV3JhcHBlciI7dGhpcy5oaWRlRWxlbWVudD10aGlzLmhpZGVXcmFwcGVyP3Q6dGhpcy5jb250YWluZXI7dGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITA7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmNsYXNzTmFtZT0icG9wdXAiO2NvbnN0IHM9dGhpcy5jb2xvcjtpZihzKXtjb25zdCB0PS43KigyNTUtc1swXSkrc1swXSxuPS43KigyNTUtc1sxXSkrc1sxXSxyPS43KigyNTUtc1syXSkrc1syXTtlLnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLlV0aWwubWFrZUhleENvbG9yKDB8dCwwfG4sMHxyKX1jb25zdCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImgxIik7ci5kaXI9dGhpcy50aXRsZU9iai5kaXI7ci50ZXh0Q29udGVudD10aGlzLnRpdGxlT2JqLnN0cjtlLmFwcGVuZChyKTtjb25zdCBhPW4uUERGRGF0ZVN0cmluZy50b0RhdGVPYmplY3QodGhpcy5tb2RpZmljYXRpb25EYXRlKTtpZihhKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt0LmNsYXNzTmFtZT0icG9wdXBEYXRlIjt0LnRleHRDb250ZW50PSJ7e2RhdGV9fSwge3t0aW1lfX0iO3QuZGF0YXNldC5sMTBuSWQ9ImFubm90YXRpb25fZGF0ZV9zdHJpbmciO3QuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7ZGF0ZTphLnRvTG9jYWxlRGF0ZVN0cmluZygpLHRpbWU6YS50b0xvY2FsZVRpbWVTdHJpbmcoKX0pO2UuYXBwZW5kKHQpfWlmKCF0aGlzLnJpY2hUZXh0Py5zdHJ8fHRoaXMuY29udGVudHNPYmo/LnN0ciYmdGhpcy5jb250ZW50c09iai5zdHIhPT10aGlzLnJpY2hUZXh0LnN0cil7Y29uc3QgdD10aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzT2JqKTtlLmFwcGVuZCh0KX1lbHNle28uWGZhTGF5ZXIucmVuZGVyKHt4ZmFIdG1sOnRoaXMucmljaFRleHQuaHRtbCxpbnRlbnQ6InJpY2hUZXh0IixkaXY6ZX0pO2UubGFzdENoaWxkLmNsYXNzTmFtZT0icmljaFRleHQgcG9wdXBDb250ZW50In1BcnJheS5pc0FycmF5KHRoaXMudHJpZ2dlcil8fCh0aGlzLnRyaWdnZXI9W3RoaXMudHJpZ2dlcl0pO2Zvcihjb25zdCB0IG9mIHRoaXMudHJpZ2dlcil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fdG9nZ2xlLmJpbmQodGhpcykpO3QuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix0aGlzLl9zaG93LmJpbmQodGhpcywhMSkpO3QuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHRoaXMuX2hpZGUuYmluZCh0aGlzLCExKSl9ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGlkZS5iaW5kKHRoaXMsITApKTt0LmFwcGVuZChlKTtyZXR1cm4gdH1fZm9ybWF0Q29udGVudHMoe3N0cjp0LGRpcjplfSl7Y29uc3Qgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7cy5jbGFzc05hbWU9InBvcHVwQ29udGVudCI7cy5kaXI9ZTtjb25zdCBpPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS8pO2ZvcihsZXQgdD0wLGU9aS5sZW5ndGg7dDxlOysrdCl7Y29uc3Qgbj1pW3RdO3MuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pKTt0PGUtMSYmcy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSl9cmV0dXJuIHN9X3RvZ2dsZSgpe3RoaXMucGlubmVkP3RoaXMuX2hpZGUoITApOnRoaXMuX3Nob3coITApfV9zaG93KHQ9ITEpe3QmJih0aGlzLnBpbm5lZD0hMCk7aWYodGhpcy5oaWRlRWxlbWVudC5oaWRkZW4pe3RoaXMuaGlkZUVsZW1lbnQuaGlkZGVuPSExO3RoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleD1wYXJzZUludCh0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXgpKzFlM319X2hpZGUodD0hMCl7dCYmKHRoaXMucGlubmVkPSExKTtpZighdGhpcy5oaWRlRWxlbWVudC5oaWRkZW4mJiF0aGlzLnBpbm5lZCl7dGhpcy5oaWRlRWxlbWVudC5oaWRkZW49ITA7dGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4PXBhcnNlSW50KHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleCktMWUzfX19Y2xhc3MgRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQse2lzUmVuZGVyYWJsZTohISh0LmRhdGEuaGFzUG9wdXB8fHQuZGF0YS50aXRsZU9iaj8uc3RyfHx0LmRhdGEuY29udGVudHNPYmo/LnN0cnx8dC5kYXRhLnJpY2hUZXh0Py5zdHIpLGlnbm9yZUJvcmRlcjohMH0pO3RoaXMudGV4dENvbnRlbnQ9dC5kYXRhLnRleHRDb250ZW50fXJlbmRlcigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iZnJlZVRleHRBbm5vdGF0aW9uIjtpZih0aGlzLnRleHRDb250ZW50KXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJhbm5vdGF0aW9uVGV4dENvbnRlbnQiO3Quc2V0QXR0cmlidXRlKCJyb2xlIiwiY29tbWVudCIpO2Zvcihjb25zdCBlIG9mIHRoaXMudGV4dENvbnRlbnQpe2NvbnN0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3MudGV4dENvbnRlbnQ9ZTt0LmFwcGVuZChzKX10aGlzLmNvbnRhaW5lci5hcHBlbmQodCl9dGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cChudWxsLHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuY29udGFpbmVyfX1jbGFzcyBMaW5lQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LHtpc1JlbmRlcmFibGU6ISEodC5kYXRhLmhhc1BvcHVwfHx0LmRhdGEudGl0bGVPYmo/LnN0cnx8dC5kYXRhLmNvbnRlbnRzT2JqPy5zdHJ8fHQuZGF0YS5yaWNoVGV4dD8uc3RyKSxpZ25vcmVCb3JkZXI6ITB9KX1yZW5kZXIoKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImxpbmVBbm5vdGF0aW9uIjtjb25zdCB0PXRoaXMuZGF0YSx7d2lkdGg6ZSxoZWlnaHQ6c309Z2V0UmVjdERpbXModC5yZWN0KSxpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoZSxzLCEwKSxuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6bGluZSIpO24uc2V0QXR0cmlidXRlKCJ4MSIsdC5yZWN0WzJdLXQubGluZUNvb3JkaW5hdGVzWzBdKTtuLnNldEF0dHJpYnV0ZSgieTEiLHQucmVjdFszXS10LmxpbmVDb29yZGluYXRlc1sxXSk7bi5zZXRBdHRyaWJ1dGUoIngyIix0LnJlY3RbMl0tdC5saW5lQ29vcmRpbmF0ZXNbMl0pO24uc2V0QXR0cmlidXRlKCJ5MiIsdC5yZWN0WzNdLXQubGluZUNvb3JkaW5hdGVzWzNdKTtuLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIix0LmJvcmRlclN0eWxlLndpZHRofHwxKTtuLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwidHJhbnNwYXJlbnQiKTtuLnNldEF0dHJpYnV0ZSgiZmlsbCIsInRyYW5zcGFyZW50Iik7aS5hcHBlbmQobik7dGhpcy5jb250YWluZXIuYXBwZW5kKGkpO3RoaXMuX2NyZWF0ZVBvcHVwKG4sdCk7cmV0dXJuIHRoaXMuY29udGFpbmVyfX1jbGFzcyBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQse2lzUmVuZGVyYWJsZTohISh0LmRhdGEuaGFzUG9wdXB8fHQuZGF0YS50aXRsZU9iaj8uc3RyfHx0LmRhdGEuY29udGVudHNPYmo/LnN0cnx8dC5kYXRhLnJpY2hUZXh0Py5zdHIpLGlnbm9yZUJvcmRlcjohMH0pfXJlbmRlcigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1YXJlQW5ub3RhdGlvbiI7Y29uc3QgdD10aGlzLmRhdGEse3dpZHRoOmUsaGVpZ2h0OnN9PWdldFJlY3REaW1zKHQucmVjdCksaT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKGUscywhMCksbj10LmJvcmRlclN0eWxlLndpZHRoLHI9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7ci5zZXRBdHRyaWJ1dGUoIngiLG4vMik7ci5zZXRBdHRyaWJ1dGUoInkiLG4vMik7ci5zZXRBdHRyaWJ1dGUoIndpZHRoIixlLW4pO3Iuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHMtbik7ci5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsbnx8MSk7ci5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50Iik7ci5zZXRBdHRyaWJ1dGUoImZpbGwiLCJ0cmFuc3BhcmVudCIpO2kuYXBwZW5kKHIpO3RoaXMuY29udGFpbmVyLmFwcGVuZChpKTt0aGlzLl9jcmVhdGVQb3B1cChyLHQpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19Y2xhc3MgQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LHtpc1JlbmRlcmFibGU6ISEodC5kYXRhLmhhc1BvcHVwfHx0LmRhdGEudGl0bGVPYmo/LnN0cnx8dC5kYXRhLmNvbnRlbnRzT2JqPy5zdHJ8fHQuZGF0YS5yaWNoVGV4dD8uc3RyKSxpZ25vcmVCb3JkZXI6ITB9KX1yZW5kZXIoKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImNpcmNsZUFubm90YXRpb24iO2NvbnN0IHQ9dGhpcy5kYXRhLHt3aWR0aDplLGhlaWdodDpzfT1nZXRSZWN0RGltcyh0LnJlY3QpLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShlLHMsITApLG49dC5ib3JkZXJTdHlsZS53aWR0aCxyPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZWxsaXBzZSIpO3Iuc2V0QXR0cmlidXRlKCJjeCIsZS8yKTtyLnNldEF0dHJpYnV0ZSgiY3kiLHMvMik7ci5zZXRBdHRyaWJ1dGUoInJ4IixlLzItbi8yKTtyLnNldEF0dHJpYnV0ZSgicnkiLHMvMi1uLzIpO3Iuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG58fDEpO3Iuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpO3Iuc2V0QXR0cmlidXRlKCJmaWxsIiwidHJhbnNwYXJlbnQiKTtpLmFwcGVuZChyKTt0aGlzLmNvbnRhaW5lci5hcHBlbmQoaSk7dGhpcy5fY3JlYXRlUG9wdXAocix0KTtyZXR1cm4gdGhpcy5jb250YWluZXJ9fWNsYXNzIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LHtpc1JlbmRlcmFibGU6ISEodC5kYXRhLmhhc1BvcHVwfHx0LmRhdGEudGl0bGVPYmo/LnN0cnx8dC5kYXRhLmNvbnRlbnRzT2JqPy5zdHJ8fHQuZGF0YS5yaWNoVGV4dD8uc3RyKSxpZ25vcmVCb3JkZXI6ITB9KTt0aGlzLmNvbnRhaW5lckNsYXNzTmFtZT0icG9seWxpbmVBbm5vdGF0aW9uIjt0aGlzLnN2Z0VsZW1lbnROYW1lPSJzdmc6cG9seWxpbmUifXJlbmRlcigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT10aGlzLmNvbnRhaW5lckNsYXNzTmFtZTtjb25zdCB0PXRoaXMuZGF0YSx7d2lkdGg6ZSxoZWlnaHQ6c309Z2V0UmVjdERpbXModC5yZWN0KSxpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoZSxzLCEwKTtsZXQgbj1bXTtmb3IoY29uc3QgZSBvZiB0LnZlcnRpY2VzKXtjb25zdCBzPWUueC10LnJlY3RbMF0saT10LnJlY3RbM10tZS55O24ucHVzaChzKyIsIitpKX1uPW4uam9pbigiICIpO2NvbnN0IHI9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7ci5zZXRBdHRyaWJ1dGUoInBvaW50cyIsbik7ci5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsdC5ib3JkZXJTdHlsZS53aWR0aHx8MSk7ci5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50Iik7ci5zZXRBdHRyaWJ1dGUoImZpbGwiLCJ0cmFuc3BhcmVudCIpO2kuYXBwZW5kKHIpO3RoaXMuY29udGFpbmVyLmFwcGVuZChpKTt0aGlzLl9jcmVhdGVQb3B1cChyLHQpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19Y2xhc3MgUG9seWdvbkFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KTt0aGlzLmNvbnRhaW5lckNsYXNzTmFtZT0icG9seWdvbkFubm90YXRpb24iO3RoaXMuc3ZnRWxlbWVudE5hbWU9InN2Zzpwb2x5Z29uIn19Y2xhc3MgQ2FyZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQse2lzUmVuZGVyYWJsZTohISh0LmRhdGEuaGFzUG9wdXB8fHQuZGF0YS50aXRsZU9iaj8uc3RyfHx0LmRhdGEuY29udGVudHNPYmo/LnN0cnx8dC5kYXRhLnJpY2hUZXh0Py5zdHIpLGlnbm9yZUJvcmRlcjohMH0pfXJlbmRlcigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iY2FyZXRBbm5vdGF0aW9uIjt0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKTtyZXR1cm4gdGhpcy5jb250YWluZXJ9fWNsYXNzIElua0Fubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCx7aXNSZW5kZXJhYmxlOiEhKHQuZGF0YS5oYXNQb3B1cHx8dC5kYXRhLnRpdGxlT2JqPy5zdHJ8fHQuZGF0YS5jb250ZW50c09iaj8uc3RyfHx0LmRhdGEucmljaFRleHQ/LnN0ciksaWdub3JlQm9yZGVyOiEwfSk7dGhpcy5jb250YWluZXJDbGFzc05hbWU9Imlua0Fubm90YXRpb24iO3RoaXMuc3ZnRWxlbWVudE5hbWU9InN2Zzpwb2x5bGluZSJ9cmVuZGVyKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO2NvbnN0IHQ9dGhpcy5kYXRhLHt3aWR0aDplLGhlaWdodDpzfT1nZXRSZWN0RGltcyh0LnJlY3QpLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShlLHMsITApO2Zvcihjb25zdCBlIG9mIHQuaW5rTGlzdHMpe2xldCBzPVtdO2Zvcihjb25zdCBpIG9mIGUpe2NvbnN0IGU9aS54LXQucmVjdFswXSxuPXQucmVjdFszXS1pLnk7cy5wdXNoKGAke2V9LCR7bn1gKX1zPXMuam9pbigiICIpO2NvbnN0IG49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7bi5zZXRBdHRyaWJ1dGUoInBvaW50cyIscyk7bi5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsdC5ib3JkZXJTdHlsZS53aWR0aHx8MSk7bi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50Iik7bi5zZXRBdHRyaWJ1dGUoImZpbGwiLCJ0cmFuc3BhcmVudCIpO3RoaXMuX2NyZWF0ZVBvcHVwKG4sdCk7aS5hcHBlbmQobil9dGhpcy5jb250YWluZXIuYXBwZW5kKGkpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19Y2xhc3MgSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LHtpc1JlbmRlcmFibGU6ISEodC5kYXRhLmhhc1BvcHVwfHx0LmRhdGEudGl0bGVPYmo/LnN0cnx8dC5kYXRhLmNvbnRlbnRzT2JqPy5zdHJ8fHQuZGF0YS5yaWNoVGV4dD8uc3RyKSxpZ25vcmVCb3JkZXI6ITAsY3JlYXRlUXVhZHJpbGF0ZXJhbHM6ITB9KX1yZW5kZXIoKXt0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKTtpZih0aGlzLnF1YWRyaWxhdGVyYWxzKXJldHVybiB0aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygiaGlnaGxpZ2h0QW5ub3RhdGlvbiIpO3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iaGlnaGxpZ2h0QW5ub3RhdGlvbiI7cmV0dXJuIHRoaXMuY29udGFpbmVyfX1jbGFzcyBVbmRlcmxpbmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQse2lzUmVuZGVyYWJsZTohISh0LmRhdGEuaGFzUG9wdXB8fHQuZGF0YS50aXRsZU9iaj8uc3RyfHx0LmRhdGEuY29udGVudHNPYmo/LnN0cnx8dC5kYXRhLnJpY2hUZXh0Py5zdHIpLGlnbm9yZUJvcmRlcjohMCxjcmVhdGVRdWFkcmlsYXRlcmFsczohMH0pfXJlbmRlcigpe3RoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpO2lmKHRoaXMucXVhZHJpbGF0ZXJhbHMpcmV0dXJuIHRoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKCJ1bmRlcmxpbmVBbm5vdGF0aW9uIik7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ1bmRlcmxpbmVBbm5vdGF0aW9uIjtyZXR1cm4gdGhpcy5jb250YWluZXJ9fWNsYXNzIFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LHtpc1JlbmRlcmFibGU6ISEodC5kYXRhLmhhc1BvcHVwfHx0LmRhdGEudGl0bGVPYmo/LnN0cnx8dC5kYXRhLmNvbnRlbnRzT2JqPy5zdHJ8fHQuZGF0YS5yaWNoVGV4dD8uc3RyKSxpZ25vcmVCb3JkZXI6ITAsY3JlYXRlUXVhZHJpbGF0ZXJhbHM6ITB9KX1yZW5kZXIoKXt0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKTtpZih0aGlzLnF1YWRyaWxhdGVyYWxzKXJldHVybiB0aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygic3F1aWdnbHlBbm5vdGF0aW9uIik7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzcXVpZ2dseUFubm90YXRpb24iO3JldHVybiB0aGlzLmNvbnRhaW5lcn19Y2xhc3MgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LHtpc1JlbmRlcmFibGU6ISEodC5kYXRhLmhhc1BvcHVwfHx0LmRhdGEudGl0bGVPYmo/LnN0cnx8dC5kYXRhLmNvbnRlbnRzT2JqPy5zdHJ8fHQuZGF0YS5yaWNoVGV4dD8uc3RyKSxpZ25vcmVCb3JkZXI6ITAsY3JlYXRlUXVhZHJpbGF0ZXJhbHM6ITB9KX1yZW5kZXIoKXt0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsdGhpcy5kYXRhKTtpZih0aGlzLnF1YWRyaWxhdGVyYWxzKXJldHVybiB0aGlzLl9yZW5kZXJRdWFkcmlsYXRlcmFscygic3RyaWtlb3V0QW5ub3RhdGlvbiIpO3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3RyaWtlb3V0QW5ub3RhdGlvbiI7cmV0dXJuIHRoaXMuY29udGFpbmVyfX1jbGFzcyBTdGFtcEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCx7aXNSZW5kZXJhYmxlOiEhKHQuZGF0YS5oYXNQb3B1cHx8dC5kYXRhLnRpdGxlT2JqPy5zdHJ8fHQuZGF0YS5jb250ZW50c09iaj8uc3RyfHx0LmRhdGEucmljaFRleHQ/LnN0ciksaWdub3JlQm9yZGVyOiEwfSl9cmVuZGVyKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJzdGFtcEFubm90YXRpb24iO3RoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAobnVsbCx0aGlzLmRhdGEpO3JldHVybiB0aGlzLmNvbnRhaW5lcn19Y2xhc3MgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQse2lzUmVuZGVyYWJsZTohMH0pO2NvbnN0e2ZpbGVuYW1lOmUsY29udGVudDpzfT10aGlzLmRhdGEuZmlsZTt0aGlzLmZpbGVuYW1lPSgwLG4uZ2V0RmlsZW5hbWVGcm9tVXJsKShlKTt0aGlzLmNvbnRlbnQ9czt0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaCgiZmlsZWF0dGFjaG1lbnRhbm5vdGF0aW9uIix7c291cmNlOnRoaXMsZmlsZW5hbWU6ZSxjb250ZW50OnN9KX1yZW5kZXIoKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiI7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTmFtZT0icG9wdXBUcmlnZ2VyQXJlYSI7dC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsdGhpcy5fZG93bmxvYWQuYmluZCh0aGlzKSk7IXRoaXMuZGF0YS5oYXNQb3B1cCYmKHRoaXMuZGF0YS50aXRsZU9iaj8uc3RyfHx0aGlzLmRhdGEuY29udGVudHNPYmo/LnN0cnx8dGhpcy5kYXRhLnJpY2hUZXh0KSYmdGhpcy5fY3JlYXRlUG9wdXAodCx0aGlzLmRhdGEpO3RoaXMuY29udGFpbmVyLmFwcGVuZCh0KTtyZXR1cm4gdGhpcy5jb250YWluZXJ9X2Rvd25sb2FkKCl7dGhpcy5kb3dubG9hZE1hbmFnZXI/Lm9wZW5PckRvd25sb2FkRGF0YSh0aGlzLmNvbnRhaW5lcix0aGlzLmNvbnRlbnQsdGhpcy5maWxlbmFtZSl9fWNsYXNzIEFubm90YXRpb25MYXllcntzdGF0aWMjX2UodCxlLHMsaSl7Y29uc3Qgcj10LmZpcnN0Q2hpbGR8fHQ7ci5pZD1gJHtuLkFubm90YXRpb25QcmVmaXh9JHtlfWA7cy5hcHBlbmQodCk7aT8ubW92ZUVsZW1lbnRJbkRPTShzLHQsciwhMSl9c3RhdGljIHJlbmRlcih0KXtjb25zdHthbm5vdGF0aW9uczplLGRpdjpzLHZpZXdwb3J0OmEsYWNjZXNzaWJpbGl0eU1hbmFnZXI6b309dDt0aGlzLiN2ZShzLGEpO2xldCBsPTA7Zm9yKGNvbnN0IGMgb2YgZSl7aWYoYy5hbm5vdGF0aW9uVHlwZSE9PWkuQW5ub3RhdGlvblR5cGUuUE9QVVApe2NvbnN0e3dpZHRoOnQsaGVpZ2h0OmV9PWdldFJlY3REaW1zKGMucmVjdCk7aWYodDw9MHx8ZTw9MCljb250aW51ZX1jb25zdCBlPUFubm90YXRpb25FbGVtZW50RmFjdG9yeS5jcmVhdGUoe2RhdGE6YyxsYXllcjpzLHBhZ2U6dC5wYWdlLHZpZXdwb3J0OmEsbGlua1NlcnZpY2U6dC5saW5rU2VydmljZSxkb3dubG9hZE1hbmFnZXI6dC5kb3dubG9hZE1hbmFnZXIsaW1hZ2VSZXNvdXJjZXNQYXRoOnQuaW1hZ2VSZXNvdXJjZXNQYXRofHwiIixyZW5kZXJGb3JtczohMSE9PXQucmVuZGVyRm9ybXMsc3ZnRmFjdG9yeTpuZXcgbi5ET01TVkdGYWN0b3J5LGFubm90YXRpb25TdG9yYWdlOnQuYW5ub3RhdGlvblN0b3JhZ2V8fG5ldyByLkFubm90YXRpb25TdG9yYWdlLGVuYWJsZVNjcmlwdGluZzp0LmVuYWJsZVNjcmlwdGluZyxoYXNKU0FjdGlvbnM6dC5oYXNKU0FjdGlvbnMsZmllbGRPYmplY3RzOnQuZmllbGRPYmplY3RzLG1vdXNlU3RhdGU6dC5tb3VzZVN0YXRlfHx7aXNEb3duOiExfX0pO2lmKGUuaXNSZW5kZXJhYmxlKXtjb25zdCB0PWUucmVuZGVyKCk7Yy5oaWRkZW4mJih0LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGNvbnN0IGUgb2YgdCl7ZS5zdHlsZS56SW5kZXg9bCsrO0Fubm90YXRpb25MYXllci4jX2UoZSxjLmlkLHMsbyl9ZWxzZXt0LnN0eWxlLnpJbmRleD1sKys7ZSBpbnN0YW5jZW9mIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQ/cy5wcmVwZW5kKHQpOkFubm90YXRpb25MYXllci4jX2UodCxjLmlkLHMsbyl9fX10aGlzLiN5ZShzLHQuYW5ub3RhdGlvbkNhbnZhc01hcCl9c3RhdGljIHVwZGF0ZSh0KXtjb25zdHthbm5vdGF0aW9uQ2FudmFzTWFwOmUsZGl2OnMsdmlld3BvcnQ6aX09dDt0aGlzLiN2ZShzLGkpO3RoaXMuI3llKHMsZSk7cy5oaWRkZW49ITF9c3RhdGljI3ZlKHQse3dpZHRoOmUsaGVpZ2h0OnMscm90YXRpb246aX0pe2NvbnN0e3N0eWxlOm59PXQscj1pJTE4MCE9MCxhPU1hdGguZmxvb3IoZSkrInB4IixvPU1hdGguZmxvb3IocykrInB4IjtuLndpZHRoPXI/bzphO24uaGVpZ2h0PXI/YTpvO3Quc2V0QXR0cmlidXRlKCJkYXRhLW1haW4tcm90YXRpb24iLGkpfXN0YXRpYyN5ZSh0LGUpe2lmKGUpe2Zvcihjb25zdFtzLGldb2YgZSl7Y29uc3QgZT10LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWFubm90YXRpb24taWQ9IiR7c30iXWApO2lmKCFlKWNvbnRpbnVlO2NvbnN0e2ZpcnN0Q2hpbGQ6bn09ZTtuPyJDQU5WQVMiPT09bi5ub2RlTmFtZT9uLnJlcGxhY2VXaXRoKGkpOm4uYmVmb3JlKGkpOmUuYXBwZW5kKGkpfWUuY2xlYXIoKX19fWUuQW5ub3RhdGlvbkxheWVyPUFubm90YXRpb25MYXllcn0sKHQsZSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5Db2xvckNvbnZlcnRlcnM9dm9pZCAwO2Z1bmN0aW9uIG1ha2VDb2xvckNvbXAodCl7cmV0dXJuIE1hdGguZmxvb3IoMjU1Kk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIil9ZS5Db2xvckNvbnZlcnRlcnM9Y2xhc3MgQ29sb3JDb252ZXJ0ZXJze3N0YXRpYyBDTVlLX0coW3QsZSxzLGldKXtyZXR1cm5bIkciLDEtTWF0aC5taW4oMSwuMyp0Ky41OSpzKy4xMSplK2kpXX1zdGF0aWMgR19DTVlLKFt0XSl7cmV0dXJuWyJDTVlLIiwwLDAsMCwxLXRdfXN0YXRpYyBHX1JHQihbdF0pe3JldHVyblsiUkdCIix0LHQsdF19c3RhdGljIEdfSFRNTChbdF0pe2NvbnN0IGU9bWFrZUNvbG9yQ29tcCh0KTtyZXR1cm5gIyR7ZX0ke2V9JHtlfWB9c3RhdGljIFJHQl9HKFt0LGUsc10pe3JldHVyblsiRyIsLjMqdCsuNTkqZSsuMTEqc119c3RhdGljIFJHQl9IVE1MKFt0LGUsc10pe3JldHVybmAjJHttYWtlQ29sb3JDb21wKHQpfSR7bWFrZUNvbG9yQ29tcChlKX0ke21ha2VDb2xvckNvbXAocyl9YH1zdGF0aWMgVF9IVE1MKCl7cmV0dXJuIiMwMDAwMDAwMCJ9c3RhdGljIENNWUtfUkdCKFt0LGUscyxpXSl7cmV0dXJuWyJSR0IiLDEtTWF0aC5taW4oMSx0K2kpLDEtTWF0aC5taW4oMSxzK2kpLDEtTWF0aC5taW4oMSxlK2kpXX1zdGF0aWMgQ01ZS19IVE1MKHQpe2NvbnN0IGU9dGhpcy5DTVlLX1JHQih0KS5zbGljZSgxKTtyZXR1cm4gdGhpcy5SR0JfSFRNTChlKX1zdGF0aWMgUkdCX0NNWUsoW3QsZSxzXSl7Y29uc3QgaT0xLXQsbj0xLWUscj0xLXM7cmV0dXJuWyJDTVlLIixpLG4scixNYXRoLm1pbihpLG4scildfX19LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5YZmFMYXllcj12b2lkIDA7dmFyIGk9cygxOSk7ZS5YZmFMYXllcj1jbGFzcyBYZmFMYXllcntzdGF0aWMgc2V0dXBTdG9yYWdlKHQsZSxzLGksbil7Y29uc3Qgcj1pLmdldFZhbHVlKGUse3ZhbHVlOm51bGx9KTtzd2l0Y2gocy5uYW1lKXtjYXNlInRleHRhcmVhIjpudWxsIT09ci52YWx1ZSYmKHQudGV4dENvbnRlbnQ9ci52YWx1ZSk7aWYoInByaW50Ij09PW4pYnJlYWs7dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKHQ9PntpLnNldFZhbHVlKGUse3ZhbHVlOnQudGFyZ2V0LnZhbHVlfSl9KSk7YnJlYWs7Y2FzZSJpbnB1dCI6aWYoInJhZGlvIj09PXMuYXR0cmlidXRlcy50eXBlfHwiY2hlY2tib3giPT09cy5hdHRyaWJ1dGVzLnR5cGUpe3IudmFsdWU9PT1zLmF0dHJpYnV0ZXMueGZhT24/dC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCEwKTpyLnZhbHVlPT09cy5hdHRyaWJ1dGVzLnhmYU9mZiYmdC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTtpZigicHJpbnQiPT09bilicmVhazt0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKHQ9PntpLnNldFZhbHVlKGUse3ZhbHVlOnQudGFyZ2V0LmNoZWNrZWQ/dC50YXJnZXQuZ2V0QXR0cmlidXRlKCJ4ZmFPbiIpOnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgieGZhT2ZmIil9KX0pKX1lbHNle251bGwhPT1yLnZhbHVlJiZ0LnNldEF0dHJpYnV0ZSgidmFsdWUiLHIudmFsdWUpO2lmKCJwcmludCI9PT1uKWJyZWFrO3QuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCh0PT57aS5zZXRWYWx1ZShlLHt2YWx1ZTp0LnRhcmdldC52YWx1ZX0pfSkpfWJyZWFrO2Nhc2Uic2VsZWN0IjppZihudWxsIT09ci52YWx1ZSlmb3IoY29uc3QgdCBvZiBzLmNoaWxkcmVuKXQuYXR0cmlidXRlcy52YWx1ZT09PXIudmFsdWUmJih0LmF0dHJpYnV0ZXMuc2VsZWN0ZWQ9ITApO3QuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCh0PT57Y29uc3Qgcz10LnRhcmdldC5vcHRpb25zLG49LTE9PT1zLnNlbGVjdGVkSW5kZXg/IiI6c1tzLnNlbGVjdGVkSW5kZXhdLnZhbHVlO2kuc2V0VmFsdWUoZSx7dmFsdWU6bn0pfSkpfX1zdGF0aWMgc2V0QXR0cmlidXRlcyh7aHRtbDp0LGVsZW1lbnQ6ZSxzdG9yYWdlOnM9bnVsbCxpbnRlbnQ6aSxsaW5rU2VydmljZTpufSl7Y29uc3R7YXR0cmlidXRlczpyfT1lLGE9dCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50OyJyYWRpbyI9PT1yLnR5cGUmJihyLm5hbWU9YCR7ci5uYW1lfS0ke2l9YCk7Zm9yKGNvbnN0W2Usc11vZiBPYmplY3QuZW50cmllcyhyKSlpZihudWxsIT1zKXN3aXRjaChlKXtjYXNlImNsYXNzIjpzLmxlbmd0aCYmdC5zZXRBdHRyaWJ1dGUoZSxzLmpvaW4oIiAiKSk7YnJlYWs7Y2FzZSJkYXRhSWQiOmJyZWFrO2Nhc2UiaWQiOnQuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLHMpO2JyZWFrO2Nhc2Uic3R5bGUiOk9iamVjdC5hc3NpZ24odC5zdHlsZSxzKTticmVhaztjYXNlInRleHRDb250ZW50Ijp0LnRleHRDb250ZW50PXM7YnJlYWs7ZGVmYXVsdDooIWF8fCJocmVmIiE9PWUmJiJuZXdXaW5kb3ciIT09ZSkmJnQuc2V0QXR0cmlidXRlKGUscyl9YSYmbi5hZGRMaW5rQXR0cmlidXRlcyh0LHIuaHJlZixyLm5ld1dpbmRvdyk7cyYmci5kYXRhSWQmJnRoaXMuc2V0dXBTdG9yYWdlKHQsci5kYXRhSWQsZSxzKX1zdGF0aWMgcmVuZGVyKHQpe2NvbnN0IGU9dC5hbm5vdGF0aW9uU3RvcmFnZSxzPXQubGlua1NlcnZpY2Usbj10LnhmYUh0bWwscj10LmludGVudHx8ImRpc3BsYXkiLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuLm5hbWUpO24uYXR0cmlidXRlcyYmdGhpcy5zZXRBdHRyaWJ1dGVzKHtodG1sOmEsZWxlbWVudDpuLGludGVudDpyLGxpbmtTZXJ2aWNlOnN9KTtjb25zdCBvPVtbbiwtMSxhXV0sbD10LmRpdjtsLmFwcGVuZChhKTtpZih0LnZpZXdwb3J0KXtjb25zdCBlPWBtYXRyaXgoJHt0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIil9KWA7bC5zdHlsZS50cmFuc2Zvcm09ZX0icmljaFRleHQiIT09ciYmbC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwieGZhTGF5ZXIgeGZhRm9udCIpO2NvbnN0IGM9W107Zm9yKDtvLmxlbmd0aD4wOyl7Y29uc3RbdCxuLGFdPW8uYXQoLTEpO2lmKG4rMT09PXQuY2hpbGRyZW4ubGVuZ3RoKXtvLnBvcCgpO2NvbnRpbnVlfWNvbnN0IGw9dC5jaGlsZHJlblsrK28uYXQoLTEpWzFdXTtpZihudWxsPT09bCljb250aW51ZTtjb25zdHtuYW1lOmh9PWw7aWYoIiN0ZXh0Ij09PWgpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobC52YWx1ZSk7Yy5wdXNoKHQpO2EuYXBwZW5kKHQpO2NvbnRpbnVlfWxldCBkO2Q9bD8uYXR0cmlidXRlcz8ueG1sbnM/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGwuYXR0cmlidXRlcy54bWxucyxoKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KGgpO2EuYXBwZW5kKGQpO2wuYXR0cmlidXRlcyYmdGhpcy5zZXRBdHRyaWJ1dGVzKHtodG1sOmQsZWxlbWVudDpsLHN0b3JhZ2U6ZSxpbnRlbnQ6cixsaW5rU2VydmljZTpzfSk7aWYobC5jaGlsZHJlbiYmbC5jaGlsZHJlbi5sZW5ndGg+MClvLnB1c2goW2wsLTEsZF0pO2Vsc2UgaWYobC52YWx1ZSl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsLnZhbHVlKTtpLlhmYVRleHQuc2hvdWxkQnVpbGRUZXh0KGgpJiZjLnB1c2godCk7ZC5hcHBlbmQodCl9fWZvcihjb25zdCB0IG9mIGwucXVlcnlTZWxlY3RvckFsbCgiLnhmYU5vbkludGVyYWN0aXZlIGlucHV0LCAueGZhTm9uSW50ZXJhY3RpdmUgdGV4dGFyZWEiKSl0LnNldEF0dHJpYnV0ZSgicmVhZE9ubHkiLCEwKTtyZXR1cm57dGV4dERpdnM6Y319c3RhdGljIHVwZGF0ZSh0KXtjb25zdCBlPWBtYXRyaXgoJHt0LnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIil9KWA7dC5kaXYuc3R5bGUudHJhbnNmb3JtPWU7dC5kaXYuaGlkZGVuPSExfX19LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5UZXh0TGF5ZXJSZW5kZXJUYXNrPXZvaWQgMDtlLnJlbmRlclRleHRMYXllcj1mdW5jdGlvbiByZW5kZXJUZXh0TGF5ZXIodCl7Y29uc3QgZT1uZXcgVGV4dExheWVyUmVuZGVyVGFzayh7dGV4dENvbnRlbnQ6dC50ZXh0Q29udGVudCx0ZXh0Q29udGVudFN0cmVhbTp0LnRleHRDb250ZW50U3RyZWFtLGNvbnRhaW5lcjp0LmNvbnRhaW5lcix2aWV3cG9ydDp0LnZpZXdwb3J0LHRleHREaXZzOnQudGV4dERpdnMsdGV4dENvbnRlbnRJdGVtc1N0cjp0LnRleHRDb250ZW50SXRlbXNTdHJ9KTtlLl9yZW5kZXIodC50aW1lb3V0KTtyZXR1cm4gZX07dmFyIGk9cygxKTtjb25zdCBuPTMwLHI9bmV3IE1hcDtmdW5jdGlvbiBhcHBlbmRUZXh0KHQsZSxzLGEpe2NvbnN0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLGw9e2FuZ2xlOjAsY2FudmFzV2lkdGg6MCxoYXNUZXh0OiIiIT09ZS5zdHIsaGFzRU9MOmUuaGFzRU9MLGZvbnRTaXplOjB9O3QuX3RleHREaXZzLnB1c2gobyk7Y29uc3QgYz1pLlV0aWwudHJhbnNmb3JtKHQuX3ZpZXdwb3J0LnRyYW5zZm9ybSxlLnRyYW5zZm9ybSk7bGV0IGg9TWF0aC5hdGFuMihjWzFdLGNbMF0pO2NvbnN0IGQ9c1tlLmZvbnROYW1lXTtkLnZlcnRpY2FsJiYoaCs9TWF0aC5QSS8yKTtjb25zdCB1PU1hdGguaHlwb3QoY1syXSxjWzNdKSxwPXUqZnVuY3Rpb24gZ2V0QXNjZW50KHQsZSl7Y29uc3Qgcz1yLmdldCh0KTtpZihzKXJldHVybiBzO2Uuc2F2ZSgpO2UuZm9udD1gMzBweCAke3R9YDtjb25zdCBpPWUubWVhc3VyZVRleHQoIiIpO2xldCBhPWkuZm9udEJvdW5kaW5nQm94QXNjZW50LG89TWF0aC5hYnMoaS5mb250Qm91bmRpbmdCb3hEZXNjZW50KTtpZihhKXtlLnJlc3RvcmUoKTtjb25zdCBzPWEvKGErbyk7ci5zZXQodCxzKTtyZXR1cm4gc31lLnN0cm9rZVN0eWxlPSJyZWQiO2UuY2xlYXJSZWN0KDAsMCxuLG4pO2Uuc3Ryb2tlVGV4dCgiZyIsMCwwKTtsZXQgbD1lLmdldEltYWdlRGF0YSgwLDAsbixuKS5kYXRhO289MDtmb3IobGV0IHQ9bC5sZW5ndGgtMS0zO3Q+PTA7dC09NClpZihsW3RdPjApe289TWF0aC5jZWlsKHQvNC9uKTticmVha31lLmNsZWFyUmVjdCgwLDAsbixuKTtlLnN0cm9rZVRleHQoIkEiLDAsbik7bD1lLmdldEltYWdlRGF0YSgwLDAsbixuKS5kYXRhO2E9MDtmb3IobGV0IHQ9MCxlPWwubGVuZ3RoO3Q8ZTt0Kz00KWlmKGxbdF0+MCl7YT1uLU1hdGguZmxvb3IodC80L24pO2JyZWFrfWUucmVzdG9yZSgpO2lmKGEpe2NvbnN0IGU9YS8oYStvKTtyLnNldCh0LGUpO3JldHVybiBlfXIuc2V0KHQsLjgpO3JldHVybi44fShkLmZvbnRGYW1pbHksYSk7bGV0IGcsbTtpZigwPT09aCl7Zz1jWzRdO209Y1s1XS1wfWVsc2V7Zz1jWzRdK3AqTWF0aC5zaW4oaCk7bT1jWzVdLXAqTWF0aC5jb3MoaCl9by5zdHlsZS5sZWZ0PWAke2d9cHhgO28uc3R5bGUudG9wPWAke219cHhgO28uc3R5bGUuZm9udFNpemU9YCR7dX1weGA7by5zdHlsZS5mb250RmFtaWx5PWQuZm9udEZhbWlseTtsLmZvbnRTaXplPXU7by5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKTtvLnRleHRDb250ZW50PWUuc3RyO28uZGlyPWUuZGlyO3QuX2ZvbnRJbnNwZWN0b3JFbmFibGVkJiYoby5kYXRhc2V0LmZvbnROYW1lPWUuZm9udE5hbWUpOzAhPT1oJiYobC5hbmdsZT1oKigxODAvTWF0aC5QSSkpO2xldCBmPSExO2lmKGUuc3RyLmxlbmd0aD4xKWY9ITA7ZWxzZSBpZigiICIhPT1lLnN0ciYmZS50cmFuc2Zvcm1bMF0hPT1lLnRyYW5zZm9ybVszXSl7Y29uc3QgdD1NYXRoLmFicyhlLnRyYW5zZm9ybVswXSkscz1NYXRoLmFicyhlLnRyYW5zZm9ybVszXSk7dCE9PXMmJk1hdGgubWF4KHQscykvTWF0aC5taW4odCxzKT4xLjUmJihmPSEwKX1mJiYoZC52ZXJ0aWNhbD9sLmNhbnZhc1dpZHRoPWUuaGVpZ2h0KnQuX3ZpZXdwb3J0LnNjYWxlOmwuY2FudmFzV2lkdGg9ZS53aWR0aCp0Ll92aWV3cG9ydC5zY2FsZSk7dC5fdGV4dERpdlByb3BlcnRpZXMuc2V0KG8sbCk7dC5fdGV4dENvbnRlbnRTdHJlYW0mJnQuX2xheW91dFRleHQobyl9ZnVuY3Rpb24gcmVuZGVyKHQpe2lmKHQuX2NhbmNlbGVkKXJldHVybjtjb25zdCBlPXQuX3RleHREaXZzLHM9dC5fY2FwYWJpbGl0eTtpZihlLmxlbmd0aD4xZTUpe3QuX3JlbmRlcmluZ0RvbmU9ITA7cy5yZXNvbHZlKCl9ZWxzZXtpZighdC5fdGV4dENvbnRlbnRTdHJlYW0pZm9yKGNvbnN0IHMgb2YgZSl0Ll9sYXlvdXRUZXh0KHMpO3QuX3JlbmRlcmluZ0RvbmU9ITA7cy5yZXNvbHZlKCl9fWNsYXNzIFRleHRMYXllclJlbmRlclRhc2t7Y29uc3RydWN0b3Ioe3RleHRDb250ZW50OnQsdGV4dENvbnRlbnRTdHJlYW06ZSxjb250YWluZXI6cyx2aWV3cG9ydDpuLHRleHREaXZzOnIsdGV4dENvbnRlbnRJdGVtc1N0cjphfSl7dGhpcy5fdGV4dENvbnRlbnQ9dDt0aGlzLl90ZXh0Q29udGVudFN0cmVhbT1lO3RoaXMuX2NvbnRhaW5lcj1zO3RoaXMuX2RvY3VtZW50PXMub3duZXJEb2N1bWVudDt0aGlzLl92aWV3cG9ydD1uO3RoaXMuX3RleHREaXZzPXJ8fFtdO3RoaXMuX3RleHRDb250ZW50SXRlbXNTdHI9YXx8W107dGhpcy5fZm9udEluc3BlY3RvckVuYWJsZWQ9ISFnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3I/LmVuYWJsZWQ7dGhpcy5fcmVhZGVyPW51bGw7dGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZT1udWxsO3RoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseT1udWxsO3RoaXMuX2xheW91dFRleHRDdHg9bnVsbDt0aGlzLl90ZXh0RGl2UHJvcGVydGllcz1uZXcgV2Vha01hcDt0aGlzLl9yZW5kZXJpbmdEb25lPSExO3RoaXMuX2NhbmNlbGVkPSExO3RoaXMuX2NhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9yZW5kZXJUaW1lcj1udWxsO3RoaXMuX2JvdW5kcz1bXTt0aGlzLl9kZXZpY2VQaXhlbFJhdGlvPWdsb2JhbFRoaXMuZGV2aWNlUGl4ZWxSYXRpb3x8MTt0aGlzLl9jYXBhYmlsaXR5LnByb21pc2UuZmluYWxseSgoKCk9Pnt0aGlzLl90ZXh0RGl2UHJvcGVydGllcz1udWxsO2lmKHRoaXMuX2xheW91dFRleHRDdHgpe3RoaXMuX2xheW91dFRleHRDdHguY2FudmFzLndpZHRoPTA7dGhpcy5fbGF5b3V0VGV4dEN0eC5jYW52YXMuaGVpZ2h0PTA7dGhpcy5fbGF5b3V0VGV4dEN0eD1udWxsfX0pKS5jYXRjaCgoKCk9Pnt9KSl9Z2V0IHByb21pc2UoKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfWNhbmNlbCgpe3RoaXMuX2NhbmNlbGVkPSEwO2lmKHRoaXMuX3JlYWRlcil7dGhpcy5fcmVhZGVyLmNhbmNlbChuZXcgaS5BYm9ydEV4Y2VwdGlvbigiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLiIpKS5jYXRjaCgoKCk9Pnt9KSk7dGhpcy5fcmVhZGVyPW51bGx9aWYobnVsbCE9PXRoaXMuX3JlbmRlclRpbWVyKXtjbGVhclRpbWVvdXQodGhpcy5fcmVuZGVyVGltZXIpO3RoaXMuX3JlbmRlclRpbWVyPW51bGx9dGhpcy5fY2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJUZXh0TGF5ZXIgdGFzayBjYW5jZWxsZWQuIikpfV9wcm9jZXNzSXRlbXModCxlKXtmb3IoY29uc3QgcyBvZiB0KWlmKHZvaWQgMCE9PXMuc3RyKXt0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyLnB1c2gocy5zdHIpO2FwcGVuZFRleHQodGhpcyxzLGUsdGhpcy5fbGF5b3V0VGV4dEN0eCl9ZWxzZSBpZigiYmVnaW5NYXJrZWRDb250ZW50UHJvcHMiPT09cy50eXBlfHwiYmVnaW5NYXJrZWRDb250ZW50Ij09PXMudHlwZSl7Y29uc3QgdD10aGlzLl9jb250YWluZXI7dGhpcy5fY29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFya2VkQ29udGVudCIpO251bGwhPT1zLmlkJiZ0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKCJpZCIsYCR7cy5pZH1gKTt0LmFwcGVuZCh0aGlzLl9jb250YWluZXIpfWVsc2UiZW5kTWFya2VkQ29udGVudCI9PT1zLnR5cGUmJih0aGlzLl9jb250YWluZXI9dGhpcy5fY29udGFpbmVyLnBhcmVudE5vZGUpfV9sYXlvdXRUZXh0KHQpe2NvbnN0IGU9dGhpcy5fdGV4dERpdlByb3BlcnRpZXMuZ2V0KHQpO2xldCBzPSIiO2lmKDAhPT1lLmNhbnZhc1dpZHRoJiZlLmhhc1RleHQpe2NvbnN0e2ZvbnRGYW1pbHk6aX09dC5zdHlsZSx7Zm9udFNpemU6bn09ZTtpZihuIT09dGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZXx8aSE9PXRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseSl7dGhpcy5fbGF5b3V0VGV4dEN0eC5mb250PWAke24qdGhpcy5fZGV2aWNlUGl4ZWxSYXRpb31weCAke2l9YDt0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRTaXplPW47dGhpcy5fbGF5b3V0VGV4dExhc3RGb250RmFtaWx5PWl9Y29uc3R7d2lkdGg6cn09dGhpcy5fbGF5b3V0VGV4dEN0eC5tZWFzdXJlVGV4dCh0LnRleHRDb250ZW50KTtyPjAmJihzPWBzY2FsZVgoJHt0aGlzLl9kZXZpY2VQaXhlbFJhdGlvKmUuY2FudmFzV2lkdGgvcn0pYCl9MCE9PWUuYW5nbGUmJihzPWByb3RhdGUoJHtlLmFuZ2xlfWRlZykgJHtzfWApO3MubGVuZ3RoPjAmJih0LnN0eWxlLnRyYW5zZm9ybT1zKTtlLmhhc1RleHQmJnRoaXMuX2NvbnRhaW5lci5hcHBlbmQodCk7aWYoZS5oYXNFT0wpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTt0LnNldEF0dHJpYnV0ZSgicm9sZSIsInByZXNlbnRhdGlvbiIpO3RoaXMuX2NvbnRhaW5lci5hcHBlbmQodCl9fV9yZW5kZXIodD0wKXtjb25zdCBlPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7bGV0IHM9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3IuaGVpZ2h0PXIud2lkdGg9bjt0aGlzLl9sYXlvdXRUZXh0Q3R4PXIuZ2V0Q29udGV4dCgiMmQiLHthbHBoYTohMX0pO2lmKHRoaXMuX3RleHRDb250ZW50KXtjb25zdCB0PXRoaXMuX3RleHRDb250ZW50Lml0ZW1zLHM9dGhpcy5fdGV4dENvbnRlbnQuc3R5bGVzO3RoaXMuX3Byb2Nlc3NJdGVtcyh0LHMpO2UucmVzb2x2ZSgpfWVsc2V7aWYoIXRoaXMuX3RleHRDb250ZW50U3RyZWFtKXRocm93IG5ldyBFcnJvcignTmVpdGhlciAidGV4dENvbnRlbnQiIG5vciAidGV4dENvbnRlbnRTdHJlYW0iIHBhcmFtZXRlcnMgc3BlY2lmaWVkLicpO3tjb25zdCBwdW1wPSgpPT57dGhpcy5fcmVhZGVyLnJlYWQoKS50aGVuKCgoe3ZhbHVlOnQsZG9uZTppfSk9PntpZihpKWUucmVzb2x2ZSgpO2Vsc2V7T2JqZWN0LmFzc2lnbihzLHQuc3R5bGVzKTt0aGlzLl9wcm9jZXNzSXRlbXModC5pdGVtcyxzKTtwdW1wKCl9fSksZS5yZWplY3QpfTt0aGlzLl9yZWFkZXI9dGhpcy5fdGV4dENvbnRlbnRTdHJlYW0uZ2V0UmVhZGVyKCk7cHVtcCgpfX1lLnByb21pc2UudGhlbigoKCk9PntzPW51bGw7dD90aGlzLl9yZW5kZXJUaW1lcj1zZXRUaW1lb3V0KCgoKT0+e3JlbmRlcih0aGlzKTt0aGlzLl9yZW5kZXJUaW1lcj1udWxsfSksdCk6cmVuZGVyKHRoaXMpfSksdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QpfX1lLlRleHRMYXllclJlbmRlclRhc2s9VGV4dExheWVyUmVuZGVyVGFza30sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLlNWR0dyYXBoaWNzPXZvaWQgMDt2YXIgaT1zKDYpLG49cygxKSxyPXMoMTIpO2xldCBhPWNsYXNze2NvbnN0cnVjdG9yKCl7KDAsbi51bnJlYWNoYWJsZSkoIk5vdCBpbXBsZW1lbnRlZDogU1ZHR3JhcGhpY3MiKX19O2UuU1ZHR3JhcGhpY3M9YTt7Y29uc3Qgbz17Zm9udFN0eWxlOiJub3JtYWwiLGZvbnRXZWlnaHQ6Im5vcm1hbCIsZmlsbENvbG9yOiIjMDAwMDAwIn0sbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIixjPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixoPVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0sZD1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLGNyZWF0ZU9iamVjdFVSTD1mdW5jdGlvbih0LGU9IiIscz0hMSl7aWYoVVJMLmNyZWF0ZU9iamVjdFVSTCYmInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiYhcylyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdF0se3R5cGU6ZX0pKTtjb25zdCBpPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7bGV0IG49YGRhdGE6JHtlfTtiYXNlNjQsYDtmb3IobGV0IGU9MCxzPXQubGVuZ3RoO2U8cztlKz0zKXtjb25zdCByPTI1NSZ0W2VdLGE9MjU1JnRbZSsxXSxvPTI1NSZ0W2UrMl07bis9aVtyPj4yXStpWygzJnIpPDw0fGE+PjRdK2lbZSsxPHM/KDE1JmEpPDwyfG8+PjY6NjRdK2lbZSsyPHM/NjMmbzo2NF19cmV0dXJuIG59LHU9ZnVuY3Rpb24oKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KFsxMzcsODAsNzgsNzEsMTMsMTAsMjYsMTBdKSxlPW5ldyBJbnQzMkFycmF5KDI1Nik7Zm9yKGxldCB0PTA7dDwyNTY7dCsrKXtsZXQgcz10O2ZvcihsZXQgdD0wO3Q8ODt0Kyspcz0xJnM/Mzk4ODI5MjM4NF5zPj4xJjIxNDc0ODM2NDc6cz4+MSYyMTQ3NDgzNjQ3O2VbdF09c31mdW5jdGlvbiB3cml0ZVBuZ0NodW5rKHQscyxpLG4pe2xldCByPW47Y29uc3QgYT1zLmxlbmd0aDtpW3JdPWE+PjI0JjI1NTtpW3IrMV09YT4+MTYmMjU1O2lbcisyXT1hPj44JjI1NTtpW3IrM109MjU1JmE7cis9NDtpW3JdPTI1NSZ0LmNoYXJDb2RlQXQoMCk7aVtyKzFdPTI1NSZ0LmNoYXJDb2RlQXQoMSk7aVtyKzJdPTI1NSZ0LmNoYXJDb2RlQXQoMik7aVtyKzNdPTI1NSZ0LmNoYXJDb2RlQXQoMyk7cis9NDtpLnNldChzLHIpO3IrPXMubGVuZ3RoO2NvbnN0IG89ZnVuY3Rpb24gY3JjMzIodCxzLGkpe2xldCBuPS0xO2ZvcihsZXQgcj1zO3I8aTtyKyspe2NvbnN0IHM9MjU1JihuXnRbcl0pO249bj4+PjheZVtzXX1yZXR1cm4tMV5ufShpLG4rNCxyKTtpW3JdPW8+PjI0JjI1NTtpW3IrMV09bz4+MTYmMjU1O2lbcisyXT1vPj44JjI1NTtpW3IrM109MjU1Jm99ZnVuY3Rpb24gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQodCl7bGV0IGU9dC5sZW5ndGg7Y29uc3Qgcz02NTUzNSxpPU1hdGguY2VpbChlL3MpLG49bmV3IFVpbnQ4QXJyYXkoMitlKzUqaSs0KTtsZXQgcj0wO25bcisrXT0xMjA7bltyKytdPTE1NjtsZXQgYT0wO2Zvcig7ZT5zOyl7bltyKytdPTA7bltyKytdPTI1NTtuW3IrK109MjU1O25bcisrXT0wO25bcisrXT0wO24uc2V0KHQuc3ViYXJyYXkoYSxhK3MpLHIpO3IrPXM7YSs9cztlLT1zfW5bcisrXT0xO25bcisrXT0yNTUmZTtuW3IrK109ZT4+OCYyNTU7bltyKytdPTI1NSZ+ZTtuW3IrK109KDY1NTM1Jn5lKT4+OCYyNTU7bi5zZXQodC5zdWJhcnJheShhKSxyKTtyKz10Lmxlbmd0aC1hO2NvbnN0IG89ZnVuY3Rpb24gYWRsZXIzMih0LGUscyl7bGV0IGk9MSxuPTA7Zm9yKGxldCByPWU7cjxzOysrcil7aT0oaSsoMjU1JnRbcl0pKSU2NTUyMTtuPShuK2kpJTY1NTIxfXJldHVybiBuPDwxNnxpfSh0LDAsdC5sZW5ndGgpO25bcisrXT1vPj4yNCYyNTU7bltyKytdPW8+PjE2JjI1NTtuW3IrK109bz4+OCYyNTU7bltyKytdPTI1NSZvO3JldHVybiBufWZ1bmN0aW9uIGVuY29kZShlLHMsaSxhKXtjb25zdCBvPWUud2lkdGgsbD1lLmhlaWdodDtsZXQgYyxoLGQ7Y29uc3QgdT1lLmRhdGE7c3dpdGNoKHMpe2Nhc2Ugbi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6aD0wO2M9MTtkPW8rNz4+MzticmVhaztjYXNlIG4uSW1hZ2VLaW5kLlJHQl8yNEJQUDpoPTI7Yz04O2Q9MypvO2JyZWFrO2Nhc2Ugbi5JbWFnZUtpbmQuUkdCQV8zMkJQUDpoPTY7Yz04O2Q9NCpvO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdCIpfWNvbnN0IHA9bmV3IFVpbnQ4QXJyYXkoKDErZCkqbCk7bGV0IGc9MCxtPTA7Zm9yKGxldCB0PTA7dDxsOysrdCl7cFtnKytdPTA7cC5zZXQodS5zdWJhcnJheShtLG0rZCksZyk7bSs9ZDtnKz1kfWlmKHM9PT1uLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCYmYSl7Zz0wO2ZvcihsZXQgdD0wO3Q8bDt0Kyspe2crKztmb3IobGV0IHQ9MDt0PGQ7dCsrKXBbZysrXV49MjU1fX1jb25zdCBmPW5ldyBVaW50OEFycmF5KFtvPj4yNCYyNTUsbz4+MTYmMjU1LG8+PjgmMjU1LDI1NSZvLGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsMjU1JmwsYyxoLDAsMCwwXSksYj1mdW5jdGlvbiBkZWZsYXRlU3luYyh0KXtpZighci5pc05vZGVKUylyZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQodCk7dHJ5e2xldCBlO2U9cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKT49OD90OkJ1ZmZlci5mcm9tKHQpO2NvbnN0IHM9cmVxdWlyZSgiemxpYiIpLmRlZmxhdGVTeW5jKGUse2xldmVsOjl9KTtyZXR1cm4gcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/czpuZXcgVWludDhBcnJheShzKX1jYXRjaCh0KXsoMCxuLndhcm4pKCJOb3QgY29tcHJlc3NpbmcgUE5HIGJlY2F1c2UgemxpYi5kZWZsYXRlU3luYyBpcyB1bmF2YWlsYWJsZTogIit0KX1yZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQodCl9KHApLEE9dC5sZW5ndGgrMzYrZi5sZW5ndGgrYi5sZW5ndGgsXz1uZXcgVWludDhBcnJheShBKTtsZXQgdj0wO18uc2V0KHQsdik7dis9dC5sZW5ndGg7d3JpdGVQbmdDaHVuaygiSUhEUiIsZixfLHYpO3YrPTEyK2YubGVuZ3RoO3dyaXRlUG5nQ2h1bmsoIklEQVRBIixiLF8sdik7dis9MTIrYi5sZW5ndGg7d3JpdGVQbmdDaHVuaygiSUVORCIsbmV3IFVpbnQ4QXJyYXkoMCksXyx2KTtyZXR1cm4gY3JlYXRlT2JqZWN0VVJMKF8sImltYWdlL3BuZyIsaSl9cmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRJbWdEYXRhVG9QbmcodCxlLHMpe3JldHVybiBlbmNvZGUodCx2b2lkIDA9PT10LmtpbmQ/bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6dC5raW5kLGUscyl9fSgpO2NsYXNzIFNWR0V4dHJhU3RhdGV7Y29uc3RydWN0b3IoKXt0aGlzLmZvbnRTaXplU2NhbGU9MTt0aGlzLmZvbnRXZWlnaHQ9by5mb250V2VpZ2h0O3RoaXMuZm9udFNpemU9MDt0aGlzLnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVg7dGhpcy5mb250TWF0cml4PW4uRk9OVF9JREVOVElUWV9NQVRSSVg7dGhpcy5sZWFkaW5nPTA7dGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1uLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7dGhpcy50ZXh0TWF0cml4U2NhbGU9MTt0aGlzLng9MDt0aGlzLnk9MDt0aGlzLmxpbmVYPTA7dGhpcy5saW5lWT0wO3RoaXMuY2hhclNwYWNpbmc9MDt0aGlzLndvcmRTcGFjaW5nPTA7dGhpcy50ZXh0SFNjYWxlPTE7dGhpcy50ZXh0UmlzZT0wO3RoaXMuZmlsbENvbG9yPW8uZmlsbENvbG9yO3RoaXMuc3Ryb2tlQ29sb3I9IiMwMDAwMDAiO3RoaXMuZmlsbEFscGhhPTE7dGhpcy5zdHJva2VBbHBoYT0xO3RoaXMubGluZVdpZHRoPTE7dGhpcy5saW5lSm9pbj0iIjt0aGlzLmxpbmVDYXA9IiI7dGhpcy5taXRlckxpbWl0PTA7dGhpcy5kYXNoQXJyYXk9W107dGhpcy5kYXNoUGhhc2U9MDt0aGlzLmRlcGVuZGVuY2llcz1bXTt0aGlzLmFjdGl2ZUNsaXBVcmw9bnVsbDt0aGlzLmNsaXBHcm91cD1udWxsO3RoaXMubWFza0lkPSIifWNsb25lKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9c2V0Q3VycmVudFBvaW50KHQsZSl7dGhpcy54PXQ7dGhpcy55PWV9fWZ1bmN0aW9uIG9wTGlzdFRvVHJlZSh0KXtsZXQgZT1bXTtjb25zdCBzPVtdO2Zvcihjb25zdCBpIG9mIHQpaWYoInNhdmUiIT09aS5mbikicmVzdG9yZSI9PT1pLmZuP2U9cy5wb3AoKTplLnB1c2goaSk7ZWxzZXtlLnB1c2goe2ZuSWQ6OTIsZm46Imdyb3VwIixpdGVtczpbXX0pO3MucHVzaChlKTtlPWUuYXQoLTEpLml0ZW1zfXJldHVybiBlfWZ1bmN0aW9uIHBmKHQpe2lmKE51bWJlci5pc0ludGVnZXIodCkpcmV0dXJuIHQudG9TdHJpbmcoKTtjb25zdCBlPXQudG9GaXhlZCgxMCk7bGV0IHM9ZS5sZW5ndGgtMTtpZigiMCIhPT1lW3NdKXJldHVybiBlO2Rve3MtLX13aGlsZSgiMCI9PT1lW3NdKTtyZXR1cm4gZS5zdWJzdHJpbmcoMCwiLiI9PT1lW3NdP3M6cysxKX1mdW5jdGlvbiBwbSh0KXtpZigwPT09dFs0XSYmMD09PXRbNV0pe2lmKDA9PT10WzFdJiYwPT09dFsyXSlyZXR1cm4gMT09PXRbMF0mJjE9PT10WzNdPyIiOmBzY2FsZSgke3BmKHRbMF0pfSAke3BmKHRbM10pfSlgO2lmKHRbMF09PT10WzNdJiZ0WzFdPT09LXRbMl0pe3JldHVybmByb3RhdGUoJHtwZigxODAqTWF0aC5hY29zKHRbMF0pL01hdGguUEkpfSlgfX1lbHNlIGlmKDE9PT10WzBdJiYwPT09dFsxXSYmMD09PXRbMl0mJjE9PT10WzNdKXJldHVybmB0cmFuc2xhdGUoJHtwZih0WzRdKX0gJHtwZih0WzVdKX0pYDtyZXR1cm5gbWF0cml4KCR7cGYodFswXSl9ICR7cGYodFsxXSl9ICR7cGYodFsyXSl9ICR7cGYodFszXSl9ICR7cGYodFs0XSl9ICR7cGYodFs1XSl9KWB9bGV0IHA9MCxnPTAsbT0wO2UuU1ZHR3JhcGhpY3M9YT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscz0hMSl7KDAsaS5kZXByZWNhdGVkKSgiVGhlIFNWRyBiYWNrLWVuZCBpcyBubyBsb25nZXIgbWFpbnRhaW5lZCBhbmQgKm1heSogYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiIpO3RoaXMuc3ZnRmFjdG9yeT1uZXcgaS5ET01TVkdGYWN0b3J5O3RoaXMuY3VycmVudD1uZXcgU1ZHRXh0cmFTdGF0ZTt0aGlzLnRyYW5zZm9ybU1hdHJpeD1uLklERU5USVRZX01BVFJJWDt0aGlzLnRyYW5zZm9ybVN0YWNrPVtdO3RoaXMuZXh0cmFTdGFjaz1bXTt0aGlzLmNvbW1vbk9ianM9dDt0aGlzLm9ianM9ZTt0aGlzLnBlbmRpbmdDbGlwPW51bGw7dGhpcy5wZW5kaW5nRU9GaWxsPSExO3RoaXMuZW1iZWRGb250cz0hMTt0aGlzLmVtYmVkZGVkRm9udHM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmNzc1N0eWxlPW51bGw7dGhpcy5mb3JjZURhdGFTY2hlbWE9ISFzO3RoaXMuX29wZXJhdG9ySWRNYXBwaW5nPVtdO2Zvcihjb25zdCB0IGluIG4uT1BTKXRoaXMuX29wZXJhdG9ySWRNYXBwaW5nW24uT1BTW3RdXT10fWdldE9iamVjdCh0LGU9bnVsbCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3RhcnRzV2l0aCgiZ18iKT90aGlzLmNvbW1vbk9ianMuZ2V0KHQpOnRoaXMub2Jqcy5nZXQodCk6ZX1zYXZlKCl7dGhpcy50cmFuc2Zvcm1TdGFjay5wdXNoKHRoaXMudHJhbnNmb3JtTWF0cml4KTtjb25zdCB0PXRoaXMuY3VycmVudDt0aGlzLmV4dHJhU3RhY2sucHVzaCh0KTt0aGlzLmN1cnJlbnQ9dC5jbG9uZSgpfXJlc3RvcmUoKXt0aGlzLnRyYW5zZm9ybU1hdHJpeD10aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpO3RoaXMuY3VycmVudD10aGlzLmV4dHJhU3RhY2sucG9wKCk7dGhpcy5wZW5kaW5nQ2xpcD1udWxsO3RoaXMudGdycD1udWxsfWdyb3VwKHQpe3RoaXMuc2F2ZSgpO3RoaXMuZXhlY3V0ZU9wVHJlZSh0KTt0aGlzLnJlc3RvcmUoKX1sb2FkRGVwZW5kZW5jaWVzKHQpe2NvbnN0IGU9dC5mbkFycmF5LHM9dC5hcmdzQXJyYXk7Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKWlmKGVbdF09PT1uLk9QUy5kZXBlbmRlbmN5KWZvcihjb25zdCBlIG9mIHNbdF0pe2NvbnN0IHQ9ZS5zdGFydHNXaXRoKCJnXyIpP3RoaXMuY29tbW9uT2Jqczp0aGlzLm9ianMscz1uZXcgUHJvbWlzZSgocz0+e3QuZ2V0KGUscyl9KSk7dGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcy5wdXNoKHMpfXJldHVybiBQcm9taXNlLmFsbCh0aGlzLmN1cnJlbnQuZGVwZW5kZW5jaWVzKX10cmFuc2Zvcm0odCxlLHMsaSxyLGEpe2NvbnN0IG89W3QsZSxzLGkscixhXTt0aGlzLnRyYW5zZm9ybU1hdHJpeD1uLlV0aWwudHJhbnNmb3JtKHRoaXMudHJhbnNmb3JtTWF0cml4LG8pO3RoaXMudGdycD1udWxsfWdldFNWRyh0LGUpe3RoaXMudmlld3BvcnQ9ZTtjb25zdCBzPXRoaXMuX2luaXRpYWxpemUoZSk7cmV0dXJuIHRoaXMubG9hZERlcGVuZGVuY2llcyh0KS50aGVuKCgoKT0+e3RoaXMudHJhbnNmb3JtTWF0cml4PW4uSURFTlRJVFlfTUFUUklYO3RoaXMuZXhlY3V0ZU9wVHJlZSh0aGlzLmNvbnZlcnRPcExpc3QodCkpO3JldHVybiBzfSkpfWNvbnZlcnRPcExpc3QodCl7Y29uc3QgZT10aGlzLl9vcGVyYXRvcklkTWFwcGluZyxzPXQuYXJnc0FycmF5LGk9dC5mbkFycmF5LG49W107Zm9yKGxldCB0PTAscj1pLmxlbmd0aDt0PHI7dCsrKXtjb25zdCByPWlbdF07bi5wdXNoKHtmbklkOnIsZm46ZVtyXSxhcmdzOnNbdF19KX1yZXR1cm4gb3BMaXN0VG9UcmVlKG4pfWV4ZWN1dGVPcFRyZWUodCl7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1lLmZuLHM9ZS5mbklkLGk9ZS5hcmdzO3N3aXRjaCgwfHMpe2Nhc2Ugbi5PUFMuYmVnaW5UZXh0OnRoaXMuYmVnaW5UZXh0KCk7YnJlYWs7Y2FzZSBuLk9QUy5kZXBlbmRlbmN5OmJyZWFrO2Nhc2Ugbi5PUFMuc2V0TGVhZGluZzp0aGlzLnNldExlYWRpbmcoaSk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRMZWFkaW5nTW92ZVRleHQ6dGhpcy5zZXRMZWFkaW5nTW92ZVRleHQoaVswXSxpWzFdKTticmVhaztjYXNlIG4uT1BTLnNldEZvbnQ6dGhpcy5zZXRGb250KGkpO2JyZWFrO2Nhc2Ugbi5PUFMuc2hvd1RleHQ6Y2FzZSBuLk9QUy5zaG93U3BhY2VkVGV4dDp0aGlzLnNob3dUZXh0KGlbMF0pO2JyZWFrO2Nhc2Ugbi5PUFMuZW5kVGV4dDp0aGlzLmVuZFRleHQoKTticmVhaztjYXNlIG4uT1BTLm1vdmVUZXh0OnRoaXMubW92ZVRleHQoaVswXSxpWzFdKTticmVhaztjYXNlIG4uT1BTLnNldENoYXJTcGFjaW5nOnRoaXMuc2V0Q2hhclNwYWNpbmcoaVswXSk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRXb3JkU3BhY2luZzp0aGlzLnNldFdvcmRTcGFjaW5nKGlbMF0pO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0SFNjYWxlOnRoaXMuc2V0SFNjYWxlKGlbMF0pO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0VGV4dE1hdHJpeDp0aGlzLnNldFRleHRNYXRyaXgoaVswXSxpWzFdLGlbMl0saVszXSxpWzRdLGlbNV0pO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0VGV4dFJpc2U6dGhpcy5zZXRUZXh0UmlzZShpWzBdKTticmVhaztjYXNlIG4uT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlOnRoaXMuc2V0VGV4dFJlbmRlcmluZ01vZGUoaVswXSk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRMaW5lV2lkdGg6dGhpcy5zZXRMaW5lV2lkdGgoaVswXSk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRMaW5lSm9pbjp0aGlzLnNldExpbmVKb2luKGlbMF0pO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0TGluZUNhcDp0aGlzLnNldExpbmVDYXAoaVswXSk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRNaXRlckxpbWl0OnRoaXMuc2V0TWl0ZXJMaW1pdChpWzBdKTticmVhaztjYXNlIG4uT1BTLnNldEZpbGxSR0JDb2xvcjp0aGlzLnNldEZpbGxSR0JDb2xvcihpWzBdLGlbMV0saVsyXSk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRTdHJva2VSR0JDb2xvcjp0aGlzLnNldFN0cm9rZVJHQkNvbG9yKGlbMF0saVsxXSxpWzJdKTticmVhaztjYXNlIG4uT1BTLnNldFN0cm9rZUNvbG9yTjp0aGlzLnNldFN0cm9rZUNvbG9yTihpKTticmVhaztjYXNlIG4uT1BTLnNldEZpbGxDb2xvck46dGhpcy5zZXRGaWxsQ29sb3JOKGkpO2JyZWFrO2Nhc2Ugbi5PUFMuc2hhZGluZ0ZpbGw6dGhpcy5zaGFkaW5nRmlsbChpWzBdKTticmVhaztjYXNlIG4uT1BTLnNldERhc2g6dGhpcy5zZXREYXNoKGlbMF0saVsxXSk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQ6dGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQoaVswXSk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRGbGF0bmVzczp0aGlzLnNldEZsYXRuZXNzKGlbMF0pO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0R1N0YXRlOnRoaXMuc2V0R1N0YXRlKGlbMF0pO2JyZWFrO2Nhc2Ugbi5PUFMuZmlsbDp0aGlzLmZpbGwoKTticmVhaztjYXNlIG4uT1BTLmVvRmlsbDp0aGlzLmVvRmlsbCgpO2JyZWFrO2Nhc2Ugbi5PUFMuc3Ryb2tlOnRoaXMuc3Ryb2tlKCk7YnJlYWs7Y2FzZSBuLk9QUy5maWxsU3Ryb2tlOnRoaXMuZmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2Ugbi5PUFMuZW9GaWxsU3Ryb2tlOnRoaXMuZW9GaWxsU3Ryb2tlKCk7YnJlYWs7Y2FzZSBuLk9QUy5jbGlwOnRoaXMuY2xpcCgibm9uemVybyIpO2JyZWFrO2Nhc2Ugbi5PUFMuZW9DbGlwOnRoaXMuY2xpcCgiZXZlbm9kZCIpO2JyZWFrO2Nhc2Ugbi5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOnRoaXMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKCk7YnJlYWs7Y2FzZSBuLk9QUy5wYWludEltYWdlWE9iamVjdDp0aGlzLnBhaW50SW1hZ2VYT2JqZWN0KGlbMF0pO2JyZWFrO2Nhc2Ugbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6dGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChpWzBdKTticmVhaztjYXNlIG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDp0aGlzLnBhaW50SW1hZ2VNYXNrWE9iamVjdChpWzBdKTticmVhaztjYXNlIG4uT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbjp0aGlzLnBhaW50Rm9ybVhPYmplY3RCZWdpbihpWzBdLGlbMV0pO2JyZWFrO2Nhc2Ugbi5PUFMucGFpbnRGb3JtWE9iamVjdEVuZDp0aGlzLnBhaW50Rm9ybVhPYmplY3RFbmQoKTticmVhaztjYXNlIG4uT1BTLmNsb3NlUGF0aDp0aGlzLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2Ugbi5PUFMuY2xvc2VTdHJva2U6dGhpcy5jbG9zZVN0cm9rZSgpO2JyZWFrO2Nhc2Ugbi5PUFMuY2xvc2VGaWxsU3Ryb2tlOnRoaXMuY2xvc2VGaWxsU3Ryb2tlKCk7YnJlYWs7Y2FzZSBuLk9QUy5jbG9zZUVPRmlsbFN0cm9rZTp0aGlzLmNsb3NlRU9GaWxsU3Ryb2tlKCk7YnJlYWs7Y2FzZSBuLk9QUy5uZXh0TGluZTp0aGlzLm5leHRMaW5lKCk7YnJlYWs7Y2FzZSBuLk9QUy50cmFuc2Zvcm06dGhpcy50cmFuc2Zvcm0oaVswXSxpWzFdLGlbMl0saVszXSxpWzRdLGlbNV0pO2JyZWFrO2Nhc2Ugbi5PUFMuY29uc3RydWN0UGF0aDp0aGlzLmNvbnN0cnVjdFBhdGgoaVswXSxpWzFdKTticmVhaztjYXNlIG4uT1BTLmVuZFBhdGg6dGhpcy5lbmRQYXRoKCk7YnJlYWs7Y2FzZSA5Mjp0aGlzLmdyb3VwKGUuaXRlbXMpO2JyZWFrO2RlZmF1bHQ6KDAsbi53YXJuKShgVW5pbXBsZW1lbnRlZCBvcGVyYXRvciAke3R9YCl9fX1zZXRXb3JkU3BhY2luZyh0KXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9dH1zZXRDaGFyU3BhY2luZyh0KXt0aGlzLmN1cnJlbnQuY2hhclNwYWNpbmc9dH1uZXh0TGluZSgpe3RoaXMubW92ZVRleHQoMCx0aGlzLmN1cnJlbnQubGVhZGluZyl9c2V0VGV4dE1hdHJpeCh0LGUscyxpLG4scil7Y29uc3QgYT10aGlzLmN1cnJlbnQ7YS50ZXh0TWF0cml4PWEubGluZU1hdHJpeD1bdCxlLHMsaSxuLHJdO2EudGV4dE1hdHJpeFNjYWxlPU1hdGguaHlwb3QodCxlKTthLng9YS5saW5lWD0wO2EueT1hLmxpbmVZPTA7YS54Y29vcmRzPVtdO2EueWNvb3Jkcz1bXTthLnRzcGFuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dHNwYW4iKTthLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtZmFtaWx5IixhLmZvbnRGYW1pbHkpO2EudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zaXplIixgJHtwZihhLmZvbnRTaXplKX1weGApO2EudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIscGYoLWEueSkpO2EudHh0RWxlbWVudD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRleHQiKTthLnR4dEVsZW1lbnQuYXBwZW5kKGEudHNwYW4pfWJlZ2luVGV4dCgpe2NvbnN0IHQ9dGhpcy5jdXJyZW50O3QueD10LmxpbmVYPTA7dC55PXQubGluZVk9MDt0LnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVg7dC5saW5lTWF0cml4PW4uSURFTlRJVFlfTUFUUklYO3QudGV4dE1hdHJpeFNjYWxlPTE7dC50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIik7dC50eHRFbGVtZW50PXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dGV4dCIpO3QudHh0Z3JwPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpO3QueGNvb3Jkcz1bXTt0Lnljb29yZHM9W119bW92ZVRleHQodCxlKXtjb25zdCBzPXRoaXMuY3VycmVudDtzLng9cy5saW5lWCs9dDtzLnk9cy5saW5lWSs9ZTtzLnhjb29yZHM9W107cy55Y29vcmRzPVtdO3MudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpO3MudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLHMuZm9udEZhbWlseSk7cy50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLGAke3BmKHMuZm9udFNpemUpfXB4YCk7cy50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixwZigtcy55KSl9c2hvd1RleHQodCl7Y29uc3QgZT10aGlzLmN1cnJlbnQscz1lLmZvbnQsaT1lLmZvbnRTaXplO2lmKDA9PT1pKXJldHVybjtjb25zdCByPWUuZm9udFNpemVTY2FsZSxhPWUuY2hhclNwYWNpbmcsYz1lLndvcmRTcGFjaW5nLGg9ZS5mb250RGlyZWN0aW9uLGQ9ZS50ZXh0SFNjYWxlKmgsdT1zLnZlcnRpY2FsLHA9dT8xOi0xLGc9cy5kZWZhdWx0Vk1ldHJpY3MsbT1pKmUuZm9udE1hdHJpeFswXTtsZXQgZj0wO2Zvcihjb25zdCBuIG9mIHQpe2lmKG51bGw9PT1uKXtmKz1oKmM7Y29udGludWV9aWYoIm51bWJlciI9PXR5cGVvZiBuKXtmKz1wKm4qaS8xZTM7Y29udGludWV9Y29uc3QgdD0obi5pc1NwYWNlP2M6MCkrYSxvPW4uZm9udENoYXI7bGV0IGwsZCxiLEE9bi53aWR0aDtpZih1KXtsZXQgdDtjb25zdCBlPW4udm1ldHJpY3x8Zzt0PW4udm1ldHJpYz9lWzFdOi41KkE7dD0tdCptO2NvbnN0IHM9ZVsyXSptO0E9ZT8tZVswXTpBO2w9dC9yO2Q9KGYrcykvcn1lbHNle2w9Zi9yO2Q9MH1pZihuLmlzSW5Gb250fHxzLm1pc3NpbmdGaWxlKXtlLnhjb29yZHMucHVzaChlLngrbCk7dSYmZS55Y29vcmRzLnB1c2goLWUueStkKTtlLnRzcGFuLnRleHRDb250ZW50Kz1vfWI9dT9BKm0tdCpoOkEqbSt0Kmg7Zis9Yn1lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLGUueGNvb3Jkcy5tYXAocGYpLmpvaW4oIiAiKSk7dT9lLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLGUueWNvb3Jkcy5tYXAocGYpLmpvaW4oIiAiKSk6ZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixwZigtZS55KSk7dT9lLnktPWY6ZS54Kz1mKmQ7ZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KTtlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtc2l6ZSIsYCR7cGYoZS5mb250U2l6ZSl9cHhgKTtlLmZvbnRTdHlsZSE9PW8uZm9udFN0eWxlJiZlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtc3R5bGUiLGUuZm9udFN0eWxlKTtlLmZvbnRXZWlnaHQhPT1vLmZvbnRXZWlnaHQmJmUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCk7Y29uc3QgYj1lLnRleHRSZW5kZXJpbmdNb2RlJm4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztpZihiPT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMfHxiPT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSl7ZS5maWxsQ29sb3IhPT1vLmZpbGxDb2xvciYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIixlLmZpbGxDb2xvcik7ZS5maWxsQWxwaGE8MSYmZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLW9wYWNpdHkiLGUuZmlsbEFscGhhKX1lbHNlIGUudGV4dFJlbmRlcmluZ01vZGU9PT1uLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIP2UudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsInRyYW5zcGFyZW50Iik6ZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpO2lmKGI9PT1uLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRXx8Yj09PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0Upe2NvbnN0IHQ9MS8oZS50ZXh0TWF0cml4U2NhbGV8fDEpO3RoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXMoZS50c3Bhbix0KX1sZXQgQT1lLnRleHRNYXRyaXg7aWYoMCE9PWUudGV4dFJpc2Upe0E9QS5zbGljZSgpO0FbNV0rPWUudGV4dFJpc2V9ZS50eHRFbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsYCR7cG0oQSl9IHNjYWxlKCR7cGYoZCl9LCAtMSlgKTtlLnR4dEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobCwieG1sOnNwYWNlIiwicHJlc2VydmUiKTtlLnR4dEVsZW1lbnQuYXBwZW5kKGUudHNwYW4pO2UudHh0Z3JwLmFwcGVuZChlLnR4dEVsZW1lbnQpO3RoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGUudHh0RWxlbWVudCl9c2V0TGVhZGluZ01vdmVUZXh0KHQsZSl7dGhpcy5zZXRMZWFkaW5nKC1lKTt0aGlzLm1vdmVUZXh0KHQsZSl9YWRkRm9udFN0eWxlKHQpe2lmKCF0LmRhdGEpdGhyb3cgbmV3IEVycm9yKCdhZGRGb250U3R5bGU6IE5vIGZvbnQgZGF0YSBhdmFpbGFibGUsIGVuc3VyZSB0aGF0IHRoZSAiZm9udEV4dHJhUHJvcGVydGllcyIgQVBJIHBhcmFtZXRlciBpcyBzZXQuJyk7aWYoIXRoaXMuY3NzU3R5bGUpe3RoaXMuY3NzU3R5bGU9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpzdHlsZSIpO3RoaXMuY3NzU3R5bGUuc2V0QXR0cmlidXRlTlMobnVsbCwidHlwZSIsInRleHQvY3NzIik7dGhpcy5kZWZzLmFwcGVuZCh0aGlzLmNzc1N0eWxlKX1jb25zdCBlPWNyZWF0ZU9iamVjdFVSTCh0LmRhdGEsdC5taW1ldHlwZSx0aGlzLmZvcmNlRGF0YVNjaGVtYSk7dGhpcy5jc3NTdHlsZS50ZXh0Q29udGVudCs9YEBmb250LWZhY2UgeyBmb250LWZhbWlseTogIiR7dC5sb2FkZWROYW1lfSI7IHNyYzogdXJsKCR7ZX0pOyB9XG5gfXNldEZvbnQodCl7Y29uc3QgZT10aGlzLmN1cnJlbnQscz10aGlzLmNvbW1vbk9ianMuZ2V0KHRbMF0pO2xldCBpPXRbMV07ZS5mb250PXM7aWYodGhpcy5lbWJlZEZvbnRzJiYhcy5taXNzaW5nRmlsZSYmIXRoaXMuZW1iZWRkZWRGb250c1tzLmxvYWRlZE5hbWVdKXt0aGlzLmFkZEZvbnRTdHlsZShzKTt0aGlzLmVtYmVkZGVkRm9udHNbcy5sb2FkZWROYW1lXT1zfWUuZm9udE1hdHJpeD1zLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVg7bGV0IHI9Im5vcm1hbCI7cy5ibGFjaz9yPSI5MDAiOnMuYm9sZCYmKHI9ImJvbGQiKTtjb25zdCBhPXMuaXRhbGljPyJpdGFsaWMiOiJub3JtYWwiO2lmKGk8MCl7aT0taTtlLmZvbnREaXJlY3Rpb249LTF9ZWxzZSBlLmZvbnREaXJlY3Rpb249MTtlLmZvbnRTaXplPWk7ZS5mb250RmFtaWx5PXMubG9hZGVkTmFtZTtlLmZvbnRXZWlnaHQ9cjtlLmZvbnRTdHlsZT1hO2UudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpO2UudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIscGYoLWUueSkpO2UueGNvb3Jkcz1bXTtlLnljb29yZHM9W119ZW5kVGV4dCgpe2NvbnN0IHQ9dGhpcy5jdXJyZW50O2lmKHQudGV4dFJlbmRlcmluZ01vZGUmbi5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHJiZ0LnR4dEVsZW1lbnQ/Lmhhc0NoaWxkTm9kZXMoKSl7dC5lbGVtZW50PXQudHh0RWxlbWVudDt0aGlzLmNsaXAoIm5vbnplcm8iKTt0aGlzLmVuZFBhdGgoKX19c2V0TGluZVdpZHRoKHQpe3Q+MCYmKHRoaXMuY3VycmVudC5saW5lV2lkdGg9dCl9c2V0TGluZUNhcCh0KXt0aGlzLmN1cnJlbnQubGluZUNhcD1oW3RdfXNldExpbmVKb2luKHQpe3RoaXMuY3VycmVudC5saW5lSm9pbj1kW3RdfXNldE1pdGVyTGltaXQodCl7dGhpcy5jdXJyZW50Lm1pdGVyTGltaXQ9dH1zZXRTdHJva2VBbHBoYSh0KXt0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE9dH1zZXRTdHJva2VSR0JDb2xvcih0LGUscyl7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPW4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHMpfXNldEZpbGxBbHBoYSh0KXt0aGlzLmN1cnJlbnQuZmlsbEFscGhhPXR9c2V0RmlsbFJHQkNvbG9yKHQsZSxzKXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPW4uVXRpbC5tYWtlSGV4Q29sb3IodCxlLHMpO3RoaXMuY3VycmVudC50c3Bhbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnRzcGFuIik7dGhpcy5jdXJyZW50Lnhjb29yZHM9W107dGhpcy5jdXJyZW50Lnljb29yZHM9W119c2V0U3Ryb2tlQ29sb3JOKHQpe3RoaXMuY3VycmVudC5zdHJva2VDb2xvcj10aGlzLl9tYWtlQ29sb3JOX1BhdHRlcm4odCl9c2V0RmlsbENvbG9yTih0KXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPXRoaXMuX21ha2VDb2xvck5fUGF0dGVybih0KX1zaGFkaW5nRmlsbCh0KXtjb25zdCBlPXRoaXMudmlld3BvcnQud2lkdGgscz10aGlzLnZpZXdwb3J0LmhlaWdodCxpPW4uVXRpbC5pbnZlcnNlVHJhbnNmb3JtKHRoaXMudHJhbnNmb3JtTWF0cml4KSxyPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCwwXSxpKSxhPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCxzXSxpKSxvPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbZSwwXSxpKSxsPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbZSxzXSxpKSxjPU1hdGgubWluKHJbMF0sYVswXSxvWzBdLGxbMF0pLGg9TWF0aC5taW4oclsxXSxhWzFdLG9bMV0sbFsxXSksZD1NYXRoLm1heChyWzBdLGFbMF0sb1swXSxsWzBdKSx1PU1hdGgubWF4KHJbMV0sYVsxXSxvWzFdLGxbMV0pLHA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixjKTtwLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLGgpO3Auc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLGQtYyk7cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLHUtaCk7cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIix0aGlzLl9tYWtlU2hhZGluZ1BhdHRlcm4odCkpO3RoaXMuY3VycmVudC5maWxsQWxwaGE8MSYmcC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLW9wYWNpdHkiLHRoaXMuY3VycmVudC5maWxsQWxwaGEpO3RoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKHApfV9tYWtlQ29sb3JOX1BhdHRlcm4odCl7cmV0dXJuIlRpbGluZ1BhdHRlcm4iPT09dFswXT90aGlzLl9tYWtlVGlsaW5nUGF0dGVybih0KTp0aGlzLl9tYWtlU2hhZGluZ1BhdHRlcm4odCl9X21ha2VUaWxpbmdQYXR0ZXJuKHQpe2NvbnN0IGU9dFsxXSxzPXRbMl0saT10WzNdfHxuLklERU5USVRZX01BVFJJWCxbcixhLG8sbF09dFs0XSxjPXRbNV0saD10WzZdLGQ9dFs3XSx1PSJzaGFkaW5nIittKyssW3AsZyxmLGJdPW4uVXRpbC5ub3JtYWxpemVSZWN0KFsuLi5uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3IsYV0saSksLi4ubi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtvLGxdLGkpXSksW0EsX109bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGkpLHY9YypBLHk9aCpfLFM9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpwYXR0ZXJuIik7Uy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsdSk7Uy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJwYXR0ZXJuVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpO1Muc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLHYpO1Muc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0Iix5KTtTLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLGAke3B9YCk7Uy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixgJHtnfWApO2NvbnN0IHg9dGhpcy5zdmcsRT10aGlzLnRyYW5zZm9ybU1hdHJpeCxDPXRoaXMuY3VycmVudC5maWxsQ29sb3IsUD10aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IsVD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKGYtcCxiLWcpO3RoaXMuc3ZnPVQ7dGhpcy50cmFuc2Zvcm1NYXRyaXg9aTtpZigyPT09ZCl7Y29uc3QgdD1uLlV0aWwubWFrZUhleENvbG9yKC4uLmUpO3RoaXMuY3VycmVudC5maWxsQ29sb3I9dDt0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3I9dH10aGlzLmV4ZWN1dGVPcFRyZWUodGhpcy5jb252ZXJ0T3BMaXN0KHMpKTt0aGlzLnN2Zz14O3RoaXMudHJhbnNmb3JtTWF0cml4PUU7dGhpcy5jdXJyZW50LmZpbGxDb2xvcj1DO3RoaXMuY3VycmVudC5zdHJva2VDb2xvcj1QO1MuYXBwZW5kKFQuY2hpbGROb2Rlc1swXSk7dGhpcy5kZWZzLmFwcGVuZChTKTtyZXR1cm5gdXJsKCMke3V9KWB9X21ha2VTaGFkaW5nUGF0dGVybih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PXRoaXMub2Jqcy5nZXQodCkpO3N3aXRjaCh0WzBdKXtjYXNlIlJhZGlhbEF4aWFsIjpjb25zdCBlPSJzaGFkaW5nIittKysscz10WzNdO2xldCBpO3N3aXRjaCh0WzFdKXtjYXNlImF4aWFsIjpjb25zdCBzPXRbNF0sbj10WzVdO2k9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpsaW5lYXJHcmFkaWVudCIpO2kuc2V0QXR0cmlidXRlTlMobnVsbCwiaWQiLGUpO2kuc2V0QXR0cmlidXRlTlMobnVsbCwiZ3JhZGllbnRVbml0cyIsInVzZXJTcGFjZU9uVXNlIik7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4MSIsc1swXSk7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5MSIsc1sxXSk7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4MiIsblswXSk7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5MiIsblsxXSk7YnJlYWs7Y2FzZSJyYWRpYWwiOmNvbnN0IHI9dFs0XSxhPXRbNV0sbz10WzZdLGw9dFs3XTtpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmFkaWFsR3JhZGllbnQiKTtpLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixlKTtpLnNldEF0dHJpYnV0ZU5TKG51bGwsImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpO2kuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLGFbMF0pO2kuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLGFbMV0pO2kuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsbCk7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeCIsclswXSk7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmeSIsclsxXSk7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmciIsbyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gUmFkaWFsQXhpYWwgdHlwZTogJHt0WzFdfWApfWZvcihjb25zdCB0IG9mIHMpe2NvbnN0IGU9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpzdG9wIik7ZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvZmZzZXQiLHRbMF0pO2Uuc2V0QXR0cmlidXRlTlMobnVsbCwic3RvcC1jb2xvciIsdFsxXSk7aS5hcHBlbmQoZSl9dGhpcy5kZWZzLmFwcGVuZChpKTtyZXR1cm5gdXJsKCMke2V9KWA7Y2FzZSJNZXNoIjooMCxuLndhcm4pKCJVbmltcGxlbWVudGVkIHBhdHRlcm4gTWVzaCIpO3JldHVybiBudWxsO2Nhc2UiRHVtbXkiOnJldHVybiJob3RwaW5rIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBJUiB0eXBlOiAke3RbMF19YCl9fXNldERhc2godCxlKXt0aGlzLmN1cnJlbnQuZGFzaEFycmF5PXQ7dGhpcy5jdXJyZW50LmRhc2hQaGFzZT1lfWNvbnN0cnVjdFBhdGgodCxlKXtjb25zdCBzPXRoaXMuY3VycmVudDtsZXQgaT1zLngscj1zLnksYT1bXSxvPTA7Zm9yKGNvbnN0IHMgb2YgdClzd2l0Y2goMHxzKXtjYXNlIG4uT1BTLnJlY3RhbmdsZTppPWVbbysrXTtyPWVbbysrXTtjb25zdCB0PWkrZVtvKytdLHM9citlW28rK107YS5wdXNoKCJNIixwZihpKSxwZihyKSwiTCIscGYodCkscGYociksIkwiLHBmKHQpLHBmKHMpLCJMIixwZihpKSxwZihzKSwiWiIpO2JyZWFrO2Nhc2Ugbi5PUFMubW92ZVRvOmk9ZVtvKytdO3I9ZVtvKytdO2EucHVzaCgiTSIscGYoaSkscGYocikpO2JyZWFrO2Nhc2Ugbi5PUFMubGluZVRvOmk9ZVtvKytdO3I9ZVtvKytdO2EucHVzaCgiTCIscGYoaSkscGYocikpO2JyZWFrO2Nhc2Ugbi5PUFMuY3VydmVUbzppPWVbbys0XTtyPWVbbys1XTthLnB1c2goIkMiLHBmKGVbb10pLHBmKGVbbysxXSkscGYoZVtvKzJdKSxwZihlW28rM10pLHBmKGkpLHBmKHIpKTtvKz02O2JyZWFrO2Nhc2Ugbi5PUFMuY3VydmVUbzI6YS5wdXNoKCJDIixwZihpKSxwZihyKSxwZihlW29dKSxwZihlW28rMV0pLHBmKGVbbysyXSkscGYoZVtvKzNdKSk7aT1lW28rMl07cj1lW28rM107bys9NDticmVhaztjYXNlIG4uT1BTLmN1cnZlVG8zOmk9ZVtvKzJdO3I9ZVtvKzNdO2EucHVzaCgiQyIscGYoZVtvXSkscGYoZVtvKzFdKSxwZihpKSxwZihyKSxwZihpKSxwZihyKSk7bys9NDticmVhaztjYXNlIG4uT1BTLmNsb3NlUGF0aDphLnB1c2goIloiKX1hPWEuam9pbigiICIpO2lmKHMucGF0aCYmdC5sZW5ndGg+MCYmdFswXSE9PW4uT1BTLnJlY3RhbmdsZSYmdFswXSE9PW4uT1BTLm1vdmVUbylhPXMucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIikrYTtlbHNle3MucGF0aD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnBhdGgiKTt0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChzLnBhdGgpfXMucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIixhKTtzLnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKTtzLmVsZW1lbnQ9cy5wYXRoO3Muc2V0Q3VycmVudFBvaW50KGkscil9ZW5kUGF0aCgpe2NvbnN0IHQ9dGhpcy5jdXJyZW50O3QucGF0aD1udWxsO2lmKCF0aGlzLnBlbmRpbmdDbGlwKXJldHVybjtpZighdC5lbGVtZW50KXt0aGlzLnBlbmRpbmdDbGlwPW51bGw7cmV0dXJufWNvbnN0IGU9ImNsaXBwYXRoIitwKysscz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmNsaXBQYXRoIik7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIsZSk7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLHBtKHRoaXMudHJhbnNmb3JtTWF0cml4KSk7Y29uc3QgaT10LmVsZW1lbnQuY2xvbmVOb2RlKCEwKTsiZXZlbm9kZCI9PT10aGlzLnBlbmRpbmdDbGlwP2kuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1ydWxlIiwiZXZlbm9kZCIpOmkuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1ydWxlIiwibm9uemVybyIpO3RoaXMucGVuZGluZ0NsaXA9bnVsbDtzLmFwcGVuZChpKTt0aGlzLmRlZnMuYXBwZW5kKHMpO2lmKHQuYWN0aXZlQ2xpcFVybCl7dC5jbGlwR3JvdXA9bnVsbDtmb3IoY29uc3QgdCBvZiB0aGlzLmV4dHJhU3RhY2spdC5jbGlwR3JvdXA9bnVsbDtzLnNldEF0dHJpYnV0ZU5TKG51bGwsImNsaXAtcGF0aCIsdC5hY3RpdmVDbGlwVXJsKX10LmFjdGl2ZUNsaXBVcmw9YHVybCgjJHtlfSlgO3RoaXMudGdycD1udWxsfWNsaXAodCl7dGhpcy5wZW5kaW5nQ2xpcD10fWNsb3NlUGF0aCgpe2NvbnN0IHQ9dGhpcy5jdXJyZW50O2lmKHQucGF0aCl7Y29uc3QgZT1gJHt0LnBhdGguZ2V0QXR0cmlidXRlTlMobnVsbCwiZCIpfVpgO3QucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIixlKX19c2V0TGVhZGluZyh0KXt0aGlzLmN1cnJlbnQubGVhZGluZz0tdH1zZXRUZXh0UmlzZSh0KXt0aGlzLmN1cnJlbnQudGV4dFJpc2U9dH1zZXRUZXh0UmVuZGVyaW5nTW9kZSh0KXt0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGU9dH1zZXRIU2NhbGUodCl7dGhpcy5jdXJyZW50LnRleHRIU2NhbGU9dC8xMDB9c2V0UmVuZGVyaW5nSW50ZW50KHQpe31zZXRGbGF0bmVzcyh0KXt9c2V0R1N0YXRlKHQpe2Zvcihjb25zdFtlLHNdb2YgdClzd2l0Y2goZSl7Y2FzZSJMVyI6dGhpcy5zZXRMaW5lV2lkdGgocyk7YnJlYWs7Y2FzZSJMQyI6dGhpcy5zZXRMaW5lQ2FwKHMpO2JyZWFrO2Nhc2UiTEoiOnRoaXMuc2V0TGluZUpvaW4ocyk7YnJlYWs7Y2FzZSJNTCI6dGhpcy5zZXRNaXRlckxpbWl0KHMpO2JyZWFrO2Nhc2UiRCI6dGhpcy5zZXREYXNoKHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSJSSSI6dGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQocyk7YnJlYWs7Y2FzZSJGTCI6dGhpcy5zZXRGbGF0bmVzcyhzKTticmVhaztjYXNlIkZvbnQiOnRoaXMuc2V0Rm9udChzKTticmVhaztjYXNlIkNBIjp0aGlzLnNldFN0cm9rZUFscGhhKHMpO2JyZWFrO2Nhc2UiY2EiOnRoaXMuc2V0RmlsbEFscGhhKHMpO2JyZWFrO2RlZmF1bHQ6KDAsbi53YXJuKShgVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlIG9wZXJhdG9yICR7ZX1gKX19ZmlsbCgpe2NvbnN0IHQ9dGhpcy5jdXJyZW50O2lmKHQuZWxlbWVudCl7dC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLHQuZmlsbENvbG9yKTt0LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1vcGFjaXR5Iix0LmZpbGxBbHBoYSk7dGhpcy5lbmRQYXRoKCl9fXN0cm9rZSgpe2NvbnN0IHQ9dGhpcy5jdXJyZW50O2lmKHQuZWxlbWVudCl7dGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyh0LmVsZW1lbnQpO3QuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpO3RoaXMuZW5kUGF0aCgpfX1fc2V0U3Ryb2tlQXR0cmlidXRlcyh0LGU9MSl7Y29uc3Qgcz10aGlzLmN1cnJlbnQ7bGV0IGk9cy5kYXNoQXJyYXk7MSE9PWUmJmkubGVuZ3RoPjAmJihpPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZSp0fSkpKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZSIscy5zdHJva2VDb2xvcik7dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utb3BhY2l0eSIscy5zdHJva2VBbHBoYSk7dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtbWl0ZXJsaW1pdCIscGYocy5taXRlckxpbWl0KSk7dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtbGluZWNhcCIscy5saW5lQ2FwKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1saW5lam9pbiIscy5saW5lSm9pbik7dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLHBmKGUqcy5saW5lV2lkdGgpKyJweCIpO3Quc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLWRhc2hhcnJheSIsaS5tYXAocGYpLmpvaW4oIiAiKSk7dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtZGFzaG9mZnNldCIscGYoZSpzLmRhc2hQaGFzZSkrInB4Iil9ZW9GaWxsKCl7dGhpcy5jdXJyZW50LmVsZW1lbnQ/LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtcnVsZSIsImV2ZW5vZGQiKTt0aGlzLmZpbGwoKX1maWxsU3Ryb2tlKCl7dGhpcy5zdHJva2UoKTt0aGlzLmZpbGwoKX1lb0ZpbGxTdHJva2UoKXt0aGlzLmN1cnJlbnQuZWxlbWVudD8uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1ydWxlIiwiZXZlbm9kZCIpO3RoaXMuZmlsbFN0cm9rZSgpfWNsb3NlU3Ryb2tlKCl7dGhpcy5jbG9zZVBhdGgoKTt0aGlzLnN0cm9rZSgpfWNsb3NlRmlsbFN0cm9rZSgpe3RoaXMuY2xvc2VQYXRoKCk7dGhpcy5maWxsU3Ryb2tlKCl9Y2xvc2VFT0ZpbGxTdHJva2UoKXt0aGlzLmNsb3NlUGF0aCgpO3RoaXMuZW9GaWxsU3Ryb2tlKCl9cGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKCl7Y29uc3QgdD10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJlY3QiKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLCIwIik7dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IiwiMCIpO3Quc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIxcHgiKTt0LnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsIjFweCIpO3Quc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5jdXJyZW50LmZpbGxDb2xvcik7dGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmQodCl9cGFpbnRJbWFnZVhPYmplY3QodCl7Y29uc3QgZT10aGlzLmdldE9iamVjdCh0KTtlP3RoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoZSk6KDAsbi53YXJuKShgRGVwZW5kZW50IGltYWdlIHdpdGggb2JqZWN0IElEICR7dH0gaXMgbm90IHJlYWR5IHlldGApfXBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KHQsZSl7Y29uc3Qgcz10LndpZHRoLGk9dC5oZWlnaHQsbj11KHQsdGhpcy5mb3JjZURhdGFTY2hlbWEsISFlKSxyPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO3Iuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKTtyLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLCIwIik7ci5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIscGYocykpO3Iuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixwZihpKSk7dGhpcy5jdXJyZW50LmVsZW1lbnQ9cjt0aGlzLmNsaXAoIm5vbnplcm8iKTtjb25zdCBhPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6aW1hZ2UiKTthLnNldEF0dHJpYnV0ZU5TKGMsInhsaW5rOmhyZWYiLG4pO2Euc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKTthLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLHBmKC1pKSk7YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIscGYocykrInB4Iik7YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLHBmKGkpKyJweCIpO2Euc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIixgc2NhbGUoJHtwZigxL3MpfSAke3BmKC0xL2kpfSlgKTtlP2UuYXBwZW5kKGEpOnRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGEpfXBhaW50SW1hZ2VNYXNrWE9iamVjdCh0KXtjb25zdCBlPXRoaXMuZ2V0T2JqZWN0KHQuZGF0YSx0KTtpZihlLmJpdG1hcCl7KDAsbi53YXJuKSgicGFpbnRJbWFnZU1hc2tYT2JqZWN0OiBJbWFnZUJpdG1hcCBzdXBwb3J0IGlzIG5vdCBpbXBsZW1lbnRlZCwgZW5zdXJlIHRoYXQgdGhlIGBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZGAgQVBJIHBhcmFtZXRlciBpcyBkaXNhYmxlZC4iKTtyZXR1cm59Y29uc3Qgcz10aGlzLmN1cnJlbnQsaT1lLndpZHRoLHI9ZS5oZWlnaHQsYT1zLmZpbGxDb2xvcjtzLm1hc2tJZD0ibWFzayIrZysrO2NvbnN0IG89dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzptYXNrIik7by5zZXRBdHRyaWJ1dGVOUyhudWxsLCJpZCIscy5tYXNrSWQpO2NvbnN0IGw9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7bC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpO2wuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKTtsLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixwZihpKSk7bC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLHBmKHIpKTtsLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLGEpO2wuc2V0QXR0cmlidXRlTlMobnVsbCwibWFzayIsYHVybCgjJHtzLm1hc2tJZH0pYCk7dGhpcy5kZWZzLmFwcGVuZChvKTt0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChsKTt0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGUsbyl9cGFpbnRGb3JtWE9iamVjdEJlZ2luKHQsZSl7QXJyYXkuaXNBcnJheSh0KSYmNj09PXQubGVuZ3RoJiZ0aGlzLnRyYW5zZm9ybSh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSk7aWYoZSl7Y29uc3QgdD1lWzJdLWVbMF0scz1lWzNdLWVbMV0saT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJlY3QiKTtpLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLGVbMF0pO2kuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZVsxXSk7aS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIscGYodCkpO2kuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixwZihzKSk7dGhpcy5jdXJyZW50LmVsZW1lbnQ9aTt0aGlzLmNsaXAoIm5vbnplcm8iKTt0aGlzLmVuZFBhdGgoKX19cGFpbnRGb3JtWE9iamVjdEVuZCgpe31faW5pdGlhbGl6ZSh0KXtjb25zdCBlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodC53aWR0aCx0LmhlaWdodCkscz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmRlZnMiKTtlLmFwcGVuZChzKTt0aGlzLmRlZnM9cztjb25zdCBpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpO2kuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIixwbSh0LnRyYW5zZm9ybSkpO2UuYXBwZW5kKGkpO3RoaXMuc3ZnPWk7cmV0dXJuIGV9X2Vuc3VyZUNsaXBHcm91cCgpe2lmKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKXtjb25zdCB0PXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpO3Quc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIix0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybCk7dGhpcy5zdmcuYXBwZW5kKHQpO3RoaXMuY3VycmVudC5jbGlwR3JvdXA9dH1yZXR1cm4gdGhpcy5jdXJyZW50LmNsaXBHcm91cH1fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKXtpZighdGhpcy50Z3JwKXt0aGlzLnRncnA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpnIik7dGhpcy50Z3JwLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIscG0odGhpcy50cmFuc2Zvcm1NYXRyaXgpKTt0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybD90aGlzLl9lbnN1cmVDbGlwR3JvdXAoKS5hcHBlbmQodGhpcy50Z3JwKTp0aGlzLnN2Zy5hcHBlbmQodGhpcy50Z3JwKX1yZXR1cm4gdGhpcy50Z3JwfX19fSwodCxlLHMpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2UuUERGTm9kZVN0cmVhbT12b2lkIDA7dmFyIGk9cygxKSxuPXMoMzIpO2NvbnN0IHI9cmVxdWlyZSgiZnMiKSxhPXJlcXVpcmUoImh0dHAiKSxvPXJlcXVpcmUoImh0dHBzIiksbD1yZXF1aXJlKCJ1cmwiKSxjPS9eZmlsZTpcL1wvXC9bYS16QS1aXTpcLy87ZS5QREZOb2RlU3RyZWFtPWNsYXNzIFBERk5vZGVTdHJlYW17Y29uc3RydWN0b3IodCl7dGhpcy5zb3VyY2U9dDt0aGlzLnVybD1mdW5jdGlvbiBwYXJzZVVybCh0KXtjb25zdCBlPWwucGFyc2UodCk7aWYoImZpbGU6Ij09PWUucHJvdG9jb2x8fGUuaG9zdClyZXR1cm4gZTtpZigvXlthLXpdOlsvXFxdL2kudGVzdCh0KSlyZXR1cm4gbC5wYXJzZShgZmlsZTovLy8ke3R9YCk7ZS5ob3N0fHwoZS5wcm90b2NvbD0iZmlsZToiKTtyZXR1cm4gZX0odC51cmwpO3RoaXMuaXNIdHRwPSJodHRwOiI9PT10aGlzLnVybC5wcm90b2NvbHx8Imh0dHBzOiI9PT10aGlzLnVybC5wcm90b2NvbDt0aGlzLmlzRnNVcmw9ImZpbGU6Ij09PXRoaXMudXJsLnByb3RvY29sO3RoaXMuaHR0cEhlYWRlcnM9dGhpcy5pc0h0dHAmJnQuaHR0cEhlYWRlcnN8fHt9O3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGw7dGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1nZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj8uX2xvYWRlZD8/MH1nZXRGdWxsUmVhZGVyKCl7KDAsaS5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGTm9kZVN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPXRoaXMuaXNGc1VybD9uZXcgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlcih0aGlzKTpuZXcgUERGTm9kZVN0cmVhbUZ1bGxSZWFkZXIodGhpcyk7cmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfWdldFJhbmdlUmVhZGVyKHQsZSl7aWYoZTw9dGhpcy5fcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IHM9dGhpcy5pc0ZzVXJsP25ldyBQREZOb2RlU3RyZWFtRnNSYW5nZVJlYWRlcih0aGlzLHQsZSk6bmV3IFBERk5vZGVTdHJlYW1SYW5nZVJlYWRlcih0aGlzLHQsZSk7dGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHMpO3JldHVybiBzfWNhbmNlbEFsbFJlcXVlc3RzKHQpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPy5jYW5jZWwodCk7Zm9yKGNvbnN0IGUgb2YgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKSllLmNhbmNlbCh0KX19O2NsYXNzIEJhc2VGdWxsUmVhZGVye2NvbnN0cnVjdG9yKHQpe3RoaXMuX3VybD10LnVybDt0aGlzLl9kb25lPSExO3RoaXMuX3N0b3JlZEVycm9yPW51bGw7dGhpcy5vblByb2dyZXNzPW51bGw7Y29uc3QgZT10LnNvdXJjZTt0aGlzLl9jb250ZW50TGVuZ3RoPWUubGVuZ3RoO3RoaXMuX2xvYWRlZD0wO3RoaXMuX2ZpbGVuYW1lPW51bGw7dGhpcy5fZGlzYWJsZVJhbmdlPWUuZGlzYWJsZVJhbmdlfHwhMTt0aGlzLl9yYW5nZUNodW5rU2l6ZT1lLnJhbmdlQ2h1bmtTaXplO3RoaXMuX3JhbmdlQ2h1bmtTaXplfHx0aGlzLl9kaXNhYmxlUmFuZ2V8fCh0aGlzLl9kaXNhYmxlUmFuZ2U9ITApO3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFlLmRpc2FibGVTdHJlYW07dGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hZS5kaXNhYmxlUmFuZ2U7dGhpcy5fcmVhZGFibGVTdHJlYW09bnVsbDt0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuX2hlYWRlcnNDYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9Z2V0IGhlYWRlcnNSZWFkeSgpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfWdldCBmaWxlbmFtZSgpe3JldHVybiB0aGlzLl9maWxlbmFtZX1nZXQgY29udGVudExlbmd0aCgpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofWdldCBpc1JhbmdlU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfWFzeW5jIHJlYWQoKXthd2FpdCB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2lmKHRoaXMuX2RvbmUpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfTtpZih0aGlzLl9zdG9yZWRFcnJvcil0aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjb25zdCB0PXRoaXMuX3JlYWRhYmxlU3RyZWFtLnJlYWQoKTtpZihudWxsPT09dCl7dGhpcy5fcmVhZENhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gdGhpcy5yZWFkKCl9dGhpcy5fbG9hZGVkKz10Lmxlbmd0aDt0aGlzLm9uUHJvZ3Jlc3M/Lih7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSk7cmV0dXJue3ZhbHVlOm5ldyBVaW50OEFycmF5KHQpLmJ1ZmZlcixkb25lOiExfX1jYW5jZWwodCl7dGhpcy5fcmVhZGFibGVTdHJlYW0/dGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0KTp0aGlzLl9lcnJvcih0KX1fZXJyb3IodCl7dGhpcy5fc3RvcmVkRXJyb3I9dDt0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCl9X3NldFJlYWRhYmxlU3RyZWFtKHQpe3RoaXMuX3JlYWRhYmxlU3RyZWFtPXQ7dC5vbigicmVhZGFibGUiLCgoKT0+e3RoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKTt0Lm9uKCJlbmQiLCgoKT0+e3QuZGVzdHJveSgpO3RoaXMuX2RvbmU9ITA7dGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfSkpO3Qub24oImVycm9yIiwodD0+e3RoaXMuX2Vycm9yKHQpfSkpOyF0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCYmdGhpcy5faXNSYW5nZVN1cHBvcnRlZCYmdGhpcy5fZXJyb3IobmV3IGkuQWJvcnRFeGNlcHRpb24oInN0cmVhbWluZyBpcyBkaXNhYmxlZCIpKTt0aGlzLl9zdG9yZWRFcnJvciYmdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcil9fWNsYXNzIEJhc2VSYW5nZVJlYWRlcntjb25zdHJ1Y3Rvcih0KXt0aGlzLl91cmw9dC51cmw7dGhpcy5fZG9uZT0hMTt0aGlzLl9zdG9yZWRFcnJvcj1udWxsO3RoaXMub25Qcm9ncmVzcz1udWxsO3RoaXMuX2xvYWRlZD0wO3RoaXMuX3JlYWRhYmxlU3RyZWFtPW51bGw7dGhpcy5fcmVhZENhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtjb25zdCBlPXQuc291cmNlO3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFlLmRpc2FibGVTdHJlYW19Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfWFzeW5jIHJlYWQoKXthd2FpdCB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2lmKHRoaXMuX2RvbmUpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfTtpZih0aGlzLl9zdG9yZWRFcnJvcil0aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjb25zdCB0PXRoaXMuX3JlYWRhYmxlU3RyZWFtLnJlYWQoKTtpZihudWxsPT09dCl7dGhpcy5fcmVhZENhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gdGhpcy5yZWFkKCl9dGhpcy5fbG9hZGVkKz10Lmxlbmd0aDt0aGlzLm9uUHJvZ3Jlc3M/Lih7bG9hZGVkOnRoaXMuX2xvYWRlZH0pO3JldHVybnt2YWx1ZTpuZXcgVWludDhBcnJheSh0KS5idWZmZXIsZG9uZTohMX19Y2FuY2VsKHQpe3RoaXMuX3JlYWRhYmxlU3RyZWFtP3RoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodCk6dGhpcy5fZXJyb3IodCl9X2Vycm9yKHQpe3RoaXMuX3N0b3JlZEVycm9yPXQ7dGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfV9zZXRSZWFkYWJsZVN0cmVhbSh0KXt0aGlzLl9yZWFkYWJsZVN0cmVhbT10O3Qub24oInJlYWRhYmxlIiwoKCk9Pnt0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCl9KSk7dC5vbigiZW5kIiwoKCk9Pnt0LmRlc3Ryb3koKTt0aGlzLl9kb25lPSEwO3RoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKTt0Lm9uKCJlcnJvciIsKHQ9Pnt0aGlzLl9lcnJvcih0KX0pKTt0aGlzLl9zdG9yZWRFcnJvciYmdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcil9fWZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RPcHRpb25zKHQsZSl7cmV0dXJue3Byb3RvY29sOnQucHJvdG9jb2wsYXV0aDp0LmF1dGgsaG9zdDp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGg6dC5wYXRoLG1ldGhvZDoiR0VUIixoZWFkZXJzOmV9fWNsYXNzIFBERk5vZGVTdHJlYW1GdWxsUmVhZGVyIGV4dGVuZHMgQmFzZUZ1bGxSZWFkZXJ7Y29uc3RydWN0b3IodCl7c3VwZXIodCk7Y29uc3QgaGFuZGxlUmVzcG9uc2U9ZT0+e2lmKDQwND09PWUuc3RhdHVzQ29kZSl7Y29uc3QgdD1uZXcgaS5NaXNzaW5nUERGRXhjZXB0aW9uKGBNaXNzaW5nIFBERiAiJHt0aGlzLl91cmx9Ii5gKTt0aGlzLl9zdG9yZWRFcnJvcj10O3RoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCh0KTtyZXR1cm59dGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO3RoaXMuX3NldFJlYWRhYmxlU3RyZWFtKGUpO2NvbnN0IGdldFJlc3BvbnNlSGVhZGVyPXQ9PnRoaXMuX3JlYWRhYmxlU3RyZWFtLmhlYWRlcnNbdC50b0xvd2VyQ2FzZSgpXSx7YWxsb3dSYW5nZVJlcXVlc3RzOnMsc3VnZ2VzdGVkTGVuZ3RoOnJ9PSgwLG4udmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjpnZXRSZXNwb25zZUhlYWRlcixpc0h0dHA6dC5pc0h0dHAscmFuZ2VDaHVua1NpemU6dGhpcy5fcmFuZ2VDaHVua1NpemUsZGlzYWJsZVJhbmdlOnRoaXMuX2Rpc2FibGVSYW5nZX0pO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9czt0aGlzLl9jb250ZW50TGVuZ3RoPXJ8fHRoaXMuX2NvbnRlbnRMZW5ndGg7dGhpcy5fZmlsZW5hbWU9KDAsbi5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShnZXRSZXNwb25zZUhlYWRlcil9O3RoaXMuX3JlcXVlc3Q9bnVsbDsiaHR0cDoiPT09dGhpcy5fdXJsLnByb3RvY29sP3RoaXMuX3JlcXVlc3Q9YS5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKHRoaXMuX3VybCx0Lmh0dHBIZWFkZXJzKSxoYW5kbGVSZXNwb25zZSk6dGhpcy5fcmVxdWVzdD1vLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnModGhpcy5fdXJsLHQuaHR0cEhlYWRlcnMpLGhhbmRsZVJlc3BvbnNlKTt0aGlzLl9yZXF1ZXN0Lm9uKCJlcnJvciIsKHQ9Pnt0aGlzLl9zdG9yZWRFcnJvcj10O3RoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCh0KX0pKTt0aGlzLl9yZXF1ZXN0LmVuZCgpfX1jbGFzcyBQREZOb2RlU3RyZWFtUmFuZ2VSZWFkZXIgZXh0ZW5kcyBCYXNlUmFuZ2VSZWFkZXJ7Y29uc3RydWN0b3IodCxlLHMpe3N1cGVyKHQpO3RoaXMuX2h0dHBIZWFkZXJzPXt9O2Zvcihjb25zdCBlIGluIHQuaHR0cEhlYWRlcnMpe2NvbnN0IHM9dC5odHRwSGVhZGVyc1tlXTt2b2lkIDAhPT1zJiYodGhpcy5faHR0cEhlYWRlcnNbZV09cyl9dGhpcy5faHR0cEhlYWRlcnMuUmFuZ2U9YGJ5dGVzPSR7ZX0tJHtzLTF9YDtjb25zdCBoYW5kbGVSZXNwb25zZT10PT57aWYoNDA0IT09dC5zdGF0dXNDb2RlKXRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKHQpO2Vsc2V7Y29uc3QgdD1uZXcgaS5NaXNzaW5nUERGRXhjZXB0aW9uKGBNaXNzaW5nIFBERiAiJHt0aGlzLl91cmx9Ii5gKTt0aGlzLl9zdG9yZWRFcnJvcj10fX07dGhpcy5fcmVxdWVzdD1udWxsOyJodHRwOiI9PT10aGlzLl91cmwucHJvdG9jb2w/dGhpcy5fcmVxdWVzdD1hLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnModGhpcy5fdXJsLHRoaXMuX2h0dHBIZWFkZXJzKSxoYW5kbGVSZXNwb25zZSk6dGhpcy5fcmVxdWVzdD1vLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnModGhpcy5fdXJsLHRoaXMuX2h0dHBIZWFkZXJzKSxoYW5kbGVSZXNwb25zZSk7dGhpcy5fcmVxdWVzdC5vbigiZXJyb3IiLCh0PT57dGhpcy5fc3RvcmVkRXJyb3I9dH0pKTt0aGlzLl9yZXF1ZXN0LmVuZCgpfX1jbGFzcyBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyIGV4dGVuZHMgQmFzZUZ1bGxSZWFkZXJ7Y29uc3RydWN0b3IodCl7c3VwZXIodCk7bGV0IGU9ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuX3VybC5wYXRoKTtjLnRlc3QodGhpcy5fdXJsLmhyZWYpJiYoZT1lLnJlcGxhY2UoL15cLy8sIiIpKTtyLmxzdGF0KGUsKCh0LHMpPT57aWYodCl7IkVOT0VOVCI9PT10LmNvZGUmJih0PW5ldyBpLk1pc3NpbmdQREZFeGNlcHRpb24oYE1pc3NpbmcgUERGICIke2V9Ii5gKSk7dGhpcy5fc3RvcmVkRXJyb3I9dDt0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QodCl9ZWxzZXt0aGlzLl9jb250ZW50TGVuZ3RoPXMuc2l6ZTt0aGlzLl9zZXRSZWFkYWJsZVN0cmVhbShyLmNyZWF0ZVJlYWRTdHJlYW0oZSkpO3RoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKX19KSl9fWNsYXNzIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyIGV4dGVuZHMgQmFzZVJhbmdlUmVhZGVye2NvbnN0cnVjdG9yKHQsZSxzKXtzdXBlcih0KTtsZXQgaT1kZWNvZGVVUklDb21wb25lbnQodGhpcy5fdXJsLnBhdGgpO2MudGVzdCh0aGlzLl91cmwuaHJlZikmJihpPWkucmVwbGFjZSgvXlwvLywiIikpO3RoaXMuX3NldFJlYWRhYmxlU3RyZWFtKHIuY3JlYXRlUmVhZFN0cmVhbShpLHtzdGFydDplLGVuZDpzLTF9KSl9fX0sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3I9ZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcih0LGUpe2lmKDQwND09PXR8fDA9PT10JiZlLnN0YXJ0c1dpdGgoImZpbGU6IikpcmV0dXJuIG5ldyBpLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInK2UrJyIuJyk7cmV0dXJuIG5ldyBpLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihgVW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UgKCR7dH0pIHdoaWxlIHJldHJpZXZpbmcgUERGICIke2V9Ii5gLHQpfTtlLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXI9ZnVuY3Rpb24gZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcih0KXtjb25zdCBlPXQoIkNvbnRlbnQtRGlzcG9zaXRpb24iKTtpZihlKXtsZXQgdD0oMCxuLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcikoZSk7aWYodC5pbmNsdWRlcygiJSIpKXRyeXt0PWRlY29kZVVSSUNvbXBvbmVudCh0KX1jYXRjaCh0KXt9aWYoKDAsci5pc1BkZkZpbGUpKHQpKXJldHVybiB0fXJldHVybiBudWxsfTtlLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzPWZ1bmN0aW9uIHZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKHtnZXRSZXNwb25zZUhlYWRlcjp0LGlzSHR0cDplLHJhbmdlQ2h1bmtTaXplOnMsZGlzYWJsZVJhbmdlOml9KXtjb25zdCBuPXthbGxvd1JhbmdlUmVxdWVzdHM6ITEsc3VnZ2VzdGVkTGVuZ3RoOnZvaWQgMH0scj1wYXJzZUludCh0KCJDb250ZW50LUxlbmd0aCIpLDEwKTtpZighTnVtYmVyLmlzSW50ZWdlcihyKSlyZXR1cm4gbjtuLnN1Z2dlc3RlZExlbmd0aD1yO2lmKHI8PTIqcylyZXR1cm4gbjtpZihpfHwhZSlyZXR1cm4gbjtpZigiYnl0ZXMiIT09dCgiQWNjZXB0LVJhbmdlcyIpKXJldHVybiBuO2lmKCJpZGVudGl0eSIhPT0odCgiQ29udGVudC1FbmNvZGluZyIpfHwiaWRlbnRpdHkiKSlyZXR1cm4gbjtuLmFsbG93UmFuZ2VSZXF1ZXN0cz0hMDtyZXR1cm4gbn07ZS52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzPWZ1bmN0aW9uIHZhbGlkYXRlUmVzcG9uc2VTdGF0dXModCl7cmV0dXJuIDIwMD09PXR8fDIwNj09PXR9O3ZhciBpPXMoMSksbj1zKDMzKSxyPXMoNil9LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5nZXRGaWxlbmFtZUZyb21Db250ZW50RGlzcG9zaXRpb25IZWFkZXI9ZnVuY3Rpb24gZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKHQpe2xldCBlPSEwLHM9dG9QYXJhbVJlZ0V4cCgiZmlsZW5hbWVcXCoiLCJpIikuZXhlYyh0KTtpZihzKXtzPXNbMV07bGV0IHQ9cmZjMjYxNnVucXVvdGUocyk7dD11bmVzY2FwZSh0KTt0PXJmYzU5ODdkZWNvZGUodCk7dD1yZmMyMDQ3ZGVjb2RlKHQpO3JldHVybiBmaXh1cEVuY29kaW5nKHQpfXM9ZnVuY3Rpb24gcmZjMjIzMWdldHBhcmFtKHQpe2NvbnN0IGU9W107bGV0IHM7Y29uc3QgaT10b1BhcmFtUmVnRXhwKCJmaWxlbmFtZVxcKigoPyEwXFxkKVxcZCspKFxcKj8pIiwiaWciKTtmb3IoO251bGwhPT0ocz1pLmV4ZWModCkpOyl7bGV0Wyx0LGksbl09czt0PXBhcnNlSW50KHQsMTApO2lmKHQgaW4gZSl7aWYoMD09PXQpYnJlYWt9ZWxzZSBlW3RdPVtpLG5dfWNvbnN0IG49W107Zm9yKGxldCB0PTA7dDxlLmxlbmd0aCYmdCBpbiBlOysrdCl7bGV0W3MsaV09ZVt0XTtpPXJmYzI2MTZ1bnF1b3RlKGkpO2lmKHMpe2k9dW5lc2NhcGUoaSk7MD09PXQmJihpPXJmYzU5ODdkZWNvZGUoaSkpfW4ucHVzaChpKX1yZXR1cm4gbi5qb2luKCIiKX0odCk7aWYocyl7cmV0dXJuIGZpeHVwRW5jb2RpbmcocmZjMjA0N2RlY29kZShzKSl9cz10b1BhcmFtUmVnRXhwKCJmaWxlbmFtZSIsImkiKS5leGVjKHQpO2lmKHMpe3M9c1sxXTtsZXQgdD1yZmMyNjE2dW5xdW90ZShzKTt0PXJmYzIwNDdkZWNvZGUodCk7cmV0dXJuIGZpeHVwRW5jb2RpbmcodCl9ZnVuY3Rpb24gdG9QYXJhbVJlZ0V4cCh0LGUpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefDspXFxzKiIrdCsnXFxzKj1cXHMqKFteIjtcXHNdW147XFxzXSp8Iig/OlteIlxcXFxdfFxcXFwiPykrIj8pJyxlKX1mdW5jdGlvbiB0ZXh0ZGVjb2RlKHQscyl7aWYodCl7aWYoIS9eW1x4MDAtXHhGRl0rJC8udGVzdChzKSlyZXR1cm4gczt0cnl7Y29uc3Qgbj1uZXcgVGV4dERlY29kZXIodCx7ZmF0YWw6ITB9KSxyPSgwLGkuc3RyaW5nVG9CeXRlcykocyk7cz1uLmRlY29kZShyKTtlPSExfWNhdGNoKHQpe319cmV0dXJuIHN9ZnVuY3Rpb24gZml4dXBFbmNvZGluZyh0KXtpZihlJiYvW1x4ODAtXHhmZl0vLnRlc3QodCkpe3Q9dGV4dGRlY29kZSgidXRmLTgiLHQpO2UmJih0PXRleHRkZWNvZGUoImlzby04ODU5LTEiLHQpKX1yZXR1cm4gdH1mdW5jdGlvbiByZmMyNjE2dW5xdW90ZSh0KXtpZih0LnN0YXJ0c1dpdGgoJyInKSl7Y29uc3QgZT10LnNsaWNlKDEpLnNwbGl0KCdcXCInKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoOysrdCl7Y29uc3Qgcz1lW3RdLmluZGV4T2YoJyInKTtpZigtMSE9PXMpe2VbdF09ZVt0XS5zbGljZSgwLHMpO2UubGVuZ3RoPXQrMX1lW3RdPWVbdF0ucmVwbGFjZSgvXFwoLikvZywiJDEiKX10PWUuam9pbignIicpfXJldHVybiB0fWZ1bmN0aW9uIHJmYzU5ODdkZWNvZGUodCl7Y29uc3QgZT10LmluZGV4T2YoIiciKTtpZigtMT09PWUpcmV0dXJuIHQ7cmV0dXJuIHRleHRkZWNvZGUodC5zbGljZSgwLGUpLHQuc2xpY2UoZSsxKS5yZXBsYWNlKC9eW14nXSonLywiIikpfWZ1bmN0aW9uIHJmYzIwNDdkZWNvZGUodCl7cmV0dXJuIXQuc3RhcnRzV2l0aCgiPT8iKXx8L1tceDAwLVx4MTlceDgwLVx4ZmZdLy50ZXN0KHQpP3Q6dC5yZXBsYWNlKC89XD8oW1x3LV0qKVw/KFtRcUJiXSlcPygoPzpbXj9dfFw/KD8hPSkpKilcPz0vZywoZnVuY3Rpb24odCxlLHMsaSl7aWYoInEiPT09c3x8IlEiPT09cylyZXR1cm4gdGV4dGRlY29kZShlLGk9KGk9aS5yZXBsYWNlKC9fL2csIiAiKSkucmVwbGFjZSgvPShbMC05YS1mQS1GXXsyfSkvZywoZnVuY3Rpb24odCxlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLDE2KSl9KSkpO3RyeXtpPWF0b2IoaSl9Y2F0Y2godCl7fXJldHVybiB0ZXh0ZGVjb2RlKGUsaSl9KSl9cmV0dXJuIiJ9O3ZhciBpPXMoMSl9LCh0LGUscyk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZS5QREZOZXR3b3JrU3RyZWFtPXZvaWQgMDt2YXIgaT1zKDEpLG49cygzMik7Y2xhc3MgTmV0d29ya01hbmFnZXJ7Y29uc3RydWN0b3IodCxlPXt9KXt0aGlzLnVybD10O3RoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QodCk7dGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmZS5odHRwSGVhZGVyc3x8T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLndpdGhDcmVkZW50aWFscz1lLndpdGhDcmVkZW50aWFsc3x8ITE7dGhpcy5nZXRYaHI9ZS5nZXRYaHJ8fGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX2dldFhocigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9O3RoaXMuY3VyclhocklkPTA7dGhpcy5wZW5kaW5nUmVxdWVzdHM9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXF1ZXN0UmFuZ2UodCxlLHMpe2NvbnN0IGk9e2JlZ2luOnQsZW5kOmV9O2Zvcihjb25zdCB0IGluIHMpaVt0XT1zW3RdO3JldHVybiB0aGlzLnJlcXVlc3QoaSl9cmVxdWVzdEZ1bGwodCl7cmV0dXJuIHRoaXMucmVxdWVzdCh0KX1yZXF1ZXN0KHQpe2NvbnN0IGU9dGhpcy5nZXRYaHIoKSxzPXRoaXMuY3VyclhocklkKyssaT10aGlzLnBlbmRpbmdSZXF1ZXN0c1tzXT17eGhyOmV9O2Uub3BlbigiR0VUIix0aGlzLnVybCk7ZS53aXRoQ3JlZGVudGlhbHM9dGhpcy53aXRoQ3JlZGVudGlhbHM7Zm9yKGNvbnN0IHQgaW4gdGhpcy5odHRwSGVhZGVycyl7Y29uc3Qgcz10aGlzLmh0dHBIZWFkZXJzW3RdO3ZvaWQgMCE9PXMmJmUuc2V0UmVxdWVzdEhlYWRlcih0LHMpfWlmKHRoaXMuaXNIdHRwJiYiYmVnaW4iaW4gdCYmImVuZCJpbiB0KXtlLnNldFJlcXVlc3RIZWFkZXIoIlJhbmdlIixgYnl0ZXM9JHt0LmJlZ2lufS0ke3QuZW5kLTF9YCk7aS5leHBlY3RlZFN0YXR1cz0yMDZ9ZWxzZSBpLmV4cGVjdGVkU3RhdHVzPTIwMDtlLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiO3Qub25FcnJvciYmKGUub25lcnJvcj1mdW5jdGlvbihzKXt0Lm9uRXJyb3IoZS5zdGF0dXMpfSk7ZS5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyxzKTtlLm9ucHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyxzKTtpLm9uSGVhZGVyc1JlY2VpdmVkPXQub25IZWFkZXJzUmVjZWl2ZWQ7aS5vbkRvbmU9dC5vbkRvbmU7aS5vbkVycm9yPXQub25FcnJvcjtpLm9uUHJvZ3Jlc3M9dC5vblByb2dyZXNzO2Uuc2VuZChudWxsKTtyZXR1cm4gc31vblByb2dyZXNzKHQsZSl7Y29uc3Qgcz10aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XTtzJiZzLm9uUHJvZ3Jlc3M/LihlKX1vblN0YXRlQ2hhbmdlKHQsZSl7Y29uc3Qgcz10aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XTtpZighcylyZXR1cm47Y29uc3Qgbj1zLnhocjtpZihuLnJlYWR5U3RhdGU+PTImJnMub25IZWFkZXJzUmVjZWl2ZWQpe3Mub25IZWFkZXJzUmVjZWl2ZWQoKTtkZWxldGUgcy5vbkhlYWRlcnNSZWNlaXZlZH1pZig0IT09bi5yZWFkeVN0YXRlKXJldHVybjtpZighKHQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpKXJldHVybjtkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbdF07aWYoMD09PW4uc3RhdHVzJiZ0aGlzLmlzSHR0cCl7cy5vbkVycm9yPy4obi5zdGF0dXMpO3JldHVybn1jb25zdCByPW4uc3RhdHVzfHwyMDA7aWYoISgyMDA9PT1yJiYyMDY9PT1zLmV4cGVjdGVkU3RhdHVzKSYmciE9PXMuZXhwZWN0ZWRTdGF0dXMpe3Mub25FcnJvcj8uKG4uc3RhdHVzKTtyZXR1cm59Y29uc3QgYT1mdW5jdGlvbiBnZXRBcnJheUJ1ZmZlcih0KXtjb25zdCBlPXQucmVzcG9uc2U7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlP2U6KDAsaS5zdHJpbmdUb0J5dGVzKShlKS5idWZmZXJ9KG4pO2lmKDIwNj09PXIpe2NvbnN0IHQ9bi5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1SYW5nZSIpLGU9L2J5dGVzIChcZCspLShcZCspXC8oXGQrKS8uZXhlYyh0KTtzLm9uRG9uZSh7YmVnaW46cGFyc2VJbnQoZVsxXSwxMCksY2h1bms6YX0pfWVsc2UgYT9zLm9uRG9uZSh7YmVnaW46MCxjaHVuazphfSk6cy5vbkVycm9yPy4obi5zdGF0dXMpfWdldFJlcXVlc3RYaHIodCl7cmV0dXJuIHRoaXMucGVuZGluZ1JlcXVlc3RzW3RdLnhocn1pc1BlbmRpbmdSZXF1ZXN0KHQpe3JldHVybiB0IGluIHRoaXMucGVuZGluZ1JlcXVlc3RzfWFib3J0UmVxdWVzdCh0KXtjb25zdCBlPXRoaXMucGVuZGluZ1JlcXVlc3RzW3RdLnhocjtkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbdF07ZS5hYm9ydCgpfX1lLlBERk5ldHdvcmtTdHJlYW09Y2xhc3MgUERGTmV0d29ya1N0cmVhbXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9zb3VyY2U9dDt0aGlzLl9tYW5hZ2VyPW5ldyBOZXR3b3JrTWFuYWdlcih0LnVybCx7aHR0cEhlYWRlcnM6dC5odHRwSGVhZGVycyx3aXRoQ3JlZGVudGlhbHM6dC53aXRoQ3JlZGVudGlhbHN9KTt0aGlzLl9yYW5nZUNodW5rU2l6ZT10LnJhbmdlQ2h1bmtTaXplO3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGw7dGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1fb25SYW5nZVJlcXVlc3RSZWFkZXJDbG9zZWQodCl7Y29uc3QgZT10aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YodCk7ZT49MCYmdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UoZSwxKX1nZXRGdWxsUmVhZGVyKCl7KDAsaS5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwiUERGTmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyBQREZOZXR3b3JrU3RyZWFtRnVsbFJlcXVlc3RSZWFkZXIodGhpcy5fbWFuYWdlcix0aGlzLl9zb3VyY2UpO3JldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn1nZXRSYW5nZVJlYWRlcih0LGUpe2NvbnN0IHM9bmV3IFBERk5ldHdvcmtTdHJlYW1SYW5nZVJlcXVlc3RSZWFkZXIodGhpcy5fbWFuYWdlcix0LGUpO3Mub25DbG9zZWQ9dGhpcy5fb25SYW5nZVJlcXVlc3RSZWFkZXJDbG9zZWQuYmluZCh0aGlzKTt0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocyk7cmV0dXJuIHN9Y2FuY2VsQWxsUmVxdWVzdHModCl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/LmNhbmNlbCh0KTtmb3IoY29uc3QgZSBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKWUuY2FuY2VsKHQpfX07Y2xhc3MgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVye2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fbWFuYWdlcj10O2NvbnN0IHM9e29uSGVhZGVyc1JlY2VpdmVkOnRoaXMuX29uSGVhZGVyc1JlY2VpdmVkLmJpbmQodGhpcyksb25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9ZS51cmw7dGhpcy5fZnVsbFJlcXVlc3RJZD10LnJlcXVlc3RGdWxsKHMpO3RoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9kaXNhYmxlUmFuZ2U9ZS5kaXNhYmxlUmFuZ2V8fCExO3RoaXMuX2NvbnRlbnRMZW5ndGg9ZS5sZW5ndGg7dGhpcy5fcmFuZ2VDaHVua1NpemU9ZS5yYW5nZUNodW5rU2l6ZTt0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKTt0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMTt0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExO3RoaXMuX2NhY2hlZENodW5rcz1bXTt0aGlzLl9yZXF1ZXN0cz1bXTt0aGlzLl9kb25lPSExO3RoaXMuX3N0b3JlZEVycm9yPXZvaWQgMDt0aGlzLl9maWxlbmFtZT1udWxsO3RoaXMub25Qcm9ncmVzcz1udWxsfV9vbkhlYWRlcnNSZWNlaXZlZCgpe2NvbnN0IHQ9dGhpcy5fZnVsbFJlcXVlc3RJZCxlPXRoaXMuX21hbmFnZXIuZ2V0UmVxdWVzdFhocih0KSxnZXRSZXNwb25zZUhlYWRlcj10PT5lLmdldFJlc3BvbnNlSGVhZGVyKHQpLHthbGxvd1JhbmdlUmVxdWVzdHM6cyxzdWdnZXN0ZWRMZW5ndGg6aX09KDAsbi52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe2dldFJlc3BvbnNlSGVhZGVyOmdldFJlc3BvbnNlSGVhZGVyLGlzSHR0cDp0aGlzLl9tYW5hZ2VyLmlzSHR0cCxyYW5nZUNodW5rU2l6ZTp0aGlzLl9yYW5nZUNodW5rU2l6ZSxkaXNhYmxlUmFuZ2U6dGhpcy5fZGlzYWJsZVJhbmdlfSk7cyYmKHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ITApO3RoaXMuX2NvbnRlbnRMZW5ndGg9aXx8dGhpcy5fY29udGVudExlbmd0aDt0aGlzLl9maWxlbmFtZT0oMCxuLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGdldFJlc3BvbnNlSGVhZGVyKTt0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZ0aGlzLl9tYW5hZ2VyLmFib3J0UmVxdWVzdCh0KTt0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlc29sdmUoKX1fb25Eb25lKHQpe2lmKHQpaWYodGhpcy5fcmVxdWVzdHMubGVuZ3RoPjApe3RoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6dC5jaHVuayxkb25lOiExfSl9ZWxzZSB0aGlzLl9jYWNoZWRDaHVua3MucHVzaCh0LmNodW5rKTt0aGlzLl9kb25lPSEwO2lmKCEodGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aD4wKSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcmVxdWVzdHMpdC5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO3RoaXMuX3JlcXVlc3RzLmxlbmd0aD0wfX1fb25FcnJvcih0KXt0aGlzLl9zdG9yZWRFcnJvcj0oMCxuLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQsdGhpcy5fdXJsKTt0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcik7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcmVxdWVzdHMpdC5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpO3RoaXMuX3JlcXVlc3RzLmxlbmd0aD0wO3RoaXMuX2NhY2hlZENodW5rcy5sZW5ndGg9MH1fb25Qcm9ncmVzcyh0KXt0aGlzLm9uUHJvZ3Jlc3M/Lih7bG9hZGVkOnQubG9hZGVkLHRvdGFsOnQubGVuZ3RoQ29tcHV0YWJsZT90LnRvdGFsOnRoaXMuX2NvbnRlbnRMZW5ndGh9KX1nZXQgZmlsZW5hbWUoKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9Z2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH1nZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9Z2V0IGNvbnRlbnRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH1nZXQgaGVhZGVyc1JlYWR5KCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucHJvbWlzZX1hc3luYyByZWFkKCl7aWYodGhpcy5fc3RvcmVkRXJyb3IpdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7aWYodGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aD4wKXtyZXR1cm57dmFsdWU6dGhpcy5fY2FjaGVkQ2h1bmtzLnNoaWZ0KCksZG9uZTohMX19aWYodGhpcy5fZG9uZSlyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9O2NvbnN0IHQ9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9yZXF1ZXN0cy5wdXNoKHQpO3JldHVybiB0LnByb21pc2V9Y2FuY2VsKHQpe3RoaXMuX2RvbmU9ITA7dGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QodCk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcmVxdWVzdHMpdC5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO3RoaXMuX3JlcXVlc3RzLmxlbmd0aD0wO3RoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKSYmdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCk7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbH19Y2xhc3MgUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcntjb25zdHJ1Y3Rvcih0LGUscyl7dGhpcy5fbWFuYWdlcj10O2NvbnN0IGk9e29uRG9uZTp0aGlzLl9vbkRvbmUuYmluZCh0aGlzKSxvbkVycm9yOnRoaXMuX29uRXJyb3IuYmluZCh0aGlzKSxvblByb2dyZXNzOnRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKX07dGhpcy5fdXJsPXQudXJsO3RoaXMuX3JlcXVlc3RJZD10LnJlcXVlc3RSYW5nZShlLHMsaSk7dGhpcy5fcmVxdWVzdHM9W107dGhpcy5fcXVldWVkQ2h1bms9bnVsbDt0aGlzLl9kb25lPSExO3RoaXMuX3N0b3JlZEVycm9yPXZvaWQgMDt0aGlzLm9uUHJvZ3Jlc3M9bnVsbDt0aGlzLm9uQ2xvc2VkPW51bGx9X2Nsb3NlKCl7dGhpcy5vbkNsb3NlZD8uKHRoaXMpfV9vbkRvbmUodCl7Y29uc3QgZT10LmNodW5rO2lmKHRoaXMuX3JlcXVlc3RzLmxlbmd0aD4wKXt0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpLnJlc29sdmUoe3ZhbHVlOmUsZG9uZTohMX0pfWVsc2UgdGhpcy5fcXVldWVkQ2h1bms9ZTt0aGlzLl9kb25lPSEwO2Zvcihjb25zdCB0IG9mIHRoaXMuX3JlcXVlc3RzKXQucmVzb2x2ZSh7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTt0aGlzLl9yZXF1ZXN0cy5sZW5ndGg9MDt0aGlzLl9jbG9zZSgpfV9vbkVycm9yKHQpe3RoaXMuX3N0b3JlZEVycm9yPSgwLG4uY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikodCx0aGlzLl91cmwpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3JlcXVlc3RzKXQucmVqZWN0KHRoaXMuX3N0b3JlZEVycm9yKTt0aGlzLl9yZXF1ZXN0cy5sZW5ndGg9MDt0aGlzLl9xdWV1ZWRDaHVuaz1udWxsfV9vblByb2dyZXNzKHQpe3RoaXMuaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fHRoaXMub25Qcm9ncmVzcz8uKHtsb2FkZWQ6dC5sb2FkZWR9KX1nZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4hMX1hc3luYyByZWFkKCl7aWYodGhpcy5fc3RvcmVkRXJyb3IpdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7aWYobnVsbCE9PXRoaXMuX3F1ZXVlZENodW5rKXtjb25zdCB0PXRoaXMuX3F1ZXVlZENodW5rO3RoaXMuX3F1ZXVlZENodW5rPW51bGw7cmV0dXJue3ZhbHVlOnQsZG9uZTohMX19aWYodGhpcy5fZG9uZSlyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9O2NvbnN0IHQ9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLl9yZXF1ZXN0cy5wdXNoKHQpO3JldHVybiB0LnByb21pc2V9Y2FuY2VsKHQpe3RoaXMuX2RvbmU9ITA7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcmVxdWVzdHMpdC5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pO3RoaXMuX3JlcXVlc3RzLmxlbmd0aD0wO3RoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9yZXF1ZXN0SWQpJiZ0aGlzLl9tYW5hZ2VyLmFib3J0UmVxdWVzdCh0aGlzLl9yZXF1ZXN0SWQpO3RoaXMuX2Nsb3NlKCl9fX0sKHQsZSxzKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtlLlBERkZldGNoU3RyZWFtPXZvaWQgMDt2YXIgaT1zKDEpLG49cygzMik7ZnVuY3Rpb24gY3JlYXRlRmV0Y2hPcHRpb25zKHQsZSxzKXtyZXR1cm57bWV0aG9kOiJHRVQiLGhlYWRlcnM6dCxzaWduYWw6cy5zaWduYWwsbW9kZToiY29ycyIsY3JlZGVudGlhbHM6ZT8iaW5jbHVkZSI6InNhbWUtb3JpZ2luIixyZWRpcmVjdDoiZm9sbG93In19ZnVuY3Rpb24gY3JlYXRlSGVhZGVycyh0KXtjb25zdCBlPW5ldyBIZWFkZXJzO2Zvcihjb25zdCBzIGluIHQpe2NvbnN0IGk9dFtzXTt2b2lkIDAhPT1pJiZlLmFwcGVuZChzLGkpfXJldHVybiBlfWUuUERGRmV0Y2hTdHJlYW09Y2xhc3MgUERGRmV0Y2hTdHJlYW17Y29uc3RydWN0b3IodCl7dGhpcy5zb3VyY2U9dDt0aGlzLmlzSHR0cD0vXmh0dHBzPzovaS50ZXN0KHQudXJsKTt0aGlzLmh0dHBIZWFkZXJzPXRoaXMuaXNIdHRwJiZ0Lmh0dHBIZWFkZXJzfHx7fTt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsO3RoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119Z2V0IF9wcm9ncmVzc2l2ZURhdGFMZW5ndGgoKXtyZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/Ll9sb2FkZWQ/PzB9Z2V0RnVsbFJlYWRlcigpeygwLGkuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIik7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IFBERkZldGNoU3RyZWFtUmVhZGVyKHRoaXMpO3JldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn1nZXRSYW5nZVJlYWRlcih0LGUpe2lmKGU8PXRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBzPW5ldyBQREZGZXRjaFN0cmVhbVJhbmdlUmVhZGVyKHRoaXMsdCxlKTt0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocyk7cmV0dXJuIHN9Y2FuY2VsQWxsUmVxdWVzdHModCl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/LmNhbmNlbCh0KTtmb3IoY29uc3QgZSBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKWUuY2FuY2VsKHQpfX07Y2xhc3MgUERGRmV0Y2hTdHJlYW1SZWFkZXJ7Y29uc3RydWN0b3IodCl7dGhpcy5fc3RyZWFtPXQ7dGhpcy5fcmVhZGVyPW51bGw7dGhpcy5fbG9hZGVkPTA7dGhpcy5fZmlsZW5hbWU9bnVsbDtjb25zdCBlPXQuc291cmNlO3RoaXMuX3dpdGhDcmVkZW50aWFscz1lLndpdGhDcmVkZW50aWFsc3x8ITE7dGhpcy5fY29udGVudExlbmd0aD1lLmxlbmd0aDt0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuX2Rpc2FibGVSYW5nZT1lLmRpc2FibGVSYW5nZXx8ITE7dGhpcy5fcmFuZ2VDaHVua1NpemU9ZS5yYW5nZUNodW5rU2l6ZTt0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKTt0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcjt0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hZS5kaXNhYmxlU3RyZWFtO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9IWUuZGlzYWJsZVJhbmdlO3RoaXMuX2hlYWRlcnM9Y3JlYXRlSGVhZGVycyh0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpO2NvbnN0IHM9ZS51cmw7ZmV0Y2gocyxjcmVhdGVGZXRjaE9wdGlvbnModGhpcy5faGVhZGVycyx0aGlzLl93aXRoQ3JlZGVudGlhbHMsdGhpcy5fYWJvcnRDb250cm9sbGVyKSkudGhlbigodD0+e2lmKCEoMCxuLnZhbGlkYXRlUmVzcG9uc2VTdGF0dXMpKHQuc3RhdHVzKSl0aHJvdygwLG4uY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikodC5zdGF0dXMscyk7dGhpcy5fcmVhZGVyPXQuYm9keS5nZXRSZWFkZXIoKTt0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7Y29uc3QgZ2V0UmVzcG9uc2VIZWFkZXI9ZT0+dC5oZWFkZXJzLmdldChlKSx7YWxsb3dSYW5nZVJlcXVlc3RzOmUsc3VnZ2VzdGVkTGVuZ3RoOnJ9PSgwLG4udmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjpnZXRSZXNwb25zZUhlYWRlcixpc0h0dHA6dGhpcy5fc3RyZWFtLmlzSHR0cCxyYW5nZUNodW5rU2l6ZTp0aGlzLl9yYW5nZUNodW5rU2l6ZSxkaXNhYmxlUmFuZ2U6dGhpcy5fZGlzYWJsZVJhbmdlfSk7dGhpcy5faXNSYW5nZVN1cHBvcnRlZD1lO3RoaXMuX2NvbnRlbnRMZW5ndGg9cnx8dGhpcy5fY29udGVudExlbmd0aDt0aGlzLl9maWxlbmFtZT0oMCxuLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGdldFJlc3BvbnNlSGVhZGVyKTshdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQmJnRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQmJnRoaXMuY2FuY2VsKG5ldyBpLkFib3J0RXhjZXB0aW9uKCJTdHJlYW1pbmcgaXMgZGlzYWJsZWQuIikpfSkpLmNhdGNoKHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7dGhpcy5vblByb2dyZXNzPW51bGx9Z2V0IGhlYWRlcnNSZWFkeSgpe3JldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlfWdldCBmaWxlbmFtZSgpe3JldHVybiB0aGlzLl9maWxlbmFtZX1nZXQgY29udGVudExlbmd0aCgpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofWdldCBpc1JhbmdlU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfWFzeW5jIHJlYWQoKXthd2FpdCB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO2NvbnN0e3ZhbHVlOnQsZG9uZTplfT1hd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO2lmKGUpcmV0dXJue3ZhbHVlOnQsZG9uZTplfTt0aGlzLl9sb2FkZWQrPXQuYnl0ZUxlbmd0aDt0aGlzLm9uUHJvZ3Jlc3M/Lih7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSk7cmV0dXJue3ZhbHVlOm5ldyBVaW50OEFycmF5KHQpLmJ1ZmZlcixkb25lOiExfX1jYW5jZWwodCl7dGhpcy5fcmVhZGVyPy5jYW5jZWwodCk7dGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCl9fWNsYXNzIFBERkZldGNoU3RyZWFtUmFuZ2VSZWFkZXJ7Y29uc3RydWN0b3IodCxlLHMpe3RoaXMuX3N0cmVhbT10O3RoaXMuX3JlYWRlcj1udWxsO3RoaXMuX2xvYWRlZD0wO2NvbnN0IHI9dC5zb3VyY2U7dGhpcy5fd2l0aENyZWRlbnRpYWxzPXIud2l0aENyZWRlbnRpYWxzfHwhMTt0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFyLmRpc2FibGVTdHJlYW07dGhpcy5fYWJvcnRDb250cm9sbGVyPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5faGVhZGVycz1jcmVhdGVIZWFkZXJzKHRoaXMuX3N0cmVhbS5odHRwSGVhZGVycyk7dGhpcy5faGVhZGVycy5hcHBlbmQoIlJhbmdlIixgYnl0ZXM9JHtlfS0ke3MtMX1gKTtjb25zdCBhPXIudXJsO2ZldGNoKGEsY3JlYXRlRmV0Y2hPcHRpb25zKHRoaXMuX2hlYWRlcnMsdGhpcy5fd2l0aENyZWRlbnRpYWxzLHRoaXMuX2Fib3J0Q29udHJvbGxlcikpLnRoZW4oKHQ9PntpZighKDAsbi52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKSh0LnN0YXR1cykpdGhyb3coMCxuLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQuc3RhdHVzLGEpO3RoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTt0aGlzLl9yZWFkZXI9dC5ib2R5LmdldFJlYWRlcigpfSkpLmNhdGNoKHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlamVjdCk7dGhpcy5vblByb2dyZXNzPW51bGx9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfWFzeW5jIHJlYWQoKXthd2FpdCB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO2NvbnN0e3ZhbHVlOnQsZG9uZTplfT1hd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO2lmKGUpcmV0dXJue3ZhbHVlOnQsZG9uZTplfTt0aGlzLl9sb2FkZWQrPXQuYnl0ZUxlbmd0aDt0aGlzLm9uUHJvZ3Jlc3M/Lih7bG9hZGVkOnRoaXMuX2xvYWRlZH0pO3JldHVybnt2YWx1ZTpuZXcgVWludDhBcnJheSh0KS5idWZmZXIsZG9uZTohMX19Y2FuY2VsKHQpe3RoaXMuX3JlYWRlcj8uY2FuY2VsKHQpO3RoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX19XSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX193X3BkZmpzX3JlcXVpcmVfXyh0KXt2YXIgZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gZS5leHBvcnRzO3ZhciBzPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1t0XT17ZXhwb3J0czp7fX07X193ZWJwYWNrX21vZHVsZXNfX1t0XShzLHMuZXhwb3J0cyxfX3dfcGRmanNfcmVxdWlyZV9fKTtyZXR1cm4gcy5leHBvcnRzfXZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9OygoKT0+e3ZhciB0PV9fd2VicGFja19leHBvcnRzX187T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uRWRpdG9yTGF5ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLkFubm90YXRpb25FZGl0b3JMYXllcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uRWRpdG9yVHlwZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuQW5ub3RhdGlvbkVkaXRvclR5cGV9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkFubm90YXRpb25FZGl0b3JVSU1hbmFnZXJ9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkFubm90YXRpb25MYXllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuQW5ub3RhdGlvbkxheWVyfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJBbm5vdGF0aW9uTW9kZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuQW5ub3RhdGlvbk1vZGV9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkNNYXBDb21wcmVzc2lvblR5cGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkNNYXBDb21wcmVzc2lvblR5cGV9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkdsb2JhbFdvcmtlck9wdGlvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLkdsb2JhbFdvcmtlck9wdGlvbnN9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIkludmFsaWRQREZFeGNlcHRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLkludmFsaWRQREZFeGNlcHRpb259fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk1pc3NpbmdQREZFeGNlcHRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLk1pc3NpbmdQREZFeGNlcHRpb259fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk9QUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuT1BTfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQREZEYXRhUmFuZ2VUcmFuc3BvcnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlBERkRhdGFSYW5nZVRyYW5zcG9ydH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUERGRGF0ZVN0cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuUERGRGF0ZVN0cmluZ319KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUERGV29ya2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5QREZXb3JrZXJ9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBhc3N3b3JkUmVzcG9uc2VzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5QYXNzd29yZFJlc3BvbnNlc319KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUGVybWlzc2lvbkZsYWciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLlBlcm1pc3Npb25GbGFnfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJQaXhlbHNQZXJJbmNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5QaXhlbHNQZXJJbmNofX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiU1ZHR3JhcGhpY3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLlNWR0dyYXBoaWNzfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVTlNVUFBPUlRFRF9GRUFUVVJFUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuVU5TVVBQT1JURURfRkVBVFVSRVN9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9ufX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVdGlsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5VdGlsfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJWZXJib3NpdHlMZXZlbCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuVmVyYm9zaXR5TGV2ZWx9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlhmYUxheWVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5YZmFMYXllcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYnVpbGQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmJ1aWxkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmx9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldERvY3VtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5nZXREb2N1bWVudH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZ2V0RmlsZW5hbWVGcm9tVXJsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXRGaWxlbmFtZUZyb21Vcmx9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldFBkZkZpbGVuYW1lRnJvbVVybCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZ2V0UGRmRmlsZW5hbWVGcm9tVXJsfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZXRYZmFQYWdlVmlld3BvcnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmdldFhmYVBhZ2VWaWV3cG9ydH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNQZGZGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc1BkZkZpbGV9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRTY3JpcHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmxvYWRTY3JpcHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJlbmRlclRleHRMYXllciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMucmVuZGVyVGV4dExheWVyfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFkb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLnNoYWRvd319KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmVyc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMudmVyc2lvbn19KTt2YXIgZT1fX3dfcGRmanNfcmVxdWlyZV9fKDEpLHM9X193X3BkZmpzX3JlcXVpcmVfXygyKSxpPV9fd19wZGZqc19yZXF1aXJlX18oNiksbj1fX3dfcGRmanNfcmVxdWlyZV9fKDIxKSxyPV9fd19wZGZqc19yZXF1aXJlX18oNSksYT1fX3dfcGRmanNfcmVxdWlyZV9fKDI2KSxvPV9fd19wZGZqc19yZXF1aXJlX18oMTQpLGw9X193X3BkZmpzX3JlcXVpcmVfXygxMiksYz1fX3dfcGRmanNfcmVxdWlyZV9fKDI5KSxoPV9fd19wZGZqc19yZXF1aXJlX18oMzApLGQ9X193X3BkZmpzX3JlcXVpcmVfXygyOCk7aWYobC5pc05vZGVKUyl7Y29uc3R7UERGTm9kZVN0cmVhbTp0fT1fX3dfcGRmanNfcmVxdWlyZV9fKDMxKTsoMCxzLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KSgoZT0+bmV3IHQoZSkpKX1lbHNle2NvbnN0e1BERk5ldHdvcmtTdHJlYW06dH09X193X3BkZmpzX3JlcXVpcmVfXygzNCkse1BERkZldGNoU3RyZWFtOmV9PV9fd19wZGZqc19yZXF1aXJlX18oMzUpOygwLHMuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkpKChzPT4oMCxpLmlzVmFsaWRGZXRjaFVybCkocy51cmwpP25ldyBlKHMpOm5ldyB0KHMpKSl9fSkoKTtyZXR1cm4gX193ZWJwYWNrX2V4cG9ydHNfX30pKCkpKTs='
;// CONCATENATED MODULE: ./packages/pdf/src/utils/loadScript.js
/* harmony default export */ function loadScript(src){
return new Promise(((resolve, reject) => {
let script = document.createElement('script')
script.src = src
script.onload = function (){
resolve()
}
script.onerror = function (){
reject()
}
document.body.append(script)
}))
}
;// CONCATENATED MODULE: ./node_modules/_vue-loader@15.10.0@vue-loader/lib/index.js??vue-loader-options!./packages/pdf/src/main.vue?vue&type=script&lang=js&
const pdfJsLibSrc = `data:text/javascript;base64,${pdfjsLib}`;
const PdfJsWorkerSrc = `data:text/javascript;base64,${worker}`;
/* harmony default export */ var mainvue_type_script_lang_js_ = ({
name: "VueOfficePdf",
props: {
src: {
type: [String]
}
},
data() {
return {
document: '',
numPages: 0
}
},
watch: {
src() {
this.checkPdfLib().then(this.init)
}
},
mounted() {
if (this.src) {
this.checkPdfLib().then(this.init)
}
},
methods: {
checkPdfLib() {
if (window.pdfjsLib) {
return Promise.resolve()
}
return this.installPdfScript()
},
installPdfScript() {
return loadScript(pdfJsLibSrc).then(() => {
window.pdfjsLib.GlobalWorkerOptions.workerSrc = PdfJsWorkerSrc
});
},
init() {
if (!this.src) {
this.numPages = 0
return
}
const loadingTask = window.pdfjsLib.getDocument(this.src);
loadingTask.promise.then((pdfDocument) => {
this.document = pdfDocument;
this.numPages = pdfDocument.numPages;
this.renderPage(1)
}).catch((e) => {
this.$emit('error', e)
})
},
renderPage(num) {
this.document.getPage(num).then((pdfPage) => {
const viewport = pdfPage.getViewport({scale: window.devicePixelRatio});
const canvas = this.$refs['canvas' + num][0];
canvas.width = viewport.width;
canvas.height = viewport.height;
const ctx = canvas.getContext("2d");
const renderTask = pdfPage.render({
canvasContext: ctx,
viewport,
});
renderTask.promise.then(() => {
if (this.numPages > num) {
this.renderPage(num + 1);
} else {
this.$emit('rendered')
}
}).catch((e) => {
this.$emit('error', e)
});
}).catch((e) => {
this.$emit('error', e)
});
}
}
});
;// CONCATENATED MODULE: ./packages/pdf/src/main.vue?vue&type=script&lang=js&
/* harmony default export */ var src_mainvue_type_script_lang_js_ = (mainvue_type_script_lang_js_);
;// CONCATENATED MODULE: ./node_modules/_vue-loader@15.10.0@vue-loader/lib/runtime/componentNormalizer.js
/* globals __VUE_SSR_CONTEXT__ */
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
// This module is a runtime utility for cleaner component module output and will
// be included in the final webpack user bundle.
function normalizeComponent(
scriptExports,
render,
staticRenderFns,
functionalTemplate,
injectStyles,
scopeId,
moduleIdentifier /* server only */,
shadowMode /* vue-cli only */
) {
// Vue.extend constructor export interop
var options =
typeof scriptExports === 'function' ? scriptExports.options : scriptExports
// render functions
if (render) {
options.render = render
options.staticRenderFns = staticRenderFns
options._compiled = true
}
// functional template
if (functionalTemplate) {
options.functional = true
}
// scopedId
if (scopeId) {
options._scopeId = 'data-v-' + scopeId
}
var hook
if (moduleIdentifier) {
// server build
hook = function (context) {
// 2.3 injection
context =
context || // cached call
(this.$vnode && this.$vnode.ssrContext) || // stateful
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
// 2.2 with runInNewContext: true
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
context = __VUE_SSR_CONTEXT__
}
// inject component styles
if (injectStyles) {
injectStyles.call(this, context)
}
// register component module identifier for async chunk inferrence
if (context && context._registeredComponents) {
context._registeredComponents.add(moduleIdentifier)
}
}
// used by ssr in case component is cached and beforeCreate
// never gets called
options._ssrRegister = hook
} else if (injectStyles) {
hook = shadowMode
? function () {
injectStyles.call(
this,
(options.functional ? this.parent : this).$root.$options.shadowRoot
)
}
: injectStyles
}
if (hook) {
if (options.functional) {
// for template-only hot-reload because in that case the render fn doesn't
// go through the normalizer
options._injectStyles = hook
// register for functional component in vue file
var originalRender = options.render
options.render = function renderWithStyleInjection(h, context) {
hook.call(context)
return originalRender(h, context)
}
} else {
// inject component registration as beforeCreate hook
var existing = options.beforeCreate
options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
}
}
return {
exports: scriptExports,
options: options
}
}
;// CONCATENATED MODULE: ./packages/pdf/src/main.vue
/* normalize component */
;
var component = normalizeComponent(
src_mainvue_type_script_lang_js_,
render,
staticRenderFns,
false,
null,
"4b4de15c",
null
)
/* harmony default export */ var main = (component.exports);
;// CONCATENATED MODULE: ./packages/pdf/index.js
main.install = function (Vue) {
Vue.component(main.name, main)
}
/* harmony default export */ var pdf = (main);
;// CONCATENATED MODULE: ./node_modules/_@vue_cli-service@5.0.8@@vue/cli-service/lib/commands/build/entry-lib.js
/* harmony default export */ var entry_lib = (pdf);
/******/ return __webpack_exports__;
/******/ })()
;
});
//# sourceMappingURL=vue-office-pdf.umd.js.map