diff --git a/dist/widget.js b/dist/widget.js
index fcc807b..bbf91df 100644
--- a/dist/widget.js
+++ b/dist/widget.js
@@ -1870,7 +1870,7 @@ module.exports = "";
},{}],14:[function(require,module,exports){
-module.exports = require('sassify')('.xpaystation-widget-lightbox{position:fixed;top:0;left:0;bottom:0;right:0;width:100%;height:100%;-webkit-animation:xpaystation-widget-lightbox-fadein 0.15s;animation:xpaystation-widget-lightbox-fadein 0.15s}.xpaystation-widget-lightbox-overlay{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1}.xpaystation-widget-lightbox-content{position:relative;top:0;left:0;z-index:3}.xpaystation-widget-lightbox-content__hidden{visibility:hidden;z-index:-1}.xpaystation-widget-lightbox-content-iframe{width:100%;height:100%;border:0;background:transparent}.xpaystation-widget-lightbox-spinner{position:absolute;top:50%;left:50%;display:none;z-index:2;pointer-events:none}.xpaystation-widget-lightbox-spinner .spinner-xsolla{width:56px;height:55px;margin-top:-28px;margin-left:-26px}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;-webkit-animation-fill-mode:both;animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;animation-fill-mode:both}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x{-webkit-animation-delay:0s;animation-delay:0s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s{-webkit-animation-delay:.2s;animation-delay:.2s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o{-webkit-animation-delay:.4s;animation-delay:.4s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l{-webkit-animation-delay:.6s;animation-delay:.6s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation-delay:.8s;animation-delay:.8s}.xpaystation-widget-lightbox-spinner .spinner-round{margin-top:-23px;margin-left:-23px;-webkit-animation:xpaystation-widget-lightbox-spin 3s infinite linear;animation:xpaystation-widget-lightbox-spin 3s infinite linear}.xpaystation-widget-lightbox-spinner .spinner-custom{-webkit-animation:xpaystation-widget-lightbox-spin infinite linear;animation:xpaystation-widget-lightbox-spin infinite linear}@-webkit-keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes xpaystation-widget-lightbox-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} /*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAibGlnaHRib3guc2NzcyIsCgkic291cmNlcyI6IFsKCQkibGlnaHRib3guc2NzcyIKCV0sCgkic291cmNlc0NvbnRlbnQiOiBbCgkJIiRsaWdodGJveC1wcmVmaXg6ICd4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gnO1xyXG4kbGlnaHRib3gtY2xhc3M6ICcuJyArICRsaWdodGJveC1wcmVmaXg7XHJcblxyXG4jeyRsaWdodGJveC1jbGFzc30ge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMDtcclxuICBib3R0b206IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiAuMTVzO1xyXG4gIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1mYWRlaW4gLjE1cztcclxufVxyXG5cclxuI3skbGlnaHRib3gtY2xhc3N9LW92ZXJsYXkge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB0b3A6MDtcclxuICBsZWZ0OiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICByaWdodDogMDtcclxuICB6LWluZGV4OiAxO1xyXG59XHJcblxyXG4jeyRsaWdodGJveC1jbGFzc30tY29udGVudCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHotaW5kZXg6IDM7XHJcbn1cclxuXHJcbiN7JGxpZ2h0Ym94LWNsYXNzfS1jb250ZW50X19oaWRkZW4ge1xyXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICB6LWluZGV4OiAtMTtcclxufVxyXG5cclxuI3skbGlnaHRib3gtY2xhc3N9LWNvbnRlbnQtaWZyYW1lIHtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYm9yZGVyOiAwO1xyXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG4jeyRsaWdodGJveC1jbGFzc30tc3Bpbm5lciB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogNTAlO1xyXG4gIGxlZnQ6IDUwJTtcclxuICBkaXNwbGF5OiBub25lO1xyXG4gIHotaW5kZXg6IDI7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcblxyXG4gIC5zcGlubmVyLXhzb2xsYSB7XHJcbiAgICB3aWR0aDogNTZweDtcclxuICAgIGhlaWdodDogNTVweDtcclxuICAgIG1hcmdpbjoge1xyXG4gICAgICB0b3A6IC0yOHB4O1xyXG4gICAgICBsZWZ0OiAtMjZweDtcclxuICAgIH1cclxuXHJcbiAgICAuc3Bpbm5lci14c29sbGEteCwgLnNwaW5uZXIteHNvbGxhLXMsIC5zcGlubmVyLXhzb2xsYS1vLCAuc3Bpbm5lci14c29sbGEtbCwgLnNwaW5uZXIteHNvbGxhLWEge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcclxuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xyXG4gICAgICBhbmltYXRpb246ICN7JGxpZ2h0Ym94LXByZWZpeH0tYm91bmNlZGVsYXkgMXMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7XHJcbiAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLnNwaW5uZXIteHNvbGxhLXgge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMHM7XHJcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMHM7XHJcbiAgICB9XHJcblxyXG4gICAgLnNwaW5uZXIteHNvbGxhLXMge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjJzO1xyXG4gICAgICBhbmltYXRpb24tZGVsYXk6IC4ycztcclxuICAgIH1cclxuXHJcbiAgICAuc3Bpbm5lci14c29sbGEtbyB7XHJcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAuNHM7XHJcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjRzO1xyXG4gICAgfVxyXG5cclxuICAgIC5zcGlubmVyLXhzb2xsYS1sIHtcclxuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IC42cztcclxuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuNnM7XHJcbiAgICB9XHJcblxyXG4gICAgLnNwaW5uZXIteHNvbGxhLWEge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjhzO1xyXG4gICAgICBhbmltYXRpb24tZGVsYXk6IC44cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5zcGlubmVyLXJvdW5kIHtcclxuICAgIG1hcmdpbjoge1xyXG4gICAgICB0b3A6IC0yM3B4O1xyXG4gICAgICBsZWZ0OiAtMjNweDtcclxuICAgIH1cclxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gM3MgaW5maW5pdGUgbGluZWFyO1xyXG4gICAgYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gM3MgaW5maW5pdGUgbGluZWFyO1xyXG4gIH1cclxuXHJcbiAgLnNwaW5uZXItY3VzdG9tIHtcclxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gaW5maW5pdGUgbGluZWFyO1xyXG4gICAgYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gaW5maW5pdGUgbGluZWFyO1xyXG4gIH1cclxufVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tYm91bmNlZGVsYXkge1xyXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XHJcbiAgNDAlIHsgb3BhY2l0eTogMSB9XHJcbn1cclxuXHJcbkBrZXlmcmFtZXMgI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSB7XHJcbiAgMCUsIDgwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cclxuICA0MCUgeyBvcGFjaXR5OiAxOyB9XHJcbn1cclxuXHJcbkAtd2Via2l0LWtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiB7XHJcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cclxuICB0byB7IG9wYWNpdHk6IDE7IH1cclxufVxyXG5cclxuQGtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiB7XHJcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cclxuICB0byB7IG9wYWNpdHk6IDE7IH1cclxufVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiB7XHJcbiAgZnJvbSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cclxuICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxyXG59XHJcblxyXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiB7XHJcbiAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XHJcbiAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XHJcbn1cclxuIgoJXSwKCSJtYXBwaW5ncyI6ICJBQUdBLEFBQUEsNEJBQTRCLEFBQTVCLENBQ0UsUUFBUSxDQUFFLEtBQU0sQ0FDaEIsR0FBRyxDQUFFLENBQUUsQ0FDUCxJQUFJLENBQUUsQ0FBRSxDQUNSLE1BQU0sQ0FBRSxDQUFFLENBQ1YsS0FBSyxDQUFFLENBQUUsQ0FDVCxLQUFLLENBQUUsSUFBSyxDQUNaLE1BQU0sQ0FBRSxJQUFLLENBQ2IsaUJBQWlCLENBQUUsa0NBQTBCLENBQVEsS0FBSSxDQUN6RCxTQUFTLENBQUUsa0NBQTBCLENBQVEsS0FBSSxDQUNsRCxBQUVELEFBQUEsb0NBQW9DLEFBQXBDLENBQ0UsUUFBUSxDQUFFLFFBQVMsQ0FDbkIsR0FBRyxDQUFDLENBQUUsQ0FDTixJQUFJ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 */');;
+module.exports = require('sassify')('.xpaystation-widget-lightbox{position:fixed;top:0;left:0;bottom:0;right:0;width:100%;height:100%;-webkit-animation:xpaystation-widget-lightbox-fadein 0.15s;animation:xpaystation-widget-lightbox-fadein 0.15s}.xpaystation-widget-lightbox-overlay{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1}.xpaystation-widget-lightbox-content{position:relative;top:0;left:0;z-index:3}.xpaystation-widget-lightbox-content__hidden{visibility:hidden;z-index:-1}.xpaystation-widget-lightbox-content-iframe{width:100%;height:100%;border:0;background:transparent}.xpaystation-widget-lightbox-spinner{position:absolute;top:50%;left:50%;display:none;z-index:2;pointer-events:none}.xpaystation-widget-lightbox-spinner .spinner-xsolla{width:56px;height:55px;margin-top:-28px;margin-left:-26px}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;-webkit-animation-fill-mode:both;animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;animation-fill-mode:both}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x{-webkit-animation-delay:0s;animation-delay:0s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s{-webkit-animation-delay:.2s;animation-delay:.2s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o{-webkit-animation-delay:.4s;animation-delay:.4s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l{-webkit-animation-delay:.6s;animation-delay:.6s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation-delay:.8s;animation-delay:.8s}.xpaystation-widget-lightbox-spinner .spinner-round{margin-top:-23px;margin-left:-23px;-webkit-animation:xpaystation-widget-lightbox-spin 3s infinite linear;animation:xpaystation-widget-lightbox-spin 3s infinite linear}.xpaystation-widget-lightbox-spinner .spinner-custom{-webkit-animation:xpaystation-widget-lightbox-spin infinite linear;animation:xpaystation-widget-lightbox-spin infinite linear}@-webkit-keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes xpaystation-widget-lightbox-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} /*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAibGlnaHRib3guc2NzcyIsCgkic291cmNlcyI6IFsKCQkibGlnaHRib3guc2NzcyIKCV0sCgkic291cmNlc0NvbnRlbnQiOiBbCgkJIiRsaWdodGJveC1wcmVmaXg6ICd4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gnO1xuJGxpZ2h0Ym94LWNsYXNzOiAnLicgKyAkbGlnaHRib3gtcHJlZml4O1xuXG4jeyRsaWdodGJveC1jbGFzc30ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgLXdlYmtpdC1hbmltYXRpb246ICN7JGxpZ2h0Ym94LXByZWZpeH0tZmFkZWluIC4xNXM7XG4gIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1mYWRlaW4gLjE1cztcbn1cblxuI3skbGlnaHRib3gtY2xhc3N9LW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDowO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiAxO1xufVxuXG4jeyRsaWdodGJveC1jbGFzc30tY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAzO1xufVxuXG4jeyRsaWdodGJveC1jbGFzc30tY29udGVudF9faGlkZGVuIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICB6LWluZGV4OiAtMTtcbn1cblxuI3skbGlnaHRib3gtY2xhc3N9LWNvbnRlbnQtaWZyYW1lIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiAwO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuI3skbGlnaHRib3gtY2xhc3N9LXNwaW5uZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHotaW5kZXg6IDI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gIC5zcGlubmVyLXhzb2xsYSB7XG4gICAgd2lkdGg6IDU2cHg7XG4gICAgaGVpZ2h0OiA1NXB4O1xuICAgIG1hcmdpbjoge1xuICAgICAgdG9wOiAtMjhweDtcbiAgICAgIGxlZnQ6IC0yNnB4O1xuICAgIH1cblxuICAgIC5zcGlubmVyLXhzb2xsYS14LCAuc3Bpbm5lci14c29sbGEtcywgLnNwaW5uZXIteHNvbGxhLW8sIC5zcGlubmVyLXhzb2xsYS1sLCAuc3Bpbm5lci14c29sbGEtYSB7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDtcbiAgICAgIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcbiAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgfVxuXG4gICAgLnNwaW5uZXIteHNvbGxhLXgge1xuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDBzO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwcztcbiAgICB9XG5cbiAgICAuc3Bpbm5lci14c29sbGEtcyB7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjJzO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuMnM7XG4gICAgfVxuXG4gICAgLnNwaW5uZXIteHNvbGxhLW8ge1xuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IC40cztcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjRzO1xuICAgIH1cblxuICAgIC5zcGlubmVyLXhzb2xsYS1sIHtcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAuNnM7XG4gICAgICBhbmltYXRpb24tZGVsYXk6IC42cztcbiAgICB9XG5cbiAgICAuc3Bpbm5lci14c29sbGEtYSB7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjhzO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOHM7XG4gICAgfVxuICB9XG5cbiAgLnNwaW5uZXItcm91bmQge1xuICAgIG1hcmdpbjoge1xuICAgICAgdG9wOiAtMjNweDtcbiAgICAgIGxlZnQ6IC0yM3B4O1xuICAgIH1cbiAgICAtd2Via2l0LWFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1zcGluIDNzIGluZmluaXRlIGxpbmVhcjtcbiAgICBhbmltYXRpb246ICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiAzcyBpbmZpbml0ZSBsaW5lYXI7XG4gIH1cblxuICAuc3Bpbm5lci1jdXN0b20ge1xuICAgIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gaW5maW5pdGUgbGluZWFyO1xuICAgIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1zcGluIGluZmluaXRlIGxpbmVhcjtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSB7XG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDEgfVxufVxuXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tYm91bmNlZGVsYXkge1xuICAwJSwgODAlLCAxMDAlIHsgb3BhY2l0eTogMDsgfVxuICA0MCUgeyBvcGFjaXR5OiAxOyB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiB7XG4gIGZyb20geyBvcGFjaXR5OiAwOyB9XG4gIHRvIHsgb3BhY2l0eTogMTsgfVxufVxuXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tZmFkZWluIHtcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cbiAgdG8geyBvcGFjaXR5OiAxOyB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4ge1xuICBmcm9tIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxufVxuXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiB7XG4gIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbn1cbiIKCV0sCgkibWFwcGluZ3MiOiAiQUFHQSxBQUFBLDRCQUE0QixBQUE1QixDQUNFLFFBQVEsQ0FBRSxLQUFNLENBQ2hCLEdBQUcsQ0FBRSxDQUFFLENBQ1AsSUFBSSxDQUFFLENBQUUsQ0FDUixNQUFNLENBQUUsQ0FBRSxDQUNWLEtBQUssQ0FBRSxDQUFFLENBQ1QsS0FBSyxDQUFFLElBQUssQ0FDWixNQUFNLENBQUUsSUFBSyxDQUNiLGlCQUFpQixDQUFFLGtDQUEwQixDQUFRLEtBQUksQ0FDekQsU0FBUyxDQUFFLGtDQUEwQixDQUFRLEtBQUksQ0FDbEQsQUFFRCxBQUFBLG9DQUFvQyxBQUFwQyxDQUNFLFFBQVEsQ0FBRSxRQUFTLENBQ25CLEdBQUcsQ0FBQyxDQUFFLENBQ04sSUFBSSxDQUFFLENBQUUsQ0FDUixNQUFNLENBQUUsQ0FBRSxDQUNWLEtBQUssQ0FBRSxDQUFFLENBQ1QsT0FBTyxDQUFFLENBQUUsQ0FDWixBQUVELEFBQUEsb0NBQW9DLEFBQXBDLENBQ0UsUUFBUSxDQUFFLFFBQVMsQ0FDbkIsR0FBRyxDQUFFLENBQUUsQ0FDUCxJQUFJLENBQUUsQ0FBRSxDQUNSLE9BQU8sQ0FBRSxDQUFFLENBQ1osQUFFRCxBQUFBLDRDQUE0QyxBQUE1QyxDQUNFLFVBQVUsQ0FBRSxNQUFPLENBQ25CLE9BQU8sQ0FBRSxFQUFHLENBQ2IsQUFFRCxBQUFBLDJDQUEyQyxB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 */');;
},{"sassify":3}],15:[function(require,module,exports){
module.exports = '1.2.12';
@@ -1904,4 +1904,4 @@ module.exports = (function () {
},{"./app":4,"./helpers":8,"./polyfills":10}]},{},["main"])("main")
});
-//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYm93c2VyL3NyYy9ib3dzZXIuanMiLCJub2RlX21vZHVsZXMvY3NzaWZ5L2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2Fzc2lmeS9saWIvc2Fzc2lmeS1icm93c2VyLmpzIiwic3JjL2FwcC5qcyIsInNyYy9jaGlsZHdpbmRvdy5qcyIsInNyYy9kZXZpY2UuanMiLCJzcmMvZXhjZXB0aW9uLmpzIiwic3JjL2hlbHBlcnMuanMiLCJzcmMvbGlnaHRib3guanMiLCJzcmMvcG9seWZpbGxzLmpzIiwic3JjL3Bvc3RtZXNzYWdlLmpzIiwic3JjL3NwaW5uZXJzL3JvdW5kLnN2ZyIsInNyYy9zcGlubmVycy94c29sbGEuc3ZnIiwic3JjL3N0eWxlcy9saWdodGJveC5zY3NzIiwic3JjL3ZlcnNpb24uanMiLCJzcmMvbWFpbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBOzs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN2VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDalpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDckVBO0FBQ0E7O0FDREE7QUFDQTs7QUNEQTs7QUNBQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLyohXG4gKiBCb3dzZXIgLSBhIGJyb3dzZXIgZGV0ZWN0b3JcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWQvYm93c2VyXG4gKiBNSVQgTGljZW5zZSB8IChjKSBEdXN0aW4gRGlheiAyMDE1XG4gKi9cblxuIWZ1bmN0aW9uIChyb290LCBuYW1lLCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKVxuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKG5hbWUsIGRlZmluaXRpb24pXG4gIGVsc2Ugcm9vdFtuYW1lXSA9IGRlZmluaXRpb24oKVxufSh0aGlzLCAnYm93c2VyJywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICAqIFNlZSB1c2VyYWdlbnRzLmpzIGZvciBleGFtcGxlcyBvZiBuYXZpZ2F0b3IudXNlckFnZW50XG4gICAgKi9cblxuICB2YXIgdCA9IHRydWVcblxuICBmdW5jdGlvbiBkZXRlY3QodWEpIHtcblxuICAgIGZ1bmN0aW9uIGdldEZpcnN0TWF0Y2gocmVnZXgpIHtcbiAgICAgIHZhciBtYXRjaCA9IHVhLm1hdGNoKHJlZ2V4KTtcbiAgICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaFsxXSkgfHwgJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2Vjb25kTWF0Y2gocmVnZXgpIHtcbiAgICAgIHZhciBtYXRjaCA9IHVhLm1hdGNoKHJlZ2V4KTtcbiAgICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaFsyXSkgfHwgJyc7XG4gICAgfVxuXG4gICAgdmFyIGlvc2RldmljZSA9IGdldEZpcnN0TWF0Y2goLyhpcG9kfGlwaG9uZXxpcGFkKS9pKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIGxpa2VBbmRyb2lkID0gL2xpa2UgYW5kcm9pZC9pLnRlc3QodWEpXG4gICAgICAsIGFuZHJvaWQgPSAhbGlrZUFuZHJvaWQgJiYgL2FuZHJvaWQvaS50ZXN0KHVhKVxuICAgICAgLCBuZXh1c01vYmlsZSA9IC9uZXh1c1xccypbMC02XVxccyovaS50ZXN0KHVhKVxuICAgICAgLCBuZXh1c1RhYmxldCA9ICFuZXh1c01vYmlsZSAmJiAvbmV4dXNcXHMqWzAtOV0rL2kudGVzdCh1YSlcbiAgICAgICwgY2hyb21lb3MgPSAvQ3JPUy8udGVzdCh1YSlcbiAgICAgICwgc2lsayA9IC9zaWxrL2kudGVzdCh1YSlcbiAgICAgICwgc2FpbGZpc2ggPSAvc2FpbGZpc2gvaS50ZXN0KHVhKVxuICAgICAgLCB0aXplbiA9IC90aXplbi9pLnRlc3QodWEpXG4gICAgICAsIHdlYm9zID0gLyh3ZWJ8aHB3KShvfDApcy9pLnRlc3QodWEpXG4gICAgICAsIHdpbmRvd3NwaG9uZSA9IC93aW5kb3dzIHBob25lL2kudGVzdCh1YSlcbiAgICAgICwgc2Ftc3VuZ0Jyb3dzZXIgPSAvU2Ftc3VuZ0Jyb3dzZXIvaS50ZXN0KHVhKVxuICAgICAgLCB3aW5kb3dzID0gIXdpbmRvd3NwaG9uZSAmJiAvd2luZG93cy9pLnRlc3QodWEpXG4gICAgICAsIG1hYyA9ICFpb3NkZXZpY2UgJiYgIXNpbGsgJiYgL21hY2ludG9zaC9pLnRlc3QodWEpXG4gICAgICAsIGxpbnV4ID0gIWFuZHJvaWQgJiYgIXNhaWxmaXNoICYmICF0aXplbiAmJiAhd2Vib3MgJiYgL2xpbnV4L2kudGVzdCh1YSlcbiAgICAgICwgZWRnZVZlcnNpb24gPSBnZXRTZWNvbmRNYXRjaCgvZWRnKFtlYV18aW9zKVxcLyhcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgICwgdmVyc2lvbklkZW50aWZpZXIgPSBnZXRGaXJzdE1hdGNoKC92ZXJzaW9uXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgLCB0YWJsZXQgPSAvdGFibGV0L2kudGVzdCh1YSkgJiYgIS90YWJsZXQgcGMvaS50ZXN0KHVhKVxuICAgICAgLCBtb2JpbGUgPSAhdGFibGV0ICYmIC9bXi1dbW9iaS9pLnRlc3QodWEpXG4gICAgICAsIHhib3ggPSAveGJveC9pLnRlc3QodWEpXG4gICAgICAsIHJlc3VsdFxuXG4gICAgaWYgKC9vcGVyYS9pLnRlc3QodWEpKSB7XG4gICAgICAvLyAgYW4gb2xkIE9wZXJhXG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdPcGVyYSdcbiAgICAgICwgb3BlcmE6IHRcbiAgICAgICwgdmVyc2lvbjogdmVyc2lvbklkZW50aWZpZXIgfHwgZ2V0Rmlyc3RNYXRjaCgvKD86b3BlcmF8b3ByfG9waW9zKVtcXHNcXC9dKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoL29wclxcL3xvcGlvcy9pLnRlc3QodWEpKSB7XG4gICAgICAvLyBhIG5ldyBPcGVyYVxuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnT3BlcmEnXG4gICAgICAgICwgb3BlcmE6IHRcbiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzpvcHJ8b3Bpb3MpW1xcc1xcL10oXFxkKyhcXC5cXGQrKT8pL2kpIHx8IHZlcnNpb25JZGVudGlmaWVyXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9TYW1zdW5nQnJvd3Nlci9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdTYW1zdW5nIEludGVybmV0IGZvciBBbmRyb2lkJ1xuICAgICAgICAsIHNhbXN1bmdCcm93c2VyOiB0XG4gICAgICAgICwgdmVyc2lvbjogdmVyc2lvbklkZW50aWZpZXIgfHwgZ2V0Rmlyc3RNYXRjaCgvKD86U2Ftc3VuZ0Jyb3dzZXIpW1xcc1xcL10oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9XaGFsZS9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdOQVZFUiBXaGFsZSBicm93c2VyJ1xuICAgICAgICAsIHdoYWxlOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86d2hhbGUpW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL01aQnJvd3Nlci9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdNWiBCcm93c2VyJ1xuICAgICAgICAsIG16YnJvd3NlcjogdFxuICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/Ok1aQnJvd3NlcilbXFxzXFwvXShcXGQrKD86XFwuXFxkKykrKS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvY29hc3QvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnT3BlcmEgQ29hc3QnXG4gICAgICAgICwgY29hc3Q6IHRcbiAgICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC8oPzpjb2FzdClbXFxzXFwvXShcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL2ZvY3VzL2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0ZvY3VzJ1xuICAgICAgICAsIGZvY3VzOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86Zm9jdXMpW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL3lhYnJvd3Nlci9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdZYW5kZXggQnJvd3NlcidcbiAgICAgICwgeWFuZGV4YnJvd3NlcjogdFxuICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC8oPzp5YWJyb3dzZXIpW1xcc1xcL10oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC91Y2Jyb3dzZXIvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIG5hbWU6ICdVQyBCcm93c2VyJ1xuICAgICAgICAsIHVjYnJvd3NlcjogdFxuICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OnVjYnJvd3NlcilbXFxzXFwvXShcXGQrKD86XFwuXFxkKykrKS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvbXhpb3MvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnTWF4dGhvbidcbiAgICAgICAgLCBtYXh0aG9uOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86bXhpb3MpW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL2VwaXBoYW55L2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0VwaXBoYW55J1xuICAgICAgICAsIGVwaXBoYW55OiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86ZXBpcGhhbnkpW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL3B1ZmZpbi9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdQdWZmaW4nXG4gICAgICAgICwgcHVmZmluOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86cHVmZmluKVtcXHNcXC9dKFxcZCsoPzpcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9zbGVpcG5pci9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdTbGVpcG5pcidcbiAgICAgICAgLCBzbGVpcG5pcjogdFxuICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OnNsZWlwbmlyKVtcXHNcXC9dKFxcZCsoPzpcXC5cXGQrKSspL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9rLW1lbGVvbi9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdLLU1lbGVvbidcbiAgICAgICAgLCBrTWVsZW9uOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86ay1tZWxlb24pW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAod2luZG93c3Bob25lKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdXaW5kb3dzIFBob25lJ1xuICAgICAgLCBvc25hbWU6ICdXaW5kb3dzIFBob25lJ1xuICAgICAgLCB3aW5kb3dzcGhvbmU6IHRcbiAgICAgIH1cbiAgICAgIGlmIChlZGdlVmVyc2lvbikge1xuICAgICAgICByZXN1bHQubXNlZGdlID0gdFxuICAgICAgICByZXN1bHQudmVyc2lvbiA9IGVkZ2VWZXJzaW9uXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0Lm1zaWUgPSB0XG4gICAgICAgIHJlc3VsdC52ZXJzaW9uID0gZ2V0Rmlyc3RNYXRjaCgvaWVtb2JpbGVcXC8oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9tc2llfHRyaWRlbnQvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSW50ZXJuZXQgRXhwbG9yZXInXG4gICAgICAsIG1zaWU6IHRcbiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86bXNpZSB8cnY6KShcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNocm9tZW9zKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdDaHJvbWUnXG4gICAgICAsIG9zbmFtZTogJ0Nocm9tZSBPUydcbiAgICAgICwgY2hyb21lb3M6IHRcbiAgICAgICwgY2hyb21lQm9vazogdFxuICAgICAgLCBjaHJvbWU6IHRcbiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86Y2hyb21lfGNyaW9zfGNybW8pXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoL2VkZyhbZWFdfGlvcykvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnTWljcm9zb2Z0IEVkZ2UnXG4gICAgICAsIG1zZWRnZTogdFxuICAgICAgLCB2ZXJzaW9uOiBlZGdlVmVyc2lvblxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvdml2YWxkaS9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdWaXZhbGRpJ1xuICAgICAgICAsIHZpdmFsZGk6IHRcbiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC92aXZhbGRpXFwvKFxcZCsoXFwuXFxkKyk/KS9pKSB8fCB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChzYWlsZmlzaCkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnU2FpbGZpc2gnXG4gICAgICAsIG9zbmFtZTogJ1NhaWxmaXNoIE9TJ1xuICAgICAgLCBzYWlsZmlzaDogdFxuICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC9zYWlsZmlzaFxccz9icm93c2VyXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvc2VhbW9ua2V5XFwvL2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ1NlYU1vbmtleSdcbiAgICAgICwgc2VhbW9ua2V5OiB0XG4gICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goL3NlYW1vbmtleVxcLyhcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL2ZpcmVmb3h8aWNld2Vhc2VsfGZ4aW9zL2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0ZpcmVmb3gnXG4gICAgICAsIGZpcmVmb3g6IHRcbiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86ZmlyZWZveHxpY2V3ZWFzZWx8Znhpb3MpWyBcXC9dKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgICAgaWYgKC9cXCgobW9iaWxlfHRhYmxldCk7W15cXCldKnJ2OltcXGRcXC5dK1xcKS9pLnRlc3QodWEpKSB7XG4gICAgICAgIHJlc3VsdC5maXJlZm94b3MgPSB0XG4gICAgICAgIHJlc3VsdC5vc25hbWUgPSAnRmlyZWZveCBPUydcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoc2lsaykge1xuICAgICAgcmVzdWx0ID0gIHtcbiAgICAgICAgbmFtZTogJ0FtYXpvbiBTaWxrJ1xuICAgICAgLCBzaWxrOiB0XG4gICAgICAsIHZlcnNpb24gOiBnZXRGaXJzdE1hdGNoKC9zaWxrXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvcGhhbnRvbS9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdQaGFudG9tSlMnXG4gICAgICAsIHBoYW50b206IHRcbiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvcGhhbnRvbWpzXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvc2xpbWVyanMvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnU2xpbWVySlMnXG4gICAgICAgICwgc2xpbWVyOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvc2xpbWVyanNcXC8oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9ibGFja2JlcnJ5fFxcYmJiXFxkKy9pLnRlc3QodWEpIHx8IC9yaW1cXHN0YWJsZXQvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQmxhY2tCZXJyeSdcbiAgICAgICwgb3NuYW1lOiAnQmxhY2tCZXJyeSBPUydcbiAgICAgICwgYmxhY2tiZXJyeTogdFxuICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC9ibGFja2JlcnJ5W1xcZF0rXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh3ZWJvcykge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnV2ViT1MnXG4gICAgICAsIG9zbmFtZTogJ1dlYk9TJ1xuICAgICAgLCB3ZWJvczogdFxuICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC93KD86ZWIpP29zYnJvd3NlclxcLyhcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH07XG4gICAgICAvdG91Y2hwYWRcXC8vaS50ZXN0KHVhKSAmJiAocmVzdWx0LnRvdWNocGFkID0gdClcbiAgICB9XG4gICAgZWxzZSBpZiAoL2JhZGEvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQmFkYSdcbiAgICAgICwgb3NuYW1lOiAnQmFkYSdcbiAgICAgICwgYmFkYTogdFxuICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC9kb2xmaW5cXC8oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh0aXplbikge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnVGl6ZW4nXG4gICAgICAsIG9zbmFtZTogJ1RpemVuJ1xuICAgICAgLCB0aXplbjogdFxuICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzp0aXplblxccz8pP2Jyb3dzZXJcXC8oXFxkKyhcXC5cXGQrKT8pL2kpIHx8IHZlcnNpb25JZGVudGlmaWVyXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICgvcXVwemlsbGEvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnUXVwWmlsbGEnXG4gICAgICAgICwgcXVwemlsbGE6IHRcbiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzpxdXB6aWxsYSlbXFxzXFwvXShcXGQrKD86XFwuXFxkKykrKS9pKSB8fCB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvY2hyb21pdW0vaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQ2hyb21pdW0nXG4gICAgICAgICwgY2hyb21pdW06IHRcbiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzpjaHJvbWl1bSlbXFxzXFwvXShcXGQrKD86XFwuXFxkKyk/KS9pKSB8fCB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvY2hyb21lfGNyaW9zfGNybW8vaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQ2hyb21lJ1xuICAgICAgICAsIGNocm9tZTogdFxuICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OmNocm9tZXxjcmlvc3xjcm1vKVxcLyhcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYW5kcm9pZCkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQW5kcm9pZCdcbiAgICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvc2FmYXJpfGFwcGxld2Via2l0L2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ1NhZmFyaSdcbiAgICAgICwgc2FmYXJpOiB0XG4gICAgICB9XG4gICAgICBpZiAodmVyc2lvbklkZW50aWZpZXIpIHtcbiAgICAgICAgcmVzdWx0LnZlcnNpb24gPSB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpb3NkZXZpY2UpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZSA6IGlvc2RldmljZSA9PSAnaXBob25lJyA/ICdpUGhvbmUnIDogaW9zZGV2aWNlID09ICdpcGFkJyA/ICdpUGFkJyA6ICdpUG9kJ1xuICAgICAgfVxuICAgICAgLy8gV1RGOiB2ZXJzaW9uIGlzIG5vdCBwYXJ0IG9mIHVzZXIgYWdlbnQgaW4gd2ViIGFwcHNcbiAgICAgIGlmICh2ZXJzaW9uSWRlbnRpZmllcikge1xuICAgICAgICByZXN1bHQudmVyc2lvbiA9IHZlcnNpb25JZGVudGlmaWVyXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYoL2dvb2dsZWJvdC9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdHb29nbGVib3QnXG4gICAgICAsIGdvb2dsZWJvdDogdFxuICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC9nb29nbGVib3RcXC8oXFxkKyhcXC5cXGQrKSkvaSkgfHwgdmVyc2lvbklkZW50aWZpZXJcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6IGdldEZpcnN0TWF0Y2goL14oLiopXFwvKC4qKSAvKSxcbiAgICAgICAgdmVyc2lvbjogZ2V0U2Vjb25kTWF0Y2goL14oLiopXFwvKC4qKSAvKVxuICAgICB9O1xuICAgfVxuXG4gICAgLy8gc2V0IHdlYmtpdCBvciBnZWNrbyBmbGFnIGZvciBicm93c2VycyBiYXNlZCBvbiB0aGVzZSBlbmdpbmVzXG4gICAgaWYgKCFyZXN1bHQubXNlZGdlICYmIC8oYXBwbGUpP3dlYmtpdC9pLnRlc3QodWEpKSB7XG4gICAgICBpZiAoLyhhcHBsZSk/d2Via2l0XFwvNTM3XFwuMzYvaS50ZXN0KHVhKSkge1xuICAgICAgICByZXN1bHQubmFtZSA9IHJlc3VsdC5uYW1lIHx8IFwiQmxpbmtcIlxuICAgICAgICByZXN1bHQuYmxpbmsgPSB0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQubmFtZSA9IHJlc3VsdC5uYW1lIHx8IFwiV2Via2l0XCJcbiAgICAgICAgcmVzdWx0LndlYmtpdCA9IHRcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdWx0LnZlcnNpb24gJiYgdmVyc2lvbklkZW50aWZpZXIpIHtcbiAgICAgICAgcmVzdWx0LnZlcnNpb24gPSB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXJlc3VsdC5vcGVyYSAmJiAvZ2Vja29cXC8vaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0Lm5hbWUgPSByZXN1bHQubmFtZSB8fCBcIkdlY2tvXCJcbiAgICAgIHJlc3VsdC5nZWNrbyA9IHRcbiAgICAgIHJlc3VsdC52ZXJzaW9uID0gcmVzdWx0LnZlcnNpb24gfHwgZ2V0Rmlyc3RNYXRjaCgvZ2Vja29cXC8oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgfVxuXG4gICAgLy8gc2V0IE9TIGZsYWdzIGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIG11bHRpcGxlIGJyb3dzZXJzXG4gICAgaWYgKCFyZXN1bHQud2luZG93c3Bob25lICYmIChhbmRyb2lkIHx8IHJlc3VsdC5zaWxrKSkge1xuICAgICAgcmVzdWx0LmFuZHJvaWQgPSB0XG4gICAgICByZXN1bHQub3NuYW1lID0gJ0FuZHJvaWQnXG4gICAgfSBlbHNlIGlmICghcmVzdWx0LndpbmRvd3NwaG9uZSAmJiBpb3NkZXZpY2UpIHtcbiAgICAgIHJlc3VsdFtpb3NkZXZpY2VdID0gdFxuICAgICAgcmVzdWx0LmlvcyA9IHRcbiAgICAgIHJlc3VsdC5vc25hbWUgPSAnaU9TJ1xuICAgIH0gZWxzZSBpZiAobWFjKSB7XG4gICAgICByZXN1bHQubWFjID0gdFxuICAgICAgcmVzdWx0Lm9zbmFtZSA9ICdtYWNPUydcbiAgICB9IGVsc2UgaWYgKHhib3gpIHtcbiAgICAgIHJlc3VsdC54Ym94ID0gdFxuICAgICAgcmVzdWx0Lm9zbmFtZSA9ICdYYm94J1xuICAgIH0gZWxzZSBpZiAod2luZG93cykge1xuICAgICAgcmVzdWx0LndpbmRvd3MgPSB0XG4gICAgICByZXN1bHQub3NuYW1lID0gJ1dpbmRvd3MnXG4gICAgfSBlbHNlIGlmIChsaW51eCkge1xuICAgICAgcmVzdWx0LmxpbnV4ID0gdFxuICAgICAgcmVzdWx0Lm9zbmFtZSA9ICdMaW51eCdcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXaW5kb3dzVmVyc2lvbiAocykge1xuICAgICAgc3dpdGNoIChzKSB7XG4gICAgICAgIGNhc2UgJ05UJzogcmV0dXJuICdOVCdcbiAgICAgICAgY2FzZSAnWFAnOiByZXR1cm4gJ1hQJ1xuICAgICAgICBjYXNlICdOVCA1LjAnOiByZXR1cm4gJzIwMDAnXG4gICAgICAgIGNhc2UgJ05UIDUuMSc6IHJldHVybiAnWFAnXG4gICAgICAgIGNhc2UgJ05UIDUuMic6IHJldHVybiAnMjAwMydcbiAgICAgICAgY2FzZSAnTlQgNi4wJzogcmV0dXJuICdWaXN0YSdcbiAgICAgICAgY2FzZSAnTlQgNi4xJzogcmV0dXJuICc3J1xuICAgICAgICBjYXNlICdOVCA2LjInOiByZXR1cm4gJzgnXG4gICAgICAgIGNhc2UgJ05UIDYuMyc6IHJldHVybiAnOC4xJ1xuICAgICAgICBjYXNlICdOVCAxMC4wJzogcmV0dXJuICcxMCdcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9TIHZlcnNpb24gZXh0cmFjdGlvblxuICAgIHZhciBvc1ZlcnNpb24gPSAnJztcbiAgICBpZiAocmVzdWx0LndpbmRvd3MpIHtcbiAgICAgIG9zVmVyc2lvbiA9IGdldFdpbmRvd3NWZXJzaW9uKGdldEZpcnN0TWF0Y2goL1dpbmRvd3MgKChOVHxYUCkoIFxcZFxcZD8uXFxkKT8pL2kpKVxuICAgIH0gZWxzZSBpZiAocmVzdWx0LndpbmRvd3NwaG9uZSkge1xuICAgICAgb3NWZXJzaW9uID0gZ2V0Rmlyc3RNYXRjaCgvd2luZG93cyBwaG9uZSAoPzpvcyk/XFxzPyhcXGQrKFxcLlxcZCspKikvaSk7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQubWFjKSB7XG4gICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC9NYWMgT1MgWCAoXFxkKyhbX1xcLlxcc11cXGQrKSopL2kpO1xuICAgICAgb3NWZXJzaW9uID0gb3NWZXJzaW9uLnJlcGxhY2UoL1tfXFxzXS9nLCAnLicpO1xuICAgIH0gZWxzZSBpZiAoaW9zZGV2aWNlKSB7XG4gICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC9vcyAoXFxkKyhbX1xcc11cXGQrKSopIGxpa2UgbWFjIG9zIHgvaSk7XG4gICAgICBvc1ZlcnNpb24gPSBvc1ZlcnNpb24ucmVwbGFjZSgvW19cXHNdL2csICcuJyk7XG4gICAgfSBlbHNlIGlmIChhbmRyb2lkKSB7XG4gICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC9hbmRyb2lkWyBcXC8tXShcXGQrKFxcLlxcZCspKikvaSk7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQud2Vib3MpIHtcbiAgICAgIG9zVmVyc2lvbiA9IGdldEZpcnN0TWF0Y2goLyg/OndlYnxocHcpb3NcXC8oXFxkKyhcXC5cXGQrKSopL2kpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0LmJsYWNrYmVycnkpIHtcbiAgICAgIG9zVmVyc2lvbiA9IGdldEZpcnN0TWF0Y2goL3JpbVxcc3RhYmxldFxcc29zXFxzKFxcZCsoXFwuXFxkKykqKS9pKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5iYWRhKSB7XG4gICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC9iYWRhXFwvKFxcZCsoXFwuXFxkKykqKS9pKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC50aXplbikge1xuICAgICAgb3NWZXJzaW9uID0gZ2V0Rmlyc3RNYXRjaCgvdGl6ZW5bXFwvXFxzXShcXGQrKFxcLlxcZCspKikvaSk7XG4gICAgfVxuICAgIGlmIChvc1ZlcnNpb24pIHtcbiAgICAgIHJlc3VsdC5vc3ZlcnNpb24gPSBvc1ZlcnNpb247XG4gICAgfVxuXG4gICAgLy8gZGV2aWNlIHR5cGUgZXh0cmFjdGlvblxuICAgIHZhciBvc01ham9yVmVyc2lvbiA9ICFyZXN1bHQud2luZG93cyAmJiBvc1ZlcnNpb24uc3BsaXQoJy4nKVswXTtcbiAgICBpZiAoXG4gICAgICAgICB0YWJsZXRcbiAgICAgIHx8IG5leHVzVGFibGV0XG4gICAgICB8fCBpb3NkZXZpY2UgPT0gJ2lwYWQnXG4gICAgICB8fCAoYW5kcm9pZCAmJiAob3NNYWpvclZlcnNpb24gPT0gMyB8fCAob3NNYWpvclZlcnNpb24gPj0gNCAmJiAhbW9iaWxlKSkpXG4gICAgICB8fCByZXN1bHQuc2lsa1xuICAgICkge1xuICAgICAgcmVzdWx0LnRhYmxldCA9IHRcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgbW9iaWxlXG4gICAgICB8fCBpb3NkZXZpY2UgPT0gJ2lwaG9uZSdcbiAgICAgIHx8IGlvc2RldmljZSA9PSAnaXBvZCdcbiAgICAgIHx8IGFuZHJvaWRcbiAgICAgIHx8IG5leHVzTW9iaWxlXG4gICAgICB8fCByZXN1bHQuYmxhY2tiZXJyeVxuICAgICAgfHwgcmVzdWx0LndlYm9zXG4gICAgICB8fCByZXN1bHQuYmFkYVxuICAgICkge1xuICAgICAgcmVzdWx0Lm1vYmlsZSA9IHRcbiAgICB9XG5cbiAgICAvLyBHcmFkZWQgQnJvd3NlciBTdXBwb3J0XG4gICAgLy8gaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2FydGljbGVzL2dic1xuICAgIGlmIChyZXN1bHQubXNlZGdlIHx8XG4gICAgICAgIChyZXN1bHQubXNpZSAmJiByZXN1bHQudmVyc2lvbiA+PSAxMCkgfHxcbiAgICAgICAgKHJlc3VsdC55YW5kZXhicm93c2VyICYmIHJlc3VsdC52ZXJzaW9uID49IDE1KSB8fFxuXHRcdCAgICAocmVzdWx0LnZpdmFsZGkgJiYgcmVzdWx0LnZlcnNpb24gPj0gMS4wKSB8fFxuICAgICAgICAocmVzdWx0LmNocm9tZSAmJiByZXN1bHQudmVyc2lvbiA+PSAyMCkgfHxcbiAgICAgICAgKHJlc3VsdC5zYW1zdW5nQnJvd3NlciAmJiByZXN1bHQudmVyc2lvbiA+PSA0KSB8fFxuICAgICAgICAocmVzdWx0LndoYWxlICYmIGNvbXBhcmVWZXJzaW9ucyhbcmVzdWx0LnZlcnNpb24sICcxLjAnXSkgPT09IDEpIHx8XG4gICAgICAgIChyZXN1bHQubXpicm93c2VyICYmIGNvbXBhcmVWZXJzaW9ucyhbcmVzdWx0LnZlcnNpb24sICc2LjAnXSkgPT09IDEpIHx8XG4gICAgICAgIChyZXN1bHQuZm9jdXMgJiYgY29tcGFyZVZlcnNpb25zKFtyZXN1bHQudmVyc2lvbiwgJzEuMCddKSA9PT0gMSkgfHxcbiAgICAgICAgKHJlc3VsdC5maXJlZm94ICYmIHJlc3VsdC52ZXJzaW9uID49IDIwLjApIHx8XG4gICAgICAgIChyZXN1bHQuc2FmYXJpICYmIHJlc3VsdC52ZXJzaW9uID49IDYpIHx8XG4gICAgICAgIChyZXN1bHQub3BlcmEgJiYgcmVzdWx0LnZlcnNpb24gPj0gMTAuMCkgfHxcbiAgICAgICAgKHJlc3VsdC5pb3MgJiYgcmVzdWx0Lm9zdmVyc2lvbiAmJiByZXN1bHQub3N2ZXJzaW9uLnNwbGl0KFwiLlwiKVswXSA+PSA2KSB8fFxuICAgICAgICAocmVzdWx0LmJsYWNrYmVycnkgJiYgcmVzdWx0LnZlcnNpb24gPj0gMTAuMSlcbiAgICAgICAgfHwgKHJlc3VsdC5jaHJvbWl1bSAmJiByZXN1bHQudmVyc2lvbiA+PSAyMClcbiAgICAgICAgKSB7XG4gICAgICByZXN1bHQuYSA9IHQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKChyZXN1bHQubXNpZSAmJiByZXN1bHQudmVyc2lvbiA8IDEwKSB8fFxuICAgICAgICAocmVzdWx0LmNocm9tZSAmJiByZXN1bHQudmVyc2lvbiA8IDIwKSB8fFxuICAgICAgICAocmVzdWx0LmZpcmVmb3ggJiYgcmVzdWx0LnZlcnNpb24gPCAyMC4wKSB8fFxuICAgICAgICAocmVzdWx0LnNhZmFyaSAmJiByZXN1bHQudmVyc2lvbiA8IDYpIHx8XG4gICAgICAgIChyZXN1bHQub3BlcmEgJiYgcmVzdWx0LnZlcnNpb24gPCAxMC4wKSB8fFxuICAgICAgICAocmVzdWx0LmlvcyAmJiByZXN1bHQub3N2ZXJzaW9uICYmIHJlc3VsdC5vc3ZlcnNpb24uc3BsaXQoXCIuXCIpWzBdIDwgNilcbiAgICAgICAgfHwgKHJlc3VsdC5jaHJvbWl1bSAmJiByZXN1bHQudmVyc2lvbiA8IDIwKVxuICAgICAgICApIHtcbiAgICAgIHJlc3VsdC5jID0gdFxuICAgIH0gZWxzZSByZXN1bHQueCA9IHRcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHZhciBib3dzZXIgPSBkZXRlY3QodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnIDogJycpXG5cbiAgYm93c2VyLnRlc3QgPSBmdW5jdGlvbiAoYnJvd3Nlckxpc3QpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyb3dzZXJMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgYnJvd3Nlckl0ZW0gPSBicm93c2VyTGlzdFtpXTtcbiAgICAgIGlmICh0eXBlb2YgYnJvd3Nlckl0ZW09PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGJyb3dzZXJJdGVtIGluIGJvd3Nlcikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmVyc2lvbiBwcmVjaXNpb25zIGNvdW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICAgZ2V0VmVyc2lvblByZWNpc2lvbihcIjEuMTAuM1wiKSAvLyAzXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdmVyc2lvblxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRWZXJzaW9uUHJlY2lzaW9uKHZlcnNpb24pIHtcbiAgICByZXR1cm4gdmVyc2lvbi5zcGxpdChcIi5cIikubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEFycmF5OjptYXAgcG9seWZpbGxcbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXl9IGFyclxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBmdW5jdGlvbiBtYXAoYXJyLCBpdGVyYXRvcikge1xuICAgIHZhciByZXN1bHQgPSBbXSwgaTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLm1hcCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChhcnIsIGl0ZXJhdG9yKTtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2goaXRlcmF0b3IoYXJyW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGJyb3dzZXIgdmVyc2lvbiB3ZWlnaHRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogICBjb21wYXJlVmVyc2lvbnMoWycxLjEwLjIuMScsICAnMS44LjIuMS45MCddKSAgICAvLyAxXG4gICAqICAgY29tcGFyZVZlcnNpb25zKFsnMS4wMTAuMi4xJywgJzEuMDkuMi4xLjkwJ10pOyAgLy8gMVxuICAgKiAgIGNvbXBhcmVWZXJzaW9ucyhbJzEuMTAuMi4xJywgICcxLjEwLjIuMSddKTsgICAgIC8vIDBcbiAgICogICBjb21wYXJlVmVyc2lvbnMoWycxLjEwLjIuMScsICAnMS4wODAwLjInXSk7ICAgICAvLyAtMVxuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheTxTdHJpbmc+fSB2ZXJzaW9ucyB2ZXJzaW9ucyB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge051bWJlcn0gY29tcGFyaXNvbiByZXN1bHRcbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyh2ZXJzaW9ucykge1xuICAgIC8vIDEpIGdldCBjb21tb24gcHJlY2lzaW9uIGZvciBib3RoIHZlcnNpb25zLCBmb3IgZXhhbXBsZSBmb3IgXCIxMC4wXCIgYW5kIFwiOVwiIGl0IHNob3VsZCBiZSAyXG4gICAgdmFyIHByZWNpc2lvbiA9IE1hdGgubWF4KGdldFZlcnNpb25QcmVjaXNpb24odmVyc2lvbnNbMF0pLCBnZXRWZXJzaW9uUHJlY2lzaW9uKHZlcnNpb25zWzFdKSk7XG4gICAgdmFyIGNodW5rcyA9IG1hcCh2ZXJzaW9ucywgZnVuY3Rpb24gKHZlcnNpb24pIHtcbiAgICAgIHZhciBkZWx0YSA9IHByZWNpc2lvbiAtIGdldFZlcnNpb25QcmVjaXNpb24odmVyc2lvbik7XG5cbiAgICAgIC8vIDIpIFwiOVwiIC0+IFwiOS4wXCIgKGZvciBwcmVjaXNpb24gPSAyKVxuICAgICAgdmVyc2lvbiA9IHZlcnNpb24gKyBuZXcgQXJyYXkoZGVsdGEgKyAxKS5qb2luKFwiLjBcIik7XG5cbiAgICAgIC8vIDMpIFwiOS4wXCIgLT4gW1wiMDAwMDAwMDAwXCJcIiwgXCIwMDAwMDAwMDlcIl1cbiAgICAgIHJldHVybiBtYXAodmVyc2lvbi5zcGxpdChcIi5cIiksIGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5KDIwIC0gY2h1bmsubGVuZ3RoKS5qb2luKFwiMFwiKSArIGNodW5rO1xuICAgICAgfSkucmV2ZXJzZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gaXRlcmF0ZSBpbiByZXZlcnNlIG9yZGVyIGJ5IHJldmVyc2VkIGNodW5rcyBhcnJheVxuICAgIHdoaWxlICgtLXByZWNpc2lvbiA+PSAwKSB7XG4gICAgICAvLyA0KSBjb21wYXJlOiBcIjAwMDAwMDAwOVwiID4gXCIwMDAwMDAwMTBcIiA9IGZhbHNlIChidXQgXCI5XCIgPiBcIjEwXCIgPSB0cnVlKVxuICAgICAgaWYgKGNodW5rc1swXVtwcmVjaXNpb25dID4gY2h1bmtzWzFdW3ByZWNpc2lvbl0pIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjaHVua3NbMF1bcHJlY2lzaW9uXSA9PT0gY2h1bmtzWzFdW3ByZWNpc2lvbl0pIHtcbiAgICAgICAgaWYgKHByZWNpc2lvbiA9PT0gMCkge1xuICAgICAgICAgIC8vIGFsbCB2ZXJzaW9uIGNodW5rcyBhcmUgc2FtZVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBicm93c2VyIGlzIHVuc3VwcG9ydGVkXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICAgYm93c2VyLmlzVW5zdXBwb3J0ZWRCcm93c2VyKHtcbiAgICogICAgIG1zaWU6IFwiMTBcIixcbiAgICogICAgIGZpcmVmb3g6IFwiMjNcIixcbiAgICogICAgIGNocm9tZTogXCIyOVwiLFxuICAgKiAgICAgc2FmYXJpOiBcIjUuMVwiLFxuICAgKiAgICAgb3BlcmE6IFwiMTZcIixcbiAgICogICAgIHBoYW50b206IFwiNTM0XCJcbiAgICogICB9KTtcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgbWluVmVyc2lvbnMgbWFwIG9mIG1pbmltYWwgdmVyc2lvbiB0byBicm93c2VyXG4gICAqIEBwYXJhbSAge0Jvb2xlYW59IFtzdHJpY3RNb2RlID0gZmFsc2VdIGZsYWcgdG8gcmV0dXJuIGZhbHNlIGlmIGJyb3dzZXIgd2Fzbid0IGZvdW5kIGluIG1hcFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9ICBbdWFdIHVzZXIgYWdlbnQgc3RyaW5nXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpc1Vuc3VwcG9ydGVkQnJvd3NlcihtaW5WZXJzaW9ucywgc3RyaWN0TW9kZSwgdWEpIHtcbiAgICB2YXIgX2Jvd3NlciA9IGJvd3NlcjtcblxuICAgIC8vIG1ha2Ugc3RyaWN0TW9kZSBwYXJhbSBvcHRpb25hbCB3aXRoIHVhIHBhcmFtIHVzYWdlXG4gICAgaWYgKHR5cGVvZiBzdHJpY3RNb2RlID09PSAnc3RyaW5nJykge1xuICAgICAgdWEgPSBzdHJpY3RNb2RlO1xuICAgICAgc3RyaWN0TW9kZSA9IHZvaWQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHN0cmljdE1vZGUgPT09IHZvaWQoMCkpIHtcbiAgICAgIHN0cmljdE1vZGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHVhKSB7XG4gICAgICBfYm93c2VyID0gZGV0ZWN0KHVhKTtcbiAgICB9XG5cbiAgICB2YXIgdmVyc2lvbiA9IFwiXCIgKyBfYm93c2VyLnZlcnNpb247XG4gICAgZm9yICh2YXIgYnJvd3NlciBpbiBtaW5WZXJzaW9ucykge1xuICAgICAgaWYgKG1pblZlcnNpb25zLmhhc093blByb3BlcnR5KGJyb3dzZXIpKSB7XG4gICAgICAgIGlmIChfYm93c2VyW2Jyb3dzZXJdKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBtaW5WZXJzaW9uc1ticm93c2VyXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQnJvd3NlciB2ZXJzaW9uIGluIHRoZSBtaW5WZXJzaW9uIG1hcCBzaG91bGQgYmUgYSBzdHJpbmc6ICcgKyBicm93c2VyICsgJzogJyArIFN0cmluZyhtaW5WZXJzaW9ucykpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGJyb3dzZXIgdmVyc2lvbiBhbmQgbWluIHN1cHBvcnRlZCB2ZXJzaW9uLlxuICAgICAgICAgIHJldHVybiBjb21wYXJlVmVyc2lvbnMoW3ZlcnNpb24sIG1pblZlcnNpb25zW2Jyb3dzZXJdXSkgPCAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmljdE1vZGU7IC8vIG5vdCBmb3VuZFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJyb3dzZXIgaXMgc3VwcG9ydGVkXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gbWluVmVyc2lvbnMgbWFwIG9mIG1pbmltYWwgdmVyc2lvbiB0byBicm93c2VyXG4gICAqIEBwYXJhbSAge0Jvb2xlYW59IFtzdHJpY3RNb2RlID0gZmFsc2VdIGZsYWcgdG8gcmV0dXJuIGZhbHNlIGlmIGJyb3dzZXIgd2Fzbid0IGZvdW5kIGluIG1hcFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9ICBbdWFdIHVzZXIgYWdlbnQgc3RyaW5nXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBjaGVjayhtaW5WZXJzaW9ucywgc3RyaWN0TW9kZSwgdWEpIHtcbiAgICByZXR1cm4gIWlzVW5zdXBwb3J0ZWRCcm93c2VyKG1pblZlcnNpb25zLCBzdHJpY3RNb2RlLCB1YSk7XG4gIH1cblxuICBib3dzZXIuaXNVbnN1cHBvcnRlZEJyb3dzZXIgPSBpc1Vuc3VwcG9ydGVkQnJvd3NlcjtcbiAgYm93c2VyLmNvbXBhcmVWZXJzaW9ucyA9IGNvbXBhcmVWZXJzaW9ucztcbiAgYm93c2VyLmNoZWNrID0gY2hlY2s7XG5cbiAgLypcbiAgICogU2V0IG91ciBkZXRlY3QgbWV0aG9kIHRvIHRoZSBtYWluIGJvd3NlciBvYmplY3Qgc28gd2UgY2FuXG4gICAqIHJldXNlIGl0IHRvIHRlc3Qgb3RoZXIgdXNlciBhZ2VudHMuXG4gICAqIFRoaXMgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBmdXR1cmUgdGVzdHMuXG4gICAqL1xuICBib3dzZXIuX2RldGVjdCA9IGRldGVjdDtcblxuICAvKlxuICAgKiBTZXQgb3VyIGRldGVjdCBwdWJsaWMgbWV0aG9kIHRvIHRoZSBtYWluIGJvd3NlciBvYmplY3RcbiAgICogVGhpcyBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGJvd3NlciBpbiBzZXJ2ZXIgc2lkZVxuICAgKi9cbiAgYm93c2VyLmRldGVjdCA9IGRldGVjdDtcbiAgcmV0dXJuIGJvd3NlclxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MsIGN1c3RvbURvY3VtZW50KSB7XG4gIHZhciBkb2MgPSBjdXN0b21Eb2N1bWVudCB8fCBkb2N1bWVudDtcbiAgaWYgKGRvYy5jcmVhdGVTdHlsZVNoZWV0KSB7XG4gICAgdmFyIHNoZWV0ID0gZG9jLmNyZWF0ZVN0eWxlU2hlZXQoKVxuICAgIHNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgcmV0dXJuIHNoZWV0Lm93bmVyTm9kZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLFxuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXG4gICAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgfVxuXG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5ieVVybCA9IGZ1bmN0aW9uKHVybCkge1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlU3R5bGVTaGVldCkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVTdHlsZVNoZWV0KHVybCkub3duZXJOb2RlO1xuICB9IGVsc2Uge1xuICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSxcbiAgICAgICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcblxuICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcblxuICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgcmV0dXJuIGxpbms7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2Nzc2lmeScpOyIsInZhciBIZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XHJcbnZhciBFeGNlcHRpb24gPSByZXF1aXJlKCcuL2V4Y2VwdGlvbicpO1xyXG52YXIgTGlnaHRCb3ggPSByZXF1aXJlKCcuL2xpZ2h0Ym94Jyk7XHJcbnZhciBDaGlsZFdpbmRvdyA9IHJlcXVpcmUoJy4vY2hpbGR3aW5kb3cnKTtcclxudmFyIERldmljZSA9IHJlcXVpcmUoJy4vZGV2aWNlJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiByZWFkeShmbikge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnbG9hZGluZycpe1xyXG4gICAgICAgICAgZm4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gQXBwKCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcpO1xyXG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3QgPSBIZWxwZXJzLmFkZEV2ZW50T2JqZWN0KHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaXNJbml0aWF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBvc3RNZXNzYWdlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNoaWxkV2luZG93ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBBcHAuZXZlbnRUeXBlcyA9IHtcclxuICAgICAgICBJTklUOiAnaW5pdCcsXHJcbiAgICAgICAgT1BFTjogJ29wZW4nLFxyXG4gICAgICAgIE9QRU5fV0lORE9XOiAnb3Blbi13aW5kb3cnLFxyXG4gICAgICAgIE9QRU5fTElHSFRCT1g6ICdvcGVuLWxpZ2h0Ym94JyxcclxuICAgICAgICBMT0FEOiAnbG9hZCcsXHJcbiAgICAgICAgQ0xPU0U6ICdjbG9zZScsXHJcbiAgICAgICAgQ0xPU0VfV0lORE9XOiAnY2xvc2Utd2luZG93JyxcclxuICAgICAgICBDTE9TRV9MSUdIVEJPWDogJ2Nsb3NlLWxpZ2h0Ym94JyxcclxuICAgICAgICBTVEFUVVM6ICdzdGF0dXMnLFxyXG4gICAgICAgIFNUQVRVU19JTlZPSUNFOiAnc3RhdHVzLWludm9pY2UnLFxyXG4gICAgICAgIFNUQVRVU19ERUxJVkVSSU5HOiAnc3RhdHVzLWRlbGl2ZXJpbmcnLFxyXG4gICAgICAgIFNUQVRVU19UUk9VQkxFRDogJ3N0YXR1cy10cm91YmxlZCcsXHJcbiAgICAgICAgU1RBVFVTX0RPTkU6ICdzdGF0dXMtZG9uZScsXHJcbiAgICAgICAgVVNFUl9DT1VOVFJZOiAndXNlci1jb3VudHJ5JyxcclxuICAgICAgICBGQ1A6ICdmY3AnLFxyXG4gICAgICAgIEVSUk9SOiAnZXJyb3InXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBERUZBVUxUX0NPTkZJRyA9IHtcclxuICAgICAgICBhY2Nlc3NfdG9rZW46IG51bGwsXHJcbiAgICAgICAgYWNjZXNzX2RhdGE6IG51bGwsXHJcbiAgICAgICAgc2FuZGJveDogZmFsc2UsXHJcbiAgICAgICAgbGlnaHRib3g6IHt9LFxyXG4gICAgICAgIGNoaWxkV2luZG93OiB7fSxcclxuICAgICAgICBob3N0OiAnc2VjdXJlLnhzb2xsYS5jb20nLFxyXG4gICAgICAgIGlmcmFtZU9ubHk6IGZhbHNlLFxyXG4gICAgICAgIGNvbnNlbnRJZDogbnVsbFxyXG4gICAgfTtcclxuICAgIHZhciBTQU5EQk9YX1BBWVNUQVRJT05fVVJMID0gJ2h0dHBzOi8vc2FuZGJveC1zZWN1cmUueHNvbGxhLmNvbS9wYXlzdGF0aW9uMi8/JztcclxuICAgIHZhciBFVkVOVF9OQU1FU1BBQ0UgPSAnLnhwYXlzdGF0aW9uLXdpZGdldCc7XHJcbiAgICB2YXIgQVRUUl9QUkVGSVggPSAnZGF0YS14cGF5c3RhdGlvbi13aWRnZXQtb3Blbic7XHJcblxyXG4gICAgLyoqIFByaXZhdGUgTWVtYmVycyAqKi9cclxuICAgIEFwcC5wcm90b3R5cGUuY29uZmlnID0ge307XHJcbiAgICBBcHAucHJvdG90eXBlLmlzSW5pdGlhdGVkID0gZmFsc2U7XHJcbiAgICBBcHAucHJvdG90eXBlLmV2ZW50T2JqZWN0ID0gSGVscGVycy5hZGRFdmVudE9iamVjdCh0aGlzKTtcclxuXHJcbiAgICBBcHAucHJvdG90eXBlLmdldFBheW1lbnRVcmwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnBheW1lbnRfdXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5wYXltZW50X3VybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb25maWcucXVlcnlQYXJhbXMgfHwge307XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICBxdWVyeS5hY2Nlc3NfdG9rZW4gPSB0aGlzLmNvbmZpZy5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnkuYWNjZXNzX2RhdGEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZy5hY2Nlc3NfZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cmxXaXRob3V0UXVlcnlQYXJhbXMgPSB0aGlzLmNvbmZpZy5zYW5kYm94ID9cclxuICAgICAgICAgICAgU0FOREJPWF9QQVlTVEFUSU9OX1VSTCA6XHJcbiAgICAgICAgICAgICdodHRwczovLycgKyB0aGlzLmNvbmZpZy5ob3N0ICsgJy9wYXlzdGF0aW9uMi8/JztcclxuXHJcbiAgICAgICAgY29uc3QgcGF5bWVudFVybCA9IHVybFdpdGhvdXRRdWVyeVBhcmFtcyArIEhlbHBlcnMucGFyYW0ocXVlcnkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWcuY29uc2VudElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBIZWxwZXJzLmdldFBheW1lbnRVcmxXaXRoQ29uc2VudElkKHBheW1lbnRVcmwsIHRoaXMuY29uZmlnLmNvbnNlbnRJZClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwYXltZW50VXJsO1xyXG4gICAgfTtcclxuXHJcbiAgICBBcHAucHJvdG90eXBlLmNoZWNrQ29uZmlnID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChIZWxwZXJzLmlzRW1wdHkodGhpcy5jb25maWcuYWNjZXNzX3Rva2VuKSAmJiBIZWxwZXJzLmlzRW1wdHkodGhpcy5jb25maWcuYWNjZXNzX2RhdGEpICYmIEhlbHBlcnMuaXNFbXB0eSh0aGlzLmNvbmZpZy5wYXltZW50X3VybCkpIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKCdObyBhY2Nlc3MgdG9rZW4gb3IgYWNjZXNzIGRhdGEgb3IgcGF5bWVudCBVUkwgZ2l2ZW4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghSGVscGVycy5pc0VtcHR5KHRoaXMuY29uZmlnLmFjY2Vzc19kYXRhKSAmJiB0eXBlb2YgdGhpcy5jb25maWcuYWNjZXNzX2RhdGEgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcignSW52YWxpZCBhY2Nlc3MgZGF0YSBmb3JtYXQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChIZWxwZXJzLmlzRW1wdHkodGhpcy5jb25maWcuaG9zdCkpIHtcclxuICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKCdJbnZhbGlkIGhvc3QnKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIEFwcC5wcm90b3R5cGUuY2hlY2tBcHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWF0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRocm93RXJyb3IoJ0luaXRpYWxpemUgd2lkZ2V0IGJlZm9yZSBvcGVuaW5nJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBBcHAucHJvdG90eXBlLnRocm93RXJyb3IgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obWVzc2FnZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIEFwcC5wcm90b3R5cGUudHJpZ2dlckV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZGF0YSkge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChhcmd1bWVudHMsIChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuaW5pdEV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRPYmplY3QudHJpZ2dlcihldmVudE5hbWUsIGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgQXBwLnByb3RvdHlwZS50cmlnZ2VyQ3VzdG9tRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBkYXRhKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwge2RldGFpbDogZGF0YX0pOyAvLyBOb3Qgd29ya2luZyBpbiBJRVxyXG4gICAgICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcclxuICAgICAgICAgICAgZXZlbnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgdHJ1ZSwgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemUgd2lkZ2V0IHdpdGggb3B0aW9uc1xyXG4gICAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgQXBwLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIGZ1bmN0aW9uIGluaXRpYWxpemUob3B0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYm9keUVsZW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQuYm9keTtcclxuICAgICAgICAgICAgdmFyIGNsaWNrRXZlbnROYW1lID0gJ2NsaWNrJyArIEVWRU5UX05BTUVTUEFDRTtcclxuXHJcbiAgICAgICAgICAgIHZhciBoYW5kbGVDbGlja0V2ZW50ID0gKGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1snICsgQVRUUl9QUkVGSVggKyAnXScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZUV2ZW50LnRhcmdldCA9PT0gdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbi5jYWxsKHRoaXMsIHRhcmdldEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgYm9keUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihjbGlja0V2ZW50TmFtZSwgaGFuZGxlQ2xpY2tFdmVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2xpY2tFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xyXG4gICAgICAgICAgICBjbGlja0V2ZW50LmluaXRFdmVudChjbGlja0V2ZW50TmFtZSwgZmFsc2UsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgYm9keUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsaWNrRXZlbnQuc291cmNlRXZlbnQgPSBldmVudDtcclxuICAgICAgICAgICAgICAgIGJvZHlFbGVtZW50LmRpc3BhdGNoRXZlbnQoY2xpY2tFdmVudCk7XHJcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcyksIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGJvZHlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoY2xpY2tFdmVudE5hbWUsIGhhbmRsZUNsaWNrRXZlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5JTklUKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVhZHkoaW5pdGlhbGl6ZS5iaW5kKHRoaXMsIG9wdGlvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gcGF5bWVudCBpbnRlcmZhY2UgKFBheVN0YXRpb24pXHJcbiAgICAgKi9cclxuICAgIEFwcC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmNoZWNrQ29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FwcCgpO1xyXG5cclxuICAgICAgICB2YXIgdHJpZ2dlclNwbGl0U3RhdHVzID0gKGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoKChkYXRhIHx8IHt9KS5wYXltZW50SW5mbyB8fCB7fSkuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdpbnZvaWNlJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5TVEFUVVNfSU5WT0lDRSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdkZWxpdmVyaW5nJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5TVEFUVVNfREVMSVZFUklORywgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd0cm91YmxlZCc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoQXBwLmV2ZW50VHlwZXMuU1RBVFVTX1RST1VCTEVELCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2RvbmUnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KEFwcC5ldmVudFR5cGVzLlNUQVRVU19ET05FLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHZhciB1cmwgPSB0aGlzLmdldFBheW1lbnRVcmwoKTtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZVN0YXR1cyhldmVudCkge1xyXG4gICAgICAgICAgICB2YXIgc3RhdHVzRGF0YSA9IGV2ZW50LmRldGFpbDtcclxuICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoQXBwLmV2ZW50VHlwZXMuU1RBVFVTLCBzdGF0dXNEYXRhKTtcclxuICAgICAgICAgICAgdHJpZ2dlclNwbGl0U3RhdHVzKHN0YXR1c0RhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlVXNlckxvY2FsZShldmVudCkge1xyXG4gICAgICAgICAgICB2YXIgdXNlckNvdW50cnkgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyX2NvdW50cnk6IGV2ZW50LmRldGFpbC51c2VyX2NvdW50cnlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhhdC50cmlnZ2VyQ3VzdG9tRXZlbnQoQXBwLmV2ZW50VHlwZXMuVVNFUl9DT1VOVFJZLCB1c2VyQ291bnRyeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVGY3AoZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhhdC50cmlnZ2VyQ3VzdG9tRXZlbnQoQXBwLmV2ZW50VHlwZXMuRkNQLCBldmVudC5kZXRhaWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhhdC50cmlnZ2VyQ3VzdG9tRXZlbnQoQXBwLmV2ZW50VHlwZXMuRVJST1IsIGV2ZW50LmRldGFpbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvc3RNZXNzYWdlID0gbnVsbDtcclxuICAgICAgICBpZiAoKG5ldyBEZXZpY2UpLmlzTW9iaWxlKCkgJiYgIXRoaXMuY29uZmlnLmlmcmFtZU9ubHkpIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkV2luZG93ID0gbmV3IENoaWxkV2luZG93O1xyXG4gICAgICAgICAgICBjaGlsZFdpbmRvdy5vbignb3BlbicsIGZ1bmN0aW9uIGhhbmRsZU9wZW4oKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnBvc3RNZXNzYWdlID0gY2hpbGRXaW5kb3cuZ2V0UG9zdE1lc3NhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoYXQudHJpZ2dlckV2ZW50KEFwcC5ldmVudFR5cGVzLk9QRU4pO1xyXG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoQXBwLmV2ZW50VHlwZXMuT1BFTl9XSU5ET1cpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRXaW5kb3cub2ZmKCdvcGVuJywgaGFuZGxlT3Blbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjaGlsZFdpbmRvdy5vbignbG9hZCcsIGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5MT0FEKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkV2luZG93Lm9mZignbG9hZCcsIGhhbmRsZUxvYWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY2hpbGRXaW5kb3cub24oJ2Nsb3NlJywgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5DTE9TRSk7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5DTE9TRV9XSU5ET1cpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRXaW5kb3cub2ZmKCdzdGF0dXMnLCBoYW5kbGVTdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRXaW5kb3cub2ZmKEFwcC5ldmVudFR5cGVzLlVTRVJfQ09VTlRSWSwgaGFuZGxlVXNlckxvY2FsZSk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZFdpbmRvdy5vZmYoQXBwLmV2ZW50VHlwZXMuRkNQLCBoYW5kbGVGY3ApO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRXaW5kb3cub2ZmKEFwcC5ldmVudFR5cGVzLkVSUk9SLCBoYW5kbGVFcnJvcik7XHJcbiAgICAgICAgICAgICAgICBjaGlsZFdpbmRvdy5vZmYoJ2Nsb3NlJywgaGFuZGxlQ2xvc2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY2hpbGRXaW5kb3cub24oJ3N0YXR1cycsIGhhbmRsZVN0YXR1cyk7XHJcbiAgICAgICAgICAgIGNoaWxkV2luZG93Lm9uKEFwcC5ldmVudFR5cGVzLlVTRVJfQ09VTlRSWSwgaGFuZGxlVXNlckxvY2FsZSk7XHJcbiAgICAgICAgICAgIGNoaWxkV2luZG93Lm9uKEFwcC5ldmVudFR5cGVzLkZDUCwgaGFuZGxlRmNwKTtcclxuICAgICAgICAgICAgY2hpbGRXaW5kb3cub24oQXBwLmV2ZW50VHlwZXMuRVJST1IsIGhhbmRsZUVycm9yKTtcclxuICAgICAgICAgICAgY2hpbGRXaW5kb3cub3Blbih1cmwsIHRoaXMuY29uZmlnLmNoaWxkV2luZG93KTtcclxuICAgICAgICAgICAgdGhhdC5jaGlsZFdpbmRvdyA9IGNoaWxkV2luZG93O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodEJveCA9IG5ldyBMaWdodEJveCgobmV3IERldmljZSkuaXNNb2JpbGUoKSAmJiB0aGlzLmNvbmZpZy5pZnJhbWVPbmx5KTtcclxuICAgICAgICAgICAgbGlnaHRCb3gub24oJ29wZW4nLCBmdW5jdGlvbiBoYW5kbGVPcGVuKCkge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5wb3N0TWVzc2FnZSA9IGxpZ2h0Qm94LmdldFBvc3RNZXNzYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5PUEVOKTtcclxuICAgICAgICAgICAgICAgIHRoYXQudHJpZ2dlckV2ZW50KEFwcC5ldmVudFR5cGVzLk9QRU5fTElHSFRCT1gpO1xyXG4gICAgICAgICAgICAgICAgbGlnaHRCb3gub2ZmKCdvcGVuJywgaGFuZGxlT3Blbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWdodEJveC5vbignbG9hZCcsIGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5MT0FEKTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Qm94Lm9mZignbG9hZCcsIGhhbmRsZUxvYWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGlnaHRCb3gub24oJ2Nsb3NlJywgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5DTE9TRSk7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5DTE9TRV9MSUdIVEJPWCk7XHJcbiAgICAgICAgICAgICAgICBsaWdodEJveC5vZmYoJ3N0YXR1cycsIGhhbmRsZVN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICBsaWdodEJveC5vZmYoQXBwLmV2ZW50VHlwZXMuVVNFUl9DT1VOVFJZLCBoYW5kbGVVc2VyTG9jYWxlKTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Qm94Lm9mZihBcHAuZXZlbnRUeXBlcy5GQ1AsIGhhbmRsZUZjcCk7XHJcbiAgICAgICAgICAgICAgICBsaWdodEJveC5vZmYoQXBwLmV2ZW50VHlwZXMuRVJST1IsIGhhbmRsZUVycm9yKTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Qm94Lm9mZignY2xvc2UnLCBoYW5kbGVDbG9zZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWdodEJveC5vbignc3RhdHVzJywgaGFuZGxlU3RhdHVzKTtcclxuICAgICAgICAgICAgbGlnaHRCb3gub24oQXBwLmV2ZW50VHlwZXMuVVNFUl9DT1VOVFJZLCBoYW5kbGVVc2VyTG9jYWxlKTtcclxuICAgICAgICAgICAgbGlnaHRCb3gub24oQXBwLmV2ZW50VHlwZXMuRkNQLCBoYW5kbGVGY3ApO1xyXG4gICAgICAgICAgICBsaWdodEJveC5vbihBcHAuZXZlbnRUeXBlcy5FUlJPUiwgaGFuZGxlRXJyb3IpO1xyXG4gICAgICAgICAgICBsaWdodEJveC5vcGVuRnJhbWUodXJsLCB0aGlzLmNvbmZpZy5saWdodGJveCk7XHJcbiAgICAgICAgICAgIHRoYXQuY2hpbGRXaW5kb3cgPSBsaWdodEJveDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlIHBheW1lbnQgaW50ZXJmYWNlIChQYXlTdGF0aW9uKVxyXG4gICAgICovXHJcbiAgICBBcHAucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRXaW5kb3cuY2xvc2UoKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSB3aWRnZXRcclxuICAgICAqIEBwYXJhbSBldmVudCBPbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgZXZlbnQgdHlwZXMgKGluaXQsIG9wZW4sIGxvYWQsIGNsb3NlLCBzdGF0dXMsIHN0YXR1cy1pbnZvaWNlLCBzdGF0dXMtZGVsaXZlcmluZywgc3RhdHVzLXRyb3VibGVkLCBzdGF0dXMtZG9uZSlcclxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWRcclxuICAgICAqL1xyXG4gICAgQXBwLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0Lm9uKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlclxyXG4gICAgICogQHBhcmFtIGV2ZW50IE9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBldmVudCB0eXBlc1xyXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKVxyXG4gICAgICovXHJcbiAgICBBcHAucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3Qub2ZmKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIGEgbWVzc2FnZSBkaXJlY3RseSB0byBQYXlTdGF0aW9uXHJcbiAgICAgKiBAcGFyYW0gY29tbWFuZFxyXG4gICAgICogQHBhcmFtIGRhdGFcclxuICAgICAqL1xyXG4gICAgQXBwLnByb3RvdHlwZS5zZW5kTWVzc2FnZSA9IGZ1bmN0aW9uIChjb21tYW5kLCBkYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9zdE1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZS5zZW5kLmFwcGx5KHRoaXMucG9zdE1lc3NhZ2UsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBtZXNzYWdlIGV2ZW50IGZyb20gUGF5U3RhdGlvblxyXG4gICAgICogQHBhcmFtIGNvbW1hbmRcclxuICAgICAqIEBwYXJhbSBoYW5kbGVyXHJcbiAgICAgKi9cclxuICAgIEFwcC5wcm90b3R5cGUub25NZXNzYWdlID0gZnVuY3Rpb24gKGNvbW1hbmQsIGhhbmRsZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5wb3N0TWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlLm9uLmFwcGx5KHRoaXMucG9zdE1lc3NhZ2UsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gQXBwO1xyXG59KSgpO1xyXG4iLCJ2YXIgdmVyc2lvbiA9IHJlcXVpcmUoJy4vdmVyc2lvbicpO1xyXG52YXIgSGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xyXG52YXIgUG9zdE1lc3NhZ2UgPSByZXF1aXJlKCcuL3Bvc3RtZXNzYWdlJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDaGlsZFdpbmRvdygpIHtcclxuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0ID0gSGVscGVycy5hZGRFdmVudE9iamVjdCh0aGlzLCB3cmFwRXZlbnRJbk5hbWVzcGFjZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB3cmFwRXZlbnRJbk5hbWVzcGFjZShldmVudE5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQ2hpbGRXaW5kb3cuX05BTUVTUEFDRSArICdfJyArIGV2ZW50TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgREVGQVVMVF9PUFRJT05TID0ge1xyXG4gICAgICAgIHRhcmdldDogJ19ibGFuaydcclxuICAgIH07XHJcblxyXG4gICAgLyoqIFByaXZhdGUgTWVtYmVycyAqKi9cclxuICAgIENoaWxkV2luZG93LnByb3RvdHlwZS5ldmVudE9iamVjdCA9IG51bGw7XHJcbiAgICBDaGlsZFdpbmRvdy5wcm90b3R5cGUuY2hpbGRXaW5kb3cgPSBudWxsO1xyXG5cclxuICAgIENoaWxkV2luZG93LnByb3RvdHlwZS50cmlnZ2VyRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHtcclxuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0LnRyaWdnZXIoZXZlbnQsIGRhdGEpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKiogUHVibGljIE1lbWJlcnMgKiovXHJcbiAgICBDaGlsZFdpbmRvdy5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcclxuICAgICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRXaW5kb3cgJiYgIXRoaXMuY2hpbGRXaW5kb3cuY2xvc2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRXaW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICB2YXIgYWRkSGFuZGxlcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsb3NlQ2hpbGRXaW5kb3coKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0Lm9mZignY2xvc2UnLCBjbG9zZUNoaWxkV2luZG93KVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbC5jbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoYXQuY2hpbGRXaW5kb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0LmNoaWxkV2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoYXQub24oJ2Nsb3NlJywgY2xvc2VDaGlsZFdpbmRvdyk7XHJcblxyXG4gICAgICAgICAgICAvLyBDcm9zcy13aW5kb3cgY29tbXVuaWNhdGlvblxyXG4gICAgICAgICAgICB0aGF0Lm1lc3NhZ2UgPSBuZXcgUG9zdE1lc3NhZ2UodGhhdC5jaGlsZFdpbmRvdyk7XHJcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbignZGltZW5zaW9ucyB3aWRnZXQtZGV0ZWN0aW9uJywgZnVuY3Rpb24gaGFuZGxlV2lkZ2V0RGV0ZWN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoJ2xvYWQnKTtcclxuICAgICAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vZmYoJ2RpbWVuc2lvbnMgd2lkZ2V0LWRldGVjdGlvbicsIGhhbmRsZVdpZGdldERldGVjdGlvbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGF0Lm1lc3NhZ2Uub24oJ3dpZGdldC1kZXRlY3Rpb24nLCBmdW5jdGlvbiBoYW5kbGVXaWRnZXREZXRlY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0Lm1lc3NhZ2Uuc2VuZCgnd2lkZ2V0LWRldGVjdGVkJywge3ZlcnNpb246IHZlcnNpb24sIGNoaWxkV2luZG93T3B0aW9uczogb3B0aW9uc30pO1xyXG4gICAgICAgICAgICAgICAgdGhhdC5tZXNzYWdlLm9mZignd2lkZ2V0LWRldGVjdGlvbicsIGhhbmRsZVdpZGdldERldGVjdGlvbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGF0Lm1lc3NhZ2Uub24oJ3N0YXR1cycsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoJ3N0YXR1cycsIGV2ZW50LmRldGFpbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGF0Lm1lc3NhZ2Uub24oJ2Nsb3NlJywgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XHJcbiAgICAgICAgICAgICAgICBjbG9zZUNoaWxkV2luZG93KCk7XHJcbiAgICAgICAgICAgICAgICB0aGF0Lm1lc3NhZ2Uub2ZmKCdjbG9zZScsIGhhbmRsZUNsb3NlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbigndXNlci1jb3VudHJ5JywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudCgndXNlci1jb3VudHJ5JywgZXZlbnQuZGV0YWlsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbignZmNwJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudCgnZmNwJywgZXZlbnQuZGV0YWlsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoYXQudHJpZ2dlckV2ZW50KCdlcnJvcicsIGV2ZW50LmRldGFpbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHN3aXRjaCAob3B0aW9ucy50YXJnZXQpIHtcclxuICAgICAgICAgICAgY2FzZSAnX3NlbGYnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFdpbmRvdyA9IGdsb2JhbC53aW5kb3c7XHJcbiAgICAgICAgICAgICAgICBhZGRIYW5kbGVycygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ19wYXJlbnQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFdpbmRvdyA9IGdsb2JhbC53aW5kb3cucGFyZW50O1xyXG4gICAgICAgICAgICAgICAgYWRkSGFuZGxlcnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRXaW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdfYmxhbmsnOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFdpbmRvdyA9IGdsb2JhbC53aW5kb3cub3Blbih1cmwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFdpbmRvdy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgYWRkSGFuZGxlcnMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY2hlY2tXaW5kb3cgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkV2luZG93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkV2luZG93LmNsb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2Nsb3NlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lciA9IGdsb2JhbC5zZXRUaW1lb3V0KGNoZWNrV2luZG93LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIHZhciB0aW1lciA9IGdsb2JhbC5zZXRUaW1lb3V0KGNoZWNrV2luZG93LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCgnb3BlbicpO1xyXG4gICAgfTtcclxuXHJcbiAgICBDaGlsZFdpbmRvdy5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2Nsb3NlJyk7XHJcbiAgICB9O1xyXG5cclxuICAgIENoaWxkV2luZG93LnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0Lm9uKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgQ2hpbGRXaW5kb3cucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3Qub2ZmKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgQ2hpbGRXaW5kb3cucHJvdG90eXBlLmdldFBvc3RNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XHJcbiAgICB9O1xyXG5cclxuICAgIENoaWxkV2luZG93Ll9OQU1FU1BBQ0UgPSAnQ0hJTERfV0lORE9XJztcclxuXHJcbiAgICByZXR1cm4gQ2hpbGRXaW5kb3c7XHJcbn0pKCk7XHJcbiIsInZhciBib3dzZXIgPSByZXF1aXJlKCdib3dzZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIERldmljZSgpIHtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vYmlsZSBkZXZpY2VzXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgRGV2aWNlLnByb3RvdHlwZS5pc01vYmlsZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBib3dzZXIubW9iaWxlIHx8IGJvd3Nlci50YWJsZXQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBEZXZpY2U7XHJcbn0pKCk7XHJcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB0aGlzLm5hbWUgPSBcIlhzb2xsYVBheVN0YXRpb25XaWRnZXRFeGNlcHRpb25cIjtcclxuICAgIHRoaXMudG9TdHJpbmcgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAnOiAnICsgdGhpcy5tZXNzYWdlO1xyXG4gICAgfSkuYmluZCh0aGlzKTtcclxufTtcclxuIiwiZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVuaXEobGlzdCkge1xyXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGZ1bmN0aW9uICh4LCBpLCBhKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuaW5kZXhPZih4KSA9PSBpXHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLCB2YWx1ZXMpIHtcclxuICAgIHZhciBpbmRleCA9IC0xLFxyXG4gICAgICAgIGxlbmd0aCA9IHByb3BzID8gcHJvcHMubGVuZ3RoIDogMCxcclxuICAgICAgICByZXN1bHQgPSB7fTtcclxuXHJcbiAgICBpZiAobGVuZ3RoICYmICF2YWx1ZXMgJiYgIUFycmF5LmlzQXJyYXkocHJvcHNbMF0pKSB7XHJcbiAgICAgICAgdmFsdWVzID0gW107XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XHJcbiAgICAgICAgaWYgKHZhbHVlcykge1xyXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlc1tpbmRleF07XHJcbiAgICAgICAgfSBlbHNlIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgcmVzdWx0W2tleVswXV0gPSBrZXlbMV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyYW0oYSkge1xyXG4gICAgdmFyIHMgPSBbXTtcclxuXHJcbiAgICB2YXIgYWRkID0gZnVuY3Rpb24gKGssIHYpIHtcclxuICAgICAgICB2ID0gdHlwZW9mIHYgPT09ICdmdW5jdGlvbicgPyB2KCkgOiB2O1xyXG4gICAgICAgIHYgPSB2ID09PSBudWxsID8gJycgOiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHY7XHJcbiAgICAgICAgc1tzLmxlbmd0aF0gPSBlbmNvZGVVUklDb21wb25lbnQoaykgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodik7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBidWlsZFBhcmFtcyA9IGZ1bmN0aW9uIChwcmVmaXgsIG9iaikge1xyXG4gICAgICAgIHZhciBpLCBsZW4sIGtleTtcclxuXHJcbiAgICAgICAgaWYgKHByZWZpeCkge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgJ1snICsgKHR5cGVvZiBvYmpbaV0gPT09ICdvYmplY3QnICYmIG9ialtpXSA/IGkgOiAnJykgKyAnXScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtpXVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoU3RyaW5nKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyhwcmVmaXggKyAnWycgKyBrZXkgKyAnXScsIG9ialtrZXldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFkZChwcmVmaXgsIG9iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFkZChvYmpbaV0ubmFtZSwgb2JqW2ldLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAoa2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoa2V5LCBvYmpba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHM7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBidWlsZFBhcmFtcygnJywgYSkuam9pbignJicpO1xyXG59O1xyXG5cclxuXHJcbmZ1bmN0aW9uIG9uY2UoZikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgZiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRFdmVudE9iamVjdChjb250ZXh0LCB3cmFwRXZlbnRJbk5hbWVzcGFjZSkge1xyXG4gICAgdmFyIGR1bW15V3JhcHBlciA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIHJldHVybiBldmVudFxyXG4gICAgfTtcclxuICAgIHZhciB3cmFwRXZlbnRJbk5hbWVzcGFjZSA9IHdyYXBFdmVudEluTmFtZXNwYWNlIHx8IGR1bW15V3JhcHBlcjtcclxuICAgIHZhciBldmVudHNMaXN0ID0gW107XHJcbiAgICB2YXIgaGFuZGxlcnMgPSBuZXcgV2Vha01hcCgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nQ29udGFpbmVkU3BhY2Uoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIC8gLy50ZXN0KHN0cilcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHRyaWdnZXI6IChmdW5jdGlvbiAoZXZlbnROYW1lLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBldmVudEluTmFtZXNwYWNlID0gd3JhcEV2ZW50SW5OYW1lc3BhY2UoZXZlbnROYW1lKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBldmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudEluTmFtZXNwYWNlLCB7ZGV0YWlsOiBkYXRhfSk7IC8vIE5vdCB3b3JraW5nIGluIElFXHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50SW5OYW1lc3BhY2UsIHRydWUsIHRydWUsIGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgICAgIH0pLmJpbmQoY29udGV4dCksXHJcbiAgICAgICAgb246IChmdW5jdGlvbiAoZXZlbnROYW1lLCBoYW5kbGUsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkRXZlbnQoZXZlbnROYW1lLCBoYW5kbGUsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJEZWNvcmF0b3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUoZXZlbnQsIGV2ZW50LmRldGFpbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuc2V0KGhhbmRsZSwgaGFuZGxlckRlY29yYXRvcik7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50SW5OYW1lc3BhY2UgPSB3cmFwRXZlbnRJbk5hbWVzcGFjZShldmVudE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudEluTmFtZXNwYWNlLCBoYW5kbGVyRGVjb3JhdG9yLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50c0xpc3QucHVzaCh7bmFtZTogZXZlbnRJbk5hbWVzcGFjZSwgaGFuZGxlOiBoYW5kbGVyRGVjb3JhdG9yLCBvcHRpb25zOiBvcHRpb25zfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc1N0cmluZ0NvbnRhaW5lZFNwYWNlKGV2ZW50TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBldmVudHMgPSBldmVudE5hbWUuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJzZWRFdmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGRFdmVudChwYXJzZWRFdmVudE5hbWUsIGhhbmRsZSwgb3B0aW9ucylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhZGRFdmVudChldmVudE5hbWUsIGhhbmRsZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSkuYmluZChjb250ZXh0KSxcclxuXHJcbiAgICAgICAgb2ZmOiAoZnVuY3Rpb24gKGV2ZW50TmFtZSwgaGFuZGxlLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9mZkFsbEV2ZW50cyA9ICFldmVudE5hbWUgJiYgIWhhbmRsZSAmJiAhb3B0aW9ucztcclxuXHJcbiAgICAgICAgICAgIGlmIChvZmZBbGxFdmVudHMpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50c0xpc3QuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50Lm5hbWUsIGV2ZW50LmhhbmRsZSwgZXZlbnQub3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRXZlbnQoZXZlbnROYW1lLCBoYW5kbGUsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBldmVudEluTmFtZXNwYWNlID0gd3JhcEV2ZW50SW5OYW1lc3BhY2UoZXZlbnROYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyRGVjb3JhdG9yID0gaGFuZGxlcnMuZ2V0KGhhbmRsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudEluTmFtZXNwYWNlLCBoYW5kbGVyRGVjb3JhdG9yLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50c0xpc3QgPSBldmVudHNMaXN0LmZpbHRlcihmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQubmFtZSAhPT0gZXZlbnRJbk5hbWVzcGFjZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTdHJpbmdDb250YWluZWRTcGFjZShldmVudE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnROYW1lLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgICAgICAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAocGFyc2VkRXZlbnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQocGFyc2VkRXZlbnROYW1lLCBoYW5kbGUsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQoZXZlbnROYW1lLCBoYW5kbGUsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pLmJpbmQoY29udGV4dClcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBheW1lbnRVcmxXaXRoQ29uc2VudElkKHVybCwgY29uc2VudElkKSB7XHJcbiAgICBsZXQgcGF5bWVudFVybCA9IG5ldyBVUkwodXJsKTtcclxuXHJcbiAgICBwYXltZW50VXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2NvbnNlbnRJZCcsIGNvbnNlbnRJZCk7XHJcblxyXG4gICAgcmV0dXJuIHBheW1lbnRVcmwudG9TdHJpbmcoKTtcclxufVxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgYWRkRXZlbnRPYmplY3Q6IGFkZEV2ZW50T2JqZWN0LFxyXG4gICAgaXNFbXB0eTogaXNFbXB0eSxcclxuICAgIHVuaXE6IHVuaXEsXHJcbiAgICB6aXBPYmplY3Q6IHppcE9iamVjdCxcclxuICAgIHBhcmFtOiBwYXJhbSxcclxuICAgIG9uY2U6IG9uY2UsXHJcbiAgICBnZXRQYXltZW50VXJsV2l0aENvbnNlbnRJZDogZ2V0UGF5bWVudFVybFdpdGhDb25zZW50SWRcclxufVxyXG4iLCJ2YXIgdmVyc2lvbiA9IHJlcXVpcmUoJy4vdmVyc2lvbicpO1xyXG52YXIgSGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xyXG52YXIgUG9zdE1lc3NhZ2UgPSByZXF1aXJlKCcuL3Bvc3RtZXNzYWdlJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBMaWdodEJveChpc01vYmlsZSkge1xyXG4gICAgICAgIHJlcXVpcmUoJy4vc3R5bGVzL2xpZ2h0Ym94LnNjc3MnKTtcclxuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0ID0gSGVscGVycy5hZGRFdmVudE9iamVjdCh0aGlzLCB3cmFwRXZlbnRJbk5hbWVzcGFjZSk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gaXNNb2JpbGUgPyBERUZBVUxUX09QVElPTlNfTU9CSUxFIDogREVGQVVMVF9PUFRJT05TO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIENMQVNTX1BSRUZJWCA9ICd4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gnO1xyXG4gICAgdmFyIENPTU1PTl9PUFRJT05TID0ge1xyXG4gICAgICAgIHpJbmRleDogMTAwMCxcclxuICAgICAgICBvdmVybGF5T3BhY2l0eTogJy42JyxcclxuICAgICAgICBvdmVybGF5QmFja2dyb3VuZDogJyMwMDAwMDAnLFxyXG4gICAgICAgIGNvbnRlbnRCYWNrZ3JvdW5kOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgY2xvc2VCeUtleWJvYXJkOiB0cnVlLFxyXG4gICAgICAgIGNsb3NlQnlDbGljazogdHJ1ZSxcclxuICAgICAgICBtb2RhbDogZmFsc2UsXHJcbiAgICAgICAgc3Bpbm5lcjogJ3hzb2xsYScsXHJcbiAgICAgICAgc3Bpbm5lckNvbG9yOiBudWxsLFxyXG4gICAgICAgIHNwaW5uZXJVcmw6IG51bGwsXHJcbiAgICAgICAgc3Bpbm5lclJvdGF0aW9uUGVyaW9kOiAwXHJcbiAgICB9O1xyXG4gICAgdmFyIERFRkFVTFRfT1BUSU9OUyA9IE9iamVjdC5hc3NpZ24oe30sIENPTU1PTl9PUFRJT05TLCB7XHJcbiAgICAgICAgd2lkdGg6IG51bGwsXHJcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgICAgY29udGVudE1hcmdpbjogJzEwcHgnXHJcbiAgICB9KTtcclxuICAgIHZhciBERUZBVUxUX09QVElPTlNfTU9CSUxFID0gT2JqZWN0LmFzc2lnbih7fSwgQ09NTU9OX09QVElPTlMsIHtcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIGhlaWdodDogJzEwMCUnLCBcclxuICAgICAgICBjb250ZW50TWFyZ2luOiAnMHB4J1xyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIFNQSU5ORVJTID0ge1xyXG4gICAgICAgIHhzb2xsYTogcmVxdWlyZSgnLi9zcGlubmVycy94c29sbGEuc3ZnJyksXHJcbiAgICAgICAgcm91bmQ6IHJlcXVpcmUoJy4vc3Bpbm5lcnMvcm91bmQuc3ZnJyksXHJcbiAgICAgICAgbm9uZTogJyAnXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBNSU5fUFNfRElNRU5TSU9OUyA9IHtcclxuICAgICAgICBoZWlnaHQ6IDUwMCxcclxuICAgICAgICB3aWR0aDogNjAwXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBoYW5kbGVLZXl1cEV2ZW50TmFtZSA9IHdyYXBFdmVudEluTmFtZXNwYWNlKCdrZXl1cCcpO1xyXG4gICAgdmFyIGhhbmRsZVJlc2l6ZUV2ZW50TmFtZSA9IHdyYXBFdmVudEluTmFtZXNwYWNlKCdyZXNpemUnKTtcclxuXHJcbiAgICB2YXIgaGFuZGxlR2xvYmFsS2V5dXAgPSBmdW5jdGlvbihldmVudCkge1xyXG5cclxuICAgICAgICB2YXIgY2xpY2tFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xyXG4gICAgICAgIGNsaWNrRXZlbnQuaW5pdEV2ZW50KGhhbmRsZUtleXVwRXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgY2xpY2tFdmVudC5zb3VyY2VFdmVudCA9IGV2ZW50O1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY2xpY2tFdmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGhhbmRsZVNwZWNpZmljS2V5dXAgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5zb3VyY2VFdmVudC53aGljaCA9PSAyNykge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlRnJhbWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGhhbmRsZUdsb2JhbFJlc2l6ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciByZXNpemVFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xyXG4gICAgICAgIHJlc2l6ZUV2ZW50LmluaXRFdmVudChoYW5kbGVSZXNpemVFdmVudE5hbWUsIGZhbHNlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQocmVzaXplRXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHdyYXBFdmVudEluTmFtZXNwYWNlKGV2ZW50TmFtZSkge1xyXG4gICAgICAgIHJldHVybiBMaWdodEJveC5fTkFNRVNQQUNFICsgJ18nICsgZXZlbnROYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBQcml2YXRlIE1lbWJlcnMgKiovXHJcbiAgICBMaWdodEJveC5wcm90b3R5cGUudHJpZ2dlckV2ZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3QudHJpZ2dlci5hcHBseSh0aGlzLmV2ZW50T2JqZWN0LCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBMaWdodEJveC5wcm90b3R5cGUubWVhc3VyZVNjcm9sbGJhciA9IGZ1bmN0aW9uICgpIHsgLy8gdGh4IHdhbHNoOiBodHRwczovL2Rhdmlkd2Fsc2gubmFtZS9kZXRlY3Qtc2Nyb2xsYmFyLXdpZHRoXHJcbiAgICAgICAgdmFyIHNjcm9sbERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgc2Nyb2xsRGl2LmNsYXNzTGlzdC5hZGQoXCJzY3JvbGxiYXItbWVhc3VyZVwiKTtcclxuICAgICAgICBzY3JvbGxEaXYuc2V0QXR0cmlidXRlKFwic3R5bGVcIixcclxuICAgICAgICAgICAgXCJwb3NpdGlvbjogYWJzb2x1dGU7XCIgK1xyXG4gICAgICAgICAgICBcInRvcDogLTk5OTlweFwiICtcclxuICAgICAgICAgICAgXCJ3aWR0aDogNTBweFwiICtcclxuICAgICAgICAgICAgXCJoZWlnaHQ6IDUwcHhcIiArXHJcbiAgICAgICAgICAgIFwib3ZlcmZsb3c6IHNjcm9sbFwiXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JvbGxEaXYpO1xyXG5cclxuICAgICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYub2Zmc2V0V2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzY3JvbGxEaXYpO1xyXG5cclxuICAgICAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGg7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKiBQdWJsaWMgTWVtYmVycyAqKi9cclxuICAgIExpZ2h0Qm94LnByb3RvdHlwZS5vcGVuRnJhbWUgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcclxuICAgICAgICB2YXIgSGFuZGxlQm91bmRTcGVjaWZpY0tleXVwID0gaGFuZGxlU3BlY2lmaWNLZXl1cC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcblxyXG4gICAgICAgIHZhciBzcGlubmVyID0gb3B0aW9ucy5zcGlubmVyID09PSAnY3VzdG9tJyAmJiAhIW9wdGlvbnMuc3Bpbm5lclVybCA/XHJcbiAgICAgICAgICAgICc8aW1nIGNsYXNzPVwic3Bpbm5lci1jdXN0b21cIiBzcmM9XCInICsgZW5jb2RlVVJJKG9wdGlvbnMuc3Bpbm5lclVybCkgKyAnXCIgLz4nIDogU1BJTk5FUlNbb3B0aW9ucy5zcGlubmVyXSB8fCBPYmplY3QudmFsdWVzKFNQSU5ORVJTKVswXTtcclxuXHJcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24gKHNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIHZhciBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgIGhvc3QuY2xhc3NOYW1lID0gc2V0dGluZ3MucHJlZml4O1xyXG5cclxuICAgICAgICAgICAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgb3ZlcmxheS5jbGFzc05hbWUgPSBzZXR0aW5ncy5wcmVmaXggKyAnLW92ZXJsYXknO1xyXG5cclxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgY29udGVudC5jbGFzc05hbWUgPSBzZXR0aW5ncy5wcmVmaXggKyAnLWNvbnRlbnQnICsgJyAnICsgc2V0dGluZ3MucHJlZml4ICsgJy1jb250ZW50X19oaWRkZW4nO1xyXG5cclxuICAgICAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xyXG4gICAgICAgICAgICBpZnJhbWUuY2xhc3NOYW1lID0gc2V0dGluZ3MucHJlZml4ICsgJy1jb250ZW50LWlmcmFtZSc7XHJcbiAgICAgICAgICAgIGlmcmFtZS5zcmMgPSBzZXR0aW5ncy51cmw7XHJcbiAgICAgICAgICAgIGlmcmFtZS5mcmFtZUJvcmRlciA9ICcwJztcclxuICAgICAgICAgICAgaWZyYW1lLmFsbG93RnVsbHNjcmVlbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3Bpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICBzcGlubmVyLmNsYXNzTmFtZSA9IHNldHRpbmdzLnByZWZpeCArICctc3Bpbm5lcic7XHJcbiAgICAgICAgICAgIHNwaW5uZXIuaW5uZXJIVE1MID0gc2V0dGluZ3Muc3Bpbm5lcjtcclxuXHJcbiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcclxuXHJcbiAgICAgICAgICAgIGhvc3QuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XHJcbiAgICAgICAgICAgIGhvc3QuYXBwZW5kQ2hpbGQoY29udGVudCk7XHJcbiAgICAgICAgICAgIGhvc3QuYXBwZW5kQ2hpbGQoc3Bpbm5lcik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaG9zdDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgYm9keUVsZW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQuYm9keTtcclxuICAgICAgICB2YXIgbGlnaHRCb3hFbGVtZW50ID0gdGVtcGxhdGUoe1xyXG4gICAgICAgICAgICBwcmVmaXg6IENMQVNTX1BSRUZJWCxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIHNwaW5uZXI6IHNwaW5uZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgbGlnaHRCb3hPdmVybGF5RWxlbWVudCA9IGxpZ2h0Qm94RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuJyArIENMQVNTX1BSRUZJWCArICctb3ZlcmxheScpO1xyXG4gICAgICAgIHZhciBsaWdodEJveENvbnRlbnRFbGVtZW50ID0gbGlnaHRCb3hFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy4nICsgQ0xBU1NfUFJFRklYICsgJy1jb250ZW50Jyk7XHJcbiAgICAgICAgdmFyIGxpZ2h0Qm94SWZyYW1lRWxlbWVudCA9IGxpZ2h0Qm94Q29udGVudEVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyBDTEFTU19QUkVGSVggKyAnLWNvbnRlbnQtaWZyYW1lJyk7XHJcbiAgICAgICAgdmFyIGxpZ2h0Qm94U3Bpbm5lckVsZW1lbnQgPSBsaWdodEJveEVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyBDTEFTU19QUkVGSVggKyAnLXNwaW5uZXInKTtcclxuXHJcbiAgICAgICAgdmFyIHBzRGltZW5zaW9ucyA9IHtcclxuICAgICAgICAgICAgd2lkdGg6IHdpdGhEZWZhdWx0UFhVbml0KE1JTl9QU19ESU1FTlNJT05TLndpZHRoKSxcclxuICAgICAgICAgICAgaGVpZ2h0OiB3aXRoRGVmYXVsdFBYVW5pdChNSU5fUFNfRElNRU5TSU9OUy5oZWlnaHQpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd2l0aERlZmF1bHRQWFVuaXQodmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIGlzU3RyaW5nV2l0aG91dFVuaXQgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFN0cmluZyhwYXJzZUZsb2F0KHZhbHVlKSkubGVuZ3RoID09PSB2YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmIChpc1N0cmluZ1dpdGhvdXRVbml0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgKyAncHgnIDogdmFsdWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxpZ2h0Qm94RWxlbWVudC5zdHlsZS56SW5kZXggPSBvcHRpb25zLnpJbmRleDtcclxuXHJcbiAgICAgICAgbGlnaHRCb3hPdmVybGF5RWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3B0aW9ucy5vdmVybGF5T3BhY2l0eTtcclxuICAgICAgICBsaWdodEJveE92ZXJsYXlFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMub3ZlcmxheUJhY2tncm91bmQ7XHJcblxyXG4gICAgICAgIGxpZ2h0Qm94Q29udGVudEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5jb250ZW50QmFja2dyb3VuZDtcclxuICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLm1hcmdpbiA9IHdpdGhEZWZhdWx0UFhVbml0KG9wdGlvbnMuY29udGVudE1hcmdpbik7XHJcbiAgICAgICAgbGlnaHRCb3hDb250ZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IG9wdGlvbnMud2lkdGggPyB3aXRoRGVmYXVsdFBYVW5pdChvcHRpb25zLndpZHRoKSA6ICdhdXRvJztcclxuICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0ID8gd2l0aERlZmF1bHRQWFVuaXQob3B0aW9ucy5oZWlnaHQpIDogJ2F1dG8nO1xyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5zcGlubmVyQ29sb3IpIHtcclxuICAgICAgICAgICAgbGlnaHRCb3hTcGlubmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdwYXRoJykuc3R5bGUuZmlsbCA9IG9wdGlvbnMuc3Bpbm5lckNvbG9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc3Bpbm5lciA9PT0gJ2N1c3RvbScpIHtcclxuICAgICAgICAgICAgdmFyIHNwaW5uZXJDdXN0b20gPSBsaWdodEJveFNwaW5uZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zcGlubmVyLWN1c3RvbScpO1xyXG4gICAgICAgICAgICBzcGlubmVyQ3VzdG9tLnN0eWxlWyctd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbiddID0gb3B0aW9ucy5zcGlubmVyUm90YXRpb25QZXJpb2QgKyAnczsnO1xyXG4gICAgICAgICAgICBzcGlubmVyQ3VzdG9tLnN0eWxlWydhbmltYXRpb24tZHVyYXRpb24nXSA9IG9wdGlvbnMuc3Bpbm5lclJvdGF0aW9uUGVyaW9kICsgJ3M7JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmNsb3NlQnlDbGljaykge1xyXG4gICAgICAgICAgICBsaWdodEJveE92ZXJsYXlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VGcmFtZSgpO1xyXG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJvZHlFbGVtZW50LmFwcGVuZENoaWxkKGxpZ2h0Qm94RWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmNsb3NlQnlLZXlib2FyZCkge1xyXG5cclxuICAgICAgICAgICAgYm9keUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihoYW5kbGVLZXl1cEV2ZW50TmFtZSwgSGFuZGxlQm91bmRTcGVjaWZpY0tleXVwKTtcclxuXHJcbiAgICAgICAgICAgIGJvZHlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgaGFuZGxlR2xvYmFsS2V5dXAsIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaG93Q29udGVudCA9IEhlbHBlcnMub25jZSgoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBoaWRlU3Bpbm5lcihvcHRpb25zKTtcclxuICAgICAgICAgICAgbGlnaHRCb3hDb250ZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BSRUZJWCArICctY29udGVudF9faGlkZGVuJyk7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdsb2FkJyk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIHZhciBsaWdodEJveFJlc2l6ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IG9wdGlvbnMud2lkdGggOiBwc0RpbWVuc2lvbnMud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBvcHRpb25zLmhlaWdodCA/IG9wdGlvbnMuaGVpZ2h0IDogcHNEaW1lbnNpb25zLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGxpZ2h0Qm94Q29udGVudEVsZW1lbnQuc3R5bGUubGVmdCA9ICcwcHgnO1xyXG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLnRvcCA9ICcwcHgnO1xyXG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc4cHgnO1xyXG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLndpZHRoID0gd2l0aERlZmF1bHRQWFVuaXQod2lkdGgpO1xyXG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IHdpdGhEZWZhdWx0UFhVbml0KGhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyV2lkdGggPSBsaWdodEJveEVsZW1lbnQuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXJIZWlnaHQgPSBsaWdodEJveEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgdmFyIGNvbnRlbnRXaWR0aCA9IG91dGVyV2lkdGgobGlnaHRCb3hDb250ZW50RWxlbWVudCksXHJcbiAgICAgICAgICAgICAgICBjb250ZW50SGVpZ2h0ID0gb3V0ZXJIZWlnaHQobGlnaHRCb3hDb250ZW50RWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgaG9yTWFyZ2luID0gY29udGVudFdpZHRoIC0gbGlnaHRCb3hDb250ZW50RWxlbWVudC5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgICAgICAgIHZlcnRNYXJnaW4gPSBjb250ZW50SGVpZ2h0IC0gbGlnaHRCb3hDb250ZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgd2lkdGhBZnRlclJlc2l6ZSA9IGNvbnRhaW5lcldpZHRoIC0gaG9yTWFyZ2luO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdpZHRoQWZ0ZXJSZXNpemUgPiBjb250ZW50V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoQWZ0ZXJSZXNpemUgPSBjb250ZW50V2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh3aWR0aEFmdGVyUmVzaXplID4gY29udGFpbmVyV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoQWZ0ZXJSZXNpemUgPSBjb250YWluZXJXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGhlaWdodEFmdGVyUmVzaXplID0gY29udGFpbmVySGVpZ2h0IC0gdmVydE1hcmdpbjtcclxuXHJcbiAgICAgICAgICAgIGlmIChoZWlnaHRBZnRlclJlc2l6ZSA+IGNvbnRlbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIGhlaWdodEFmdGVyUmVzaXplID0gY29udGVudEhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGhlaWdodEFmdGVyUmVzaXplID4gY29udGFpbmVySGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRBZnRlclJlc2l6ZSA9IGNvbnRhaW5lckhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGlnaHRCb3hDb250ZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IHdpdGhEZWZhdWx0UFhVbml0KHdpZHRoQWZ0ZXJSZXNpemUpO1xyXG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IHdpdGhEZWZhdWx0UFhVbml0KGhlaWdodEFmdGVyUmVzaXplKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsZWZ0T2Zmc2V0ID0gKCh3aW5kb3cuaW5uZXJXaWR0aCAtIHdpZHRoQWZ0ZXJSZXNpemUpIC8gMikgLSAoaG9yTWFyZ2luIC8gMik7XHJcbiAgICAgICAgICAgIHZhciB0b3BPZmZzZXQgPSAoKHdpbmRvdy5pbm5lckhlaWdodCAtIGhlaWdodEFmdGVyUmVzaXplKSAvIDIpICAtICh2ZXJ0TWFyZ2luIC8gMik7XHJcblxyXG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLmxlZnQgPSB3aXRoRGVmYXVsdFBYVW5pdChNYXRoLm1heChsZWZ0T2Zmc2V0LCAwKSk7XHJcbiAgICAgICAgICAgIGxpZ2h0Qm94Q29udGVudEVsZW1lbnQuc3R5bGUudG9wID0gd2l0aERlZmF1bHRQWFVuaXQoTWF0aC5tYXgodG9wT2Zmc2V0LCAwKSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gb3V0ZXJXaWR0aChlbCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgdmFyIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XHJcblxyXG4gICAgICAgICAgICB3aWR0aCArPSBwYXJzZUludChzdHlsZS5tYXJnaW5MZWZ0KSArIHBhcnNlSW50KHN0eWxlLm1hcmdpblJpZ2h0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gb3V0ZXJIZWlnaHQoZWwpIHtcclxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IGVsLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgdmFyIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XHJcblxyXG4gICAgICAgICAgICBoZWlnaHQgKz0gcGFyc2VJbnQoc3R5bGUubWFyZ2luVG9wKSArIHBhcnNlSW50KHN0eWxlLm1hcmdpbkJvdHRvbSk7XHJcbiAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYm9keVN0eWxlcztcclxuICAgICAgICB2YXIgaGlkZVNjcm9sbGJhciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGJvZHlTdHlsZXMgPSBIZWxwZXJzLnppcE9iamVjdChbJ292ZXJmbG93JywgJ3BhZGRpbmdSaWdodCddLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2tleSwgZ2V0Q29tcHV0ZWRTdHlsZShib2R5RWxlbWVudClba2V5XV07XHJcbiAgICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBib2R5UGFkID0gcGFyc2VJbnQoKGdldENvbXB1dGVkU3R5bGUoYm9keUVsZW1lbnQpWydwYWRkaW5nUmlnaHQnXSB8fCAwKSwgMTApO1xyXG4gICAgICAgICAgICBib2R5RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICBib2R5RWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSB3aXRoRGVmYXVsdFBYVW5pdChib2R5UGFkICsgdGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCkpO1xyXG4gICAgICAgIH0pLmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHZhciByZXNldFNjcm9sbGJhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGJvZHlTdHlsZXMpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGJvZHlTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keUVsZW1lbnQuc3R5bGVba2V5XSA9IGJvZHlTdHlsZXNba2V5XTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgc2hvd1NwaW5uZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGxpZ2h0Qm94U3Bpbm5lckVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGhpZGVTcGlubmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBsaWdodEJveFNwaW5uZXJFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGxvYWRUaW1lcjtcclxuICAgICAgICBsaWdodEJveElmcmFtZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uIGhhbmRsZUxvYWQoZXZlbnQpIHtcclxuICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSAhKG9wdGlvbnMud2lkdGggJiYgb3B0aW9ucy5oZWlnaHQpID8gKG9wdGlvbnMucmVzaXplVGltZW91dCB8fCAzMDAwMCkgOiAxMDAwOyAvLyAzMDAwMCBpZiBwc0RpbWVuc2lvbnMgd2lsbCBub3QgYXJyaXZlIGFuZCBjdXN0b20gdGltZW91dCBpcyBub3QgcHJvdmlkZWRcclxuICAgICAgICAgICAgbG9hZFRpbWVyID0gZ2xvYmFsLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRCb3hSZXNpemUoKTtcclxuICAgICAgICAgICAgICAgIHNob3dDb250ZW50KCk7XHJcbiAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICBsaWdodEJveElmcmFtZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIGhhbmRsZUxvYWQpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIGlmcmFtZVdpbmRvdyA9IGxpZ2h0Qm94SWZyYW1lRWxlbWVudC5jb250ZW50V2luZG93IHx8IGxpZ2h0Qm94SWZyYW1lRWxlbWVudDtcclxuXHJcbiAgICAgICAgLy8gQ3Jvc3Mtd2luZG93IGNvbW11bmljYXRpb25cclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBuZXcgUG9zdE1lc3NhZ2UoaWZyYW1lV2luZG93KTtcclxuICAgICAgICBpZiAob3B0aW9ucy53aWR0aCAmJiBvcHRpb25zLmhlaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2RpbWVuc2lvbnMnLCAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRCb3hSZXNpemUoKTtcclxuICAgICAgICAgICAgICAgIHNob3dDb250ZW50KCk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2RpbWVuc2lvbnMnLCAoZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGV2ZW50LmRldGFpbDtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmRpbWVuc2lvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwc0RpbWVuc2lvbnMgPSBIZWxwZXJzLnppcE9iamVjdChbJ3dpZHRoJywgJ2hlaWdodCddLm1hcChmdW5jdGlvbiAoZGltKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbZGltLCBNYXRoLm1heChNSU5fUFNfRElNRU5TSU9OU1tkaW1dIHx8IDAsIGRhdGEuZGltZW5zaW9uc1tkaW1dIHx8IDApICsgJ3B4J107XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsaWdodEJveFJlc2l6ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2hvd0NvbnRlbnQoKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ3dpZGdldC1kZXRlY3Rpb24nLCAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2Uuc2VuZCgnd2lkZ2V0LWRldGVjdGVkJywge3ZlcnNpb246IHZlcnNpb24sIGxpZ2h0Qm94T3B0aW9uczogb3B0aW9uc30pO1xyXG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZS5vbignd2lkZ2V0LWNsb3NlJywgKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUZyYW1lKCk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdjbG9zZScsIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VGcmFtZSgpO1xyXG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZS5vbignc3RhdHVzJywgKGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCgnc3RhdHVzJywgZXZlbnQuZGV0YWlsKTtcclxuICAgICAgICB9KS5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ3VzZXItY291bnRyeScsIChmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ3VzZXItY291bnRyeScsIGV2ZW50LmRldGFpbCk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdmY3AnLCAoZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdmY3AnLCBldmVudC5kZXRhaWwpO1xyXG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZS5vbignZXJyb3InLCAoZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdlcnJvcicsIGV2ZW50LmRldGFpbCk7XHJcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIC8vIFJlc2l6ZVxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGhhbmRsZVJlc2l6ZUV2ZW50TmFtZSwgbGlnaHRCb3hSZXNpemUpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVHbG9iYWxSZXNpemUpO1xyXG5cclxuICAgICAgICAvLyBDbGVhbiB1cCBhZnRlciBjbG9zZVxyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICB0aGlzLm9uKCdjbG9zZScsIGZ1bmN0aW9uIGhhbmRsZUNsb3NlKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vZmYoKTtcclxuICAgICAgICAgICAgYm9keUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihoYW5kbGVLZXl1cEV2ZW50TmFtZSwgSGFuZGxlQm91bmRTcGVjaWZpY0tleXVwKVxyXG4gICAgICAgICAgICBib2R5RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGhhbmRsZUdsb2JhbEtleXVwKTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVHbG9iYWxSZXNpemUpXHJcblxyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihoYW5kbGVSZXNpemVFdmVudE5hbWUsIGxpZ2h0Qm94UmVzaXplKTtcclxuICAgICAgICAgICAgbGlnaHRCb3hFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGlnaHRCb3hFbGVtZW50KTtcclxuICAgICAgICAgICAgcmVzZXRTY3JvbGxiYXIoKTtcclxuICAgICAgICAgICAgdGhhdC5vZmYoJ2Nsb3NlJywgaGFuZGxlQ2xvc2UpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaG93U3Bpbm5lcigpO1xyXG4gICAgICAgIGhpZGVTY3JvbGxiYXIoKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCgnb3BlbicpO1xyXG4gICAgfTtcclxuXHJcbiAgICBMaWdodEJveC5wcm90b3R5cGUuY2xvc2VGcmFtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tb2RhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCgnY2xvc2UnKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIExpZ2h0Qm94LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlRnJhbWUoKTtcclxuICAgIH07XHJcblxyXG4gICAgTGlnaHRCb3gucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3Qub24uYXBwbHkodGhpcy5ldmVudE9iamVjdCwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcblxyXG4gICAgTGlnaHRCb3gucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0Lm9mZi5hcHBseSh0aGlzLmV2ZW50T2JqZWN0LCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBMaWdodEJveC5wcm90b3R5cGUuZ2V0UG9zdE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcclxuICAgIH07XHJcblxyXG4gICAgTGlnaHRCb3guX05BTUVTUEFDRSA9ICcueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94JztcclxuXHJcbiAgICByZXR1cm4gTGlnaHRCb3g7XHJcbn0pKCk7XHJcbiIsImZ1bmN0aW9uIG9iamVjdEFzc2lnbigpIHtcclxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduIFBvbHlmaWxsXHJcbiAgT2JqZWN0LmFzc2lnbnx8T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdCxcImFzc2lnblwiLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmdW5jdGlvbihlLHIpe1widXNlIHN0cmljdFwiO2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdFwiKTtmb3IodmFyIHQ9T2JqZWN0KGUpLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgbz1hcmd1bWVudHNbbl07aWYobnVsbCE9bylmb3IodmFyIGE9T2JqZWN0LmtleXMoT2JqZWN0KG8pKSxjPTAsYj1hLmxlbmd0aDtjPGI7YysrKXt2YXIgaT1hW2NdLGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLGkpO3ZvaWQgMCE9PWwmJmwuZW51bWVyYWJsZSYmKHRbaV09b1tpXSl9fXJldHVybiB0fX0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcnJheUZvckVhY2goKSB7XHJcbiAgQXJyYXkucHJvdG90eXBlLmZvckVhY2h8fChBcnJheS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihyLG8pe3ZhciB0LG47aWYobnVsbD09dGhpcyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiIHRoaXMgaXMgbnVsbCBvciBub3QgZGVmaW5lZFwiKTt2YXIgZT1PYmplY3QodGhpcyksaT1lLmxlbmd0aD4+PjA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKHIrXCIgaXMgbm90IGEgZnVuY3Rpb25cIik7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKHQ9byksbj0wO248aTspe3ZhciBmO24gaW4gZSYmKGY9ZVtuXSxyLmNhbGwodCxmLG4sZSkpLG4rK319KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXBwbHlQb2x5ZmlsbHMoKSB7XHJcbiAgb2JqZWN0QXNzaWduKCk7XHJcbiAgYXJyYXlGb3JFYWNoKCk7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIGFwcGx5UG9seWZpbGxzOiBhcHBseVBvbHlmaWxsc1xyXG59XHJcbiIsInZhciBIZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiB3cmFwRXZlbnRJbk5hbWVzcGFjZShldmVudE5hbWUpIHtcclxuICAgICAgICByZXR1cm4gUG9zdE1lc3NhZ2UuX05BTUVTUEFDRSArICdfJyArIGV2ZW50TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBQb3N0TWVzc2FnZSh3aW5kb3cpIHtcclxuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0ID0gSGVscGVycy5hZGRFdmVudE9iamVjdCh0aGlzLCB3cmFwRXZlbnRJbk5hbWVzcGFjZSk7XHJcbiAgICAgICAgdGhpcy5saW5rZWRXaW5kb3cgPSB3aW5kb3c7XHJcblxyXG4gICAgICAgIGdsb2JhbC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciAmJiBnbG9iYWwud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIChmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSAhPT0gdGhpcy5saW5rZWRXaW5kb3cpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB7fTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSAnc3RyaW5nJyAmJiBnbG9iYWwuSlNPTiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBnbG9iYWwuSlNPTi5wYXJzZShldmVudC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY29tbWFuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudE9iamVjdC50cmlnZ2VyKG1lc3NhZ2UuY29tbWFuZCwgbWVzc2FnZS5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBQcml2YXRlIE1lbWJlcnMgKiovXHJcbiAgICBQb3N0TWVzc2FnZS5wcm90b3R5cGUuZXZlbnRPYmplY3QgPSBudWxsO1xyXG4gICAgUG9zdE1lc3NhZ2UucHJvdG90eXBlLmxpbmtlZFdpbmRvdyA9IG51bGw7XHJcblxyXG4gICAgLyoqIFB1YmxpYyBNZW1iZXJzICoqL1xyXG4gICAgUG9zdE1lc3NhZ2UucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbihjb21tYW5kLCBkYXRhLCB0YXJnZXRPcmlnaW4pIHtcclxuICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0YXJnZXRPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0YXJnZXRPcmlnaW4gPSAnKic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubGlua2VkV2luZG93IHx8IHRoaXMubGlua2VkV2luZG93LnBvc3RNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgZ2xvYmFsLndpbmRvdy5KU09OID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5saW5rZWRXaW5kb3cucG9zdE1lc3NhZ2UoZ2xvYmFsLkpTT04uc3RyaW5naWZ5KHtkYXRhOiBkYXRhLCBjb21tYW5kOiBjb21tYW5kfSksIHRhcmdldE9yaWdpbik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIFBvc3RNZXNzYWdlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudE9iamVjdC5vbihldmVudCwgaGFuZGxlLCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgUG9zdE1lc3NhZ2UucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudE9iamVjdC5vZmYoZXZlbnQsIGhhbmRsZSwgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG5cclxuICAgIFBvc3RNZXNzYWdlLl9OQU1FU1BBQ0UgPSAnUE9TVF9NRVNTQUdFJztcclxuXHJcblxyXG4gICAgcmV0dXJuIFBvc3RNZXNzYWdlO1xyXG59KSgpO1xyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyB3aWR0aD1cXFwiNDdweFxcXCIgaGVpZ2h0PVxcXCI0N3B4XFxcIiBjbGFzcz1cXFwic3Bpbm5lci1yb3VuZFxcXCI+PHBhdGggZD1cXFwiTTQuNzg1MjcyOCwxMC40MjEwODc1IEMyLjk0MTExNjY0LDEzLjA1NTIxOTcgMS42Mzc3NzEwOSwxNi4wOTQ2MTA2IDEuMDM3NTM5NTYsMTkuMzc2ODU1NiBMNS4xNjYzODk3MSwxOS4zNzY4NTU2IEM1LjY0Mjk2MTUsMTcuMTg3NTU0IDYuNTAxMjUyNDMsMTUuMTM5MTY0IDcuNjY3Njg4OTksMTMuMzA1MzA1IEw1Ljk1NTcyNDI4LDExLjU5MjI3MDUgTDQuNzg1MjcyOCwxMC40MjEwODc1IEw0Ljc4NTI3MjgsMTAuNDIxMDg3NSBaIE0xMC40NjkzMDQ4LDQuNzQ1NjU2MTUgQzEzLjEyNzQ4NzMsMi44OTA4MDYxIDE2LjE5NjU5NzYsMS41ODY3NDY0OCAxOS41MTAwMTYxLDEgTDE5LjUxMDAxNjEsNC45OTUyMzkzNCBDMTcuMjcxMDkyMyw1LjQ4Nzk3NzgyIDE1LjE4MDMxOTMsNi4zODA4NTI5IDEzLjMxNjY5MDcsNy41OTQ4MjE1MyBMMTEuNjMzNzMzOSw1LjkxMDgxMjkzIEwxMC40NjkzMDQ4LDQuNzQ1NjU2MTUgTDEwLjQ2OTMwNDgsNC43NDU2NTYxNSBaIE00Mi4yNDI2MzA5LDM2LjUzODgzODYgQzQ0LjExMTI3ODIsMzMuODU3NTAxNiA0NS40MjA2NDYxLDMwLjc1ODE1MDQgNDYsMjcuNDExNzI2OSBMNDEuOTQ0MTIxMSwyNy40MTE3MjY5IEM0MS40NTI3OTQ1LDI5LjY2MTg5MjYgNDAuNTU4MzY5MiwzMS43NjI5MTEgMzkuMzQwNDQxMiwzMy42MzQ5MzU2IEw0MS4wMzMyMzQ3LDM1LjMyODc4NjkgTDQyLjI0MjUzMDYsMzYuNTM4ODM4NiBMNDIuMjQyNjMwOSwzNi41Mzg4Mzg2IFogTTM2LjU3MDc0NDEsNDIuMjI2NDIyNyBDMzMuOTE2Nzc3Myw0NC4wODY3OTY3IDMwLjg1MDk3OTMsNDUuMzk3Mjg0MiAyNy41Mzk4NjkzLDQ1Ljk5MTE2MTYgTDI3LjUzOTg2OTMsNDEuNzk2MDU0OSBDMjkuNzM3NjQwMiw0MS4zMjAyOTAxIDMxLjc5MzY4NDEsNDAuNDU5MzUzNiAzMy42MzM2MjQ2LDM5LjI4NzU2OCBMMzUuMzU1NDI1OCw0MS4wMTA0NDUzIEwzNi41NzA3NDQxLDQyLjIyNjUyMzEgTDM2LjU3MDc0NDEsNDIuMjI2NDIyNyBaIE00LjcxMTc5OTY1LDM2LjQ3MzE1MzUgQzIuODY3NDQyNzQsMzMuODA2OTgyMyAxLjU3NDYzNjM3LDMwLjczMDkzMjIgMSwyNy40MTE4MjczIEw1LjE2ODg5OTA0LDI3LjQxMTgyNzMgQzUuNjQ4MjgxMjgsMjkuNjA3MzU1OSA2LjUxMTU5MDg3LDMxLjY2MTA2OSA3LjY4NDY1MjA1LDMzLjQ5ODQ0MzIgTDUuOTU1NzI0MjgsMzUuMjI4NDUxNSBMNC43MTE3OTk2NSwzNi40NzMxNTM1IEw0LjcxMTc5OTY1LDM2LjQ3MzE1MzUgWiBNMTAuMzY0MDEzMyw0Mi4xODA0MjMgQzEzLjA0NjI4NTQsNDQuMDc0NTQzNSAxNi4xNTI3MzQ1LDQ1LjQwNTUyIDE5LjUxMDExNjUsNDYgTDE5LjUxMDExNjUsNDEuNzgyMTk0NyBDMTcuMjgxNzMxOSw0MS4yOTE2NjU4IDE1LjIwMDA5MjgsNDAuNDA0ODE2OSAxMy4zNDMwODg5LDM5LjE5OTU4NjIgTDExLjYzMzczMzksNDAuOTEwMDA5NCBMMTAuMzY0MDEzMyw0Mi4xODA1MjM1IEwxMC4zNjQwMTMzLDQyLjE4MDQyMyBaIE00Mi4xNjg4NTY3LDEwLjM1NTcwMzggQzQ0LjAzNzMwMzEsMTMuMDA0ODAwOCA0NS4zNTc0MTEsMTYuMDY3NDkyOSA0NS45NjI2NjEyLDE5LjM3Njg1NTYgTDQxLjk0NjkzMTYsMTkuMzc2ODU1NiBDNDEuNDU4NTE1OCwxNy4xMzI4MTY0IDQwLjU2OTIwOTUsMTUuMDM2OTIwMiAzOS4zNTgwMDY1LDEzLjE2ODQxMDkgTDQxLjAzMzUzNTgsMTEuNDkxODM0NiBMNDIuMTY4OTU3LDEwLjM1NTcwMzggTDQyLjE2ODg1NjcsMTAuMzU1NzAzOCBaIE0zNi40NjUxNTE2LDQuNjk5OTU3ODIgQzMzLjgzNTU3NTQsMi44Nzg2NTMzNiAzMC44MDcxMTYyLDEuNTk0ODgxNzkgMjcuNTQwMDcwMSwxLjAwODgzODM2IEwyNy41NDAwNzAxLDQuOTgxMTc4MzEgQzI5Ljc0ODQ4MDUsNS40NTkxNTI3MiAzMS44MTM3NTg3LDYuMzI2MDE0OSAzMy42NjA0MjQyLDcuNTA2NDM3OTQgTDM1LjM1NTUyNjIsNS44MTAyNzY2IEwzNi40NjUxNTE2LDQuNjk5OTU3ODIgTDM2LjQ2NTE1MTYsNC42OTk5NTc4MiBaXFxcIiBmaWxsPVxcXCIjQ0NDQ0NDXFxcIj48L3BhdGg+PC9zdmc+XCI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHN2ZyBjbGFzcz1cXFwic3Bpbm5lci14c29sbGFcXFwiIHdpZHRoPVxcXCI1NlxcXCIgaGVpZ2h0PVxcXCI1NVxcXCI+PHBhdGggY2xhc3M9XFxcInNwaW5uZXIteHNvbGxhLXhcXFwiIGQ9XFxcIk0yMS4wMyA1LjA0MmwtMi4xMTItMi4xNTYtMy42NTcgMy42OTUtMy42NTctMy42OTUtMi4xMTIgMi4xNTYgMy42NTkgMy42NzMtMy42NTkgMy42OTYgMi4xMTIgMi4xNTcgMy42NTctMy42OTcgMy42NTcgMy42OTcgMi4xMTItMi4xNTctMy42NDgtMy42OTYgMy42NDgtMy42NzN6XFxcIiBmaWxsPVxcXCIjRjI1NDJEXFxcIj48L3BhdGg+PHBhdGggY2xhc3M9XFxcInNwaW5uZXIteHNvbGxhLXNcXFwiIGQ9XFxcIk00MS4yMzIgNi44OTZsMi45NDEtMi45NzQtMi4xMzQtMi4xMzItMi45MiAyLjk3My0uMDA1LS4wMDgtMi4xMzQgMi4xMzUuMDA1LjAwOC0uMDA1LjAwNSAzLjc5MiAzLjgyLTIuOTE1IDIuOTQ3IDIuMTEyIDIuMTU2IDUuMDYtNS4xMTEtMy43OTgtMy44MTYuMDAxLS4wMDF6XFxcIiBmaWxsPVxcXCIjRkNDQTIwXFxcIj48L3BhdGg+PHBhdGggY2xhc3M9XFxcInNwaW5uZXIteHNvbGxhLW9cXFwiIGQ9XFxcIk00OC4wNjYgMjkuMTU5Yy0xLjUzNiAwLTIuNzYxIDEuMjYzLTIuNzYxIDIuNzkgMCAxLjUyNCAxLjIyNiAyLjc2NSAyLjc2MSAyLjc2NSAxLjUwOSAwIDIuNzM2LTEuMjQyIDIuNzM2LTIuNzY1IDAtMS41MjYtMS4yMjctMi43OS0yLjczNi0yLjc5bTAgOC41OTNjLTMuMTc5IDAtNS43NzEtMi41OTQtNS43NzEtNS44MDQgMC0zLjIxMyAyLjU5Mi01LjgwOCA1Ljc3MS01LjgwOCAzLjE1NSAwIDUuNzQ1IDIuNTk0IDUuNzQ1IDUuODA4IDAgMy4yMS0yLjU4OSA1LjgwNC01Ljc0NSA1LjgwNFxcXCIgZmlsbD1cXFwiIzhDM0VBNFxcXCI+PC9wYXRoPjxwYXRoIGNsYXNzPVxcXCJzcGlubmVyLXhzb2xsYS1sXFxcIiBkPVxcXCJNMjQuMzg5IDQyLjMyM2gyLjk5djEwLjQzN2gtMi45OXYtMTAuNDM3em00LjMzNCAwaDIuOTg5djEwLjQzN2gtMi45ODl2LTEwLjQzN3pcXFwiIGZpbGw9XFxcIiNCNURDMjBcXFwiPjwvcGF0aD48cGF0aCBjbGFzcz1cXFwic3Bpbm5lci14c29sbGEtYVxcXCIgZD1cXFwiTTcuNzk2IDMxLjg5OGwxLjQwNCAyLjQ1N2gtMi44MzVsMS40MzEtMi40NTdoLS4wMDF6bS0uMDAxLTUuNzU3bC02LjM2MyAxMS4xMDJoMTIuNzAzbC02LjM0MS0xMS4xMDJ6XFxcIiBmaWxsPVxcXCIjNjZDQ0RBXFxcIj48L3BhdGg+PC9zdmc+XCI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ3Nhc3NpZnknKSgnLnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlOy13ZWJraXQtYW5pbWF0aW9uOnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1mYWRlaW4gMC4xNXM7YW5pbWF0aW9uOnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1mYWRlaW4gMC4xNXN9LnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1vdmVybGF5e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowO3otaW5kZXg6MX0ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LWNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7dG9wOjA7bGVmdDowO3otaW5kZXg6M30ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LWNvbnRlbnRfX2hpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4Oi0xfS54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtY29udGVudC1pZnJhbWV7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6MDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO2Rpc3BsYXk6bm9uZTt6LWluZGV4OjI7cG9pbnRlci1ldmVudHM6bm9uZX0ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXIgLnNwaW5uZXIteHNvbGxhe3dpZHRoOjU2cHg7aGVpZ2h0OjU1cHg7bWFyZ2luLXRvcDotMjhweDttYXJnaW4tbGVmdDotMjZweH0ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXIgLnNwaW5uZXIteHNvbGxhIC5zcGlubmVyLXhzb2xsYS14LC54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lciAuc3Bpbm5lci14c29sbGEgLnNwaW5uZXIteHNvbGxhLXMsLnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlubmVyIC5zcGlubmVyLXhzb2xsYSAuc3Bpbm5lci14c29sbGEtbywueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXIgLnNwaW5uZXIteHNvbGxhIC5zcGlubmVyLXhzb2xsYS1sLC54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lciAuc3Bpbm5lci14c29sbGEgLnNwaW5uZXIteHNvbGxhLWF7LXdlYmtpdC1hbmltYXRpb246eHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LWJvdW5jZWRlbGF5IDFzIGluZmluaXRlIGVhc2UtaW4tb3V0Oy13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTpib3RoO2FuaW1hdGlvbjp4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtYm91bmNlZGVsYXkgMXMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7YW5pbWF0aW9uLWZpbGwtbW9kZTpib3RofS54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lciAuc3Bpbm5lci14c29sbGEgLnNwaW5uZXIteHNvbGxhLXh7LXdlYmtpdC1hbmltYXRpb24tZGVsYXk6MHM7YW5pbWF0aW9uLWRlbGF5OjBzfS54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lciAuc3Bpbm5lci14c29sbGEgLnNwaW5uZXIteHNvbGxhLXN7LXdlYmtpdC1hbmltYXRpb24tZGVsYXk6LjJzO2FuaW1hdGlvbi1kZWxheTouMnN9LnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlubmVyIC5zcGlubmVyLXhzb2xsYSAuc3Bpbm5lci14c29sbGEtb3std2Via2l0LWFuaW1hdGlvbi1kZWxheTouNHM7YW5pbWF0aW9uLWRlbGF5Oi40c30ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXIgLnNwaW5uZXIteHNvbGxhIC5zcGlubmVyLXhzb2xsYS1sey13ZWJraXQtYW5pbWF0aW9uLWRlbGF5Oi42czthbmltYXRpb24tZGVsYXk6LjZzfS54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lciAuc3Bpbm5lci14c29sbGEgLnNwaW5uZXIteHNvbGxhLWF7LXdlYmtpdC1hbmltYXRpb24tZGVsYXk6LjhzO2FuaW1hdGlvbi1kZWxheTouOHN9LnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlubmVyIC5zcGlubmVyLXJvdW5ke21hcmdpbi10b3A6LTIzcHg7bWFyZ2luLWxlZnQ6LTIzcHg7LXdlYmtpdC1hbmltYXRpb246eHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW4gM3MgaW5maW5pdGUgbGluZWFyO2FuaW1hdGlvbjp4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3BpbiAzcyBpbmZpbml0ZSBsaW5lYXJ9LnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlubmVyIC5zcGlubmVyLWN1c3RvbXstd2Via2l0LWFuaW1hdGlvbjp4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3BpbiBpbmZpbml0ZSBsaW5lYXI7YW5pbWF0aW9uOnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGluIGluZmluaXRlIGxpbmVhcn1ALXdlYmtpdC1rZXlmcmFtZXMgeHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LWJvdW5jZWRlbGF5ezAlLDgwJSwxMDAle29wYWNpdHk6MH00MCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1ib3VuY2VkZWxheXswJSw4MCUsMTAwJXtvcGFjaXR5OjB9NDAle29wYWNpdHk6MX19QC13ZWJraXQta2V5ZnJhbWVzIHhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1mYWRlaW57ZnJvbXtvcGFjaXR5OjB9dG97b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1mYWRlaW57ZnJvbXtvcGFjaXR5OjB9dG97b3BhY2l0eToxfX1ALXdlYmtpdC1rZXlmcmFtZXMgeHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW57ZnJvbXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgeHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW57ZnJvbXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19ICAvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV3b0pJblpsY25OcGIyNGlPaUF6TEFvSkltWnBiR1VpT2lBaWJHbG5hSFJpYjNndWMyTnpjeUlzQ2draWMyOTFjbU5sY3lJNklGc0tDUWtpYkdsbmFIUmliM2d1YzJOemN5SUtDVjBzQ2draWMyOTFjbU5sYzBOdmJuUmxiblFpT2lCYkNna0pJaVJzYVdkb2RHSnZlQzF3Y21WbWFYZzZJQ2Q0Y0dGNWMzUmhkR2x2YmkxM2FXUm5aWFF0YkdsbmFIUmliM2duTzF4eVhHNGtiR2xuYUhSaWIzZ3RZMnhoYzNNNklDY3VKeUFySUNSc2FXZG9kR0p2ZUMxd2NtVm1hWGc3WEhKY2JseHlYRzRqZXlSc2FXZG9kR0p2ZUMxamJHRnpjMzBnZTF4eVhHNGdJSEJ2YzJsMGFXOXVPaUJtYVhobFpEdGNjbHh1SUNCMGIzQTZJREE3WEhKY2JpQWdiR1ZtZERvZ01EdGNjbHh1SUNCaWIzUjBiMjA2SURBN1hISmNiaUFnY21sbmFIUTZJREE3WEhKY2JpQWdkMmxrZEdnNklERXdNQ1U3WEhKY2JpQWdhR1ZwWjJoME9pQXhNREFsTzF4eVhHNGdJQzEzWldKcmFYUXRZVzVwYldGMGFXOXVPaUFqZXlSc2FXZG9kR0p2ZUMxd2NtVm1hWGg5TFdaaFpHVnBiaUF1TVRWek8xeHlYRzRnSUdGdWFXMWhkR2x2YmpvZ0kzc2tiR2xuYUhSaWIzZ3RjSEpsWm1sNGZTMW1ZV1JsYVc0Z0xqRTFjenRjY2x4dWZWeHlYRzVjY2x4dUkzc2tiR2xuYUhSaWIzZ3RZMnhoYzNOOUxXOTJaWEpzWVhrZ2UxeHlYRzRnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2NseHVJQ0IwYjNBNk1EdGNjbHh1SUNCc1pXWjBPaUF3TzF4eVhHNGdJR0p2ZEhSdmJUb2dNRHRjY2x4dUlDQnlhV2RvZERvZ01EdGNjbHh1SUNCNkxXbHVaR1Y0T2lBeE8xeHlYRzU5WEhKY2JseHlYRzRqZXlSc2FXZG9kR0p2ZUMxamJHRnpjMzB0WTI5dWRHVnVkQ0I3WEhKY2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh5WEc0Z0lIUnZjRG9nTUR0Y2NseHVJQ0JzWldaME9pQXdPMXh5WEc0Z0lIb3RhVzVrWlhnNklETTdYSEpjYm4xY2NseHVYSEpjYmlON0pHeHBaMmgwWW05NExXTnNZWE56ZlMxamIyNTBaVzUwWDE5b2FXUmtaVzRnZTF4eVhHNGdJSFpwYzJsaWFXeHBkSGs2SUdocFpHUmxianRjY2x4dUlDQjZMV2x1WkdWNE9pQXRNVHRjY2x4dWZWeHlYRzVjY2x4dUkzc2tiR2xuYUhSaWIzZ3RZMnhoYzNOOUxXTnZiblJsYm5RdGFXWnlZVzFsSUh0Y2NseHVJQ0IzYVdSMGFEb2dNVEF3SlR0Y2NseHVJQ0JvWldsbmFIUTZJREV3TUNVN1hISmNiaUFnWW05eVpHVnlPaUF3TzF4eVhHNGdJR0poWTJ0bmNtOTFibVE2SUhSeVlXNXpjR0Z5Wlc1ME8xeHlYRzU5WEhKY2JseHlYRzRqZXlSc2FXZG9kR0p2ZUMxamJHRnpjMzB0YzNCcGJtNWxjaUI3WEhKY2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh5WEc0Z0lIUnZjRG9nTlRBbE8xeHlYRzRnSUd4bFpuUTZJRFV3SlR0Y2NseHVJQ0JrYVhOd2JHRjVPaUJ1YjI1bE8xeHlYRzRnSUhvdGFXNWtaWGc2SURJN1hISmNiaUFnY0c5cGJuUmxjaTFsZG1WdWRITTZJRzV2Ym1VN1hISmNibHh5WEc0Z0lDNXpjR2x1Ym1WeUxYaHpiMnhzWVNCN1hISmNiaUFnSUNCM2FXUjBhRG9nTlRad2VEdGNjbHh1SUNBZ0lHaGxhV2RvZERvZ05UVndlRHRjY2x4dUlDQWdJRzFoY21kcGJqb2dlMXh5WEc0Z0lDQWdJQ0IwYjNBNklDMHlPSEI0TzF4eVhHNGdJQ0FnSUNCc1pXWjBPaUF0TWpad2VEdGNjbHh1SUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0F1YzNCcGJtNWxjaTE0YzI5c2JHRXRlQ3dnTG5Od2FXNXVaWEl0ZUhOdmJHeGhMWE1zSUM1emNHbHVibVZ5TFhoemIyeHNZUzF2TENBdWMzQnBibTVsY2kxNGMyOXNiR0V0YkN3Z0xuTndhVzV1WlhJdGVITnZiR3hoTFdFZ2UxeHlYRzRnSUNBZ0lDQXRkMlZpYTJsMExXRnVhVzFoZEdsdmJqb2dJM3NrYkdsbmFIUmliM2d0Y0hKbFptbDRmUzFpYjNWdVkyVmtaV3hoZVNBeGN5QnBibVpwYm1sMFpTQmxZWE5sTFdsdUxXOTFkRHRjY2x4dUlDQWdJQ0FnTFhkbFltdHBkQzFoYm1sdFlYUnBiMjR0Wm1sc2JDMXRiMlJsT2lCaWIzUm9PMXh5WEc0Z0lDQWdJQ0JoYm1sdFlYUnBiMjQ2SUNON0pHeHBaMmgwWW05NExYQnlaV1pwZUgwdFltOTFibU5sWkdWc1lYa2dNWE1nYVc1bWFXNXBkR1VnWldGelpTMXBiaTF2ZFhRN1hISmNiaUFnSUNBZ0lHRnVhVzFoZEdsdmJpMW1hV3hzTFcxdlpHVTZJR0p2ZEdnN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdMbk53YVc1dVpYSXRlSE52Ykd4aExYZ2dlMXh5WEc0Z0lDQWdJQ0F0ZDJWaWEybDBMV0Z1YVcxaGRHbHZiaTFrWld4aGVUb2dNSE03WEhKY2JpQWdJQ0FnSUdGdWFXMWhkR2x2Ymkxa1pXeGhlVG9nTUhNN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdMbk53YVc1dVpYSXRlSE52Ykd4aExYTWdlMXh5WEc0Z0lDQWdJQ0F0ZDJWaWEybDBMV0Z1YVcxaGRHbHZiaTFrWld4aGVUb2dMakp6TzF4eVhHNGdJQ0FnSUNCaGJtbHRZWFJwYjI0dFpHVnNZWGs2SUM0eWN6dGNjbHh1SUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0F1YzNCcGJtNWxjaTE0YzI5c2JHRXRieUI3WEhKY2JpQWdJQ0FnSUMxM1pXSnJhWFF0WVc1cGJXRjBhVzl1TFdSbGJHRjVPaUF1TkhNN1hISmNiaUFnSUNBZ0lHRnVhVzFoZEdsdmJpMWtaV3hoZVRvZ0xqUnpPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUM1emNHbHVibVZ5TFhoemIyeHNZUzFzSUh0Y2NseHVJQ0FnSUNBZ0xYZGxZbXRwZEMxaGJtbHRZWFJwYjI0dFpHVnNZWGs2SUM0MmN6dGNjbHh1SUNBZ0lDQWdZVzVwYldGMGFXOXVMV1JsYkdGNU9pQXVObk03WEhKY2JpQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0xuTndhVzV1WlhJdGVITnZiR3hoTFdFZ2UxeHlYRzRnSUNBZ0lDQXRkMlZpYTJsMExXRnVhVzFoZEdsdmJpMWtaV3hoZVRvZ0xqaHpPMXh5WEc0Z0lDQWdJQ0JoYm1sdFlYUnBiMjR0WkdWc1lYazZJQzQ0Y3p0Y2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JseHlYRzRnSUM1emNHbHVibVZ5TFhKdmRXNWtJSHRjY2x4dUlDQWdJRzFoY21kcGJqb2dlMXh5WEc0Z0lDQWdJQ0IwYjNBNklDMHlNM0I0TzF4eVhHNGdJQ0FnSUNCc1pXWjBPaUF0TWpOd2VEdGNjbHh1SUNBZ0lIMWNjbHh1SUNBZ0lDMTNaV0pyYVhRdFlXNXBiV0YwYVc5dU9pQWpleVJzYVdkb2RHSnZlQzF3Y21WbWFYaDlMWE53YVc0Z00zTWdhVzVtYVc1cGRHVWdiR2x1WldGeU8xeHlYRzRnSUNBZ1lXNXBiV0YwYVc5dU9pQWpleVJzYVdkb2RHSnZlQzF3Y21WbWFYaDlMWE53YVc0Z00zTWdhVzVtYVc1cGRHVWdiR2x1WldGeU8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0xuTndhVzV1WlhJdFkzVnpkRzl0SUh0Y2NseHVJQ0FnSUMxM1pXSnJhWFF0WVc1cGJXRjBhVzl1T2lBamV5UnNhV2RvZEdKdmVDMXdjbVZtYVhoOUxYTndhVzRnYVc1bWFXNXBkR1VnYkdsdVpXRnlPMXh5WEc0Z0lDQWdZVzVwYldGMGFXOXVPaUFqZXlSc2FXZG9kR0p2ZUMxd2NtVm1hWGg5TFhOd2FXNGdhVzVtYVc1cGRHVWdiR2x1WldGeU8xeHlYRzRnSUgxY2NseHVmVnh5WEc1Y2NseHVRQzEzWldKcmFYUXRhMlY1Wm5KaGJXVnpJQ043Skd4cFoyaDBZbTk0TFhCeVpXWnBlSDB0WW05MWJtTmxaR1ZzWVhrZ2UxeHlYRzRnSURBbExDQTRNQ1VzSURFd01DVWdleUJ2Y0dGamFYUjVPaUF3T3lCOVhISmNiaUFnTkRBbElIc2diM0JoWTJsMGVUb2dNU0I5WEhKY2JuMWNjbHh1WEhKY2JrQnJaWGxtY21GdFpYTWdJM3NrYkdsbmFIUmliM2d0Y0hKbFptbDRmUzFpYjNWdVkyVmtaV3hoZVNCN1hISmNiaUFnTUNVc0lEZ3dKU3dnTVRBd0pTQjdJRzl3WVdOcGRIazZJREE3SUgxY2NseHVJQ0EwTUNVZ2V5QnZjR0ZqYVhSNU9pQXhPeUI5WEhKY2JuMWNjbHh1WEhKY2JrQXRkMlZpYTJsMExXdGxlV1p5WVcxbGN5QWpleVJzYVdkb2RHSnZlQzF3Y21WbWFYaDlMV1poWkdWcGJpQjdYSEpjYmlBZ1puSnZiU0I3SUc5d1lXTnBkSGs2SURBN0lIMWNjbHh1SUNCMGJ5QjdJRzl3WVdOcGRIazZJREU3SUgxY2NseHVmVnh5WEc1Y2NseHVRR3RsZVdaeVlXMWxjeUFqZXlSc2FXZG9kR0p2ZUMxd2NtVm1hWGg5TFdaaFpHVnBiaUI3WEhKY2JpQWdabkp2YlNCN0lHOXdZV05wZEhrNklEQTdJSDFjY2x4dUlDQjBieUI3SUc5d1lXTnBkSGs2SURFN0lIMWNjbHh1ZlZ4eVhHNWNjbHh1UUMxM1pXSnJhWFF0YTJWNVpuSmhiV1Z6SUNON0pHeHBaMmgwWW05NExYQnlaV1pwZUgwdGMzQnBiaUI3WEhKY2JpQWdabkp2YlNCN0lDMTNaV0pyYVhRdGRISmhibk5tYjNKdE9pQnliM1JoZEdVb01HUmxaeWs3SUgxY2NseHVJQ0IwYnlCN0lDMTNaV0pyYVhRdGRISmhibk5tYjNKdE9pQnliM1JoZEdVb016WXdaR1ZuS1RzZ2ZWeHlYRzU5WEhKY2JseHlYRzVBYTJWNVpuSmhiV1Z6SUNON0pHeHBaMmgwWW05NExYQnlaV1pwZUgwdGMzQnBiaUI3WEhKY2JpQWdabkp2YlNCN0lIUnlZVzV6Wm05eWJUb2djbTkwWVhSbEtEQmtaV2NwT3lCOVhISmNiaUFnZEc4Z2V5QjBjbUZ1YzJadmNtMDZJSEp2ZEdGMFpTZ3pOakJrWldjcE95QjlYSEpjYm4xY2NseHVJZ29KWFN3S0NTSnRZWEJ3YVc1bmN5STZJQ0pCUVVkQkxFRkJRVUVzTkVKQlFUUkNMRUZCUVRWQ0xFTkJRMFVzVVVGQlVTeERRVUZGTEV0QlFVMHNRMEZEYUVJc1IwRkJSeXhEUVVGRkxFTkJRVVVzUTBGRFVDeEpRVUZKTEVOQlFVVXNRMEZCUlN4RFFVTlNMRTFCUVUwc1EwRkJSU3hEUVVGRkxFTkJRMVlzUzBGQlN5eERRVUZGTEVOQlFVVXNRMEZEVkN4TFFVRkxMRU5CUVVVc1NVRkJTeXhEUVVOYUxFMUJRVTBzUTBGQlJTeEpRVUZMTEVOQlEySXNhVUpCUVdsQ0xFTkJRVVVzYTBOQlFUQkNMRU5CUVZFc1MwRkJTU3hEUVVONlJDeFRRVUZUTEVOQlFVVXNhME5CUVRCQ0xFTkJRVkVzUzBGQlNTeERRVU5zUkN4QlFVVkVMRUZCUVVFc2IwTkJRVzlETEVGQlFYQkRMRU5CUTBVc1VVRkJVU3hEUVVGRkxGRkJRVk1zUTBGRGJrSXNSMEZCUnl4RFFVRkRMRU5CUVVVc1EwRkRUaXhKUVVGSkxFTkJRVVVzUTBGQlJTeERRVU5TTEUxQlFVMHNRMEZCUlN4RFFVRkZMRU5CUTFZc1MwRkJTeXhEUVVGRkxFTkJRVVVzUTBGRFZDeFBRVUZQTEVOQlFVVXNRMEZCUlN4RFFVTmFMRUZCUlVRc1FVRkJRU3h2UTBGQmIwTXNRVUZCY0VNc1EwRkRSU3hSUVVGUkxFTkJRVVVzVVVGQlV5eERRVU51UWl4SFFVRkhMRU5CUVVVc1EwRkJSU3hEUVVOUUxFbEJRVWtzUTBGQlJTeERRVUZGTEVOQlExSXNUMEZCVHl4RFFVRkZMRU5CUVVVc1EwRkRXaXhCUVVWRUxFRkJRVUVzTkVOQlFUUkRMRUZCUVRWRExFTkJRMFVzVlVGQlZTeERRVUZGTEUxQlFVOHNRMEZEYmtJc1QwRkJUeXhEUVVGRkxFVkJRVWNzUTBGRFlpeEJRVVZFTEVGQlFVRXNNa05CUVRKRExFRkJRVE5ETEVOQlEwVXNTMEZCU3l4RFFVRkZMRWxCUVVzc1EwRkRXaXhOUVVGTkxFTkJRVVVzU1VGQlN5eERRVU5pTEUxQlFVMHNRMEZCUlN4RFFVRkZMRU5CUTFZc1ZVRkJWU3hEUVVGRkxGZEJRVmtzUTBGRGVrSXNRVUZGUkN4QlFVRkJMRzlEUVVGdlF5eEJRVUZ3UXl4RFFVTkZMRkZCUVZFc1EwRkJSU3hSUVVGVExFTkJRMjVDTEVkQlFVY3NRMEZCUlN4SFFVRkpMRU5CUTFRc1NVRkJTU3hEUVVGRkxFZEJRVWtzUTBGRFZpeFBRVUZQTEVOQlFVVXNTVUZCU3l4RFFVTmtMRTlCUVU4c1EwRkJSU3hEUVVGRkxFTkJRMWdzWTBGQll5eERRVUZGTEVsQlFVc3NRMEYzUkhSQ0xFRkJPVVJFTEVGQlVVVXNiME5CVW10RExFTkJVV3hETEdWQlFXVXNRVUZCUXl4RFFVTmtMRXRCUVVzc1EwRkJSU3hKUVVGTExFTkJRMW9zVFVGQlRTeERRVUZGTEVsQlFVc3NRMEZEWWl4TlFVRk5MRUZCUVVNc1EwRkJReXhCUVVOT0xFZEJRVWNzUTBGQlJTeExRVUZOTEVOQlJHSXNUVUZCVFN4QlFVRkRMRU5CUVVNc1FVRkZUaXhKUVVGSkxFTkJRVVVzUzBGQlRTeERRV3REWml4QlFTOURTQ3hCUVdkQ1NTeHZRMEZvUW1kRExFTkJVV3hETEdWQlFXVXNRMEZSWWl4cFFrRkJhVUlzUTBGb1FuSkNMRUZCWjBKMVFpeHZRMEZvUW1Fc1EwRlJiRU1zWlVGQlpTeERRVkZOTEdsQ1FVRnBRaXhEUVdoQ2VFTXNRVUZuUWpCRExHOURRV2hDVGl4RFFWRnNReXhsUVVGbExFTkJVWGxDTEdsQ1FVRnBRaXhEUVdoQ00wUXNRVUZuUWpaRUxHOURRV2hDZWtJc1EwRlJiRU1zWlVGQlpTeERRVkUwUXl4cFFrRkJhVUlzUTBGb1FqbEZMRUZCWjBKblJpeHZRMEZvUWpWRExFTkJVV3hETEdWQlFXVXNRMEZSSzBRc2FVSkJRV2xDTEVGQlFVTXNRMEZETlVZc2FVSkJRV2xDTEVOQlFVVXNkVU5CUVN0Q0xFTkJRV0VzUlVGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4WFFVRlhMRU5CUTNSR0xESkNRVUV5UWl4RFFVRkZMRWxCUVVzc1EwRkRiRU1zVTBGQlV5eERRVUZGTEhWRFFVRXJRaXhEUVVGaExFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNWMEZCVnl4RFFVTTVSU3h0UWtGQmJVSXNRMEZCUlN4SlFVRkxMRU5CUXpOQ0xFRkJja0pNTEVGQmRVSkpMRzlEUVhaQ1owTXNRMEZSYkVNc1pVRkJaU3hEUVdWaUxHbENRVUZwUWl4QlFVRkRMRU5CUTJoQ0xIVkNRVUYxUWl4RFFVRkZMRVZCUVVjc1EwRkROVUlzWlVGQlpTeERRVUZGTEVWQlFVY3NRMEZEY2tJc1FVRXhRa3dzUVVFMFFra3NiME5CTlVKblF5eERRVkZzUXl4bFFVRmxMRU5CYjBKaUxHbENRVUZwUWl4QlFVRkRMRU5CUTJoQ0xIVkNRVUYxUWl4RFFVRkZMRWRCUVVrc1EwRkROMElzWlVGQlpTeERRVUZGTEVkQlFVa3NRMEZEZEVJc1FVRXZRa3dzUVVGcFEwa3NiME5CYWtOblF5eERRVkZzUXl4bFFVRmxMRU5CZVVKaUxHbENRVUZwUWl4QlFVRkRMRU5CUTJoQ0xIVkNRVUYxUWl4RFFVRkZMRWRCUVVrc1EwRkROMElzWlVGQlpTeERRVUZGTEVkQlFVa3NRMEZEZEVJc1FVRndRMHdzUVVGelEwa3NiME5CZEVOblF5eERRVkZzUXl4bFFVRmxMRU5CT0VKaUxHbENRVUZwUWl4QlFVRkRMRU5CUTJoQ0xIVkNRVUYxUWl4RFFVRkZMRWRCUVVrc1EwRkROMElzWlVGQlpTeERRVUZGTEVkQlFVa3NRMEZEZEVJc1FVRjZRMHdzUVVFeVEwa3NiME5CTTBOblF5eERRVkZzUXl4bFFVRmxMRU5CYlVOaUxHbENRVUZwUWl4QlFVRkRMRU5CUTJoQ0xIVkNRVUYxUWl4RFFVRkZMRWRCUVVrc1EwRkROMElzWlVGQlpTeERRVUZGTEVkQlFVa3NRMEZEZEVJc1FVRTVRMHdzUVVGcFJFVXNiME5CYWtSclF5eERRV2xFYkVNc1kwRkJZeXhCUVVGRExFTkJRMklzVFVGQlRTeEJRVUZETEVOQlFVTXNRVUZEVGl4SFFVRkhMRU5CUVVVc1MwRkJUU3hEUVVSaUxFMUJRVTBzUVVGQlF5eERRVUZETEVGQlJVNHNTVUZCU1N4RFFVRkZMRXRCUVUwc1EwRkZaQ3hwUWtGQmFVSXNRMEZCUlN4blEwRkJkMElzUTBGQlRTeEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkRia1VzVTBGQlV5eERRVUZGTEdkRFFVRjNRaXhEUVVGTkxFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVTTFSQ3hCUVhoRVNDeEJRVEJFUlN4dlEwRXhSR3RETEVOQk1FUnNReXhsUVVGbExFRkJRVU1zUTBGRFpDeHBRa0ZCYVVJc1EwRkJSU3huUTBGQmQwSXNRMEZCVFN4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVOb1JTeFRRVUZUTEVOQlFVVXNaME5CUVhkQ0xFTkJRVTBzVVVGQlVTeERRVUZETEUxQlFVMHNRMEZEZWtRc1FVRkhTQ3hyUWtGQmEwSXNRMEZCYkVJc2RVTkJRV3RDTEVOQlEyaENMRUZCUVVFc1JVRkJSU3hEUVVGRkxFRkJRVUVzUjBGQlJ5eERRVUZGTEVGQlFVRXNTVUZCU1N4RFFVRkhMRTlCUVU4c1EwRkJSU3hEUVVGRkxFTkJRek5DTEVGQlFVRXNSMEZCUnl4RFFVRkhMRTlCUVU4c1EwRkJSU3hEUVVGSExFVkJSM0JDTEZWQlFWVXNRMEZCVml4MVEwRkJWU3hEUVVOU0xFRkJRVUVzUlVGQlJTeERRVUZGTEVGQlFVRXNSMEZCUnl4RFFVRkZMRUZCUVVFc1NVRkJTU3hEUVVGSExFOUJRVThzUTBGQlJTeERRVUZGTEVOQlF6TkNMRUZCUVVFc1IwRkJSeXhEUVVGSExFOUJRVThzUTBGQlJTeERRVUZGTEVWQlIyNUNMR3RDUVVGclFpeERRVUZzUWl4clEwRkJhMElzUTBGRGFFSXNRVUZCUVN4SlFVRkpMRU5CUVVjc1QwRkJUeXhEUVVGRkxFTkJRVVVzUTBGRGJFSXNRVUZCUVN4RlFVRkZMRU5CUVVjc1QwRkJUeXhEUVVGRkxFTkJRVVVzUlVGSGJFSXNWVUZCVlN4RFFVRldMR3REUVVGVkxFTkJRMUlzUVVGQlFTeEpRVUZKTEVOQlFVY3NUMEZCVHl4RFFVRkZMRU5CUVVVc1EwRkRiRUlzUVVGQlFTeEZRVUZGTEVOQlFVY3NUMEZCVHl4RFFVRkZMRU5CUVVVc1JVRkhiRUlzYTBKQlFXdENMRU5CUVd4Q0xHZERRVUZyUWl4RFFVTm9RaXhCUVVGQkxFbEJRVWtzUTBGQlJ5eHBRa0ZCYVVJc1EwRkJSU3haUVVGTkxFTkJRMmhETEVGQlFVRXNSVUZCUlN4RFFVRkhMR2xDUVVGcFFpeERRVUZGTEdOQlFVMHNSVUZIYUVNc1ZVRkJWU3hEUVVGV0xHZERRVUZWTEVOQlExSXNRVUZCUVN4SlFVRkpMRU5CUVVjc1UwRkJVeXhEUVVGRkxGbEJRVTBzUTBGRGVFSXNRVUZCUVN4RlFVRkZMRU5CUVVjc1UwRkJVeXhEUVVGRkxHTkJRVTBpTEFvSkltNWhiV1Z6SWpvZ1cxMEtmUT09ICovJyk7OyIsIm1vZHVsZS5leHBvcnRzID0gJzEuMi4xMic7XHJcbiIsInZhciBIZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJylcclxudmFyIEFwcCA9IHJlcXVpcmUoJy4vYXBwJyk7XHJcbnZhciBwb2x5ZmlsbHMgPSByZXF1aXJlKCcuL3BvbHlmaWxscycpO1xyXG5cclxucG9seWZpbGxzLmFwcGx5UG9seWZpbGxzKCk7XHJcblxyXG52YXIgaW5zdGFuY2U7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBcHAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihIZWxwZXJzLnppcE9iamVjdChbJ2luaXQnLCAnb3BlbicsICdjbG9zZScsICdvbicsICdvZmYnLCAnc2VuZE1lc3NhZ2UnLCAnb25NZXNzYWdlJ10ubWFwKGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XHJcbiAgICAgICAgdmFyIGFwcCA9IGdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgcmV0dXJuIFttZXRob2ROYW1lLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcHBbbWV0aG9kTmFtZV0uYXBwbHkoYXBwLCBhcmd1bWVudHMpO1xyXG4gICAgICAgIH1dO1xyXG4gICAgfSkpLCB7XHJcbiAgICAgICAgZXZlbnRUeXBlczogQXBwLmV2ZW50VHlwZXMsXHJcbiAgICB9KTtcclxufSkoKTtcclxuIl19
+//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYm93c2VyL3NyYy9ib3dzZXIuanMiLCJub2RlX21vZHVsZXMvY3NzaWZ5L2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc2Fzc2lmeS9saWIvc2Fzc2lmeS1icm93c2VyLmpzIiwic3JjL2FwcC5qcyIsInNyYy9jaGlsZHdpbmRvdy5qcyIsInNyYy9kZXZpY2UuanMiLCJzcmMvZXhjZXB0aW9uLmpzIiwic3JjL2hlbHBlcnMuanMiLCJzcmMvbGlnaHRib3guanMiLCJzcmMvcG9seWZpbGxzLmpzIiwic3JjL3Bvc3RtZXNzYWdlLmpzIiwic3JjL3NwaW5uZXJzL3JvdW5kLnN2ZyIsInNyYy9zcGlubmVycy94c29sbGEuc3ZnIiwic3JjL3N0eWxlcy9saWdodGJveC5zY3NzIiwic3JjL3ZlcnNpb24uanMiLCJzcmMvbWFpbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBOzs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN2VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDalpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDckVBO0FBQ0E7O0FDREE7QUFDQTs7QUNEQTs7QUNBQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLyohXG4gKiBCb3dzZXIgLSBhIGJyb3dzZXIgZGV0ZWN0b3JcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWQvYm93c2VyXG4gKiBNSVQgTGljZW5zZSB8IChjKSBEdXN0aW4gRGlheiAyMDE1XG4gKi9cblxuIWZ1bmN0aW9uIChyb290LCBuYW1lLCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKVxuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKG5hbWUsIGRlZmluaXRpb24pXG4gIGVsc2Ugcm9vdFtuYW1lXSA9IGRlZmluaXRpb24oKVxufSh0aGlzLCAnYm93c2VyJywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICAqIFNlZSB1c2VyYWdlbnRzLmpzIGZvciBleGFtcGxlcyBvZiBuYXZpZ2F0b3IudXNlckFnZW50XG4gICAgKi9cblxuICB2YXIgdCA9IHRydWVcblxuICBmdW5jdGlvbiBkZXRlY3QodWEpIHtcblxuICAgIGZ1bmN0aW9uIGdldEZpcnN0TWF0Y2gocmVnZXgpIHtcbiAgICAgIHZhciBtYXRjaCA9IHVhLm1hdGNoKHJlZ2V4KTtcbiAgICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaFsxXSkgfHwgJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2Vjb25kTWF0Y2gocmVnZXgpIHtcbiAgICAgIHZhciBtYXRjaCA9IHVhLm1hdGNoKHJlZ2V4KTtcbiAgICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaFsyXSkgfHwgJyc7XG4gICAgfVxuXG4gICAgdmFyIGlvc2RldmljZSA9IGdldEZpcnN0TWF0Y2goLyhpcG9kfGlwaG9uZXxpcGFkKS9pKS50b0xvd2VyQ2FzZSgpXG4gICAgICAsIGxpa2VBbmRyb2lkID0gL2xpa2UgYW5kcm9pZC9pLnRlc3QodWEpXG4gICAgICAsIGFuZHJvaWQgPSAhbGlrZUFuZHJvaWQgJiYgL2FuZHJvaWQvaS50ZXN0KHVhKVxuICAgICAgLCBuZXh1c01vYmlsZSA9IC9uZXh1c1xccypbMC02XVxccyovaS50ZXN0KHVhKVxuICAgICAgLCBuZXh1c1RhYmxldCA9ICFuZXh1c01vYmlsZSAmJiAvbmV4dXNcXHMqWzAtOV0rL2kudGVzdCh1YSlcbiAgICAgICwgY2hyb21lb3MgPSAvQ3JPUy8udGVzdCh1YSlcbiAgICAgICwgc2lsayA9IC9zaWxrL2kudGVzdCh1YSlcbiAgICAgICwgc2FpbGZpc2ggPSAvc2FpbGZpc2gvaS50ZXN0KHVhKVxuICAgICAgLCB0aXplbiA9IC90aXplbi9pLnRlc3QodWEpXG4gICAgICAsIHdlYm9zID0gLyh3ZWJ8aHB3KShvfDApcy9pLnRlc3QodWEpXG4gICAgICAsIHdpbmRvd3NwaG9uZSA9IC93aW5kb3dzIHBob25lL2kudGVzdCh1YSlcbiAgICAgICwgc2Ftc3VuZ0Jyb3dzZXIgPSAvU2Ftc3VuZ0Jyb3dzZXIvaS50ZXN0KHVhKVxuICAgICAgLCB3aW5kb3dzID0gIXdpbmRvd3NwaG9uZSAmJiAvd2luZG93cy9pLnRlc3QodWEpXG4gICAgICAsIG1hYyA9ICFpb3NkZXZpY2UgJiYgIXNpbGsgJiYgL21hY2ludG9zaC9pLnRlc3QodWEpXG4gICAgICAsIGxpbnV4ID0gIWFuZHJvaWQgJiYgIXNhaWxmaXNoICYmICF0aXplbiAmJiAhd2Vib3MgJiYgL2xpbnV4L2kudGVzdCh1YSlcbiAgICAgICwgZWRnZVZlcnNpb24gPSBnZXRTZWNvbmRNYXRjaCgvZWRnKFtlYV18aW9zKVxcLyhcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgICwgdmVyc2lvbklkZW50aWZpZXIgPSBnZXRGaXJzdE1hdGNoKC92ZXJzaW9uXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgLCB0YWJsZXQgPSAvdGFibGV0L2kudGVzdCh1YSkgJiYgIS90YWJsZXQgcGMvaS50ZXN0KHVhKVxuICAgICAgLCBtb2JpbGUgPSAhdGFibGV0ICYmIC9bXi1dbW9iaS9pLnRlc3QodWEpXG4gICAgICAsIHhib3ggPSAveGJveC9pLnRlc3QodWEpXG4gICAgICAsIHJlc3VsdFxuXG4gICAgaWYgKC9vcGVyYS9pLnRlc3QodWEpKSB7XG4gICAgICAvLyAgYW4gb2xkIE9wZXJhXG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdPcGVyYSdcbiAgICAgICwgb3BlcmE6IHRcbiAgICAgICwgdmVyc2lvbjogdmVyc2lvbklkZW50aWZpZXIgfHwgZ2V0Rmlyc3RNYXRjaCgvKD86b3BlcmF8b3ByfG9waW9zKVtcXHNcXC9dKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoL29wclxcL3xvcGlvcy9pLnRlc3QodWEpKSB7XG4gICAgICAvLyBhIG5ldyBPcGVyYVxuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnT3BlcmEnXG4gICAgICAgICwgb3BlcmE6IHRcbiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzpvcHJ8b3Bpb3MpW1xcc1xcL10oXFxkKyhcXC5cXGQrKT8pL2kpIHx8IHZlcnNpb25JZGVudGlmaWVyXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9TYW1zdW5nQnJvd3Nlci9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdTYW1zdW5nIEludGVybmV0IGZvciBBbmRyb2lkJ1xuICAgICAgICAsIHNhbXN1bmdCcm93c2VyOiB0XG4gICAgICAgICwgdmVyc2lvbjogdmVyc2lvbklkZW50aWZpZXIgfHwgZ2V0Rmlyc3RNYXRjaCgvKD86U2Ftc3VuZ0Jyb3dzZXIpW1xcc1xcL10oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9XaGFsZS9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdOQVZFUiBXaGFsZSBicm93c2VyJ1xuICAgICAgICAsIHdoYWxlOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86d2hhbGUpW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL01aQnJvd3Nlci9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdNWiBCcm93c2VyJ1xuICAgICAgICAsIG16YnJvd3NlcjogdFxuICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/Ok1aQnJvd3NlcilbXFxzXFwvXShcXGQrKD86XFwuXFxkKykrKS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvY29hc3QvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnT3BlcmEgQ29hc3QnXG4gICAgICAgICwgY29hc3Q6IHRcbiAgICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC8oPzpjb2FzdClbXFxzXFwvXShcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL2ZvY3VzL2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0ZvY3VzJ1xuICAgICAgICAsIGZvY3VzOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86Zm9jdXMpW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL3lhYnJvd3Nlci9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdZYW5kZXggQnJvd3NlcidcbiAgICAgICwgeWFuZGV4YnJvd3NlcjogdFxuICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC8oPzp5YWJyb3dzZXIpW1xcc1xcL10oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC91Y2Jyb3dzZXIvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgIG5hbWU6ICdVQyBCcm93c2VyJ1xuICAgICAgICAsIHVjYnJvd3NlcjogdFxuICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OnVjYnJvd3NlcilbXFxzXFwvXShcXGQrKD86XFwuXFxkKykrKS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvbXhpb3MvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnTWF4dGhvbidcbiAgICAgICAgLCBtYXh0aG9uOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86bXhpb3MpW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL2VwaXBoYW55L2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0VwaXBoYW55J1xuICAgICAgICAsIGVwaXBoYW55OiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86ZXBpcGhhbnkpW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL3B1ZmZpbi9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdQdWZmaW4nXG4gICAgICAgICwgcHVmZmluOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86cHVmZmluKVtcXHNcXC9dKFxcZCsoPzpcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9zbGVpcG5pci9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdTbGVpcG5pcidcbiAgICAgICAgLCBzbGVpcG5pcjogdFxuICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OnNsZWlwbmlyKVtcXHNcXC9dKFxcZCsoPzpcXC5cXGQrKSspL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9rLW1lbGVvbi9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdLLU1lbGVvbidcbiAgICAgICAgLCBrTWVsZW9uOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86ay1tZWxlb24pW1xcc1xcL10oXFxkKyg/OlxcLlxcZCspKykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAod2luZG93c3Bob25lKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdXaW5kb3dzIFBob25lJ1xuICAgICAgLCBvc25hbWU6ICdXaW5kb3dzIFBob25lJ1xuICAgICAgLCB3aW5kb3dzcGhvbmU6IHRcbiAgICAgIH1cbiAgICAgIGlmIChlZGdlVmVyc2lvbikge1xuICAgICAgICByZXN1bHQubXNlZGdlID0gdFxuICAgICAgICByZXN1bHQudmVyc2lvbiA9IGVkZ2VWZXJzaW9uXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0Lm1zaWUgPSB0XG4gICAgICAgIHJlc3VsdC52ZXJzaW9uID0gZ2V0Rmlyc3RNYXRjaCgvaWVtb2JpbGVcXC8oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9tc2llfHRyaWRlbnQvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSW50ZXJuZXQgRXhwbG9yZXInXG4gICAgICAsIG1zaWU6IHRcbiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86bXNpZSB8cnY6KShcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNocm9tZW9zKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdDaHJvbWUnXG4gICAgICAsIG9zbmFtZTogJ0Nocm9tZSBPUydcbiAgICAgICwgY2hyb21lb3M6IHRcbiAgICAgICwgY2hyb21lQm9vazogdFxuICAgICAgLCBjaHJvbWU6IHRcbiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86Y2hyb21lfGNyaW9zfGNybW8pXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoL2VkZyhbZWFdfGlvcykvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnTWljcm9zb2Z0IEVkZ2UnXG4gICAgICAsIG1zZWRnZTogdFxuICAgICAgLCB2ZXJzaW9uOiBlZGdlVmVyc2lvblxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvdml2YWxkaS9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdWaXZhbGRpJ1xuICAgICAgICAsIHZpdmFsZGk6IHRcbiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC92aXZhbGRpXFwvKFxcZCsoXFwuXFxkKyk/KS9pKSB8fCB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChzYWlsZmlzaCkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnU2FpbGZpc2gnXG4gICAgICAsIG9zbmFtZTogJ1NhaWxmaXNoIE9TJ1xuICAgICAgLCBzYWlsZmlzaDogdFxuICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC9zYWlsZmlzaFxccz9icm93c2VyXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvc2VhbW9ua2V5XFwvL2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ1NlYU1vbmtleSdcbiAgICAgICwgc2VhbW9ua2V5OiB0XG4gICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goL3NlYW1vbmtleVxcLyhcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoL2ZpcmVmb3h8aWNld2Vhc2VsfGZ4aW9zL2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0ZpcmVmb3gnXG4gICAgICAsIGZpcmVmb3g6IHRcbiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvKD86ZmlyZWZveHxpY2V3ZWFzZWx8Znhpb3MpWyBcXC9dKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgICAgaWYgKC9cXCgobW9iaWxlfHRhYmxldCk7W15cXCldKnJ2OltcXGRcXC5dK1xcKS9pLnRlc3QodWEpKSB7XG4gICAgICAgIHJlc3VsdC5maXJlZm94b3MgPSB0XG4gICAgICAgIHJlc3VsdC5vc25hbWUgPSAnRmlyZWZveCBPUydcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoc2lsaykge1xuICAgICAgcmVzdWx0ID0gIHtcbiAgICAgICAgbmFtZTogJ0FtYXpvbiBTaWxrJ1xuICAgICAgLCBzaWxrOiB0XG4gICAgICAsIHZlcnNpb24gOiBnZXRGaXJzdE1hdGNoKC9zaWxrXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvcGhhbnRvbS9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdQaGFudG9tSlMnXG4gICAgICAsIHBoYW50b206IHRcbiAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvcGhhbnRvbWpzXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvc2xpbWVyanMvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnU2xpbWVySlMnXG4gICAgICAgICwgc2xpbWVyOiB0XG4gICAgICAgICwgdmVyc2lvbjogZ2V0Rmlyc3RNYXRjaCgvc2xpbWVyanNcXC8oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9ibGFja2JlcnJ5fFxcYmJiXFxkKy9pLnRlc3QodWEpIHx8IC9yaW1cXHN0YWJsZXQvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQmxhY2tCZXJyeSdcbiAgICAgICwgb3NuYW1lOiAnQmxhY2tCZXJyeSBPUydcbiAgICAgICwgYmxhY2tiZXJyeTogdFxuICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC9ibGFja2JlcnJ5W1xcZF0rXFwvKFxcZCsoXFwuXFxkKyk/KS9pKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh3ZWJvcykge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnV2ViT1MnXG4gICAgICAsIG9zbmFtZTogJ1dlYk9TJ1xuICAgICAgLCB3ZWJvczogdFxuICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllciB8fCBnZXRGaXJzdE1hdGNoKC93KD86ZWIpP29zYnJvd3NlclxcLyhcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH07XG4gICAgICAvdG91Y2hwYWRcXC8vaS50ZXN0KHVhKSAmJiAocmVzdWx0LnRvdWNocGFkID0gdClcbiAgICB9XG4gICAgZWxzZSBpZiAoL2JhZGEvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQmFkYSdcbiAgICAgICwgb3NuYW1lOiAnQmFkYSdcbiAgICAgICwgYmFkYTogdFxuICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC9kb2xmaW5cXC8oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh0aXplbikge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnVGl6ZW4nXG4gICAgICAsIG9zbmFtZTogJ1RpemVuJ1xuICAgICAgLCB0aXplbjogdFxuICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzp0aXplblxccz8pP2Jyb3dzZXJcXC8oXFxkKyhcXC5cXGQrKT8pL2kpIHx8IHZlcnNpb25JZGVudGlmaWVyXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICgvcXVwemlsbGEvaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnUXVwWmlsbGEnXG4gICAgICAgICwgcXVwemlsbGE6IHRcbiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzpxdXB6aWxsYSlbXFxzXFwvXShcXGQrKD86XFwuXFxkKykrKS9pKSB8fCB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvY2hyb21pdW0vaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQ2hyb21pdW0nXG4gICAgICAgICwgY2hyb21pdW06IHRcbiAgICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC8oPzpjaHJvbWl1bSlbXFxzXFwvXShcXGQrKD86XFwuXFxkKyk/KS9pKSB8fCB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvY2hyb21lfGNyaW9zfGNybW8vaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQ2hyb21lJ1xuICAgICAgICAsIGNocm9tZTogdFxuICAgICAgICAsIHZlcnNpb246IGdldEZpcnN0TWF0Y2goLyg/OmNocm9tZXxjcmlvc3xjcm1vKVxcLyhcXGQrKFxcLlxcZCspPykvaSlcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYW5kcm9pZCkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnQW5kcm9pZCdcbiAgICAgICAgLCB2ZXJzaW9uOiB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgvc2FmYXJpfGFwcGxld2Via2l0L2kudGVzdCh1YSkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ1NhZmFyaSdcbiAgICAgICwgc2FmYXJpOiB0XG4gICAgICB9XG4gICAgICBpZiAodmVyc2lvbklkZW50aWZpZXIpIHtcbiAgICAgICAgcmVzdWx0LnZlcnNpb24gPSB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpb3NkZXZpY2UpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgbmFtZSA6IGlvc2RldmljZSA9PSAnaXBob25lJyA/ICdpUGhvbmUnIDogaW9zZGV2aWNlID09ICdpcGFkJyA/ICdpUGFkJyA6ICdpUG9kJ1xuICAgICAgfVxuICAgICAgLy8gV1RGOiB2ZXJzaW9uIGlzIG5vdCBwYXJ0IG9mIHVzZXIgYWdlbnQgaW4gd2ViIGFwcHNcbiAgICAgIGlmICh2ZXJzaW9uSWRlbnRpZmllcikge1xuICAgICAgICByZXN1bHQudmVyc2lvbiA9IHZlcnNpb25JZGVudGlmaWVyXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYoL2dvb2dsZWJvdC9pLnRlc3QodWEpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdHb29nbGVib3QnXG4gICAgICAsIGdvb2dsZWJvdDogdFxuICAgICAgLCB2ZXJzaW9uOiBnZXRGaXJzdE1hdGNoKC9nb29nbGVib3RcXC8oXFxkKyhcXC5cXGQrKSkvaSkgfHwgdmVyc2lvbklkZW50aWZpZXJcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6IGdldEZpcnN0TWF0Y2goL14oLiopXFwvKC4qKSAvKSxcbiAgICAgICAgdmVyc2lvbjogZ2V0U2Vjb25kTWF0Y2goL14oLiopXFwvKC4qKSAvKVxuICAgICB9O1xuICAgfVxuXG4gICAgLy8gc2V0IHdlYmtpdCBvciBnZWNrbyBmbGFnIGZvciBicm93c2VycyBiYXNlZCBvbiB0aGVzZSBlbmdpbmVzXG4gICAgaWYgKCFyZXN1bHQubXNlZGdlICYmIC8oYXBwbGUpP3dlYmtpdC9pLnRlc3QodWEpKSB7XG4gICAgICBpZiAoLyhhcHBsZSk/d2Via2l0XFwvNTM3XFwuMzYvaS50ZXN0KHVhKSkge1xuICAgICAgICByZXN1bHQubmFtZSA9IHJlc3VsdC5uYW1lIHx8IFwiQmxpbmtcIlxuICAgICAgICByZXN1bHQuYmxpbmsgPSB0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQubmFtZSA9IHJlc3VsdC5uYW1lIHx8IFwiV2Via2l0XCJcbiAgICAgICAgcmVzdWx0LndlYmtpdCA9IHRcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdWx0LnZlcnNpb24gJiYgdmVyc2lvbklkZW50aWZpZXIpIHtcbiAgICAgICAgcmVzdWx0LnZlcnNpb24gPSB2ZXJzaW9uSWRlbnRpZmllclxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXJlc3VsdC5vcGVyYSAmJiAvZ2Vja29cXC8vaS50ZXN0KHVhKSkge1xuICAgICAgcmVzdWx0Lm5hbWUgPSByZXN1bHQubmFtZSB8fCBcIkdlY2tvXCJcbiAgICAgIHJlc3VsdC5nZWNrbyA9IHRcbiAgICAgIHJlc3VsdC52ZXJzaW9uID0gcmVzdWx0LnZlcnNpb24gfHwgZ2V0Rmlyc3RNYXRjaCgvZ2Vja29cXC8oXFxkKyhcXC5cXGQrKT8pL2kpXG4gICAgfVxuXG4gICAgLy8gc2V0IE9TIGZsYWdzIGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIG11bHRpcGxlIGJyb3dzZXJzXG4gICAgaWYgKCFyZXN1bHQud2luZG93c3Bob25lICYmIChhbmRyb2lkIHx8IHJlc3VsdC5zaWxrKSkge1xuICAgICAgcmVzdWx0LmFuZHJvaWQgPSB0XG4gICAgICByZXN1bHQub3NuYW1lID0gJ0FuZHJvaWQnXG4gICAgfSBlbHNlIGlmICghcmVzdWx0LndpbmRvd3NwaG9uZSAmJiBpb3NkZXZpY2UpIHtcbiAgICAgIHJlc3VsdFtpb3NkZXZpY2VdID0gdFxuICAgICAgcmVzdWx0LmlvcyA9IHRcbiAgICAgIHJlc3VsdC5vc25hbWUgPSAnaU9TJ1xuICAgIH0gZWxzZSBpZiAobWFjKSB7XG4gICAgICByZXN1bHQubWFjID0gdFxuICAgICAgcmVzdWx0Lm9zbmFtZSA9ICdtYWNPUydcbiAgICB9IGVsc2UgaWYgKHhib3gpIHtcbiAgICAgIHJlc3VsdC54Ym94ID0gdFxuICAgICAgcmVzdWx0Lm9zbmFtZSA9ICdYYm94J1xuICAgIH0gZWxzZSBpZiAod2luZG93cykge1xuICAgICAgcmVzdWx0LndpbmRvd3MgPSB0XG4gICAgICByZXN1bHQub3NuYW1lID0gJ1dpbmRvd3MnXG4gICAgfSBlbHNlIGlmIChsaW51eCkge1xuICAgICAgcmVzdWx0LmxpbnV4ID0gdFxuICAgICAgcmVzdWx0Lm9zbmFtZSA9ICdMaW51eCdcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXaW5kb3dzVmVyc2lvbiAocykge1xuICAgICAgc3dpdGNoIChzKSB7XG4gICAgICAgIGNhc2UgJ05UJzogcmV0dXJuICdOVCdcbiAgICAgICAgY2FzZSAnWFAnOiByZXR1cm4gJ1hQJ1xuICAgICAgICBjYXNlICdOVCA1LjAnOiByZXR1cm4gJzIwMDAnXG4gICAgICAgIGNhc2UgJ05UIDUuMSc6IHJldHVybiAnWFAnXG4gICAgICAgIGNhc2UgJ05UIDUuMic6IHJldHVybiAnMjAwMydcbiAgICAgICAgY2FzZSAnTlQgNi4wJzogcmV0dXJuICdWaXN0YSdcbiAgICAgICAgY2FzZSAnTlQgNi4xJzogcmV0dXJuICc3J1xuICAgICAgICBjYXNlICdOVCA2LjInOiByZXR1cm4gJzgnXG4gICAgICAgIGNhc2UgJ05UIDYuMyc6IHJldHVybiAnOC4xJ1xuICAgICAgICBjYXNlICdOVCAxMC4wJzogcmV0dXJuICcxMCdcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9TIHZlcnNpb24gZXh0cmFjdGlvblxuICAgIHZhciBvc1ZlcnNpb24gPSAnJztcbiAgICBpZiAocmVzdWx0LndpbmRvd3MpIHtcbiAgICAgIG9zVmVyc2lvbiA9IGdldFdpbmRvd3NWZXJzaW9uKGdldEZpcnN0TWF0Y2goL1dpbmRvd3MgKChOVHxYUCkoIFxcZFxcZD8uXFxkKT8pL2kpKVxuICAgIH0gZWxzZSBpZiAocmVzdWx0LndpbmRvd3NwaG9uZSkge1xuICAgICAgb3NWZXJzaW9uID0gZ2V0Rmlyc3RNYXRjaCgvd2luZG93cyBwaG9uZSAoPzpvcyk/XFxzPyhcXGQrKFxcLlxcZCspKikvaSk7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQubWFjKSB7XG4gICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC9NYWMgT1MgWCAoXFxkKyhbX1xcLlxcc11cXGQrKSopL2kpO1xuICAgICAgb3NWZXJzaW9uID0gb3NWZXJzaW9uLnJlcGxhY2UoL1tfXFxzXS9nLCAnLicpO1xuICAgIH0gZWxzZSBpZiAoaW9zZGV2aWNlKSB7XG4gICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC9vcyAoXFxkKyhbX1xcc11cXGQrKSopIGxpa2UgbWFjIG9zIHgvaSk7XG4gICAgICBvc1ZlcnNpb24gPSBvc1ZlcnNpb24ucmVwbGFjZSgvW19cXHNdL2csICcuJyk7XG4gICAgfSBlbHNlIGlmIChhbmRyb2lkKSB7XG4gICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC9hbmRyb2lkWyBcXC8tXShcXGQrKFxcLlxcZCspKikvaSk7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQud2Vib3MpIHtcbiAgICAgIG9zVmVyc2lvbiA9IGdldEZpcnN0TWF0Y2goLyg/OndlYnxocHcpb3NcXC8oXFxkKyhcXC5cXGQrKSopL2kpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0LmJsYWNrYmVycnkpIHtcbiAgICAgIG9zVmVyc2lvbiA9IGdldEZpcnN0TWF0Y2goL3JpbVxcc3RhYmxldFxcc29zXFxzKFxcZCsoXFwuXFxkKykqKS9pKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5iYWRhKSB7XG4gICAgICBvc1ZlcnNpb24gPSBnZXRGaXJzdE1hdGNoKC9iYWRhXFwvKFxcZCsoXFwuXFxkKykqKS9pKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC50aXplbikge1xuICAgICAgb3NWZXJzaW9uID0gZ2V0Rmlyc3RNYXRjaCgvdGl6ZW5bXFwvXFxzXShcXGQrKFxcLlxcZCspKikvaSk7XG4gICAgfVxuICAgIGlmIChvc1ZlcnNpb24pIHtcbiAgICAgIHJlc3VsdC5vc3ZlcnNpb24gPSBvc1ZlcnNpb247XG4gICAgfVxuXG4gICAgLy8gZGV2aWNlIHR5cGUgZXh0cmFjdGlvblxuICAgIHZhciBvc01ham9yVmVyc2lvbiA9ICFyZXN1bHQud2luZG93cyAmJiBvc1ZlcnNpb24uc3BsaXQoJy4nKVswXTtcbiAgICBpZiAoXG4gICAgICAgICB0YWJsZXRcbiAgICAgIHx8IG5leHVzVGFibGV0XG4gICAgICB8fCBpb3NkZXZpY2UgPT0gJ2lwYWQnXG4gICAgICB8fCAoYW5kcm9pZCAmJiAob3NNYWpvclZlcnNpb24gPT0gMyB8fCAob3NNYWpvclZlcnNpb24gPj0gNCAmJiAhbW9iaWxlKSkpXG4gICAgICB8fCByZXN1bHQuc2lsa1xuICAgICkge1xuICAgICAgcmVzdWx0LnRhYmxldCA9IHRcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgbW9iaWxlXG4gICAgICB8fCBpb3NkZXZpY2UgPT0gJ2lwaG9uZSdcbiAgICAgIHx8IGlvc2RldmljZSA9PSAnaXBvZCdcbiAgICAgIHx8IGFuZHJvaWRcbiAgICAgIHx8IG5leHVzTW9iaWxlXG4gICAgICB8fCByZXN1bHQuYmxhY2tiZXJyeVxuICAgICAgfHwgcmVzdWx0LndlYm9zXG4gICAgICB8fCByZXN1bHQuYmFkYVxuICAgICkge1xuICAgICAgcmVzdWx0Lm1vYmlsZSA9IHRcbiAgICB9XG5cbiAgICAvLyBHcmFkZWQgQnJvd3NlciBTdXBwb3J0XG4gICAgLy8gaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2FydGljbGVzL2dic1xuICAgIGlmIChyZXN1bHQubXNlZGdlIHx8XG4gICAgICAgIChyZXN1bHQubXNpZSAmJiByZXN1bHQudmVyc2lvbiA+PSAxMCkgfHxcbiAgICAgICAgKHJlc3VsdC55YW5kZXhicm93c2VyICYmIHJlc3VsdC52ZXJzaW9uID49IDE1KSB8fFxuXHRcdCAgICAocmVzdWx0LnZpdmFsZGkgJiYgcmVzdWx0LnZlcnNpb24gPj0gMS4wKSB8fFxuICAgICAgICAocmVzdWx0LmNocm9tZSAmJiByZXN1bHQudmVyc2lvbiA+PSAyMCkgfHxcbiAgICAgICAgKHJlc3VsdC5zYW1zdW5nQnJvd3NlciAmJiByZXN1bHQudmVyc2lvbiA+PSA0KSB8fFxuICAgICAgICAocmVzdWx0LndoYWxlICYmIGNvbXBhcmVWZXJzaW9ucyhbcmVzdWx0LnZlcnNpb24sICcxLjAnXSkgPT09IDEpIHx8XG4gICAgICAgIChyZXN1bHQubXpicm93c2VyICYmIGNvbXBhcmVWZXJzaW9ucyhbcmVzdWx0LnZlcnNpb24sICc2LjAnXSkgPT09IDEpIHx8XG4gICAgICAgIChyZXN1bHQuZm9jdXMgJiYgY29tcGFyZVZlcnNpb25zKFtyZXN1bHQudmVyc2lvbiwgJzEuMCddKSA9PT0gMSkgfHxcbiAgICAgICAgKHJlc3VsdC5maXJlZm94ICYmIHJlc3VsdC52ZXJzaW9uID49IDIwLjApIHx8XG4gICAgICAgIChyZXN1bHQuc2FmYXJpICYmIHJlc3VsdC52ZXJzaW9uID49IDYpIHx8XG4gICAgICAgIChyZXN1bHQub3BlcmEgJiYgcmVzdWx0LnZlcnNpb24gPj0gMTAuMCkgfHxcbiAgICAgICAgKHJlc3VsdC5pb3MgJiYgcmVzdWx0Lm9zdmVyc2lvbiAmJiByZXN1bHQub3N2ZXJzaW9uLnNwbGl0KFwiLlwiKVswXSA+PSA2KSB8fFxuICAgICAgICAocmVzdWx0LmJsYWNrYmVycnkgJiYgcmVzdWx0LnZlcnNpb24gPj0gMTAuMSlcbiAgICAgICAgfHwgKHJlc3VsdC5jaHJvbWl1bSAmJiByZXN1bHQudmVyc2lvbiA+PSAyMClcbiAgICAgICAgKSB7XG4gICAgICByZXN1bHQuYSA9IHQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKChyZXN1bHQubXNpZSAmJiByZXN1bHQudmVyc2lvbiA8IDEwKSB8fFxuICAgICAgICAocmVzdWx0LmNocm9tZSAmJiByZXN1bHQudmVyc2lvbiA8IDIwKSB8fFxuICAgICAgICAocmVzdWx0LmZpcmVmb3ggJiYgcmVzdWx0LnZlcnNpb24gPCAyMC4wKSB8fFxuICAgICAgICAocmVzdWx0LnNhZmFyaSAmJiByZXN1bHQudmVyc2lvbiA8IDYpIHx8XG4gICAgICAgIChyZXN1bHQub3BlcmEgJiYgcmVzdWx0LnZlcnNpb24gPCAxMC4wKSB8fFxuICAgICAgICAocmVzdWx0LmlvcyAmJiByZXN1bHQub3N2ZXJzaW9uICYmIHJlc3VsdC5vc3ZlcnNpb24uc3BsaXQoXCIuXCIpWzBdIDwgNilcbiAgICAgICAgfHwgKHJlc3VsdC5jaHJvbWl1bSAmJiByZXN1bHQudmVyc2lvbiA8IDIwKVxuICAgICAgICApIHtcbiAgICAgIHJlc3VsdC5jID0gdFxuICAgIH0gZWxzZSByZXN1bHQueCA9IHRcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHZhciBib3dzZXIgPSBkZXRlY3QodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnIDogJycpXG5cbiAgYm93c2VyLnRlc3QgPSBmdW5jdGlvbiAoYnJvd3Nlckxpc3QpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyb3dzZXJMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgYnJvd3Nlckl0ZW0gPSBicm93c2VyTGlzdFtpXTtcbiAgICAgIGlmICh0eXBlb2YgYnJvd3Nlckl0ZW09PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGJyb3dzZXJJdGVtIGluIGJvd3Nlcikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmVyc2lvbiBwcmVjaXNpb25zIGNvdW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICAgZ2V0VmVyc2lvblByZWNpc2lvbihcIjEuMTAuM1wiKSAvLyAzXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdmVyc2lvblxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRWZXJzaW9uUHJlY2lzaW9uKHZlcnNpb24pIHtcbiAgICByZXR1cm4gdmVyc2lvbi5zcGxpdChcIi5cIikubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEFycmF5OjptYXAgcG9seWZpbGxcbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXl9IGFyclxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBmdW5jdGlvbiBtYXAoYXJyLCBpdGVyYXRvcikge1xuICAgIHZhciByZXN1bHQgPSBbXSwgaTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLm1hcCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChhcnIsIGl0ZXJhdG9yKTtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2goaXRlcmF0b3IoYXJyW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGJyb3dzZXIgdmVyc2lvbiB3ZWlnaHRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogICBjb21wYXJlVmVyc2lvbnMoWycxLjEwLjIuMScsICAnMS44LjIuMS45MCddKSAgICAvLyAxXG4gICAqICAgY29tcGFyZVZlcnNpb25zKFsnMS4wMTAuMi4xJywgJzEuMDkuMi4xLjkwJ10pOyAgLy8gMVxuICAgKiAgIGNvbXBhcmVWZXJzaW9ucyhbJzEuMTAuMi4xJywgICcxLjEwLjIuMSddKTsgICAgIC8vIDBcbiAgICogICBjb21wYXJlVmVyc2lvbnMoWycxLjEwLjIuMScsICAnMS4wODAwLjInXSk7ICAgICAvLyAtMVxuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheTxTdHJpbmc+fSB2ZXJzaW9ucyB2ZXJzaW9ucyB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge051bWJlcn0gY29tcGFyaXNvbiByZXN1bHRcbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyh2ZXJzaW9ucykge1xuICAgIC8vIDEpIGdldCBjb21tb24gcHJlY2lzaW9uIGZvciBib3RoIHZlcnNpb25zLCBmb3IgZXhhbXBsZSBmb3IgXCIxMC4wXCIgYW5kIFwiOVwiIGl0IHNob3VsZCBiZSAyXG4gICAgdmFyIHByZWNpc2lvbiA9IE1hdGgubWF4KGdldFZlcnNpb25QcmVjaXNpb24odmVyc2lvbnNbMF0pLCBnZXRWZXJzaW9uUHJlY2lzaW9uKHZlcnNpb25zWzFdKSk7XG4gICAgdmFyIGNodW5rcyA9IG1hcCh2ZXJzaW9ucywgZnVuY3Rpb24gKHZlcnNpb24pIHtcbiAgICAgIHZhciBkZWx0YSA9IHByZWNpc2lvbiAtIGdldFZlcnNpb25QcmVjaXNpb24odmVyc2lvbik7XG5cbiAgICAgIC8vIDIpIFwiOVwiIC0+IFwiOS4wXCIgKGZvciBwcmVjaXNpb24gPSAyKVxuICAgICAgdmVyc2lvbiA9IHZlcnNpb24gKyBuZXcgQXJyYXkoZGVsdGEgKyAxKS5qb2luKFwiLjBcIik7XG5cbiAgICAgIC8vIDMpIFwiOS4wXCIgLT4gW1wiMDAwMDAwMDAwXCJcIiwgXCIwMDAwMDAwMDlcIl1cbiAgICAgIHJldHVybiBtYXAodmVyc2lvbi5zcGxpdChcIi5cIiksIGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5KDIwIC0gY2h1bmsubGVuZ3RoKS5qb2luKFwiMFwiKSArIGNodW5rO1xuICAgICAgfSkucmV2ZXJzZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gaXRlcmF0ZSBpbiByZXZlcnNlIG9yZGVyIGJ5IHJldmVyc2VkIGNodW5rcyBhcnJheVxuICAgIHdoaWxlICgtLXByZWNpc2lvbiA+PSAwKSB7XG4gICAgICAvLyA0KSBjb21wYXJlOiBcIjAwMDAwMDAwOVwiID4gXCIwMDAwMDAwMTBcIiA9IGZhbHNlIChidXQgXCI5XCIgPiBcIjEwXCIgPSB0cnVlKVxuICAgICAgaWYgKGNodW5rc1swXVtwcmVjaXNpb25dID4gY2h1bmtzWzFdW3ByZWNpc2lvbl0pIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjaHVua3NbMF1bcHJlY2lzaW9uXSA9PT0gY2h1bmtzWzFdW3ByZWNpc2lvbl0pIHtcbiAgICAgICAgaWYgKHByZWNpc2lvbiA9PT0gMCkge1xuICAgICAgICAgIC8vIGFsbCB2ZXJzaW9uIGNodW5rcyBhcmUgc2FtZVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBicm93c2VyIGlzIHVuc3VwcG9ydGVkXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICAgYm93c2VyLmlzVW5zdXBwb3J0ZWRCcm93c2VyKHtcbiAgICogICAgIG1zaWU6IFwiMTBcIixcbiAgICogICAgIGZpcmVmb3g6IFwiMjNcIixcbiAgICogICAgIGNocm9tZTogXCIyOVwiLFxuICAgKiAgICAgc2FmYXJpOiBcIjUuMVwiLFxuICAgKiAgICAgb3BlcmE6IFwiMTZcIixcbiAgICogICAgIHBoYW50b206IFwiNTM0XCJcbiAgICogICB9KTtcbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSAgbWluVmVyc2lvbnMgbWFwIG9mIG1pbmltYWwgdmVyc2lvbiB0byBicm93c2VyXG4gICAqIEBwYXJhbSAge0Jvb2xlYW59IFtzdHJpY3RNb2RlID0gZmFsc2VdIGZsYWcgdG8gcmV0dXJuIGZhbHNlIGlmIGJyb3dzZXIgd2Fzbid0IGZvdW5kIGluIG1hcFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9ICBbdWFdIHVzZXIgYWdlbnQgc3RyaW5nXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpc1Vuc3VwcG9ydGVkQnJvd3NlcihtaW5WZXJzaW9ucywgc3RyaWN0TW9kZSwgdWEpIHtcbiAgICB2YXIgX2Jvd3NlciA9IGJvd3NlcjtcblxuICAgIC8vIG1ha2Ugc3RyaWN0TW9kZSBwYXJhbSBvcHRpb25hbCB3aXRoIHVhIHBhcmFtIHVzYWdlXG4gICAgaWYgKHR5cGVvZiBzdHJpY3RNb2RlID09PSAnc3RyaW5nJykge1xuICAgICAgdWEgPSBzdHJpY3RNb2RlO1xuICAgICAgc3RyaWN0TW9kZSA9IHZvaWQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHN0cmljdE1vZGUgPT09IHZvaWQoMCkpIHtcbiAgICAgIHN0cmljdE1vZGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHVhKSB7XG4gICAgICBfYm93c2VyID0gZGV0ZWN0KHVhKTtcbiAgICB9XG5cbiAgICB2YXIgdmVyc2lvbiA9IFwiXCIgKyBfYm93c2VyLnZlcnNpb247XG4gICAgZm9yICh2YXIgYnJvd3NlciBpbiBtaW5WZXJzaW9ucykge1xuICAgICAgaWYgKG1pblZlcnNpb25zLmhhc093blByb3BlcnR5KGJyb3dzZXIpKSB7XG4gICAgICAgIGlmIChfYm93c2VyW2Jyb3dzZXJdKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBtaW5WZXJzaW9uc1ticm93c2VyXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQnJvd3NlciB2ZXJzaW9uIGluIHRoZSBtaW5WZXJzaW9uIG1hcCBzaG91bGQgYmUgYSBzdHJpbmc6ICcgKyBicm93c2VyICsgJzogJyArIFN0cmluZyhtaW5WZXJzaW9ucykpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGJyb3dzZXIgdmVyc2lvbiBhbmQgbWluIHN1cHBvcnRlZCB2ZXJzaW9uLlxuICAgICAgICAgIHJldHVybiBjb21wYXJlVmVyc2lvbnMoW3ZlcnNpb24sIG1pblZlcnNpb25zW2Jyb3dzZXJdXSkgPCAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmljdE1vZGU7IC8vIG5vdCBmb3VuZFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJyb3dzZXIgaXMgc3VwcG9ydGVkXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gbWluVmVyc2lvbnMgbWFwIG9mIG1pbmltYWwgdmVyc2lvbiB0byBicm93c2VyXG4gICAqIEBwYXJhbSAge0Jvb2xlYW59IFtzdHJpY3RNb2RlID0gZmFsc2VdIGZsYWcgdG8gcmV0dXJuIGZhbHNlIGlmIGJyb3dzZXIgd2Fzbid0IGZvdW5kIGluIG1hcFxuICAgKiBAcGFyYW0gIHtTdHJpbmd9ICBbdWFdIHVzZXIgYWdlbnQgc3RyaW5nXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBjaGVjayhtaW5WZXJzaW9ucywgc3RyaWN0TW9kZSwgdWEpIHtcbiAgICByZXR1cm4gIWlzVW5zdXBwb3J0ZWRCcm93c2VyKG1pblZlcnNpb25zLCBzdHJpY3RNb2RlLCB1YSk7XG4gIH1cblxuICBib3dzZXIuaXNVbnN1cHBvcnRlZEJyb3dzZXIgPSBpc1Vuc3VwcG9ydGVkQnJvd3NlcjtcbiAgYm93c2VyLmNvbXBhcmVWZXJzaW9ucyA9IGNvbXBhcmVWZXJzaW9ucztcbiAgYm93c2VyLmNoZWNrID0gY2hlY2s7XG5cbiAgLypcbiAgICogU2V0IG91ciBkZXRlY3QgbWV0aG9kIHRvIHRoZSBtYWluIGJvd3NlciBvYmplY3Qgc28gd2UgY2FuXG4gICAqIHJldXNlIGl0IHRvIHRlc3Qgb3RoZXIgdXNlciBhZ2VudHMuXG4gICAqIFRoaXMgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBmdXR1cmUgdGVzdHMuXG4gICAqL1xuICBib3dzZXIuX2RldGVjdCA9IGRldGVjdDtcblxuICAvKlxuICAgKiBTZXQgb3VyIGRldGVjdCBwdWJsaWMgbWV0aG9kIHRvIHRoZSBtYWluIGJvd3NlciBvYmplY3RcbiAgICogVGhpcyBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGJvd3NlciBpbiBzZXJ2ZXIgc2lkZVxuICAgKi9cbiAgYm93c2VyLmRldGVjdCA9IGRldGVjdDtcbiAgcmV0dXJuIGJvd3NlclxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MsIGN1c3RvbURvY3VtZW50KSB7XG4gIHZhciBkb2MgPSBjdXN0b21Eb2N1bWVudCB8fCBkb2N1bWVudDtcbiAgaWYgKGRvYy5jcmVhdGVTdHlsZVNoZWV0KSB7XG4gICAgdmFyIHNoZWV0ID0gZG9jLmNyZWF0ZVN0eWxlU2hlZXQoKVxuICAgIHNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgcmV0dXJuIHNoZWV0Lm93bmVyTm9kZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLFxuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXG4gICAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgfVxuXG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5ieVVybCA9IGZ1bmN0aW9uKHVybCkge1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlU3R5bGVTaGVldCkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVTdHlsZVNoZWV0KHVybCkub3duZXJOb2RlO1xuICB9IGVsc2Uge1xuICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSxcbiAgICAgICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcblxuICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcblxuICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgcmV0dXJuIGxpbms7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2Nzc2lmeScpOyIsInZhciBIZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XG52YXIgRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcbnZhciBMaWdodEJveCA9IHJlcXVpcmUoJy4vbGlnaHRib3gnKTtcbnZhciBDaGlsZFdpbmRvdyA9IHJlcXVpcmUoJy4vY2hpbGR3aW5kb3cnKTtcbnZhciBEZXZpY2UgPSByZXF1aXJlKCcuL2RldmljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gcmVhZHkoZm4pIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICdsb2FkaW5nJyl7XG4gICAgICAgICAgZm4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZm4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQXBwKCkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHKTtcbiAgICAgICAgdGhpcy5ldmVudE9iamVjdCA9IEhlbHBlcnMuYWRkRXZlbnRPYmplY3QodGhpcyk7XG4gICAgICAgIHRoaXMuaXNJbml0aWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY2hpbGRXaW5kb3cgPSBudWxsO1xuICAgIH1cblxuICAgIEFwcC5ldmVudFR5cGVzID0ge1xuICAgICAgICBJTklUOiAnaW5pdCcsXG4gICAgICAgIE9QRU46ICdvcGVuJyxcbiAgICAgICAgT1BFTl9XSU5ET1c6ICdvcGVuLXdpbmRvdycsXG4gICAgICAgIE9QRU5fTElHSFRCT1g6ICdvcGVuLWxpZ2h0Ym94JyxcbiAgICAgICAgTE9BRDogJ2xvYWQnLFxuICAgICAgICBDTE9TRTogJ2Nsb3NlJyxcbiAgICAgICAgQ0xPU0VfV0lORE9XOiAnY2xvc2Utd2luZG93JyxcbiAgICAgICAgQ0xPU0VfTElHSFRCT1g6ICdjbG9zZS1saWdodGJveCcsXG4gICAgICAgIFNUQVRVUzogJ3N0YXR1cycsXG4gICAgICAgIFNUQVRVU19JTlZPSUNFOiAnc3RhdHVzLWludm9pY2UnLFxuICAgICAgICBTVEFUVVNfREVMSVZFUklORzogJ3N0YXR1cy1kZWxpdmVyaW5nJyxcbiAgICAgICAgU1RBVFVTX1RST1VCTEVEOiAnc3RhdHVzLXRyb3VibGVkJyxcbiAgICAgICAgU1RBVFVTX0RPTkU6ICdzdGF0dXMtZG9uZScsXG4gICAgICAgIFVTRVJfQ09VTlRSWTogJ3VzZXItY291bnRyeScsXG4gICAgICAgIEZDUDogJ2ZjcCcsXG4gICAgICAgIEVSUk9SOiAnZXJyb3InXG4gICAgfTtcblxuICAgIHZhciBERUZBVUxUX0NPTkZJRyA9IHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiBudWxsLFxuICAgICAgICBhY2Nlc3NfZGF0YTogbnVsbCxcbiAgICAgICAgc2FuZGJveDogZmFsc2UsXG4gICAgICAgIGxpZ2h0Ym94OiB7fSxcbiAgICAgICAgY2hpbGRXaW5kb3c6IHt9LFxuICAgICAgICBob3N0OiAnc2VjdXJlLnhzb2xsYS5jb20nLFxuICAgICAgICBpZnJhbWVPbmx5OiBmYWxzZSxcbiAgICAgICAgY29uc2VudElkOiBudWxsXG4gICAgfTtcbiAgICB2YXIgU0FOREJPWF9QQVlTVEFUSU9OX1VSTCA9ICdodHRwczovL3NhbmRib3gtc2VjdXJlLnhzb2xsYS5jb20vcGF5c3RhdGlvbjIvPyc7XG4gICAgdmFyIEVWRU5UX05BTUVTUEFDRSA9ICcueHBheXN0YXRpb24td2lkZ2V0JztcbiAgICB2YXIgQVRUUl9QUkVGSVggPSAnZGF0YS14cGF5c3RhdGlvbi13aWRnZXQtb3Blbic7XG5cbiAgICAvKiogUHJpdmF0ZSBNZW1iZXJzICoqL1xuICAgIEFwcC5wcm90b3R5cGUuY29uZmlnID0ge307XG4gICAgQXBwLnByb3RvdHlwZS5pc0luaXRpYXRlZCA9IGZhbHNlO1xuICAgIEFwcC5wcm90b3R5cGUuZXZlbnRPYmplY3QgPSBIZWxwZXJzLmFkZEV2ZW50T2JqZWN0KHRoaXMpO1xuXG4gICAgQXBwLnByb3RvdHlwZS5nZXRQYXltZW50VXJsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcucGF5bWVudF91cmwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5wYXltZW50X3VybDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb25maWcucXVlcnlQYXJhbXMgfHwge307XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgIHF1ZXJ5LmFjY2Vzc190b2tlbiA9IHRoaXMuY29uZmlnLmFjY2Vzc190b2tlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5LmFjY2Vzc19kYXRhID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcuYWNjZXNzX2RhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXJsV2l0aG91dFF1ZXJ5UGFyYW1zID0gdGhpcy5jb25maWcuc2FuZGJveCA/XG4gICAgICAgICAgICBTQU5EQk9YX1BBWVNUQVRJT05fVVJMIDpcbiAgICAgICAgICAgICdodHRwczovLycgKyB0aGlzLmNvbmZpZy5ob3N0ICsgJy9wYXlzdGF0aW9uMi8/JztcblxuICAgICAgICBjb25zdCBwYXltZW50VXJsID0gdXJsV2l0aG91dFF1ZXJ5UGFyYW1zICsgSGVscGVycy5wYXJhbShxdWVyeSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmNvbnNlbnRJZCkge1xuICAgICAgICAgICAgcmV0dXJuIEhlbHBlcnMuZ2V0UGF5bWVudFVybFdpdGhDb25zZW50SWQocGF5bWVudFVybCwgdGhpcy5jb25maWcuY29uc2VudElkKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBheW1lbnRVcmw7XG4gICAgfTtcblxuICAgIEFwcC5wcm90b3R5cGUuY2hlY2tDb25maWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzRW1wdHkodGhpcy5jb25maWcuYWNjZXNzX3Rva2VuKSAmJiBIZWxwZXJzLmlzRW1wdHkodGhpcy5jb25maWcuYWNjZXNzX2RhdGEpICYmIEhlbHBlcnMuaXNFbXB0eSh0aGlzLmNvbmZpZy5wYXltZW50X3VybCkpIHtcbiAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcignTm8gYWNjZXNzIHRva2VuIG9yIGFjY2VzcyBkYXRhIG9yIHBheW1lbnQgVVJMIGdpdmVuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUhlbHBlcnMuaXNFbXB0eSh0aGlzLmNvbmZpZy5hY2Nlc3NfZGF0YSkgJiYgdHlwZW9mIHRoaXMuY29uZmlnLmFjY2Vzc19kYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKCdJbnZhbGlkIGFjY2VzcyBkYXRhIGZvcm1hdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEhlbHBlcnMuaXNFbXB0eSh0aGlzLmNvbmZpZy5ob3N0KSkge1xuICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKCdJbnZhbGlkIGhvc3QnKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBBcHAucHJvdG90eXBlLmNoZWNrQXBwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0luaXRpYXRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnRocm93RXJyb3IoJ0luaXRpYWxpemUgd2lkZ2V0IGJlZm9yZSBvcGVuaW5nJyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQXBwLnByb3RvdHlwZS50aHJvd0Vycm9yID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihtZXNzYWdlKTtcbiAgICB9O1xuXG4gICAgQXBwLnByb3RvdHlwZS50cmlnZ2VyRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBkYXRhKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwoYXJndW1lbnRzLCAoZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XG4gICAgICAgICAgICAgICAgZXZlbnQuaW5pdEV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50T2JqZWN0LnRyaWdnZXIoZXZlbnROYW1lLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBBcHAucHJvdG90eXBlLnRyaWdnZXJDdXN0b21FdmVudCA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBldmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtkZXRhaWw6IGRhdGF9KTsgLy8gTm90IHdvcmtpbmcgaW4gSUVcbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcbiAgICAgICAgICAgIGV2ZW50LmluaXRDdXN0b21FdmVudChldmVudE5hbWUsIHRydWUsIHRydWUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHdpZGdldCB3aXRoIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIEFwcC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgZnVuY3Rpb24gaW5pdGlhbGl6ZShvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICB2YXIgYm9keUVsZW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIHZhciBjbGlja0V2ZW50TmFtZSA9ICdjbGljaycgKyBFVkVOVF9OQU1FU1BBQ0U7XG5cbiAgICAgICAgICAgIHZhciBoYW5kbGVDbGlja0V2ZW50ID0gKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbJyArIEFUVFJfUFJFRklYICsgJ10nKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlRXZlbnQudGFyZ2V0ID09PSB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbi5jYWxsKHRoaXMsIHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICAgICAgICAgIGJvZHlFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoY2xpY2tFdmVudE5hbWUsIGhhbmRsZUNsaWNrRXZlbnQpO1xuXG4gICAgICAgICAgICB2YXIgY2xpY2tFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgICAgICAgY2xpY2tFdmVudC5pbml0RXZlbnQoY2xpY2tFdmVudE5hbWUsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICAgICAgYm9keUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBjbGlja0V2ZW50LnNvdXJjZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgYm9keUVsZW1lbnQuZGlzcGF0Y2hFdmVudChjbGlja0V2ZW50KTtcbiAgICAgICAgICAgIH0pLmJpbmQodGhpcyksIGZhbHNlKTtcblxuICAgICAgICAgICAgYm9keUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjbGlja0V2ZW50TmFtZSwgaGFuZGxlQ2xpY2tFdmVudCk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5JTklUKTtcbiAgICAgICAgfVxuICAgICAgICByZWFkeShpbml0aWFsaXplLmJpbmQodGhpcywgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gcGF5bWVudCBpbnRlcmZhY2UgKFBheVN0YXRpb24pXG4gICAgICovXG4gICAgQXBwLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNoZWNrQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuY2hlY2tBcHAoKTtcblxuICAgICAgICB2YXIgdHJpZ2dlclNwbGl0U3RhdHVzID0gKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKCgoZGF0YSB8fCB7fSkucGF5bWVudEluZm8gfHwge30pLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2ludm9pY2UnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5TVEFUVVNfSU5WT0lDRSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGl2ZXJpbmcnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5TVEFUVVNfREVMSVZFUklORywgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3Ryb3VibGVkJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoQXBwLmV2ZW50VHlwZXMuU1RBVFVTX1RST1VCTEVELCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZG9uZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KEFwcC5ldmVudFR5cGVzLlNUQVRVU19ET05FLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdmFyIHVybCA9IHRoaXMuZ2V0UGF5bWVudFVybCgpO1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlU3RhdHVzKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgc3RhdHVzRGF0YSA9IGV2ZW50LmRldGFpbDtcbiAgICAgICAgICAgIHRoYXQudHJpZ2dlckV2ZW50KEFwcC5ldmVudFR5cGVzLlNUQVRVUywgc3RhdHVzRGF0YSk7XG4gICAgICAgICAgICB0cmlnZ2VyU3BsaXRTdGF0dXMoc3RhdHVzRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVVc2VyTG9jYWxlKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgdXNlckNvdW50cnkgPSB7XG4gICAgICAgICAgICAgICAgdXNlcl9jb3VudHJ5OiBldmVudC5kZXRhaWwudXNlcl9jb3VudHJ5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhhdC50cmlnZ2VyQ3VzdG9tRXZlbnQoQXBwLmV2ZW50VHlwZXMuVVNFUl9DT1VOVFJZLCB1c2VyQ291bnRyeSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVGY3AoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoYXQudHJpZ2dlckN1c3RvbUV2ZW50KEFwcC5ldmVudFR5cGVzLkZDUCwgZXZlbnQuZGV0YWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZUVycm9yKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGF0LnRyaWdnZXJDdXN0b21FdmVudChBcHAuZXZlbnRUeXBlcy5FUlJPUiwgZXZlbnQuZGV0YWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zdE1lc3NhZ2UgPSBudWxsO1xuICAgICAgICBpZiAoKG5ldyBEZXZpY2UpLmlzTW9iaWxlKCkgJiYgIXRoaXMuY29uZmlnLmlmcmFtZU9ubHkpIHtcbiAgICAgICAgICAgIHZhciBjaGlsZFdpbmRvdyA9IG5ldyBDaGlsZFdpbmRvdztcbiAgICAgICAgICAgIGNoaWxkV2luZG93Lm9uKCdvcGVuJywgZnVuY3Rpb24gaGFuZGxlT3BlbigpIHtcbiAgICAgICAgICAgICAgICB0aGF0LnBvc3RNZXNzYWdlID0gY2hpbGRXaW5kb3cuZ2V0UG9zdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5PUEVOKTtcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5PUEVOX1dJTkRPVyk7XG4gICAgICAgICAgICAgICAgY2hpbGRXaW5kb3cub2ZmKCdvcGVuJywgaGFuZGxlT3Blbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNoaWxkV2luZG93Lm9uKCdsb2FkJywgZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5MT0FEKTtcbiAgICAgICAgICAgICAgICBjaGlsZFdpbmRvdy5vZmYoJ2xvYWQnLCBoYW5kbGVMb2FkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2hpbGRXaW5kb3cub24oJ2Nsb3NlJywgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoQXBwLmV2ZW50VHlwZXMuQ0xPU0UpO1xuICAgICAgICAgICAgICAgIHRoYXQudHJpZ2dlckV2ZW50KEFwcC5ldmVudFR5cGVzLkNMT1NFX1dJTkRPVyk7XG4gICAgICAgICAgICAgICAgY2hpbGRXaW5kb3cub2ZmKCdzdGF0dXMnLCBoYW5kbGVTdGF0dXMpO1xuICAgICAgICAgICAgICAgIGNoaWxkV2luZG93Lm9mZihBcHAuZXZlbnRUeXBlcy5VU0VSX0NPVU5UUlksIGhhbmRsZVVzZXJMb2NhbGUpO1xuICAgICAgICAgICAgICAgIGNoaWxkV2luZG93Lm9mZihBcHAuZXZlbnRUeXBlcy5GQ1AsIGhhbmRsZUZjcCk7XG4gICAgICAgICAgICAgICAgY2hpbGRXaW5kb3cub2ZmKEFwcC5ldmVudFR5cGVzLkVSUk9SLCBoYW5kbGVFcnJvcik7XG4gICAgICAgICAgICAgICAgY2hpbGRXaW5kb3cub2ZmKCdjbG9zZScsIGhhbmRsZUNsb3NlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2hpbGRXaW5kb3cub24oJ3N0YXR1cycsIGhhbmRsZVN0YXR1cyk7XG4gICAgICAgICAgICBjaGlsZFdpbmRvdy5vbihBcHAuZXZlbnRUeXBlcy5VU0VSX0NPVU5UUlksIGhhbmRsZVVzZXJMb2NhbGUpO1xuICAgICAgICAgICAgY2hpbGRXaW5kb3cub24oQXBwLmV2ZW50VHlwZXMuRkNQLCBoYW5kbGVGY3ApO1xuICAgICAgICAgICAgY2hpbGRXaW5kb3cub24oQXBwLmV2ZW50VHlwZXMuRVJST1IsIGhhbmRsZUVycm9yKTtcbiAgICAgICAgICAgIGNoaWxkV2luZG93Lm9wZW4odXJsLCB0aGlzLmNvbmZpZy5jaGlsZFdpbmRvdyk7XG4gICAgICAgICAgICB0aGF0LmNoaWxkV2luZG93ID0gY2hpbGRXaW5kb3c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbGlnaHRCb3ggPSBuZXcgTGlnaHRCb3goKG5ldyBEZXZpY2UpLmlzTW9iaWxlKCkgJiYgdGhpcy5jb25maWcuaWZyYW1lT25seSk7XG4gICAgICAgICAgICBsaWdodEJveC5vbignb3BlbicsIGZ1bmN0aW9uIGhhbmRsZU9wZW4oKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5wb3N0TWVzc2FnZSA9IGxpZ2h0Qm94LmdldFBvc3RNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoQXBwLmV2ZW50VHlwZXMuT1BFTik7XG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoQXBwLmV2ZW50VHlwZXMuT1BFTl9MSUdIVEJPWCk7XG4gICAgICAgICAgICAgICAgbGlnaHRCb3gub2ZmKCdvcGVuJywgaGFuZGxlT3Blbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxpZ2h0Qm94Lm9uKCdsb2FkJywgZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudChBcHAuZXZlbnRUeXBlcy5MT0FEKTtcbiAgICAgICAgICAgICAgICBsaWdodEJveC5vZmYoJ2xvYWQnLCBoYW5kbGVMb2FkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGlnaHRCb3gub24oJ2Nsb3NlJywgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoQXBwLmV2ZW50VHlwZXMuQ0xPU0UpO1xuICAgICAgICAgICAgICAgIHRoYXQudHJpZ2dlckV2ZW50KEFwcC5ldmVudFR5cGVzLkNMT1NFX0xJR0hUQk9YKTtcbiAgICAgICAgICAgICAgICBsaWdodEJveC5vZmYoJ3N0YXR1cycsIGhhbmRsZVN0YXR1cyk7XG4gICAgICAgICAgICAgICAgbGlnaHRCb3gub2ZmKEFwcC5ldmVudFR5cGVzLlVTRVJfQ09VTlRSWSwgaGFuZGxlVXNlckxvY2FsZSk7XG4gICAgICAgICAgICAgICAgbGlnaHRCb3gub2ZmKEFwcC5ldmVudFR5cGVzLkZDUCwgaGFuZGxlRmNwKTtcbiAgICAgICAgICAgICAgICBsaWdodEJveC5vZmYoQXBwLmV2ZW50VHlwZXMuRVJST1IsIGhhbmRsZUVycm9yKTtcbiAgICAgICAgICAgICAgICBsaWdodEJveC5vZmYoJ2Nsb3NlJywgaGFuZGxlQ2xvc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsaWdodEJveC5vbignc3RhdHVzJywgaGFuZGxlU3RhdHVzKTtcbiAgICAgICAgICAgIGxpZ2h0Qm94Lm9uKEFwcC5ldmVudFR5cGVzLlVTRVJfQ09VTlRSWSwgaGFuZGxlVXNlckxvY2FsZSk7XG4gICAgICAgICAgICBsaWdodEJveC5vbihBcHAuZXZlbnRUeXBlcy5GQ1AsIGhhbmRsZUZjcCk7XG4gICAgICAgICAgICBsaWdodEJveC5vbihBcHAuZXZlbnRUeXBlcy5FUlJPUiwgaGFuZGxlRXJyb3IpO1xuICAgICAgICAgICAgbGlnaHRCb3gub3BlbkZyYW1lKHVybCwgdGhpcy5jb25maWcubGlnaHRib3gpO1xuICAgICAgICAgICAgdGhhdC5jaGlsZFdpbmRvdyA9IGxpZ2h0Qm94O1xuICAgICAgICB9XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgcGF5bWVudCBpbnRlcmZhY2UgKFBheVN0YXRpb24pXG4gICAgICovXG4gICAgQXBwLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jaGlsZFdpbmRvdy5jbG9zZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2ggYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBmb3Igb25lIG9yIG1vcmUgZXZlbnRzIHRvIHRoZSB3aWRnZXRcbiAgICAgKiBAcGFyYW0gZXZlbnQgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzIChpbml0LCBvcGVuLCBsb2FkLCBjbG9zZSwgc3RhdHVzLCBzdGF0dXMtaW52b2ljZSwgc3RhdHVzLWRlbGl2ZXJpbmcsIHN0YXR1cy10cm91YmxlZCwgc3RhdHVzLWRvbmUpXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZFxuICAgICAqL1xuICAgIEFwcC5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0Lm9uKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXJcbiAgICAgKiBAcGFyYW0gZXZlbnQgT25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIGV2ZW50IHR5cGVzXG4gICAgICogQHBhcmFtIGhhbmRsZXIgQSBoYW5kbGVyIGZ1bmN0aW9uIHByZXZpb3VzbHkgYXR0YWNoZWQgZm9yIHRoZSBldmVudChzKVxuICAgICAqL1xuICAgIEFwcC5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3Qub2ZmKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2VuZCBhIG1lc3NhZ2UgZGlyZWN0bHkgdG8gUGF5U3RhdGlvblxuICAgICAqIEBwYXJhbSBjb21tYW5kXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICBBcHAucHJvdG90eXBlLnNlbmRNZXNzYWdlID0gZnVuY3Rpb24gKGNvbW1hbmQsIGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMucG9zdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2Uuc2VuZC5hcHBseSh0aGlzLnBvc3RNZXNzYWdlLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEF0dGFjaCBhbiBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciBtZXNzYWdlIGV2ZW50IGZyb20gUGF5U3RhdGlvblxuICAgICAqIEBwYXJhbSBjb21tYW5kXG4gICAgICogQHBhcmFtIGhhbmRsZXJcbiAgICAgKi9cbiAgICBBcHAucHJvdG90eXBlLm9uTWVzc2FnZSA9IGZ1bmN0aW9uIChjb21tYW5kLCBoYW5kbGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlLm9uLmFwcGx5KHRoaXMucG9zdE1lc3NhZ2UsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIEFwcDtcbn0pKCk7XG4iLCJ2YXIgdmVyc2lvbiA9IHJlcXVpcmUoJy4vdmVyc2lvbicpO1xudmFyIEhlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcbnZhciBQb3N0TWVzc2FnZSA9IHJlcXVpcmUoJy4vcG9zdG1lc3NhZ2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENoaWxkV2luZG93KCkge1xuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0ID0gSGVscGVycy5hZGRFdmVudE9iamVjdCh0aGlzLCB3cmFwRXZlbnRJbk5hbWVzcGFjZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd3JhcEV2ZW50SW5OYW1lc3BhY2UoZXZlbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBDaGlsZFdpbmRvdy5fTkFNRVNQQUNFICsgJ18nICsgZXZlbnROYW1lO1xuICAgIH1cblxuICAgIHZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgICAgIHRhcmdldDogJ19ibGFuaydcbiAgICB9O1xuXG4gICAgLyoqIFByaXZhdGUgTWVtYmVycyAqKi9cbiAgICBDaGlsZFdpbmRvdy5wcm90b3R5cGUuZXZlbnRPYmplY3QgPSBudWxsO1xuICAgIENoaWxkV2luZG93LnByb3RvdHlwZS5jaGlsZFdpbmRvdyA9IG51bGw7XG5cbiAgICBDaGlsZFdpbmRvdy5wcm90b3R5cGUudHJpZ2dlckV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCBkYXRhKSB7XG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3QudHJpZ2dlcihldmVudCwgZGF0YSk7XG4gICAgfTtcblxuICAgIC8qKiBQdWJsaWMgTWVtYmVycyAqKi9cbiAgICBDaGlsZFdpbmRvdy5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hpbGRXaW5kb3cgJiYgIXRoaXMuY2hpbGRXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkV2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBhZGRIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsb3NlQ2hpbGRXaW5kb3coKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5vZmYoJ2Nsb3NlJywgY2xvc2VDaGlsZFdpbmRvdylcblxuICAgICAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWwuY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoYXQuY2hpbGRXaW5kb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5jaGlsZFdpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhhdC5vbignY2xvc2UnLCBjbG9zZUNoaWxkV2luZG93KTtcblxuICAgICAgICAgICAgLy8gQ3Jvc3Mtd2luZG93IGNvbW11bmljYXRpb25cbiAgICAgICAgICAgIHRoYXQubWVzc2FnZSA9IG5ldyBQb3N0TWVzc2FnZSh0aGF0LmNoaWxkV2luZG93KTtcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbignZGltZW5zaW9ucyB3aWRnZXQtZGV0ZWN0aW9uJywgZnVuY3Rpb24gaGFuZGxlV2lkZ2V0RGV0ZWN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoYXQudHJpZ2dlckV2ZW50KCdsb2FkJyk7XG4gICAgICAgICAgICAgICAgdGhhdC5tZXNzYWdlLm9mZignZGltZW5zaW9ucyB3aWRnZXQtZGV0ZWN0aW9uJywgaGFuZGxlV2lkZ2V0RGV0ZWN0aW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhhdC5tZXNzYWdlLm9uKCd3aWRnZXQtZGV0ZWN0aW9uJywgZnVuY3Rpb24gaGFuZGxlV2lkZ2V0RGV0ZWN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoYXQubWVzc2FnZS5zZW5kKCd3aWRnZXQtZGV0ZWN0ZWQnLCB7dmVyc2lvbjogdmVyc2lvbiwgY2hpbGRXaW5kb3dPcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgICAgICAgICAgdGhhdC5tZXNzYWdlLm9mZignd2lkZ2V0LWRldGVjdGlvbicsIGhhbmRsZVdpZGdldERldGVjdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbignc3RhdHVzJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoJ3N0YXR1cycsIGV2ZW50LmRldGFpbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbignY2xvc2UnLCBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcbiAgICAgICAgICAgICAgICBjbG9zZUNoaWxkV2luZG93KCk7XG4gICAgICAgICAgICAgICAgdGhhdC5tZXNzYWdlLm9mZignY2xvc2UnLCBoYW5kbGVDbG9zZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbigndXNlci1jb3VudHJ5JywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoJ3VzZXItY291bnRyeScsIGV2ZW50LmRldGFpbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbignZmNwJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyRXZlbnQoJ2ZjcCcsIGV2ZW50LmRldGFpbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoYXQubWVzc2FnZS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGF0LnRyaWdnZXJFdmVudCgnZXJyb3InLCBldmVudC5kZXRhaWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnRhcmdldCkge1xuICAgICAgICAgICAgY2FzZSAnX3NlbGYnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRXaW5kb3cgPSBnbG9iYWwud2luZG93O1xuICAgICAgICAgICAgICAgIGFkZEhhbmRsZXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnX3BhcmVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFdpbmRvdyA9IGdsb2JhbC53aW5kb3cucGFyZW50O1xuICAgICAgICAgICAgICAgIGFkZEhhbmRsZXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnX2JsYW5rJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFdpbmRvdyA9IGdsb2JhbC53aW5kb3cub3Blbih1cmwpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRXaW5kb3cuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBhZGRIYW5kbGVycygpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNoZWNrV2luZG93ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRXaW5kb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkV2luZG93LmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdjbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lciA9IGdsb2JhbC5zZXRUaW1lb3V0KGNoZWNrV2luZG93LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICB2YXIgdGltZXIgPSBnbG9iYWwuc2V0VGltZW91dChjaGVja1dpbmRvdywgMTAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdvcGVuJyk7XG4gICAgfTtcblxuICAgIENoaWxkV2luZG93LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2Nsb3NlJyk7XG4gICAgfTtcblxuICAgIENoaWxkV2luZG93LnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3Qub24oZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBDaGlsZFdpbmRvdy5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3Qub2ZmKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgQ2hpbGRXaW5kb3cucHJvdG90eXBlLmdldFBvc3RNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICAgIH07XG5cbiAgICBDaGlsZFdpbmRvdy5fTkFNRVNQQUNFID0gJ0NISUxEX1dJTkRPVyc7XG5cbiAgICByZXR1cm4gQ2hpbGRXaW5kb3c7XG59KSgpO1xuIiwidmFyIGJvd3NlciA9IHJlcXVpcmUoJ2Jvd3NlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGV2aWNlKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vYmlsZSBkZXZpY2VzXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgRGV2aWNlLnByb3RvdHlwZS5pc01vYmlsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYm93c2VyLm1vYmlsZSB8fCBib3dzZXIudGFibGV0O1xuICAgIH07XG5cbiAgICByZXR1cm4gRGV2aWNlO1xufSkoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMubmFtZSA9IFwiWHNvbGxhUGF5U3RhdGlvbldpZGdldEV4Y2VwdGlvblwiO1xuICAgIHRoaXMudG9TdHJpbmcgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgJzogJyArIHRoaXMubWVzc2FnZTtcbiAgICB9KS5iaW5kKHRoaXMpO1xufTtcbiIsImZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdW5pcShsaXN0KSB7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGZ1bmN0aW9uICh4LCBpLCBhKSB7XG4gICAgICAgIHJldHVybiBhLmluZGV4T2YoeCkgPT0gaVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB6aXBPYmplY3QocHJvcHMsIHZhbHVlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBwcm9wcyA/IHByb3BzLmxlbmd0aCA6IDAsXG4gICAgICAgIHJlc3VsdCA9IHt9O1xuXG4gICAgaWYgKGxlbmd0aCAmJiAhdmFsdWVzICYmICFBcnJheS5pc0FycmF5KHByb3BzWzBdKSkge1xuICAgICAgICB2YWx1ZXMgPSBbXTtcbiAgICB9XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleVswXV0gPSBrZXlbMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcGFyYW0oYSkge1xuICAgIHZhciBzID0gW107XG5cbiAgICB2YXIgYWRkID0gZnVuY3Rpb24gKGssIHYpIHtcbiAgICAgICAgdiA9IHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nID8gdigpIDogdjtcbiAgICAgICAgdiA9IHYgPT09IG51bGwgPyAnJyA6IHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdjtcbiAgICAgICAgc1tzLmxlbmd0aF0gPSBlbmNvZGVVUklDb21wb25lbnQoaykgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodik7XG4gICAgfTtcblxuICAgIHZhciBidWlsZFBhcmFtcyA9IGZ1bmN0aW9uIChwcmVmaXgsIG9iaikge1xuICAgICAgICB2YXIgaSwgbGVuLCBrZXk7XG5cbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICdbJyArICh0eXBlb2Ygb2JqW2ldID09PSAnb2JqZWN0JyAmJiBvYmpbaV0gPyBpIDogJycpICsgJ10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2ldXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChTdHJpbmcob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMocHJlZml4ICsgJ1snICsga2V5ICsgJ10nLCBvYmpba2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGQocHJlZml4LCBvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYWRkKG9ialtpXS5uYW1lLCBvYmpbaV0udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoa2V5LCBvYmpba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfTtcblxuICAgIHJldHVybiBidWlsZFBhcmFtcygnJywgYSkuam9pbignJicpO1xufTtcblxuXG5mdW5jdGlvbiBvbmNlKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBmKGFyZ3VtZW50cyk7XG4gICAgICAgIGYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRFdmVudE9iamVjdChjb250ZXh0LCB3cmFwRXZlbnRJbk5hbWVzcGFjZSkge1xuICAgIHZhciBkdW1teVdyYXBwZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50XG4gICAgfTtcbiAgICB2YXIgd3JhcEV2ZW50SW5OYW1lc3BhY2UgPSB3cmFwRXZlbnRJbk5hbWVzcGFjZSB8fCBkdW1teVdyYXBwZXI7XG4gICAgdmFyIGV2ZW50c0xpc3QgPSBbXTtcbiAgICB2YXIgaGFuZGxlcnMgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgZnVuY3Rpb24gaXNTdHJpbmdDb250YWluZWRTcGFjZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIC8gLy50ZXN0KHN0cilcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0cmlnZ2VyOiAoZnVuY3Rpb24gKGV2ZW50TmFtZSwgZGF0YSkge1xuICAgICAgICAgICAgdmFyIGV2ZW50SW5OYW1lc3BhY2UgPSB3cmFwRXZlbnRJbk5hbWVzcGFjZShldmVudE5hbWUpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnRJbk5hbWVzcGFjZSwge2RldGFpbDogZGF0YX0pOyAvLyBOb3Qgd29ya2luZyBpbiBJRVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICAgICAgICAgICAgICAgIGV2ZW50LmluaXRDdXN0b21FdmVudChldmVudEluTmFtZXNwYWNlLCB0cnVlLCB0cnVlLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICB9KS5iaW5kKGNvbnRleHQpLFxuICAgICAgICBvbjogKGZ1bmN0aW9uIChldmVudE5hbWUsIGhhbmRsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgZnVuY3Rpb24gYWRkRXZlbnQoZXZlbnROYW1lLCBoYW5kbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyRGVjb3JhdG9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZShldmVudCwgZXZlbnQuZGV0YWlsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBoYW5kbGVycy5zZXQoaGFuZGxlLCBoYW5kbGVyRGVjb3JhdG9yKTtcblxuICAgICAgICAgICAgICAgIHZhciBldmVudEluTmFtZXNwYWNlID0gd3JhcEV2ZW50SW5OYW1lc3BhY2UoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50SW5OYW1lc3BhY2UsIGhhbmRsZXJEZWNvcmF0b3IsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGV2ZW50c0xpc3QucHVzaCh7bmFtZTogZXZlbnRJbk5hbWVzcGFjZSwgaGFuZGxlOiBoYW5kbGVyRGVjb3JhdG9yLCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1N0cmluZ0NvbnRhaW5lZFNwYWNlKGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnROYW1lLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnNlZEV2ZW50TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRFdmVudChwYXJzZWRFdmVudE5hbWUsIGhhbmRsZSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRFdmVudChldmVudE5hbWUsIGhhbmRsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSkuYmluZChjb250ZXh0KSxcblxuICAgICAgICBvZmY6IChmdW5jdGlvbiAoZXZlbnROYW1lLCBoYW5kbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZkFsbEV2ZW50cyA9ICFldmVudE5hbWUgJiYgIWhhbmRsZSAmJiAhb3B0aW9ucztcblxuICAgICAgICAgICAgaWYgKG9mZkFsbEV2ZW50cykge1xuICAgICAgICAgICAgICAgIGV2ZW50c0xpc3QuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudC5uYW1lLCBldmVudC5oYW5kbGUsIGV2ZW50Lm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRXZlbnQoZXZlbnROYW1lLCBoYW5kbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnRJbk5hbWVzcGFjZSA9IHdyYXBFdmVudEluTmFtZXNwYWNlKGV2ZW50TmFtZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyRGVjb3JhdG9yID0gaGFuZGxlcnMuZ2V0KGhhbmRsZSk7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50SW5OYW1lc3BhY2UsIGhhbmRsZXJEZWNvcmF0b3IsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGV2ZW50c0xpc3QgPSBldmVudHNMaXN0LmZpbHRlcihmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lm5hbWUgIT09IGV2ZW50SW5OYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1N0cmluZ0NvbnRhaW5lZFNwYWNlKGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnROYW1lLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnNlZEV2ZW50TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChwYXJzZWRFdmVudE5hbWUsIGhhbmRsZSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZW1vdmVFdmVudChldmVudE5hbWUsIGhhbmRsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSkuYmluZChjb250ZXh0KVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldFBheW1lbnRVcmxXaXRoQ29uc2VudElkKHVybCwgY29uc2VudElkKSB7XG4gICAgbGV0IHBheW1lbnRVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICBwYXltZW50VXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2NvbnNlbnRJZCcsIGNvbnNlbnRJZCk7XG5cbiAgICByZXR1cm4gcGF5bWVudFVybC50b1N0cmluZygpO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFkZEV2ZW50T2JqZWN0OiBhZGRFdmVudE9iamVjdCxcbiAgICBpc0VtcHR5OiBpc0VtcHR5LFxuICAgIHVuaXE6IHVuaXEsXG4gICAgemlwT2JqZWN0OiB6aXBPYmplY3QsXG4gICAgcGFyYW06IHBhcmFtLFxuICAgIG9uY2U6IG9uY2UsXG4gICAgZ2V0UGF5bWVudFVybFdpdGhDb25zZW50SWQ6IGdldFBheW1lbnRVcmxXaXRoQ29uc2VudElkXG59XG4iLCJ2YXIgdmVyc2lvbiA9IHJlcXVpcmUoJy4vdmVyc2lvbicpO1xudmFyIEhlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcbnZhciBQb3N0TWVzc2FnZSA9IHJlcXVpcmUoJy4vcG9zdG1lc3NhZ2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExpZ2h0Qm94KGlzTW9iaWxlKSB7XG4gICAgICAgIHJlcXVpcmUoJy4vc3R5bGVzL2xpZ2h0Ym94LnNjc3MnKTtcbiAgICAgICAgdGhpcy5ldmVudE9iamVjdCA9IEhlbHBlcnMuYWRkRXZlbnRPYmplY3QodGhpcywgd3JhcEV2ZW50SW5OYW1lc3BhY2UpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBpc01vYmlsZSA/IERFRkFVTFRfT1BUSU9OU19NT0JJTEUgOiBERUZBVUxUX09QVElPTlM7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIENMQVNTX1BSRUZJWCA9ICd4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gnO1xuICAgIHZhciBDT01NT05fT1BUSU9OUyA9IHtcbiAgICAgICAgekluZGV4OiAxMDAwLFxuICAgICAgICBvdmVybGF5T3BhY2l0eTogJy42JyxcbiAgICAgICAgb3ZlcmxheUJhY2tncm91bmQ6ICcjMDAwMDAwJyxcbiAgICAgICAgY29udGVudEJhY2tncm91bmQ6ICcjZmZmZmZmJyxcbiAgICAgICAgY2xvc2VCeUtleWJvYXJkOiB0cnVlLFxuICAgICAgICBjbG9zZUJ5Q2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgc3Bpbm5lcjogJ3hzb2xsYScsXG4gICAgICAgIHNwaW5uZXJDb2xvcjogbnVsbCxcbiAgICAgICAgc3Bpbm5lclVybDogbnVsbCxcbiAgICAgICAgc3Bpbm5lclJvdGF0aW9uUGVyaW9kOiAwXG4gICAgfTtcbiAgICB2YXIgREVGQVVMVF9PUFRJT05TID0gT2JqZWN0LmFzc2lnbih7fSwgQ09NTU9OX09QVElPTlMsIHtcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICBjb250ZW50TWFyZ2luOiAnMTBweCdcbiAgICB9KTtcbiAgICB2YXIgREVGQVVMVF9PUFRJT05TX01PQklMRSA9IE9iamVjdC5hc3NpZ24oe30sIENPTU1PTl9PUFRJT05TLCB7XG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIGhlaWdodDogJzEwMCUnLCBcbiAgICAgICAgY29udGVudE1hcmdpbjogJzBweCdcbiAgICB9KTtcblxuICAgIHZhciBTUElOTkVSUyA9IHtcbiAgICAgICAgeHNvbGxhOiByZXF1aXJlKCcuL3NwaW5uZXJzL3hzb2xsYS5zdmcnKSxcbiAgICAgICAgcm91bmQ6IHJlcXVpcmUoJy4vc3Bpbm5lcnMvcm91bmQuc3ZnJyksXG4gICAgICAgIG5vbmU6ICcgJ1xuICAgIH07XG5cbiAgICB2YXIgTUlOX1BTX0RJTUVOU0lPTlMgPSB7XG4gICAgICAgIGhlaWdodDogNTAwLFxuICAgICAgICB3aWR0aDogNjAwXG4gICAgfTtcblxuICAgIHZhciBoYW5kbGVLZXl1cEV2ZW50TmFtZSA9IHdyYXBFdmVudEluTmFtZXNwYWNlKCdrZXl1cCcpO1xuICAgIHZhciBoYW5kbGVSZXNpemVFdmVudE5hbWUgPSB3cmFwRXZlbnRJbk5hbWVzcGFjZSgncmVzaXplJyk7XG5cbiAgICB2YXIgaGFuZGxlR2xvYmFsS2V5dXAgPSBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIHZhciBjbGlja0V2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgIGNsaWNrRXZlbnQuaW5pdEV2ZW50KGhhbmRsZUtleXVwRXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIGNsaWNrRXZlbnQuc291cmNlRXZlbnQgPSBldmVudDtcblxuICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY2xpY2tFdmVudCk7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZVNwZWNpZmljS2V5dXAgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuc291cmNlRXZlbnQud2hpY2ggPT0gMjcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VGcmFtZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZUdsb2JhbFJlc2l6ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmVzaXplRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgICAgcmVzaXplRXZlbnQuaW5pdEV2ZW50KGhhbmRsZVJlc2l6ZUV2ZW50TmFtZSwgZmFsc2UsIHRydWUpO1xuXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KHJlc2l6ZUV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cmFwRXZlbnRJbk5hbWVzcGFjZShldmVudE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIExpZ2h0Qm94Ll9OQU1FU1BBQ0UgKyAnXycgKyBldmVudE5hbWU7XG4gICAgfVxuXG4gICAgLyoqIFByaXZhdGUgTWVtYmVycyAqKi9cbiAgICBMaWdodEJveC5wcm90b3R5cGUudHJpZ2dlckV2ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0LnRyaWdnZXIuYXBwbHkodGhpcy5ldmVudE9iamVjdCwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgTGlnaHRCb3gucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7IC8vIHRoeCB3YWxzaDogaHR0cHM6Ly9kYXZpZHdhbHNoLm5hbWUvZGV0ZWN0LXNjcm9sbGJhci13aWR0aFxuICAgICAgICB2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgc2Nyb2xsRGl2LmNsYXNzTGlzdC5hZGQoXCJzY3JvbGxiYXItbWVhc3VyZVwiKTtcbiAgICAgICAgc2Nyb2xsRGl2LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsXG4gICAgICAgICAgICBcInBvc2l0aW9uOiBhYnNvbHV0ZTtcIiArXG4gICAgICAgICAgICBcInRvcDogLTk5OTlweFwiICtcbiAgICAgICAgICAgIFwid2lkdGg6IDUwcHhcIiArXG4gICAgICAgICAgICBcImhlaWdodDogNTBweFwiICtcbiAgICAgICAgICAgIFwib3ZlcmZsb3c6IHNjcm9sbFwiXG4gICAgICAgICk7XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JvbGxEaXYpO1xuXG4gICAgICAgIHZhciBzY3JvbGxiYXJXaWR0aCA9IHNjcm9sbERpdi5vZmZzZXRXaWR0aCAtIHNjcm9sbERpdi5jbGllbnRXaWR0aDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzY3JvbGxEaXYpO1xuXG4gICAgICAgIHJldHVybiBzY3JvbGxiYXJXaWR0aDtcbiAgICB9O1xuXG4gICAgLyoqIFB1YmxpYyBNZW1iZXJzICoqL1xuICAgIExpZ2h0Qm94LnByb3RvdHlwZS5vcGVuRnJhbWUgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHZhciBIYW5kbGVCb3VuZFNwZWNpZmljS2V5dXAgPSBoYW5kbGVTcGVjaWZpY0tleXVwLmJpbmQodGhpcyk7XG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgdmFyIHNwaW5uZXIgPSBvcHRpb25zLnNwaW5uZXIgPT09ICdjdXN0b20nICYmICEhb3B0aW9ucy5zcGlubmVyVXJsID9cbiAgICAgICAgICAgICc8aW1nIGNsYXNzPVwic3Bpbm5lci1jdXN0b21cIiBzcmM9XCInICsgZW5jb2RlVVJJKG9wdGlvbnMuc3Bpbm5lclVybCkgKyAnXCIgLz4nIDogU1BJTk5FUlNbb3B0aW9ucy5zcGlubmVyXSB8fCBPYmplY3QudmFsdWVzKFNQSU5ORVJTKVswXTtcblxuICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbiAoc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHZhciBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBob3N0LmNsYXNzTmFtZSA9IHNldHRpbmdzLnByZWZpeDtcblxuICAgICAgICAgICAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG92ZXJsYXkuY2xhc3NOYW1lID0gc2V0dGluZ3MucHJlZml4ICsgJy1vdmVybGF5JztcblxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRlbnQuY2xhc3NOYW1lID0gc2V0dGluZ3MucHJlZml4ICsgJy1jb250ZW50JyArICcgJyArIHNldHRpbmdzLnByZWZpeCArICctY29udGVudF9faGlkZGVuJztcblxuICAgICAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICAgICAgICAgaWZyYW1lLmNsYXNzTmFtZSA9IHNldHRpbmdzLnByZWZpeCArICctY29udGVudC1pZnJhbWUnO1xuICAgICAgICAgICAgaWZyYW1lLnNyYyA9IHNldHRpbmdzLnVybDtcbiAgICAgICAgICAgIGlmcmFtZS5mcmFtZUJvcmRlciA9ICcwJztcbiAgICAgICAgICAgIGlmcmFtZS5hbGxvd0Z1bGxzY3JlZW4gPSB0cnVlO1xuXG4gICAgICAgICAgICB2YXIgc3Bpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc3Bpbm5lci5jbGFzc05hbWUgPSBzZXR0aW5ncy5wcmVmaXggKyAnLXNwaW5uZXInO1xuICAgICAgICAgICAgc3Bpbm5lci5pbm5lckhUTUwgPSBzZXR0aW5ncy5zcGlubmVyO1xuXG4gICAgICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGlmcmFtZSk7XG5cbiAgICAgICAgICAgIGhvc3QuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gICAgICAgICAgICBob3N0LmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgICAgICAgICAgaG9zdC5hcHBlbmRDaGlsZChzcGlubmVyKTtcblxuICAgICAgICAgICAgcmV0dXJuIGhvc3Q7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGJvZHlFbGVtZW50ID0gZ2xvYmFsLmRvY3VtZW50LmJvZHk7XG4gICAgICAgIHZhciBsaWdodEJveEVsZW1lbnQgPSB0ZW1wbGF0ZSh7XG4gICAgICAgICAgICBwcmVmaXg6IENMQVNTX1BSRUZJWCxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgc3Bpbm5lcjogc3Bpbm5lclxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGxpZ2h0Qm94T3ZlcmxheUVsZW1lbnQgPSBsaWdodEJveEVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyBDTEFTU19QUkVGSVggKyAnLW92ZXJsYXknKTtcbiAgICAgICAgdmFyIGxpZ2h0Qm94Q29udGVudEVsZW1lbnQgPSBsaWdodEJveEVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyBDTEFTU19QUkVGSVggKyAnLWNvbnRlbnQnKTtcbiAgICAgICAgdmFyIGxpZ2h0Qm94SWZyYW1lRWxlbWVudCA9IGxpZ2h0Qm94Q29udGVudEVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyBDTEFTU19QUkVGSVggKyAnLWNvbnRlbnQtaWZyYW1lJyk7XG4gICAgICAgIHZhciBsaWdodEJveFNwaW5uZXJFbGVtZW50ID0gbGlnaHRCb3hFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy4nICsgQ0xBU1NfUFJFRklYICsgJy1zcGlubmVyJyk7XG5cbiAgICAgICAgdmFyIHBzRGltZW5zaW9ucyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiB3aXRoRGVmYXVsdFBYVW5pdChNSU5fUFNfRElNRU5TSU9OUy53aWR0aCksXG4gICAgICAgICAgICBoZWlnaHQ6IHdpdGhEZWZhdWx0UFhVbml0KE1JTl9QU19ESU1FTlNJT05TLmhlaWdodClcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiB3aXRoRGVmYXVsdFBYVW5pdCh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGlzU3RyaW5nV2l0aG91dFVuaXQgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFN0cmluZyhwYXJzZUZsb2F0KHZhbHVlKSkubGVuZ3RoID09PSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmdXaXRob3V0VW5pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlICsgJ3B4JyA6IHZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICBsaWdodEJveEVsZW1lbnQuc3R5bGUuekluZGV4ID0gb3B0aW9ucy56SW5kZXg7XG5cbiAgICAgICAgbGlnaHRCb3hPdmVybGF5RWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gb3B0aW9ucy5vdmVybGF5T3BhY2l0eTtcbiAgICAgICAgbGlnaHRCb3hPdmVybGF5RWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLm92ZXJsYXlCYWNrZ3JvdW5kO1xuXG4gICAgICAgIGxpZ2h0Qm94Q29udGVudEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5jb250ZW50QmFja2dyb3VuZDtcbiAgICAgICAgbGlnaHRCb3hDb250ZW50RWxlbWVudC5zdHlsZS5tYXJnaW4gPSB3aXRoRGVmYXVsdFBYVW5pdChvcHRpb25zLmNvbnRlbnRNYXJnaW4pO1xuICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLndpZHRoID0gb3B0aW9ucy53aWR0aCA/IHdpdGhEZWZhdWx0UFhVbml0KG9wdGlvbnMud2lkdGgpIDogJ2F1dG8nO1xuICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0ID8gd2l0aERlZmF1bHRQWFVuaXQob3B0aW9ucy5oZWlnaHQpIDogJ2F1dG8nO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNwaW5uZXJDb2xvcikge1xuICAgICAgICAgICAgbGlnaHRCb3hTcGlubmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdwYXRoJykuc3R5bGUuZmlsbCA9IG9wdGlvbnMuc3Bpbm5lckNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3Bpbm5lciA9PT0gJ2N1c3RvbScpIHtcbiAgICAgICAgICAgIHZhciBzcGlubmVyQ3VzdG9tID0gbGlnaHRCb3hTcGlubmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc3Bpbm5lci1jdXN0b20nKTtcbiAgICAgICAgICAgIHNwaW5uZXJDdXN0b20uc3R5bGVbJy13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uJ10gPSBvcHRpb25zLnNwaW5uZXJSb3RhdGlvblBlcmlvZCArICdzOyc7XG4gICAgICAgICAgICBzcGlubmVyQ3VzdG9tLnN0eWxlWydhbmltYXRpb24tZHVyYXRpb24nXSA9IG9wdGlvbnMuc3Bpbm5lclJvdGF0aW9uUGVyaW9kICsgJ3M7JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNsb3NlQnlDbGljaykge1xuICAgICAgICAgICAgbGlnaHRCb3hPdmVybGF5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUZyYW1lKCk7XG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHlFbGVtZW50LmFwcGVuZENoaWxkKGxpZ2h0Qm94RWxlbWVudCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY2xvc2VCeUtleWJvYXJkKSB7XG5cbiAgICAgICAgICAgIGJvZHlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoaGFuZGxlS2V5dXBFdmVudE5hbWUsIEhhbmRsZUJvdW5kU3BlY2lmaWNLZXl1cCk7XG5cbiAgICAgICAgICAgIGJvZHlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgaGFuZGxlR2xvYmFsS2V5dXAsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG93Q29udGVudCA9IEhlbHBlcnMub25jZSgoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGlkZVNwaW5uZXIob3B0aW9ucyk7XG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfUFJFRklYICsgJy1jb250ZW50X19oaWRkZW4nKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdsb2FkJyk7XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHZhciBsaWdodEJveFJlc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBvcHRpb25zLndpZHRoIDogcHNEaW1lbnNpb25zLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0ID8gb3B0aW9ucy5oZWlnaHQgOiBwc0RpbWVuc2lvbnMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLmxlZnQgPSAnMHB4JztcbiAgICAgICAgICAgIGxpZ2h0Qm94Q29udGVudEVsZW1lbnQuc3R5bGUudG9wID0gJzBweCc7XG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc4cHgnO1xuICAgICAgICAgICAgbGlnaHRCb3hDb250ZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IHdpdGhEZWZhdWx0UFhVbml0KHdpZHRoKTtcbiAgICAgICAgICAgIGxpZ2h0Qm94Q29udGVudEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gd2l0aERlZmF1bHRQWFVuaXQoaGVpZ2h0KTtcblxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lcldpZHRoID0gbGlnaHRCb3hFbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckhlaWdodCA9IGxpZ2h0Qm94RWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgICAgIHZhciBjb250ZW50V2lkdGggPSBvdXRlcldpZHRoKGxpZ2h0Qm94Q29udGVudEVsZW1lbnQpLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQgPSBvdXRlckhlaWdodChsaWdodEJveENvbnRlbnRFbGVtZW50KTtcblxuICAgICAgICAgICAgdmFyIGhvck1hcmdpbiA9IGNvbnRlbnRXaWR0aCAtIGxpZ2h0Qm94Q29udGVudEVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgdmVydE1hcmdpbiA9IGNvbnRlbnRIZWlnaHQgLSBsaWdodEJveENvbnRlbnRFbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICAgICAgICAgICAgdmFyIHdpZHRoQWZ0ZXJSZXNpemUgPSBjb250YWluZXJXaWR0aCAtIGhvck1hcmdpbjtcblxuICAgICAgICAgICAgaWYgKHdpZHRoQWZ0ZXJSZXNpemUgPiBjb250ZW50V2lkdGgpIHtcbiAgICAgICAgICAgICAgICB3aWR0aEFmdGVyUmVzaXplID0gY29udGVudFdpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAod2lkdGhBZnRlclJlc2l6ZSA+IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhBZnRlclJlc2l6ZSA9IGNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0QWZ0ZXJSZXNpemUgPSBjb250YWluZXJIZWlnaHQgLSB2ZXJ0TWFyZ2luO1xuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0QWZ0ZXJSZXNpemUgPiBjb250ZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0QWZ0ZXJSZXNpemUgPSBjb250ZW50SGVpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGVpZ2h0QWZ0ZXJSZXNpemUgPiBjb250YWluZXJIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHRBZnRlclJlc2l6ZSA9IGNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGlnaHRCb3hDb250ZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IHdpdGhEZWZhdWx0UFhVbml0KHdpZHRoQWZ0ZXJSZXNpemUpO1xuICAgICAgICAgICAgbGlnaHRCb3hDb250ZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSB3aXRoRGVmYXVsdFBYVW5pdChoZWlnaHRBZnRlclJlc2l6ZSk7XG5cbiAgICAgICAgICAgIHZhciBsZWZ0T2Zmc2V0ID0gKCh3aW5kb3cuaW5uZXJXaWR0aCAtIHdpZHRoQWZ0ZXJSZXNpemUpIC8gMikgLSAoaG9yTWFyZ2luIC8gMik7XG4gICAgICAgICAgICB2YXIgdG9wT2Zmc2V0ID0gKCh3aW5kb3cuaW5uZXJIZWlnaHQgLSBoZWlnaHRBZnRlclJlc2l6ZSkgLyAyKSAgLSAodmVydE1hcmdpbiAvIDIpO1xuXG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLmxlZnQgPSB3aXRoRGVmYXVsdFBYVW5pdChNYXRoLm1heChsZWZ0T2Zmc2V0LCAwKSk7XG4gICAgICAgICAgICBsaWdodEJveENvbnRlbnRFbGVtZW50LnN0eWxlLnRvcCA9IHdpdGhEZWZhdWx0UFhVbml0KE1hdGgubWF4KHRvcE9mZnNldCwgMCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIG91dGVyV2lkdGgoZWwpIHtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IGVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cbiAgICAgICAgICAgIHdpZHRoICs9IHBhcnNlSW50KHN0eWxlLm1hcmdpbkxlZnQpICsgcGFyc2VJbnQoc3R5bGUubWFyZ2luUmlnaHQpO1xuICAgICAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb3V0ZXJIZWlnaHQoZWwpIHtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsKTtcblxuICAgICAgICAgICAgaGVpZ2h0ICs9IHBhcnNlSW50KHN0eWxlLm1hcmdpblRvcCkgKyBwYXJzZUludChzdHlsZS5tYXJnaW5Cb3R0b20pO1xuICAgICAgICAgICAgcmV0dXJuIGhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBib2R5U3R5bGVzO1xuICAgICAgICB2YXIgaGlkZVNjcm9sbGJhciA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBib2R5U3R5bGVzID0gSGVscGVycy56aXBPYmplY3QoWydvdmVyZmxvdycsICdwYWRkaW5nUmlnaHQnXS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBba2V5LCBnZXRDb21wdXRlZFN0eWxlKGJvZHlFbGVtZW50KVtrZXldXTtcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdmFyIGJvZHlQYWQgPSBwYXJzZUludCgoZ2V0Q29tcHV0ZWRTdHlsZShib2R5RWxlbWVudClbJ3BhZGRpbmdSaWdodCddIHx8IDApLCAxMCk7XG4gICAgICAgICAgICBib2R5RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgYm9keUVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gd2l0aERlZmF1bHRQWFVuaXQoYm9keVBhZCArIHRoaXMubWVhc3VyZVNjcm9sbGJhcigpKTtcbiAgICAgICAgfSkuYmluZCh0aGlzKTtcblxuICAgICAgICB2YXIgcmVzZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoYm9keVN0eWxlcykge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGJvZHlTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHlFbGVtZW50LnN0eWxlW2tleV0gPSBib2R5U3R5bGVzW2tleV07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgc2hvd1NwaW5uZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaWdodEJveFNwaW5uZXJFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBoaWRlU3Bpbm5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpZ2h0Qm94U3Bpbm5lckVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgbG9hZFRpbWVyO1xuICAgICAgICBsaWdodEJveElmcmFtZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uIGhhbmRsZUxvYWQoZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciB0aW1lb3V0ID0gIShvcHRpb25zLndpZHRoICYmIG9wdGlvbnMuaGVpZ2h0KSA/IChvcHRpb25zLnJlc2l6ZVRpbWVvdXQgfHwgMzAwMDApIDogMTAwMDsgLy8gMzAwMDAgaWYgcHNEaW1lbnNpb25zIHdpbGwgbm90IGFycml2ZSBhbmQgY3VzdG9tIHRpbWVvdXQgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgICBsb2FkVGltZXIgPSBnbG9iYWwuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGlnaHRCb3hSZXNpemUoKTtcbiAgICAgICAgICAgICAgICBzaG93Q29udGVudCgpO1xuICAgICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgICAgICBsaWdodEJveElmcmFtZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIGhhbmRsZUxvYWQpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBpZnJhbWVXaW5kb3cgPSBsaWdodEJveElmcmFtZUVsZW1lbnQuY29udGVudFdpbmRvdyB8fCBsaWdodEJveElmcmFtZUVsZW1lbnQ7XG5cbiAgICAgICAgLy8gQ3Jvc3Mtd2luZG93IGNvbW11bmljYXRpb25cbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbmV3IFBvc3RNZXNzYWdlKGlmcmFtZVdpbmRvdyk7XG4gICAgICAgIGlmIChvcHRpb25zLndpZHRoICYmIG9wdGlvbnMuaGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2RpbWVuc2lvbnMnLCAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxpZ2h0Qm94UmVzaXplKCk7XG4gICAgICAgICAgICAgICAgc2hvd0NvbnRlbnQoKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZS5vbignZGltZW5zaW9ucycsIChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGV2ZW50LmRldGFpbDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5kaW1lbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHBzRGltZW5zaW9ucyA9IEhlbHBlcnMuemlwT2JqZWN0KFsnd2lkdGgnLCAnaGVpZ2h0J10ubWFwKGZ1bmN0aW9uIChkaW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbZGltLCBNYXRoLm1heChNSU5fUFNfRElNRU5TSU9OU1tkaW1dIHx8IDAsIGRhdGEuZGltZW5zaW9uc1tkaW1dIHx8IDApICsgJ3B4J107XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICBsaWdodEJveFJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzaG93Q29udGVudCgpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVzc2FnZS5vbignd2lkZ2V0LWRldGVjdGlvbicsIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2Uuc2VuZCgnd2lkZ2V0LWRldGVjdGVkJywge3ZlcnNpb246IHZlcnNpb24sIGxpZ2h0Qm94T3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9KS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCd3aWRnZXQtY2xvc2UnLCAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUZyYW1lKCk7XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2Nsb3NlJywgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VGcmFtZSgpO1xuICAgICAgICB9KS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdzdGF0dXMnLCAoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCgnc3RhdHVzJywgZXZlbnQuZGV0YWlsKTtcbiAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMubWVzc2FnZS5vbigndXNlci1jb3VudHJ5JywgKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ3VzZXItY291bnRyeScsIGV2ZW50LmRldGFpbCk7XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLm1lc3NhZ2Uub24oJ2ZjcCcsIChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdmY3AnLCBldmVudC5kZXRhaWwpO1xuICAgICAgICB9KS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlLm9uKCdlcnJvcicsIChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdlcnJvcicsIGV2ZW50LmRldGFpbCk7XG4gICAgICAgIH0pLmJpbmQodGhpcykpO1xuXG4gICAgICAgIC8vIFJlc2l6ZVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihoYW5kbGVSZXNpemVFdmVudE5hbWUsIGxpZ2h0Qm94UmVzaXplKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZUdsb2JhbFJlc2l6ZSk7XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgY2xvc2VcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB0aGlzLm9uKCdjbG9zZScsIGZ1bmN0aW9uIGhhbmRsZUNsb3NlKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGF0Lm1lc3NhZ2Uub2ZmKCk7XG4gICAgICAgICAgICBib2R5RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGhhbmRsZUtleXVwRXZlbnROYW1lLCBIYW5kbGVCb3VuZFNwZWNpZmljS2V5dXApXG4gICAgICAgICAgICBib2R5RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGhhbmRsZUdsb2JhbEtleXVwKTtcblxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZUdsb2JhbFJlc2l6ZSlcblxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoaGFuZGxlUmVzaXplRXZlbnROYW1lLCBsaWdodEJveFJlc2l6ZSk7XG4gICAgICAgICAgICBsaWdodEJveEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaWdodEJveEVsZW1lbnQpO1xuICAgICAgICAgICAgcmVzZXRTY3JvbGxiYXIoKTtcbiAgICAgICAgICAgIHRoYXQub2ZmKCdjbG9zZScsIGhhbmRsZUNsb3NlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2hvd1NwaW5uZXIoKTtcbiAgICAgICAgaGlkZVNjcm9sbGJhcigpO1xuICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCgnb3BlbicpO1xuICAgIH07XG5cbiAgICBMaWdodEJveC5wcm90b3R5cGUuY2xvc2VGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubW9kYWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdjbG9zZScpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIExpZ2h0Qm94LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jbG9zZUZyYW1lKCk7XG4gICAgfTtcblxuICAgIExpZ2h0Qm94LnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ldmVudE9iamVjdC5vbi5hcHBseSh0aGlzLmV2ZW50T2JqZWN0LCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBMaWdodEJveC5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0Lm9mZi5hcHBseSh0aGlzLmV2ZW50T2JqZWN0LCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBMaWdodEJveC5wcm90b3R5cGUuZ2V0UG9zdE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfTtcblxuICAgIExpZ2h0Qm94Ll9OQU1FU1BBQ0UgPSAnLnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveCc7XG5cbiAgICByZXR1cm4gTGlnaHRCb3g7XG59KSgpO1xuIiwiZnVuY3Rpb24gb2JqZWN0QXNzaWduKCkge1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduIFBvbHlmaWxsXG4gIE9iamVjdC5hc3NpZ258fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsXCJhc3NpZ25cIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oZSxyKXtcInVzZSBzdHJpY3RcIjtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCBmaXJzdCBhcmd1bWVudCB0byBvYmplY3RcIik7Zm9yKHZhciB0PU9iamVjdChlKSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIG89YXJndW1lbnRzW25dO2lmKG51bGwhPW8pZm9yKHZhciBhPU9iamVjdC5rZXlzKE9iamVjdChvKSksYz0wLGI9YS5sZW5ndGg7YzxiO2MrKyl7dmFyIGk9YVtjXSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxpKTt2b2lkIDAhPT1sJiZsLmVudW1lcmFibGUmJih0W2ldPW9baV0pfX1yZXR1cm4gdH19KTtcbn1cblxuZnVuY3Rpb24gYXJyYXlGb3JFYWNoKCkge1xuICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaHx8KEFycmF5LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHIsbyl7dmFyIHQsbjtpZihudWxsPT10aGlzKXRocm93IG5ldyBUeXBlRXJyb3IoXCIgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkXCIpO3ZhciBlPU9iamVjdCh0aGlzKSxpPWUubGVuZ3RoPj4+MDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IocitcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYodD1vKSxuPTA7bjxpOyl7dmFyIGY7biBpbiBlJiYoZj1lW25dLHIuY2FsbCh0LGYsbixlKSksbisrfX0pO1xufVxuXG5mdW5jdGlvbiBhcHBseVBvbHlmaWxscygpIHtcbiAgb2JqZWN0QXNzaWduKCk7XG4gIGFycmF5Rm9yRWFjaCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXBwbHlQb2x5ZmlsbHM6IGFwcGx5UG9seWZpbGxzXG59XG4iLCJ2YXIgSGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gd3JhcEV2ZW50SW5OYW1lc3BhY2UoZXZlbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBQb3N0TWVzc2FnZS5fTkFNRVNQQUNFICsgJ18nICsgZXZlbnROYW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFBvc3RNZXNzYWdlKHdpbmRvdykge1xuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0ID0gSGVscGVycy5hZGRFdmVudE9iamVjdCh0aGlzLCB3cmFwRXZlbnRJbk5hbWVzcGFjZSk7XG4gICAgICAgIHRoaXMubGlua2VkV2luZG93ID0gd2luZG93O1xuXG4gICAgICAgIGdsb2JhbC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciAmJiBnbG9iYWwud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgIT09IHRoaXMubGlua2VkV2luZG93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHt9O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSAnc3RyaW5nJyAmJiBnbG9iYWwuSlNPTiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGdsb2JhbC5KU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50T2JqZWN0LnRyaWdnZXIobWVzc2FnZS5jb21tYW5kLCBtZXNzYWdlLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvKiogUHJpdmF0ZSBNZW1iZXJzICoqL1xuICAgIFBvc3RNZXNzYWdlLnByb3RvdHlwZS5ldmVudE9iamVjdCA9IG51bGw7XG4gICAgUG9zdE1lc3NhZ2UucHJvdG90eXBlLmxpbmtlZFdpbmRvdyA9IG51bGw7XG5cbiAgICAvKiogUHVibGljIE1lbWJlcnMgKiovXG4gICAgUG9zdE1lc3NhZ2UucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbihjb21tYW5kLCBkYXRhLCB0YXJnZXRPcmlnaW4pIHtcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldE9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0YXJnZXRPcmlnaW4gPSAnKic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubGlua2VkV2luZG93IHx8IHRoaXMubGlua2VkV2luZG93LnBvc3RNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgZ2xvYmFsLndpbmRvdy5KU09OID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtlZFdpbmRvdy5wb3N0TWVzc2FnZShnbG9iYWwuSlNPTi5zdHJpbmdpZnkoe2RhdGE6IGRhdGEsIGNvbW1hbmQ6IGNvbW1hbmR9KSwgdGFyZ2V0T3JpZ2luKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIFBvc3RNZXNzYWdlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZXZlbnRPYmplY3Qub24oZXZlbnQsIGhhbmRsZSwgb3B0aW9ucyk7XG4gICAgfTtcblxuICAgIFBvc3RNZXNzYWdlLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGhhbmRsZSwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmV2ZW50T2JqZWN0Lm9mZihldmVudCwgaGFuZGxlLCBvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgUG9zdE1lc3NhZ2UuX05BTUVTUEFDRSA9ICdQT1NUX01FU1NBR0UnO1xuXG5cbiAgICByZXR1cm4gUG9zdE1lc3NhZ2U7XG59KSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgd2lkdGg9XFxcIjQ3cHhcXFwiIGhlaWdodD1cXFwiNDdweFxcXCIgY2xhc3M9XFxcInNwaW5uZXItcm91bmRcXFwiPjxwYXRoIGQ9XFxcIk00Ljc4NTI3MjgsMTAuNDIxMDg3NSBDMi45NDExMTY2NCwxMy4wNTUyMTk3IDEuNjM3NzcxMDksMTYuMDk0NjEwNiAxLjAzNzUzOTU2LDE5LjM3Njg1NTYgTDUuMTY2Mzg5NzEsMTkuMzc2ODU1NiBDNS42NDI5NjE1LDE3LjE4NzU1NCA2LjUwMTI1MjQzLDE1LjEzOTE2NCA3LjY2NzY4ODk5LDEzLjMwNTMwNSBMNS45NTU3MjQyOCwxMS41OTIyNzA1IEw0Ljc4NTI3MjgsMTAuNDIxMDg3NSBMNC43ODUyNzI4LDEwLjQyMTA4NzUgWiBNMTAuNDY5MzA0OCw0Ljc0NTY1NjE1IEMxMy4xMjc0ODczLDIuODkwODA2MSAxNi4xOTY1OTc2LDEuNTg2NzQ2NDggMTkuNTEwMDE2MSwxIEwxOS41MTAwMTYxLDQuOTk1MjM5MzQgQzE3LjI3MTA5MjMsNS40ODc5Nzc4MiAxNS4xODAzMTkzLDYuMzgwODUyOSAxMy4zMTY2OTA3LDcuNTk0ODIxNTMgTDExLjYzMzczMzksNS45MTA4MTI5MyBMMTAuNDY5MzA0OCw0Ljc0NTY1NjE1IEwxMC40NjkzMDQ4LDQuNzQ1NjU2MTUgWiBNNDIuMjQyNjMwOSwzNi41Mzg4Mzg2IEM0NC4xMTEyNzgyLDMzLjg1NzUwMTYgNDUuNDIwNjQ2MSwzMC43NTgxNTA0IDQ2LDI3LjQxMTcyNjkgTDQxLjk0NDEyMTEsMjcuNDExNzI2OSBDNDEuNDUyNzk0NSwyOS42NjE4OTI2IDQwLjU1ODM2OTIsMzEuNzYyOTExIDM5LjM0MDQ0MTIsMzMuNjM0OTM1NiBMNDEuMDMzMjM0NywzNS4zMjg3ODY5IEw0Mi4yNDI1MzA2LDM2LjUzODgzODYgTDQyLjI0MjYzMDksMzYuNTM4ODM4NiBaIE0zNi41NzA3NDQxLDQyLjIyNjQyMjcgQzMzLjkxNjc3NzMsNDQuMDg2Nzk2NyAzMC44NTA5NzkzLDQ1LjM5NzI4NDIgMjcuNTM5ODY5Myw0NS45OTExNjE2IEwyNy41Mzk4NjkzLDQxLjc5NjA1NDkgQzI5LjczNzY0MDIsNDEuMzIwMjkwMSAzMS43OTM2ODQxLDQwLjQ1OTM1MzYgMzMuNjMzNjI0NiwzOS4yODc1NjggTDM1LjM1NTQyNTgsNDEuMDEwNDQ1MyBMMzYuNTcwNzQ0MSw0Mi4yMjY1MjMxIEwzNi41NzA3NDQxLDQyLjIyNjQyMjcgWiBNNC43MTE3OTk2NSwzNi40NzMxNTM1IEMyLjg2NzQ0Mjc0LDMzLjgwNjk4MjMgMS41NzQ2MzYzNywzMC43MzA5MzIyIDEsMjcuNDExODI3MyBMNS4xNjg4OTkwNCwyNy40MTE4MjczIEM1LjY0ODI4MTI4LDI5LjYwNzM1NTkgNi41MTE1OTA4NywzMS42NjEwNjkgNy42ODQ2NTIwNSwzMy40OTg0NDMyIEw1Ljk1NTcyNDI4LDM1LjIyODQ1MTUgTDQuNzExNzk5NjUsMzYuNDczMTUzNSBMNC43MTE3OTk2NSwzNi40NzMxNTM1IFogTTEwLjM2NDAxMzMsNDIuMTgwNDIzIEMxMy4wNDYyODU0LDQ0LjA3NDU0MzUgMTYuMTUyNzM0NSw0NS40MDU1MiAxOS41MTAxMTY1LDQ2IEwxOS41MTAxMTY1LDQxLjc4MjE5NDcgQzE3LjI4MTczMTksNDEuMjkxNjY1OCAxNS4yMDAwOTI4LDQwLjQwNDgxNjkgMTMuMzQzMDg4OSwzOS4xOTk1ODYyIEwxMS42MzM3MzM5LDQwLjkxMDAwOTQgTDEwLjM2NDAxMzMsNDIuMTgwNTIzNSBMMTAuMzY0MDEzMyw0Mi4xODA0MjMgWiBNNDIuMTY4ODU2NywxMC4zNTU3MDM4IEM0NC4wMzczMDMxLDEzLjAwNDgwMDggNDUuMzU3NDExLDE2LjA2NzQ5MjkgNDUuOTYyNjYxMiwxOS4zNzY4NTU2IEw0MS45NDY5MzE2LDE5LjM3Njg1NTYgQzQxLjQ1ODUxNTgsMTcuMTMyODE2NCA0MC41NjkyMDk1LDE1LjAzNjkyMDIgMzkuMzU4MDA2NSwxMy4xNjg0MTA5IEw0MS4wMzM1MzU4LDExLjQ5MTgzNDYgTDQyLjE2ODk1NywxMC4zNTU3MDM4IEw0Mi4xNjg4NTY3LDEwLjM1NTcwMzggWiBNMzYuNDY1MTUxNiw0LjY5OTk1NzgyIEMzMy44MzU1NzU0LDIuODc4NjUzMzYgMzAuODA3MTE2MiwxLjU5NDg4MTc5IDI3LjU0MDA3MDEsMS4wMDg4MzgzNiBMMjcuNTQwMDcwMSw0Ljk4MTE3ODMxIEMyOS43NDg0ODA1LDUuNDU5MTUyNzIgMzEuODEzNzU4Nyw2LjMyNjAxNDkgMzMuNjYwNDI0Miw3LjUwNjQzNzk0IEwzNS4zNTU1MjYyLDUuODEwMjc2NiBMMzYuNDY1MTUxNiw0LjY5OTk1NzgyIEwzNi40NjUxNTE2LDQuNjk5OTU3ODIgWlxcXCIgZmlsbD1cXFwiI0NDQ0NDQ1xcXCI+PC9wYXRoPjwvc3ZnPlwiO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgY2xhc3M9XFxcInNwaW5uZXIteHNvbGxhXFxcIiB3aWR0aD1cXFwiNTZcXFwiIGhlaWdodD1cXFwiNTVcXFwiPjxwYXRoIGNsYXNzPVxcXCJzcGlubmVyLXhzb2xsYS14XFxcIiBkPVxcXCJNMjEuMDMgNS4wNDJsLTIuMTEyLTIuMTU2LTMuNjU3IDMuNjk1LTMuNjU3LTMuNjk1LTIuMTEyIDIuMTU2IDMuNjU5IDMuNjczLTMuNjU5IDMuNjk2IDIuMTEyIDIuMTU3IDMuNjU3LTMuNjk3IDMuNjU3IDMuNjk3IDIuMTEyLTIuMTU3LTMuNjQ4LTMuNjk2IDMuNjQ4LTMuNjczelxcXCIgZmlsbD1cXFwiI0YyNTQyRFxcXCI+PC9wYXRoPjxwYXRoIGNsYXNzPVxcXCJzcGlubmVyLXhzb2xsYS1zXFxcIiBkPVxcXCJNNDEuMjMyIDYuODk2bDIuOTQxLTIuOTc0LTIuMTM0LTIuMTMyLTIuOTIgMi45NzMtLjAwNS0uMDA4LTIuMTM0IDIuMTM1LjAwNS4wMDgtLjAwNS4wMDUgMy43OTIgMy44Mi0yLjkxNSAyLjk0NyAyLjExMiAyLjE1NiA1LjA2LTUuMTExLTMuNzk4LTMuODE2LjAwMS0uMDAxelxcXCIgZmlsbD1cXFwiI0ZDQ0EyMFxcXCI+PC9wYXRoPjxwYXRoIGNsYXNzPVxcXCJzcGlubmVyLXhzb2xsYS1vXFxcIiBkPVxcXCJNNDguMDY2IDI5LjE1OWMtMS41MzYgMC0yLjc2MSAxLjI2My0yLjc2MSAyLjc5IDAgMS41MjQgMS4yMjYgMi43NjUgMi43NjEgMi43NjUgMS41MDkgMCAyLjczNi0xLjI0MiAyLjczNi0yLjc2NSAwLTEuNTI2LTEuMjI3LTIuNzktMi43MzYtMi43OW0wIDguNTkzYy0zLjE3OSAwLTUuNzcxLTIuNTk0LTUuNzcxLTUuODA0IDAtMy4yMTMgMi41OTItNS44MDggNS43NzEtNS44MDggMy4xNTUgMCA1Ljc0NSAyLjU5NCA1Ljc0NSA1LjgwOCAwIDMuMjEtMi41ODkgNS44MDQtNS43NDUgNS44MDRcXFwiIGZpbGw9XFxcIiM4QzNFQTRcXFwiPjwvcGF0aD48cGF0aCBjbGFzcz1cXFwic3Bpbm5lci14c29sbGEtbFxcXCIgZD1cXFwiTTI0LjM4OSA0Mi4zMjNoMi45OXYxMC40MzdoLTIuOTl2LTEwLjQzN3ptNC4zMzQgMGgyLjk4OXYxMC40MzdoLTIuOTg5di0xMC40Mzd6XFxcIiBmaWxsPVxcXCIjQjVEQzIwXFxcIj48L3BhdGg+PHBhdGggY2xhc3M9XFxcInNwaW5uZXIteHNvbGxhLWFcXFwiIGQ9XFxcIk03Ljc5NiAzMS44OThsMS40MDQgMi40NTdoLTIuODM1bDEuNDMxLTIuNDU3aC0uMDAxem0tLjAwMS01Ljc1N2wtNi4zNjMgMTEuMTAyaDEyLjcwM2wtNi4zNDEtMTEuMTAyelxcXCIgZmlsbD1cXFwiIzY2Q0NEQVxcXCI+PC9wYXRoPjwvc3ZnPlwiO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdzYXNzaWZ5JykoJy54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3h7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTstd2Via2l0LWFuaW1hdGlvbjp4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtZmFkZWluIDAuMTVzO2FuaW1hdGlvbjp4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtZmFkZWluIDAuMTVzfS54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtb3ZlcmxheXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDt6LWluZGV4OjF9LnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDowO2xlZnQ6MDt6LWluZGV4OjN9LnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1jb250ZW50X19oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDotMX0ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LWNvbnRlbnQtaWZyYW1le3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOjA7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTtkaXNwbGF5Om5vbmU7ei1pbmRleDoyO3BvaW50ZXItZXZlbnRzOm5vbmV9LnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlubmVyIC5zcGlubmVyLXhzb2xsYXt3aWR0aDo1NnB4O2hlaWdodDo1NXB4O21hcmdpbi10b3A6LTI4cHg7bWFyZ2luLWxlZnQ6LTI2cHh9LnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlubmVyIC5zcGlubmVyLXhzb2xsYSAuc3Bpbm5lci14c29sbGEteCwueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXIgLnNwaW5uZXIteHNvbGxhIC5zcGlubmVyLXhzb2xsYS1zLC54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lciAuc3Bpbm5lci14c29sbGEgLnNwaW5uZXIteHNvbGxhLW8sLnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlubmVyIC5zcGlubmVyLXhzb2xsYSAuc3Bpbm5lci14c29sbGEtbCwueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXIgLnNwaW5uZXIteHNvbGxhIC5zcGlubmVyLXhzb2xsYS1hey13ZWJraXQtYW5pbWF0aW9uOnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDstd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6Ym90aDthbmltYXRpb246eHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LWJvdW5jZWRlbGF5IDFzIGluZmluaXRlIGVhc2UtaW4tb3V0O2FuaW1hdGlvbi1maWxsLW1vZGU6Ym90aH0ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXIgLnNwaW5uZXIteHNvbGxhIC5zcGlubmVyLXhzb2xsYS14ey13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OjBzO2FuaW1hdGlvbi1kZWxheTowc30ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXIgLnNwaW5uZXIteHNvbGxhIC5zcGlubmVyLXhzb2xsYS1zey13ZWJraXQtYW5pbWF0aW9uLWRlbGF5Oi4yczthbmltYXRpb24tZGVsYXk6LjJzfS54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lciAuc3Bpbm5lci14c29sbGEgLnNwaW5uZXIteHNvbGxhLW97LXdlYmtpdC1hbmltYXRpb24tZGVsYXk6LjRzO2FuaW1hdGlvbi1kZWxheTouNHN9LnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlubmVyIC5zcGlubmVyLXhzb2xsYSAuc3Bpbm5lci14c29sbGEtbHstd2Via2l0LWFuaW1hdGlvbi1kZWxheTouNnM7YW5pbWF0aW9uLWRlbGF5Oi42c30ueHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW5uZXIgLnNwaW5uZXIteHNvbGxhIC5zcGlubmVyLXhzb2xsYS1hey13ZWJraXQtYW5pbWF0aW9uLWRlbGF5Oi44czthbmltYXRpb24tZGVsYXk6LjhzfS54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lciAuc3Bpbm5lci1yb3VuZHttYXJnaW4tdG9wOi0yM3B4O21hcmdpbi1sZWZ0Oi0yM3B4Oy13ZWJraXQtYW5pbWF0aW9uOnhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGluIDNzIGluZmluaXRlIGxpbmVhcjthbmltYXRpb246eHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW4gM3MgaW5maW5pdGUgbGluZWFyfS54cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3Bpbm5lciAuc3Bpbm5lci1jdXN0b217LXdlYmtpdC1hbmltYXRpb246eHBheXN0YXRpb24td2lkZ2V0LWxpZ2h0Ym94LXNwaW4gaW5maW5pdGUgbGluZWFyO2FuaW1hdGlvbjp4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtc3BpbiBpbmZpbml0ZSBsaW5lYXJ9QC13ZWJraXQta2V5ZnJhbWVzIHhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1ib3VuY2VkZWxheXswJSw4MCUsMTAwJXtvcGFjaXR5OjB9NDAle29wYWNpdHk6MX19QGtleWZyYW1lcyB4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtYm91bmNlZGVsYXl7MCUsODAlLDEwMCV7b3BhY2l0eTowfTQwJXtvcGFjaXR5OjF9fUAtd2Via2l0LWtleWZyYW1lcyB4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtZmFkZWlue2Zyb217b3BhY2l0eTowfXRve29wYWNpdHk6MX19QGtleWZyYW1lcyB4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gtZmFkZWlue2Zyb217b3BhY2l0eTowfXRve29wYWNpdHk6MX19QC13ZWJraXQta2V5ZnJhbWVzIHhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlue2Zyb217LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRvey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHhwYXlzdGF0aW9uLXdpZGdldC1saWdodGJveC1zcGlue2Zyb217dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fSAgLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxld29KSW5abGNuTnBiMjRpT2lBekxBb0pJbVpwYkdVaU9pQWliR2xuYUhSaWIzZ3VjMk56Y3lJc0Nna2ljMjkxY21ObGN5STZJRnNLQ1FraWJHbG5hSFJpYjNndWMyTnpjeUlLQ1Ywc0Nna2ljMjkxY21ObGMwTnZiblJsYm5RaU9pQmJDZ2tKSWlSc2FXZG9kR0p2ZUMxd2NtVm1hWGc2SUNkNGNHRjVjM1JoZEdsdmJpMTNhV1JuWlhRdGJHbG5hSFJpYjNnbk8xeHVKR3hwWjJoMFltOTRMV05zWVhOek9pQW5MaWNnS3lBa2JHbG5hSFJpYjNndGNISmxabWw0TzF4dVhHNGpleVJzYVdkb2RHSnZlQzFqYkdGemMzMGdlMXh1SUNCd2IzTnBkR2x2YmpvZ1ptbDRaV1E3WEc0Z0lIUnZjRG9nTUR0Y2JpQWdiR1ZtZERvZ01EdGNiaUFnWW05MGRHOXRPaUF3TzF4dUlDQnlhV2RvZERvZ01EdGNiaUFnZDJsa2RHZzZJREV3TUNVN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdMWGRsWW10cGRDMWhibWx0WVhScGIyNDZJQ043Skd4cFoyaDBZbTk0TFhCeVpXWnBlSDB0Wm1Ga1pXbHVJQzR4TlhNN1hHNGdJR0Z1YVcxaGRHbHZiam9nSTNza2JHbG5hSFJpYjNndGNISmxabWw0ZlMxbVlXUmxhVzRnTGpFMWN6dGNibjFjYmx4dUkzc2tiR2xuYUhSaWIzZ3RZMnhoYzNOOUxXOTJaWEpzWVhrZ2UxeHVJQ0J3YjNOcGRHbHZiam9nWVdKemIyeDFkR1U3WEc0Z0lIUnZjRG93TzF4dUlDQnNaV1owT2lBd08xeHVJQ0JpYjNSMGIyMDZJREE3WEc0Z0lISnBaMmgwT2lBd08xeHVJQ0I2TFdsdVpHVjRPaUF4TzF4dWZWeHVYRzRqZXlSc2FXZG9kR0p2ZUMxamJHRnpjMzB0WTI5dWRHVnVkQ0I3WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnZEc5d09pQXdPMXh1SUNCc1pXWjBPaUF3TzF4dUlDQjZMV2x1WkdWNE9pQXpPMXh1ZlZ4dVhHNGpleVJzYVdkb2RHSnZlQzFqYkdGemMzMHRZMjl1ZEdWdWRGOWZhR2xrWkdWdUlIdGNiaUFnZG1semFXSnBiR2wwZVRvZ2FHbGtaR1Z1TzF4dUlDQjZMV2x1WkdWNE9pQXRNVHRjYm4xY2JseHVJM3NrYkdsbmFIUmliM2d0WTJ4aGMzTjlMV052Ym5SbGJuUXRhV1p5WVcxbElIdGNiaUFnZDJsa2RHZzZJREV3TUNVN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdZbTl5WkdWeU9pQXdPMXh1SUNCaVlXTnJaM0p2ZFc1a09pQjBjbUZ1YzNCaGNtVnVkRHRjYm4xY2JseHVJM3NrYkdsbmFIUmliM2d0WTJ4aGMzTjlMWE53YVc1dVpYSWdlMXh1SUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJSFJ2Y0RvZ05UQWxPMXh1SUNCc1pXWjBPaUExTUNVN1hHNGdJR1JwYzNCc1lYazZJRzV2Ym1VN1hHNGdJSG90YVc1a1pYZzZJREk3WEc0Z0lIQnZhVzUwWlhJdFpYWmxiblJ6T2lCdWIyNWxPMXh1WEc0Z0lDNXpjR2x1Ym1WeUxYaHpiMnhzWVNCN1hHNGdJQ0FnZDJsa2RHZzZJRFUyY0hnN1hHNGdJQ0FnYUdWcFoyaDBPaUExTlhCNE8xeHVJQ0FnSUcxaGNtZHBiam9nZTF4dUlDQWdJQ0FnZEc5d09pQXRNamh3ZUR0Y2JpQWdJQ0FnSUd4bFpuUTZJQzB5Tm5CNE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM1emNHbHVibVZ5TFhoemIyeHNZUzE0TENBdWMzQnBibTVsY2kxNGMyOXNiR0V0Y3l3Z0xuTndhVzV1WlhJdGVITnZiR3hoTFc4c0lDNXpjR2x1Ym1WeUxYaHpiMnhzWVMxc0xDQXVjM0JwYm01bGNpMTRjMjlzYkdFdFlTQjdYRzRnSUNBZ0lDQXRkMlZpYTJsMExXRnVhVzFoZEdsdmJqb2dJM3NrYkdsbmFIUmliM2d0Y0hKbFptbDRmUzFpYjNWdVkyVmtaV3hoZVNBeGN5QnBibVpwYm1sMFpTQmxZWE5sTFdsdUxXOTFkRHRjYmlBZ0lDQWdJQzEzWldKcmFYUXRZVzVwYldGMGFXOXVMV1pwYkd3dGJXOWtaVG9nWW05MGFEdGNiaUFnSUNBZ0lHRnVhVzFoZEdsdmJqb2dJM3NrYkdsbmFIUmliM2d0Y0hKbFptbDRmUzFpYjNWdVkyVmtaV3hoZVNBeGN5QnBibVpwYm1sMFpTQmxZWE5sTFdsdUxXOTFkRHRjYmlBZ0lDQWdJR0Z1YVcxaGRHbHZiaTFtYVd4c0xXMXZaR1U2SUdKdmRHZzdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0xuTndhVzV1WlhJdGVITnZiR3hoTFhnZ2UxeHVJQ0FnSUNBZ0xYZGxZbXRwZEMxaGJtbHRZWFJwYjI0dFpHVnNZWGs2SURCek8xeHVJQ0FnSUNBZ1lXNXBiV0YwYVc5dUxXUmxiR0Y1T2lBd2N6dGNiaUFnSUNCOVhHNWNiaUFnSUNBdWMzQnBibTVsY2kxNGMyOXNiR0V0Y3lCN1hHNGdJQ0FnSUNBdGQyVmlhMmwwTFdGdWFXMWhkR2x2Ymkxa1pXeGhlVG9nTGpKek8xeHVJQ0FnSUNBZ1lXNXBiV0YwYVc5dUxXUmxiR0Y1T2lBdU1uTTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0xuTndhVzV1WlhJdGVITnZiR3hoTFc4Z2UxeHVJQ0FnSUNBZ0xYZGxZbXRwZEMxaGJtbHRZWFJwYjI0dFpHVnNZWGs2SUM0MGN6dGNiaUFnSUNBZ0lHRnVhVzFoZEdsdmJpMWtaV3hoZVRvZ0xqUnpPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDNXpjR2x1Ym1WeUxYaHpiMnhzWVMxc0lIdGNiaUFnSUNBZ0lDMTNaV0pyYVhRdFlXNXBiV0YwYVc5dUxXUmxiR0Y1T2lBdU5uTTdYRzRnSUNBZ0lDQmhibWx0WVhScGIyNHRaR1ZzWVhrNklDNDJjenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXVjM0JwYm01bGNpMTRjMjlzYkdFdFlTQjdYRzRnSUNBZ0lDQXRkMlZpYTJsMExXRnVhVzFoZEdsdmJpMWtaV3hoZVRvZ0xqaHpPMXh1SUNBZ0lDQWdZVzVwYldGMGFXOXVMV1JsYkdGNU9pQXVPSE03WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTG5Od2FXNXVaWEl0Y205MWJtUWdlMXh1SUNBZ0lHMWhjbWRwYmpvZ2UxeHVJQ0FnSUNBZ2RHOXdPaUF0TWpOd2VEdGNiaUFnSUNBZ0lHeGxablE2SUMweU0zQjRPMXh1SUNBZ0lIMWNiaUFnSUNBdGQyVmlhMmwwTFdGdWFXMWhkR2x2YmpvZ0kzc2tiR2xuYUhSaWIzZ3RjSEpsWm1sNGZTMXpjR2x1SUROeklHbHVabWx1YVhSbElHeHBibVZoY2p0Y2JpQWdJQ0JoYm1sdFlYUnBiMjQ2SUNON0pHeHBaMmgwWW05NExYQnlaV1pwZUgwdGMzQnBiaUF6Y3lCcGJtWnBibWwwWlNCc2FXNWxZWEk3WEc0Z0lIMWNibHh1SUNBdWMzQnBibTVsY2kxamRYTjBiMjBnZTF4dUlDQWdJQzEzWldKcmFYUXRZVzVwYldGMGFXOXVPaUFqZXlSc2FXZG9kR0p2ZUMxd2NtVm1hWGg5TFhOd2FXNGdhVzVtYVc1cGRHVWdiR2x1WldGeU8xeHVJQ0FnSUdGdWFXMWhkR2x2YmpvZ0kzc2tiR2xuYUhSaWIzZ3RjSEpsWm1sNGZTMXpjR2x1SUdsdVptbHVhWFJsSUd4cGJtVmhjanRjYmlBZ2ZWeHVmVnh1WEc1QUxYZGxZbXRwZEMxclpYbG1jbUZ0WlhNZ0kzc2tiR2xuYUhSaWIzZ3RjSEpsWm1sNGZTMWliM1Z1WTJWa1pXeGhlU0I3WEc0Z0lEQWxMQ0E0TUNVc0lERXdNQ1VnZXlCdmNHRmphWFI1T2lBd095QjlYRzRnSURRd0pTQjdJRzl3WVdOcGRIazZJREVnZlZ4dWZWeHVYRzVBYTJWNVpuSmhiV1Z6SUNON0pHeHBaMmgwWW05NExYQnlaV1pwZUgwdFltOTFibU5sWkdWc1lYa2dlMXh1SUNBd0pTd2dPREFsTENBeE1EQWxJSHNnYjNCaFkybDBlVG9nTURzZ2ZWeHVJQ0EwTUNVZ2V5QnZjR0ZqYVhSNU9pQXhPeUI5WEc1OVhHNWNia0F0ZDJWaWEybDBMV3RsZVdaeVlXMWxjeUFqZXlSc2FXZG9kR0p2ZUMxd2NtVm1hWGg5TFdaaFpHVnBiaUI3WEc0Z0lHWnliMjBnZXlCdmNHRmphWFI1T2lBd095QjlYRzRnSUhSdklIc2diM0JoWTJsMGVUb2dNVHNnZlZ4dWZWeHVYRzVBYTJWNVpuSmhiV1Z6SUNON0pHeHBaMmgwWW05NExYQnlaV1pwZUgwdFptRmtaV2x1SUh0Y2JpQWdabkp2YlNCN0lHOXdZV05wZEhrNklEQTdJSDFjYmlBZ2RHOGdleUJ2Y0dGamFYUjVPaUF4T3lCOVhHNTlYRzVjYmtBdGQyVmlhMmwwTFd0bGVXWnlZVzFsY3lBamV5UnNhV2RvZEdKdmVDMXdjbVZtYVhoOUxYTndhVzRnZTF4dUlDQm1jbTl0SUhzZ0xYZGxZbXRwZEMxMGNtRnVjMlp2Y20wNklISnZkR0YwWlNnd1pHVm5LVHNnZlZ4dUlDQjBieUI3SUMxM1pXSnJhWFF0ZEhKaGJuTm1iM0p0T2lCeWIzUmhkR1VvTXpZd1pHVm5LVHNnZlZ4dWZWeHVYRzVBYTJWNVpuSmhiV1Z6SUNON0pHeHBaMmgwWW05NExYQnlaV1pwZUgwdGMzQnBiaUI3WEc0Z0lHWnliMjBnZXlCMGNtRnVjMlp2Y20wNklISnZkR0YwWlNnd1pHVm5LVHNnZlZ4dUlDQjBieUI3SUhSeVlXNXpabTl5YlRvZ2NtOTBZWFJsS0RNMk1HUmxaeWs3SUgxY2JuMWNiaUlLQ1Ywc0Nna2liV0Z3Y0dsdVozTWlPaUFpUVVGSFFTeEJRVUZCTERSQ1FVRTBRaXhCUVVFMVFpeERRVU5GTEZGQlFWRXNRMEZCUlN4TFFVRk5MRU5CUTJoQ0xFZEJRVWNzUTBGQlJTeERRVUZGTEVOQlExQXNTVUZCU1N4RFFVRkZMRU5CUVVVc1EwRkRVaXhOUVVGTkxFTkJRVVVzUTBGQlJTeERRVU5XTEV0QlFVc3NRMEZCUlN4RFFVRkZMRU5CUTFRc1MwRkJTeXhEUVVGRkxFbEJRVXNzUTBGRFdpeE5RVUZOTEVOQlFVVXNTVUZCU3l4RFFVTmlMR2xDUVVGcFFpeERRVUZGTEd0RFFVRXdRaXhEUVVGUkxFdEJRVWtzUTBGRGVrUXNVMEZCVXl4RFFVRkZMR3REUVVFd1FpeERRVUZSTEV0QlFVa3NRMEZEYkVRc1FVRkZSQ3hCUVVGQkxHOURRVUZ2UXl4QlFVRndReXhEUVVORkxGRkJRVkVzUTBGQlJTeFJRVUZUTEVOQlEyNUNMRWRCUVVjc1EwRkJReXhEUVVGRkxFTkJRMDRzU1VGQlNTeERRVUZGTEVOQlFVVXNRMEZEVWl4TlFVRk5MRU5CUVVVc1EwRkJSU3hEUVVOV0xFdEJRVXNzUTBGQlJTeERRVUZGTEVOQlExUXNUMEZCVHl4RFFVRkZMRU5CUVVVc1EwRkRXaXhCUVVWRUxFRkJRVUVzYjBOQlFXOURMRUZCUVhCRExFTkJRMFVzVVVGQlVTeERRVUZGTEZGQlFWTXNRMEZEYmtJc1IwRkJSeXhEUVVGRkxFTkJRVVVzUTBGRFVDeEpRVUZKTEVOQlFVVXNRMEZCUlN4RFFVTlNMRTlCUVU4c1EwRkJSU3hEUVVGRkxFTkJRMW9zUVVGRlJDeEJRVUZCTERSRFFVRTBReXhCUVVFMVF5eERRVU5GTEZWQlFWVXNRMEZCUlN4TlFVRlBMRU5CUTI1Q0xFOUJRVThzUTBGQlJTeEZRVUZITEVOQlEySXNRVUZGUkN4QlFVRkJMREpEUVVFeVF5eEJRVUV6UXl4RFFVTkZMRXRCUVVzc1EwRkJSU3hKUVVGTExFTkJRMW9zVFVGQlRTeERRVUZGTEVsQlFVc3NRMEZEWWl4TlFVRk5MRU5CUVVVc1EwRkJSU3hEUVVOV0xGVkJRVlVzUTBGQlJTeFhRVUZaTEVOQlEzcENMRUZCUlVRc1FVRkJRU3h2UTBGQmIwTXNRVUZCY0VNc1EwRkRSU3hSUVVGUkxFTkJRVVVzVVVGQlV5eERRVU51UWl4SFFVRkhMRU5CUVVVc1IwRkJTU3hEUVVOVUxFbEJRVWtzUTBGQlJTeEhRVUZKTEVOQlExWXNUMEZCVHl4RFFVRkZMRWxCUVVzc1EwRkRaQ3hQUVVGUExFTkJRVVVzUTBGQlJTeERRVU5ZTEdOQlFXTXNRMEZCUlN4SlFVRkxMRU5CZDBSMFFpeEJRVGxFUkN4QlFWRkZMRzlEUVZKclF5eERRVkZzUXl4bFFVRmxMRUZCUVVNc1EwRkRaQ3hMUVVGTExFTkJRVVVzU1VGQlN5eERRVU5hTEUxQlFVMHNRMEZCUlN4SlFVRkxMRU5CUTJJc1RVRkJUU3hCUVVGRExFTkJRVU1zUVVGRFRpeEhRVUZITEVOQlFVVXNTMEZCVFN4RFFVUmlMRTFCUVUwc1FVRkJReXhEUVVGRExFRkJSVTRzU1VGQlNTeERRVUZGTEV0QlFVMHNRMEZyUTJZc1FVRXZRMGdzUVVGblFra3NiME5CYUVKblF5eERRVkZzUXl4bFFVRmxMRU5CVVdJc2FVSkJRV2xDTEVOQmFFSnlRaXhCUVdkQ2RVSXNiME5CYUVKaExFTkJVV3hETEdWQlFXVXNRMEZSVFN4cFFrRkJhVUlzUTBGb1FuaERMRUZCWjBJd1F5eHZRMEZvUWs0c1EwRlJiRU1zWlVGQlpTeERRVkY1UWl4cFFrRkJhVUlzUTBGb1FqTkVMRUZCWjBJMlJDeHZRMEZvUW5wQ0xFTkJVV3hETEdWQlFXVXNRMEZSTkVNc2FVSkJRV2xDTEVOQmFFSTVSU3hCUVdkQ1owWXNiME5CYUVJMVF5eERRVkZzUXl4bFFVRmxMRU5CVVN0RUxHbENRVUZwUWl4QlFVRkRMRU5CUXpWR0xHbENRVUZwUWl4RFFVRkZMSFZEUVVFclFpeERRVUZoTEVWQlFVVXNRMEZCUXl4UlFVRlJMRU5CUVVNc1YwRkJWeXhEUVVOMFJpd3lRa0ZCTWtJc1EwRkJSU3hKUVVGTExFTkJRMnhETEZOQlFWTXNRMEZCUlN4MVEwRkJLMElzUTBGQllTeEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkRPVVVzYlVKQlFXMUNMRU5CUVVVc1NVRkJTeXhEUVVNelFpeEJRWEpDVEN4QlFYVkNTU3h2UTBGMlFtZERMRU5CVVd4RExHVkJRV1VzUTBGbFlpeHBRa0ZCYVVJc1FVRkJReXhEUVVOb1FpeDFRa0ZCZFVJc1EwRkJSU3hGUVVGSExFTkJRelZDTEdWQlFXVXNRMEZCUlN4RlFVRkhMRU5CUTNKQ0xFRkJNVUpNTEVGQk5FSkpMRzlEUVRWQ1owTXNRMEZSYkVNc1pVRkJaU3hEUVc5Q1lpeHBRa0ZCYVVJc1FVRkJReXhEUVVOb1FpeDFRa0ZCZFVJc1EwRkJSU3hIUVVGSkxFTkJRemRDTEdWQlFXVXNRMEZCUlN4SFFVRkpMRU5CUTNSQ0xFRkJMMEpNTEVGQmFVTkpMRzlEUVdwRFowTXNRMEZSYkVNc1pVRkJaU3hEUVhsQ1lpeHBRa0ZCYVVJc1FVRkJReXhEUVVOb1FpeDFRa0ZCZFVJc1EwRkJSU3hIUVVGSkxFTkJRemRDTEdWQlFXVXNRMEZCUlN4SFFVRkpMRU5CUTNSQ0xFRkJjRU5NTEVGQmMwTkpMRzlEUVhSRFowTXNRMEZSYkVNc1pVRkJaU3hEUVRoQ1lpeHBRa0ZCYVVJc1FVRkJReXhEUVVOb1FpeDFRa0ZCZFVJc1EwRkJSU3hIUVVGSkxFTkJRemRDTEdWQlFXVXNRMEZCUlN4SFFVRkpMRU5CUTNSQ0xFRkJla05NTEVGQk1rTkpMRzlEUVRORFowTXNRMEZSYkVNc1pVRkJaU3hEUVcxRFlpeHBRa0ZCYVVJc1FVRkJReXhEUVVOb1FpeDFRa0ZCZFVJc1EwRkJSU3hIUVVGSkxFTkJRemRDTEdWQlFXVXNRMEZCUlN4SFFVRkpMRU5CUTNSQ0xFRkJPVU5NTEVGQmFVUkZMRzlEUVdwRWEwTXNRMEZwUkd4RExHTkJRV01zUVVGQlF5eERRVU5pTEUxQlFVMHNRVUZCUXl4RFFVRkRMRUZCUTA0c1IwRkJSeXhEUVVGRkxFdEJRVTBzUTBGRVlpeE5RVUZOTEVGQlFVTXNRMEZCUXl4QlFVVk9MRWxCUVVrc1EwRkJSU3hMUVVGTkxFTkJSV1FzYVVKQlFXbENMRU5CUVVVc1owTkJRWGRDTEVOQlFVMHNSVUZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRMjVGTEZOQlFWTXNRMEZCUlN4blEwRkJkMElzUTBGQlRTeEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkROVVFzUVVGNFJFZ3NRVUV3UkVVc2IwTkJNVVJyUXl4RFFUQkViRU1zWlVGQlpTeEJRVUZETEVOQlEyUXNhVUpCUVdsQ0xFTkJRVVVzWjBOQlFYZENMRU5CUVUwc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGRGFFVXNVMEZCVXl4RFFVRkZMR2REUVVGM1FpeERRVUZOTEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUTNwRUxFRkJSMGdzYTBKQlFXdENMRU5CUVd4Q0xIVkRRVUZyUWl4RFFVTm9RaXhCUVVGQkxFVkJRVVVzUTBGQlJTeEJRVUZCTEVkQlFVY3NRMEZCUlN4QlFVRkJMRWxCUVVrc1EwRkJSeXhQUVVGUExFTkJRVVVzUTBGQlJTeERRVU16UWl4QlFVRkJMRWRCUVVjc1EwRkJSeXhQUVVGUExFTkJRVVVzUTBGQlJ5eEZRVWR3UWl4VlFVRlZMRU5CUVZZc2RVTkJRVlVzUTBGRFVpeEJRVUZCTEVWQlFVVXNRMEZCUlN4QlFVRkJMRWRCUVVjc1EwRkJSU3hCUVVGQkxFbEJRVWtzUTBGQlJ5eFBRVUZQTEVOQlFVVXNRMEZCUlN4RFFVTXpRaXhCUVVGQkxFZEJRVWNzUTBGQlJ5eFBRVUZQTEVOQlFVVXNRMEZCUlN4RlFVZHVRaXhyUWtGQmEwSXNRMEZCYkVJc2EwTkJRV3RDTEVOQlEyaENMRUZCUVVFc1NVRkJTU3hEUVVGSExFOUJRVThzUTBGQlJTeERRVUZGTEVOQlEyeENMRUZCUVVFc1JVRkJSU3hEUVVGSExFOUJRVThzUTBGQlJTeERRVUZGTEVWQlIyeENMRlZCUVZVc1EwRkJWaXhyUTBGQlZTeERRVU5TTEVGQlFVRXNTVUZCU1N4RFFVRkhMRTlCUVU4c1EwRkJSU3hEUVVGRkxFTkJRMnhDTEVGQlFVRXNSVUZCUlN4RFFVRkhMRTlCUVU4c1EwRkJSU3hEUVVGRkxFVkJSMnhDTEd0Q1FVRnJRaXhEUVVGc1FpeG5RMEZCYTBJc1EwRkRhRUlzUVVGQlFTeEpRVUZKTEVOQlFVY3NhVUpCUVdsQ0xFTkJRVVVzV1VGQlRTeERRVU5vUXl4QlFVRkJMRVZCUVVVc1EwRkJSeXhwUWtGQmFVSXNRMEZCUlN4alFVRk5MRVZCUjJoRExGVkJRVlVzUTBGQlZpeG5RMEZCVlN4RFFVTlNMRUZCUVVFc1NVRkJTU3hEUVVGSExGTkJRVk1zUTBGQlJTeFpRVUZOTEVOQlEzaENMRUZCUVVFc1JVRkJSU3hEUVVGSExGTkJRVk1zUTBGQlJTeGpRVUZOSWl3S0NTSnVZVzFsY3lJNklGdGRDbjA9ICovJyk7OyIsIm1vZHVsZS5leHBvcnRzID0gJzEuMi4xMic7XG4iLCJ2YXIgSGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpXG52YXIgQXBwID0gcmVxdWlyZSgnLi9hcHAnKTtcbnZhciBwb2x5ZmlsbHMgPSByZXF1aXJlKCcuL3BvbHlmaWxscycpO1xuXG5wb2x5ZmlsbHMuYXBwbHlQb2x5ZmlsbHMoKTtcblxudmFyIGluc3RhbmNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBcHAoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKEhlbHBlcnMuemlwT2JqZWN0KFsnaW5pdCcsICdvcGVuJywgJ2Nsb3NlJywgJ29uJywgJ29mZicsICdzZW5kTWVzc2FnZScsICdvbk1lc3NhZ2UnXS5tYXAoZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgdmFyIGFwcCA9IGdldEluc3RhbmNlKCk7XG4gICAgICAgIHJldHVybiBbbWV0aG9kTmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcFttZXRob2ROYW1lXS5hcHBseShhcHAsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1dO1xuICAgIH0pKSwge1xuICAgICAgICBldmVudFR5cGVzOiBBcHAuZXZlbnRUeXBlcyxcbiAgICB9KTtcbn0pKCk7XG4iXX0=
diff --git a/dist/widget.min.js b/dist/widget.min.js
index ed232c5..a5338b5 100644
--- a/dist/widget.min.js
+++ b/dist/widget.min.js
@@ -1,2 +1,2 @@
-!function(e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).XPayStationWidget=e()}(function(){return function n(s,o,r){function a(i,e){if(!o[i]){if(!s[i]){var t="function"==typeof require&&require;if(!e&&t)return t(i,!0);if(c)return c(i,!0);e=new Error("Cannot find module '"+i+"'");throw e.code="MODULE_NOT_FOUND",e}t=o[i]={exports:{}};s[i][0].call(t.exports,function(e){var t=s[i][1][e];return a(t||e)},t,t.exports,n,s,o,r)}return o[i].exports}for(var c="function"==typeof require&&require,e=0;et[1][i])return 1;if(t[0][i]!==t[1][i])return-1;if(0===i)return 0}}function o(e,t,i){var n,s=a,o=("string"==typeof t&&(i=t,t=void 0),void 0===t&&(t=!1),""+(s=i?r(i):s).version);for(n in e)if(e.hasOwnProperty(n)&&s[n]){if("string"!=typeof e[n])throw new Error("Browser version in the minVersion map should be a string: "+n+": "+String(e));return B([o,e[n]])<0}return t}return a.test=function(e){for(var t=0;t':U[c.spinner]||Object.values(U)[0],o=b.document.body,l=(e={prefix:F,url:e,spinner:s},(s=document.createElement("div")).className=e.prefix,(f=document.createElement("div")).className=e.prefix+"-overlay",(y=document.createElement("div")).className=e.prefix+"-content "+e.prefix+"-content__hidden",(i=document.createElement("iframe")).className=e.prefix+"-content-iframe",i.src=e.url,i.frameBorder="0",i.allowFullscreen=!0,(t=document.createElement("div")).className=e.prefix+"-spinner",t.innerHTML=e.spinner,y.appendChild(i),s.appendChild(f),s.appendChild(y),s.appendChild(t),s),e=l.querySelector("."+F+"-overlay"),d=l.querySelector("."+F+"-content"),r=d.querySelector("."+F+"-content-iframe"),a=l.querySelector("."+F+"-spinner"),p={width:g(B.width),height:g(B.height)};function g(e){return"string"==typeof e&&String(parseFloat(e)).length===e.length||"number"==typeof e?e+"px":e}l.style.zIndex=c.zIndex,e.style.opacity=c.overlayOpacity,e.style.backgroundColor=c.overlayBackground,d.style.backgroundColor=c.contentBackground,d.style.margin=g(c.contentMargin),d.style.width=c.width?g(c.width):"auto",d.style.height=c.height?g(c.height):"auto",c.spinnerColor&&(a.querySelector("path").style.fill=c.spinnerColor),"custom"===c.spinner&&((i=a.querySelector(".spinner-custom")).style["-webkit-animation-duration"]=c.spinnerRotationPeriod+"s;",i.style["animation-duration"]=c.spinnerRotationPeriod+"s;"),c.closeByClick&&e.addEventListener("click",function(){this.closeFrame()}.bind(this)),o.appendChild(l),c.closeByKeyboard&&(o.addEventListener(v,n),o.addEventListener("keyup",I,!1));function h(){var e=c.width||p.width,t=c.height||p.height,e=(d.style.left="0px",d.style.top="0px",d.style.borderRadius="8px",d.style.width=g(e),d.style.height=g(t),l.clientWidth),t=l.clientHeight,i=(n=(i=d).offsetWidth,i=getComputedStyle(i),n+=parseInt(i.marginLeft)+parseInt(i.marginRight)),n=(s=(n=d).offsetHeight,n=getComputedStyle(n),s+=parseInt(n.marginTop)+parseInt(n.marginBottom)),s=i-d.offsetWidth,o=n-d.offsetHeight,r=e-s,a=t-o,n=(t<(a=n>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(1'},{}],13:[function(e,t,i){t.exports=''},{}],14:[function(e,t,i){t.exports=e("sassify")(".xpaystation-widget-lightbox{position:fixed;top:0;left:0;bottom:0;right:0;width:100%;height:100%;-webkit-animation:xpaystation-widget-lightbox-fadein 0.15s;animation:xpaystation-widget-lightbox-fadein 0.15s}.xpaystation-widget-lightbox-overlay{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1}.xpaystation-widget-lightbox-content{position:relative;top:0;left:0;z-index:3}.xpaystation-widget-lightbox-content__hidden{visibility:hidden;z-index:-1}.xpaystation-widget-lightbox-content-iframe{width:100%;height:100%;border:0;background:transparent}.xpaystation-widget-lightbox-spinner{position:absolute;top:50%;left:50%;display:none;z-index:2;pointer-events:none}.xpaystation-widget-lightbox-spinner .spinner-xsolla{width:56px;height:55px;margin-top:-28px;margin-left:-26px}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;-webkit-animation-fill-mode:both;animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;animation-fill-mode:both}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x{-webkit-animation-delay:0s;animation-delay:0s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s{-webkit-animation-delay:.2s;animation-delay:.2s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o{-webkit-animation-delay:.4s;animation-delay:.4s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l{-webkit-animation-delay:.6s;animation-delay:.6s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation-delay:.8s;animation-delay:.8s}.xpaystation-widget-lightbox-spinner .spinner-round{margin-top:-23px;margin-left:-23px;-webkit-animation:xpaystation-widget-lightbox-spin 3s infinite linear;animation:xpaystation-widget-lightbox-spin 3s infinite linear}.xpaystation-widget-lightbox-spinner .spinner-custom{-webkit-animation:xpaystation-widget-lightbox-spin infinite linear;animation:xpaystation-widget-lightbox-spin infinite linear}@-webkit-keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes xpaystation-widget-lightbox-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} /*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAibGlnaHRib3guc2NzcyIsCgkic291cmNlcyI6IFsKCQkibGlnaHRib3guc2NzcyIKCV0sCgkic291cmNlc0NvbnRlbnQiOiBbCgkJIiRsaWdodGJveC1wcmVmaXg6ICd4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gnO1xyXG4kbGlnaHRib3gtY2xhc3M6ICcuJyArICRsaWdodGJveC1wcmVmaXg7XHJcblxyXG4jeyRsaWdodGJveC1jbGFzc30ge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMDtcclxuICBib3R0b206IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiAuMTVzO1xyXG4gIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1mYWRlaW4gLjE1cztcclxufVxyXG5cclxuI3skbGlnaHRib3gtY2xhc3N9LW92ZXJsYXkge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB0b3A6MDtcclxuICBsZWZ0OiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICByaWdodDogMDtcclxuICB6LWluZGV4OiAxO1xyXG59XHJcblxyXG4jeyRsaWdodGJveC1jbGFzc30tY29udGVudCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHotaW5kZXg6IDM7XHJcbn1cclxuXHJcbiN7JGxpZ2h0Ym94LWNsYXNzfS1jb250ZW50X19oaWRkZW4ge1xyXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICB6LWluZGV4OiAtMTtcclxufVxyXG5cclxuI3skbGlnaHRib3gtY2xhc3N9LWNvbnRlbnQtaWZyYW1lIHtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYm9yZGVyOiAwO1xyXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG4jeyRsaWdodGJveC1jbGFzc30tc3Bpbm5lciB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogNTAlO1xyXG4gIGxlZnQ6IDUwJTtcclxuICBkaXNwbGF5OiBub25lO1xyXG4gIHotaW5kZXg6IDI7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcblxyXG4gIC5zcGlubmVyLXhzb2xsYSB7XHJcbiAgICB3aWR0aDogNTZweDtcclxuICAgIGhlaWdodDogNTVweDtcclxuICAgIG1hcmdpbjoge1xyXG4gICAgICB0b3A6IC0yOHB4O1xyXG4gICAgICBsZWZ0OiAtMjZweDtcclxuICAgIH1cclxuXHJcbiAgICAuc3Bpbm5lci14c29sbGEteCwgLnNwaW5uZXIteHNvbGxhLXMsIC5zcGlubmVyLXhzb2xsYS1vLCAuc3Bpbm5lci14c29sbGEtbCwgLnNwaW5uZXIteHNvbGxhLWEge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcclxuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xyXG4gICAgICBhbmltYXRpb246ICN7JGxpZ2h0Ym94LXByZWZpeH0tYm91bmNlZGVsYXkgMXMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7XHJcbiAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLnNwaW5uZXIteHNvbGxhLXgge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMHM7XHJcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMHM7XHJcbiAgICB9XHJcblxyXG4gICAgLnNwaW5uZXIteHNvbGxhLXMge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjJzO1xyXG4gICAgICBhbmltYXRpb24tZGVsYXk6IC4ycztcclxuICAgIH1cclxuXHJcbiAgICAuc3Bpbm5lci14c29sbGEtbyB7XHJcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAuNHM7XHJcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjRzO1xyXG4gICAgfVxyXG5cclxuICAgIC5zcGlubmVyLXhzb2xsYS1sIHtcclxuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IC42cztcclxuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuNnM7XHJcbiAgICB9XHJcblxyXG4gICAgLnNwaW5uZXIteHNvbGxhLWEge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjhzO1xyXG4gICAgICBhbmltYXRpb24tZGVsYXk6IC44cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5zcGlubmVyLXJvdW5kIHtcclxuICAgIG1hcmdpbjoge1xyXG4gICAgICB0b3A6IC0yM3B4O1xyXG4gICAgICBsZWZ0OiAtMjNweDtcclxuICAgIH1cclxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gM3MgaW5maW5pdGUgbGluZWFyO1xyXG4gICAgYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gM3MgaW5maW5pdGUgbGluZWFyO1xyXG4gIH1cclxuXHJcbiAgLnNwaW5uZXItY3VzdG9tIHtcclxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gaW5maW5pdGUgbGluZWFyO1xyXG4gICAgYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gaW5maW5pdGUgbGluZWFyO1xyXG4gIH1cclxufVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tYm91bmNlZGVsYXkge1xyXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XHJcbiAgNDAlIHsgb3BhY2l0eTogMSB9XHJcbn1cclxuXHJcbkBrZXlmcmFtZXMgI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSB7XHJcbiAgMCUsIDgwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cclxuICA0MCUgeyBvcGFjaXR5OiAxOyB9XHJcbn1cclxuXHJcbkAtd2Via2l0LWtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiB7XHJcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cclxuICB0byB7IG9wYWNpdHk6IDE7IH1cclxufVxyXG5cclxuQGtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiB7XHJcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cclxuICB0byB7IG9wYWNpdHk6IDE7IH1cclxufVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiB7XHJcbiAgZnJvbSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cclxuICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxyXG59XHJcblxyXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiB7XHJcbiAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XHJcbiAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XHJcbn1cclxuIgoJXSwKCSJtYXBwaW5ncyI6ICJBQUdBLEFBQUEsNEJBQTRCLEFBQTVCLENBQ0UsUUFBUSxDQUFFLEtBQU0sQ0FDaEIsR0FBRyxDQUFFLENBQUUsQ0FDUCxJQUFJLENBQUUsQ0FBRSxDQUNSLE1BQU0sQ0FBRSxDQUFFLENBQ1YsS0FBSyxDQUFFLENBQUUsQ0FDVCxLQUFLLENBQUUsSUFBSyxDQUNaLE1BQU0sQ0FBRSxJQUFLLENBQ2IsaUJBQWlCLENBQUUsa0NBQTBCLENBQVEsS0FBSSxDQUN6RCxTQUFTLENBQUUsa0NBQTBCLENBQVEsS0FBSSxDQUNsRCxBQUVELEFBQUEsb0NBQW9DLEFBQXBDLENBQ0UsUUFBUSxDQUFFLFFBQVMsQ0FDbkIsR0FBRyxDQUFDLENBQUUsQ0FDTixJQUFJ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 */")},{sassify:3}],15:[function(e,t,i){t.exports="1.2.12"},{}],main:[function(e,t,i){var n,s=e("./helpers"),o=e("./app");e("./polyfills").applyPolyfills(),t.exports=Object.assign(s.zipObject(["init","open","close","on","off","sendMessage","onMessage"].map(function(e){var t=n=n||new o;return[e,function(){return t[e].apply(t,arguments)}]})),{eventTypes:o.eventTypes})},{"./app":4,"./helpers":8,"./polyfills":10}]},{},["main"])("main")});
+!function(e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).XPayStationWidget=e()}(function(){return function n(s,o,r){function a(i,e){if(!o[i]){if(!s[i]){var t="function"==typeof require&&require;if(!e&&t)return t(i,!0);if(l)return l(i,!0);e=new Error("Cannot find module '"+i+"'");throw e.code="MODULE_NOT_FOUND",e}t=o[i]={exports:{}};s[i][0].call(t.exports,function(e){var t=s[i][1][e];return a(t||e)},t,t.exports,n,s,o,r)}return o[i].exports}for(var l="function"==typeof require&&require,e=0;et[1][i])return 1;if(t[0][i]!==t[1][i])return-1;if(0===i)return 0}}function o(e,t,i){var n,s=a,o=("string"==typeof t&&(i=t,t=void 0),void 0===t&&(t=!1),""+(s=i?r(i):s).version);for(n in e)if(e.hasOwnProperty(n)&&s[n]){if("string"!=typeof e[n])throw new Error("Browser version in the minVersion map should be a string: "+n+": "+String(e));return U([o,e[n]])<0}return t}return a.test=function(e){for(var t=0;t':F[l.spinner]||Object.values(F)[0],o=b.document.body,d=(e={prefix:y,url:e,spinner:s},(s=document.createElement("div")).className=e.prefix,(f=document.createElement("div")).className=e.prefix+"-overlay",(m=document.createElement("div")).className=e.prefix+"-content "+e.prefix+"-content__hidden",(i=document.createElement("iframe")).className=e.prefix+"-content-iframe",i.src=e.url,i.frameBorder="0",i.allowFullscreen=!0,(t=document.createElement("div")).className=e.prefix+"-spinner",t.innerHTML=e.spinner,m.appendChild(i),s.appendChild(f),s.appendChild(m),s.appendChild(t),s),e=d.querySelector("."+y+"-overlay"),c=d.querySelector("."+y+"-content"),r=c.querySelector("."+y+"-content-iframe"),a=d.querySelector("."+y+"-spinner"),p={width:g(U.width),height:g(U.height)};function g(e){return"string"==typeof e&&String(parseFloat(e)).length===e.length||"number"==typeof e?e+"px":e}d.style.zIndex=l.zIndex,e.style.opacity=l.overlayOpacity,e.style.backgroundColor=l.overlayBackground,c.style.backgroundColor=l.contentBackground,c.style.margin=g(l.contentMargin),c.style.width=l.width?g(l.width):"auto",c.style.height=l.height?g(l.height):"auto",l.spinnerColor&&(a.querySelector("path").style.fill=l.spinnerColor),"custom"===l.spinner&&((i=a.querySelector(".spinner-custom")).style["-webkit-animation-duration"]=l.spinnerRotationPeriod+"s;",i.style["animation-duration"]=l.spinnerRotationPeriod+"s;"),l.closeByClick&&e.addEventListener("click",function(){this.closeFrame()}.bind(this)),o.appendChild(d),l.closeByKeyboard&&(o.addEventListener(v,n),o.addEventListener("keyup",I,!1));function u(){var e=l.width||p.width,t=l.height||p.height,e=(c.style.left="0px",c.style.top="0px",c.style.borderRadius="8px",c.style.width=g(e),c.style.height=g(t),d.clientWidth),t=d.clientHeight,i=(n=(i=c).offsetWidth,i=getComputedStyle(i),n+=parseInt(i.marginLeft)+parseInt(i.marginRight)),n=(s=(n=c).offsetHeight,n=getComputedStyle(n),s+=parseInt(n.marginTop)+parseInt(n.marginBottom)),s=i-c.offsetWidth,o=n-c.offsetHeight,r=e-s,a=t-o,n=(t<(a=n>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(1'},{}],13:[function(e,t,i){t.exports=''},{}],14:[function(e,t,i){t.exports=e("sassify")(".xpaystation-widget-lightbox{position:fixed;top:0;left:0;bottom:0;right:0;width:100%;height:100%;-webkit-animation:xpaystation-widget-lightbox-fadein 0.15s;animation:xpaystation-widget-lightbox-fadein 0.15s}.xpaystation-widget-lightbox-overlay{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1}.xpaystation-widget-lightbox-content{position:relative;top:0;left:0;z-index:3}.xpaystation-widget-lightbox-content__hidden{visibility:hidden;z-index:-1}.xpaystation-widget-lightbox-content-iframe{width:100%;height:100%;border:0;background:transparent}.xpaystation-widget-lightbox-spinner{position:absolute;top:50%;left:50%;display:none;z-index:2;pointer-events:none}.xpaystation-widget-lightbox-spinner .spinner-xsolla{width:56px;height:55px;margin-top:-28px;margin-left:-26px}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;-webkit-animation-fill-mode:both;animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;animation-fill-mode:both}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x{-webkit-animation-delay:0s;animation-delay:0s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s{-webkit-animation-delay:.2s;animation-delay:.2s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o{-webkit-animation-delay:.4s;animation-delay:.4s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l{-webkit-animation-delay:.6s;animation-delay:.6s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation-delay:.8s;animation-delay:.8s}.xpaystation-widget-lightbox-spinner .spinner-round{margin-top:-23px;margin-left:-23px;-webkit-animation:xpaystation-widget-lightbox-spin 3s infinite linear;animation:xpaystation-widget-lightbox-spin 3s infinite linear}.xpaystation-widget-lightbox-spinner .spinner-custom{-webkit-animation:xpaystation-widget-lightbox-spin infinite linear;animation:xpaystation-widget-lightbox-spin infinite linear}@-webkit-keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes xpaystation-widget-lightbox-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} /*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAibGlnaHRib3guc2NzcyIsCgkic291cmNlcyI6IFsKCQkibGlnaHRib3guc2NzcyIKCV0sCgkic291cmNlc0NvbnRlbnQiOiBbCgkJIiRsaWdodGJveC1wcmVmaXg6ICd4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gnO1xuJGxpZ2h0Ym94LWNsYXNzOiAnLicgKyAkbGlnaHRib3gtcHJlZml4O1xuXG4jeyRsaWdodGJveC1jbGFzc30ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgLXdlYmtpdC1hbmltYXRpb246ICN7JGxpZ2h0Ym94LXByZWZpeH0tZmFkZWluIC4xNXM7XG4gIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1mYWRlaW4gLjE1cztcbn1cblxuI3skbGlnaHRib3gtY2xhc3N9LW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDowO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiAxO1xufVxuXG4jeyRsaWdodGJveC1jbGFzc30tY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAzO1xufVxuXG4jeyRsaWdodGJveC1jbGFzc30tY29udGVudF9faGlkZGVuIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICB6LWluZGV4OiAtMTtcbn1cblxuI3skbGlnaHRib3gtY2xhc3N9LWNvbnRlbnQtaWZyYW1lIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiAwO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuI3skbGlnaHRib3gtY2xhc3N9LXNwaW5uZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHotaW5kZXg6IDI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gIC5zcGlubmVyLXhzb2xsYSB7XG4gICAgd2lkdGg6IDU2cHg7XG4gICAgaGVpZ2h0OiA1NXB4O1xuICAgIG1hcmdpbjoge1xuICAgICAgdG9wOiAtMjhweDtcbiAgICAgIGxlZnQ6IC0yNnB4O1xuICAgIH1cblxuICAgIC5zcGlubmVyLXhzb2xsYS14LCAuc3Bpbm5lci14c29sbGEtcywgLnNwaW5uZXIteHNvbGxhLW8sIC5zcGlubmVyLXhzb2xsYS1sLCAuc3Bpbm5lci14c29sbGEtYSB7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDtcbiAgICAgIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcbiAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgfVxuXG4gICAgLnNwaW5uZXIteHNvbGxhLXgge1xuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDBzO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwcztcbiAgICB9XG5cbiAgICAuc3Bpbm5lci14c29sbGEtcyB7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjJzO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuMnM7XG4gICAgfVxuXG4gICAgLnNwaW5uZXIteHNvbGxhLW8ge1xuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IC40cztcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjRzO1xuICAgIH1cblxuICAgIC5zcGlubmVyLXhzb2xsYS1sIHtcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAuNnM7XG4gICAgICBhbmltYXRpb24tZGVsYXk6IC42cztcbiAgICB9XG5cbiAgICAuc3Bpbm5lci14c29sbGEtYSB7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjhzO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOHM7XG4gICAgfVxuICB9XG5cbiAgLnNwaW5uZXItcm91bmQge1xuICAgIG1hcmdpbjoge1xuICAgICAgdG9wOiAtMjNweDtcbiAgICAgIGxlZnQ6IC0yM3B4O1xuICAgIH1cbiAgICAtd2Via2l0LWFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1zcGluIDNzIGluZmluaXRlIGxpbmVhcjtcbiAgICBhbmltYXRpb246ICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiAzcyBpbmZpbml0ZSBsaW5lYXI7XG4gIH1cblxuICAuc3Bpbm5lci1jdXN0b20ge1xuICAgIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gaW5maW5pdGUgbGluZWFyO1xuICAgIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1zcGluIGluZmluaXRlIGxpbmVhcjtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSB7XG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDEgfVxufVxuXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tYm91bmNlZGVsYXkge1xuICAwJSwgODAlLCAxMDAlIHsgb3BhY2l0eTogMDsgfVxuICA0MCUgeyBvcGFjaXR5OiAxOyB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiB7XG4gIGZyb20geyBvcGFjaXR5OiAwOyB9XG4gIHRvIHsgb3BhY2l0eTogMTsgfVxufVxuXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tZmFkZWluIHtcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cbiAgdG8geyBvcGFjaXR5OiAxOyB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4ge1xuICBmcm9tIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxufVxuXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiB7XG4gIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbn1cbiIKCV0sCgkibWFwcGluZ3MiOiAiQUFHQSxBQUFBLDRCQUE0QixBQUE1QixDQUNFLFFBQVEsQ0FBRSxLQUFNLENBQ2hCLEdBQUcsQ0FBRSxDQUFFLENBQ1AsSUFBSSxDQUFFLENBQUUsQ0FDUixNQUFNLENBQUUsQ0FBRSxDQUNWLEtBQUssQ0FBRSxDQUFFLENBQ1QsS0FBSyxDQUFFLElBQUssQ0FDWixNQUFNLENBQUUsSUFBSyxDQUNiLGlCQUFpQixDQUFFLGtDQUEwQixDQUFRLEtBQUksQ0FDekQsU0FBUyxDQUFFLGtDQUEwQixDQUFRLEtBQUksQ0FDbEQsQUFFRCxBQUFBLG9DQUFvQyxBQUFwQyxDQUNFLFFBQVEsQ0FBRSxRQUFTLENBQ25CLEdBQUcsQ0FBQyxDQUFFLENBQ04sSUFBSSxDQUFFLENBQUUsQ0FDUixNQUFNLENBQUUsQ0FBRSxDQUNWLEtBQUssQ0FBRSxDQUFFLENBQ1QsT0FBTyxDQUFFLENBQUUsQ0FDWixBQUVELEFBQUEsb0NBQW9DLEFBQXBDLENBQ0UsUUFBUSxDQUFFLFFBQVMsQ0FDbkIsR0FBRyxDQUFFLENBQUUsQ0FDUCxJQUFJLENBQUUsQ0FBRSxDQUNSLE9BQU8sQ0FBRSxDQUFFLENBQ1osQUFFRCxBQUFBLDRDQUE0QyxBQUE1QyxDQUNFLFVBQVUsQ0FBRSxNQUFPLENBQ25CLE9BQU8sQ0FBRSxFQUFHLENBQ2IsQUFFRCxBQUFBLDJDQUEyQyxB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 */")},{sassify:3}],15:[function(e,t,i){t.exports="1.2.12"},{}],main:[function(e,t,i){var n,s=e("./helpers"),o=e("./app");e("./polyfills").applyPolyfills(),t.exports=Object.assign(s.zipObject(["init","open","close","on","off","sendMessage","onMessage"].map(function(e){var t=n=n||new o;return[e,function(){return t[e].apply(t,arguments)}]})),{eventTypes:o.eventTypes})},{"./app":4,"./helpers":8,"./polyfills":10}]},{},["main"])("main")});
//# sourceMappingURL=widget.min.js.map
\ No newline at end of file
diff --git a/dist/widget.min.js.map b/dist/widget.min.js.map
index 629f72b..62605c0 100644
--- a/dist/widget.min.js.map
+++ b/dist/widget.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/bowser/src/bowser.js","node_modules/cssify/browser.js","node_modules/sassify/lib/sassify-browser.js","src/app.js","src/childwindow.js","src/device.js","src/exception.js","src/helpers.js","src/lightbox.js","src/polyfills.js","src/postmessage.js","src/spinners/round.svg","src/spinners/xsolla.svg","src/styles/lightbox.scss","src/version.js","src/main.js"],"names":["f","exports","module","define","amd","window","global","self","this","XPayStationWidget","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","root","name","definition","detect","ua","getFirstMatch","regex","match","getSecondMatch","result","iosdevice","toLowerCase","android","test","nexusMobile","nexusTablet","chromeos","silk","sailfish","tizen","webos","windowsphone","windows","mac","linux","edgeVersion","versionIdentifier","tablet","mobile","xbox","opera","version","samsungBrowser","whale","mzbrowser","coast","focus","yandexbrowser","ucbrowser","maxthon","epiphany","puffin","sleipnir","kMeleon","osname","msedge","msie","chromeBook","chrome","vivaldi","seamonkey","firefox","firefoxos","phantom","slimer","blackberry","touchpad","bada","qupzilla","chromium","safari","googlebot","blink","webkit","gecko","ios","osVersion","replace","osversion","osMajorVersion","split","compareVersions","c","x","bowser","navigator","userAgent","getVersionPrecision","map","arr","iterator","Array","prototype","push","versions","precision","Math","max","chunks","delta","join","chunk","reverse","isUnsupportedBrowser","minVersions","strictMode","browser","_bowser","hasOwnProperty","String","browserList","browserItem","check","_detect","css","customDocument","head","style","doc","document","createStyleSheet","sheet","cssText","ownerNode","getElementsByTagName","createElement","type","styleSheet","appendChild","createTextNode","byUrl","url","link","rel","href","Helpers","Exception","LightBox","ChildWindow","Device","App","config","Object","assign","DEFAULT_CONFIG","eventObject","addEventObject","isInitiated","postMessage","childWindow","access_token","access_data","sandbox","eventTypes","INIT","OPEN","OPEN_WINDOW","OPEN_LIGHTBOX","LOAD","CLOSE","CLOSE_WINDOW","CLOSE_LIGHTBOX","STATUS","STATUS_INVOICE","STATUS_DELIVERING","STATUS_TROUBLED","STATUS_DONE","USER_COUNTRY","FCP","ERROR","lightbox","host","iframeOnly","consentId","getPaymentUrl","paymentUrl","payment_url","query","queryParams","JSON","stringify","param","getPaymentUrlWithConsentId","checkConfig","isEmpty","throwError","checkApp","undefined","message","triggerEvent","eventName","data","arguments","forEach","event","createEvent","initEvent","dispatchEvent","bind","trigger","triggerCustomEvent","CustomEvent","detail","initCustomEvent","init","options","fn","bodyElement","body","clickEventName","handleClickEvent","targetElement","querySelector","sourceEvent","target","open","clickEvent","removeEventListener","addEventListener","readyState","lightBox","triggerSplitStatus","paymentInfo","status","that","handleStatus","statusData","handleUserLocale","userCountry","user_country","handleFcp","handleError","isMobile","on","handleOpen","getPostMessage","off","handleLoad","handleClose","openFrame","close","handler","sendMessage","command","send","apply","onMessage","DEFAULT_OPTIONS","PostMessage","wrapEventInNamespace","_NAMESPACE","closed","location","addHandlers","closeChildWindow","timer","clearTimeout","handleWidgetDetection","childWindowOptions","parent","checkWindow","setTimeout","toString","context","eventsList","handlers","WeakMap","isStringContainedSpace","str","eventInNamespace","handle","addEvent","handlerDecorator","set","parsedEventName","removeEvent","get","filter","value","uniq","list","indexOf","zipObject","props","values","index","isArray","key","add","k","v","encodeURIComponent","buildParams","prefix","obj","len","once","URL","searchParams","append","CLASS_PREFIX","COMMON_OPTIONS","DEFAULT_OPTIONS_MOBILE","SPINNERS","MIN_PS_DIMENSIONS","handleKeyupEventName","handleResizeEventName","handleGlobalKeyup","handleGlobalResize","resizeEvent","zIndex","overlayOpacity","overlayBackground","contentBackground","closeByKeyboard","closeByClick","modal","spinner","spinnerColor","spinnerUrl","spinnerRotationPeriod","width","height","contentMargin","xsolla","round","none","measureScrollbar","scrollDiv","scrollbarWidth","classList","setAttribute","offsetWidth","clientWidth","removeChild","spinnerCustom","HandleBoundSpecificKeyup","which","closeFrame","encodeURI","lightBoxElement","settings","className","overlay","content","iframe","src","frameBorder","allowFullscreen","innerHTML","lightBoxOverlayElement","lightBoxContentElement","lightBoxIframeElement","lightBoxSpinnerElement","psDimensions","withDefaultPXUnit","parseFloat","opacity","backgroundColor","margin","fill","lightBoxResize","containerWidth","left","top","borderRadius","containerHeight","clientHeight","contentWidth","el","getComputedStyle","parseInt","marginLeft","marginRight","contentHeight","offsetHeight","marginTop","marginBottom","horMargin","vertMargin","widthAfterResize","heightAfterResize","leftOffset","innerWidth","topOffset","innerHeight","bodyStyles","showContent","hideSpinner","remove","hideScrollbar","bodyPad","overflow","paddingRight","display","iframeWindow","timeout","resizeTimeout","contentWindow","dimensions","dim","lightBoxOptions","parentNode","keys","applyPolyfills","defineProperty","enumerable","configurable","writable","TypeError","b","getOwnPropertyDescriptor","linkedWindow","source","parse","targetOrigin","instance","methodName","app"],"mappings":"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","file":"widget.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 1 && match[1]) || '';\n }\n\n function getSecondMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()\n , likeAndroid = /like android/i.test(ua)\n , android = !likeAndroid && /android/i.test(ua)\n , nexusMobile = /nexus\\s*[0-6]\\s*/i.test(ua)\n , nexusTablet = !nexusMobile && /nexus\\s*[0-9]+/i.test(ua)\n , chromeos = /CrOS/.test(ua)\n , silk = /silk/i.test(ua)\n , sailfish = /sailfish/i.test(ua)\n , tizen = /tizen/i.test(ua)\n , webos = /(web|hpw)(o|0)s/i.test(ua)\n , windowsphone = /windows phone/i.test(ua)\n , samsungBrowser = /SamsungBrowser/i.test(ua)\n , windows = !windowsphone && /windows/i.test(ua)\n , mac = !iosdevice && !silk && /macintosh/i.test(ua)\n , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)\n , edgeVersion = getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.\\d+)?)/i)\n , versionIdentifier = getFirstMatch(/version\\/(\\d+(\\.\\d+)?)/i)\n , tablet = /tablet/i.test(ua) && !/tablet pc/i.test(ua)\n , mobile = !tablet && /[^-]mobi/i.test(ua)\n , xbox = /xbox/i.test(ua)\n , result\n\n if (/opera/i.test(ua)) {\n // an old Opera\n result = {\n name: 'Opera'\n , opera: t\n , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n } else if (/opr\\/|opios/i.test(ua)) {\n // a new Opera\n result = {\n name: 'Opera'\n , opera: t\n , version: getFirstMatch(/(?:opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (/SamsungBrowser/i.test(ua)) {\n result = {\n name: 'Samsung Internet for Android'\n , samsungBrowser: t\n , version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/Whale/i.test(ua)) {\n result = {\n name: 'NAVER Whale browser'\n , whale: t\n , version: getFirstMatch(/(?:whale)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/MZBrowser/i.test(ua)) {\n result = {\n name: 'MZ Browser'\n , mzbrowser: t\n , version: getFirstMatch(/(?:MZBrowser)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/coast/i.test(ua)) {\n result = {\n name: 'Opera Coast'\n , coast: t\n , version: versionIdentifier || getFirstMatch(/(?:coast)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/focus/i.test(ua)) {\n result = {\n name: 'Focus'\n , focus: t\n , version: getFirstMatch(/(?:focus)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/yabrowser/i.test(ua)) {\n result = {\n name: 'Yandex Browser'\n , yandexbrowser: t\n , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/ucbrowser/i.test(ua)) {\n result = {\n name: 'UC Browser'\n , ucbrowser: t\n , version: getFirstMatch(/(?:ucbrowser)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/mxios/i.test(ua)) {\n result = {\n name: 'Maxthon'\n , maxthon: t\n , version: getFirstMatch(/(?:mxios)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/epiphany/i.test(ua)) {\n result = {\n name: 'Epiphany'\n , epiphany: t\n , version: getFirstMatch(/(?:epiphany)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/puffin/i.test(ua)) {\n result = {\n name: 'Puffin'\n , puffin: t\n , version: getFirstMatch(/(?:puffin)[\\s\\/](\\d+(?:\\.\\d+)?)/i)\n }\n }\n else if (/sleipnir/i.test(ua)) {\n result = {\n name: 'Sleipnir'\n , sleipnir: t\n , version: getFirstMatch(/(?:sleipnir)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/k-meleon/i.test(ua)) {\n result = {\n name: 'K-Meleon'\n , kMeleon: t\n , version: getFirstMatch(/(?:k-meleon)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (windowsphone) {\n result = {\n name: 'Windows Phone'\n , osname: 'Windows Phone'\n , windowsphone: t\n }\n if (edgeVersion) {\n result.msedge = t\n result.version = edgeVersion\n }\n else {\n result.msie = t\n result.version = getFirstMatch(/iemobile\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/msie|trident/i.test(ua)) {\n result = {\n name: 'Internet Explorer'\n , msie: t\n , version: getFirstMatch(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)\n }\n } else if (chromeos) {\n result = {\n name: 'Chrome'\n , osname: 'Chrome OS'\n , chromeos: t\n , chromeBook: t\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n } else if (/edg([ea]|ios)/i.test(ua)) {\n result = {\n name: 'Microsoft Edge'\n , msedge: t\n , version: edgeVersion\n }\n }\n else if (/vivaldi/i.test(ua)) {\n result = {\n name: 'Vivaldi'\n , vivaldi: t\n , version: getFirstMatch(/vivaldi\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (sailfish) {\n result = {\n name: 'Sailfish'\n , osname: 'Sailfish OS'\n , sailfish: t\n , version: getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/seamonkey\\//i.test(ua)) {\n result = {\n name: 'SeaMonkey'\n , seamonkey: t\n , version: getFirstMatch(/seamonkey\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/firefox|iceweasel|fxios/i.test(ua)) {\n result = {\n name: 'Firefox'\n , firefox: t\n , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \\/](\\d+(\\.\\d+)?)/i)\n }\n if (/\\((mobile|tablet);[^\\)]*rv:[\\d\\.]+\\)/i.test(ua)) {\n result.firefoxos = t\n result.osname = 'Firefox OS'\n }\n }\n else if (silk) {\n result = {\n name: 'Amazon Silk'\n , silk: t\n , version : getFirstMatch(/silk\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/phantom/i.test(ua)) {\n result = {\n name: 'PhantomJS'\n , phantom: t\n , version: getFirstMatch(/phantomjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/slimerjs/i.test(ua)) {\n result = {\n name: 'SlimerJS'\n , slimer: t\n , version: getFirstMatch(/slimerjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/blackberry|\\bbb\\d+/i.test(ua) || /rim\\stablet/i.test(ua)) {\n result = {\n name: 'BlackBerry'\n , osname: 'BlackBerry OS'\n , blackberry: t\n , version: versionIdentifier || getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (webos) {\n result = {\n name: 'WebOS'\n , osname: 'WebOS'\n , webos: t\n , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\\/(\\d+(\\.\\d+)?)/i)\n };\n /touchpad\\//i.test(ua) && (result.touchpad = t)\n }\n else if (/bada/i.test(ua)) {\n result = {\n name: 'Bada'\n , osname: 'Bada'\n , bada: t\n , version: getFirstMatch(/dolfin\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (tizen) {\n result = {\n name: 'Tizen'\n , osname: 'Tizen'\n , tizen: t\n , version: getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (/qupzilla/i.test(ua)) {\n result = {\n name: 'QupZilla'\n , qupzilla: t\n , version: getFirstMatch(/(?:qupzilla)[\\s\\/](\\d+(?:\\.\\d+)+)/i) || versionIdentifier\n }\n }\n else if (/chromium/i.test(ua)) {\n result = {\n name: 'Chromium'\n , chromium: t\n , version: getFirstMatch(/(?:chromium)[\\s\\/](\\d+(?:\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (/chrome|crios|crmo/i.test(ua)) {\n result = {\n name: 'Chrome'\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (android) {\n result = {\n name: 'Android'\n , version: versionIdentifier\n }\n }\n else if (/safari|applewebkit/i.test(ua)) {\n result = {\n name: 'Safari'\n , safari: t\n }\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if (iosdevice) {\n result = {\n name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'\n }\n // WTF: version is not part of user agent in web apps\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if(/googlebot/i.test(ua)) {\n result = {\n name: 'Googlebot'\n , googlebot: t\n , version: getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i) || versionIdentifier\n }\n }\n else {\n result = {\n name: getFirstMatch(/^(.*)\\/(.*) /),\n version: getSecondMatch(/^(.*)\\/(.*) /)\n };\n }\n\n // set webkit or gecko flag for browsers based on these engines\n if (!result.msedge && /(apple)?webkit/i.test(ua)) {\n if (/(apple)?webkit\\/537\\.36/i.test(ua)) {\n result.name = result.name || \"Blink\"\n result.blink = t\n } else {\n result.name = result.name || \"Webkit\"\n result.webkit = t\n }\n if (!result.version && versionIdentifier) {\n result.version = versionIdentifier\n }\n } else if (!result.opera && /gecko\\//i.test(ua)) {\n result.name = result.name || \"Gecko\"\n result.gecko = t\n result.version = result.version || getFirstMatch(/gecko\\/(\\d+(\\.\\d+)?)/i)\n }\n\n // set OS flags for platforms that have multiple browsers\n if (!result.windowsphone && (android || result.silk)) {\n result.android = t\n result.osname = 'Android'\n } else if (!result.windowsphone && iosdevice) {\n result[iosdevice] = t\n result.ios = t\n result.osname = 'iOS'\n } else if (mac) {\n result.mac = t\n result.osname = 'macOS'\n } else if (xbox) {\n result.xbox = t\n result.osname = 'Xbox'\n } else if (windows) {\n result.windows = t\n result.osname = 'Windows'\n } else if (linux) {\n result.linux = t\n result.osname = 'Linux'\n }\n\n function getWindowsVersion (s) {\n switch (s) {\n case 'NT': return 'NT'\n case 'XP': return 'XP'\n case 'NT 5.0': return '2000'\n case 'NT 5.1': return 'XP'\n case 'NT 5.2': return '2003'\n case 'NT 6.0': return 'Vista'\n case 'NT 6.1': return '7'\n case 'NT 6.2': return '8'\n case 'NT 6.3': return '8.1'\n case 'NT 10.0': return '10'\n default: return undefined\n }\n }\n\n // OS version extraction\n var osVersion = '';\n if (result.windows) {\n osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i))\n } else if (result.windowsphone) {\n osVersion = getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i);\n } else if (result.mac) {\n osVersion = getFirstMatch(/Mac OS X (\\d+([_\\.\\s]\\d+)*)/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (iosdevice) {\n osVersion = getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (android) {\n osVersion = getFirstMatch(/android[ \\/-](\\d+(\\.\\d+)*)/i);\n } else if (result.webos) {\n osVersion = getFirstMatch(/(?:web|hpw)os\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.blackberry) {\n osVersion = getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i);\n } else if (result.bada) {\n osVersion = getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.tizen) {\n osVersion = getFirstMatch(/tizen[\\/\\s](\\d+(\\.\\d+)*)/i);\n }\n if (osVersion) {\n result.osversion = osVersion;\n }\n\n // device type extraction\n var osMajorVersion = !result.windows && osVersion.split('.')[0];\n if (\n tablet\n || nexusTablet\n || iosdevice == 'ipad'\n || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))\n || result.silk\n ) {\n result.tablet = t\n } else if (\n mobile\n || iosdevice == 'iphone'\n || iosdevice == 'ipod'\n || android\n || nexusMobile\n || result.blackberry\n || result.webos\n || result.bada\n ) {\n result.mobile = t\n }\n\n // Graded Browser Support\n // http://developer.yahoo.com/yui/articles/gbs\n if (result.msedge ||\n (result.msie && result.version >= 10) ||\n (result.yandexbrowser && result.version >= 15) ||\n\t\t (result.vivaldi && result.version >= 1.0) ||\n (result.chrome && result.version >= 20) ||\n (result.samsungBrowser && result.version >= 4) ||\n (result.whale && compareVersions([result.version, '1.0']) === 1) ||\n (result.mzbrowser && compareVersions([result.version, '6.0']) === 1) ||\n (result.focus && compareVersions([result.version, '1.0']) === 1) ||\n (result.firefox && result.version >= 20.0) ||\n (result.safari && result.version >= 6) ||\n (result.opera && result.version >= 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] >= 6) ||\n (result.blackberry && result.version >= 10.1)\n || (result.chromium && result.version >= 20)\n ) {\n result.a = t;\n }\n else if ((result.msie && result.version < 10) ||\n (result.chrome && result.version < 20) ||\n (result.firefox && result.version < 20.0) ||\n (result.safari && result.version < 6) ||\n (result.opera && result.version < 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] < 6)\n || (result.chromium && result.version < 20)\n ) {\n result.c = t\n } else result.x = t\n\n return result\n }\n\n var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')\n\n bowser.test = function (browserList) {\n for (var i = 0; i < browserList.length; ++i) {\n var browserItem = browserList[i];\n if (typeof browserItem=== 'string') {\n if (browserItem in bowser) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n function getVersionPrecision(version) {\n return version.split(\".\").length;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n function map(arr, iterator) {\n var result = [], i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i++) {\n result.push(iterator(arr[i]));\n }\n return result;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1\n * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1\n * compareVersions(['1.10.2.1', '1.10.2.1']); // 0\n * compareVersions(['1.10.2.1', '1.0800.2']); // -1\n *\n * @param {Array} versions versions to compare\n * @return {Number} comparison result\n */\n function compareVersions(versions) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));\n var chunks = map(versions, function (version) {\n var delta = precision - getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n version = version + new Array(delta + 1).join(\".0\");\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return map(version.split(\".\"), function (chunk) {\n return new Array(20 - chunk.length).join(\"0\") + chunk;\n }).reverse();\n });\n\n // iterate in reverse order by reversed chunks array\n while (--precision >= 0) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n else if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === 0) {\n // all version chunks are same\n return 0;\n }\n }\n else {\n return -1;\n }\n }\n }\n\n /**\n * Check if browser is unsupported\n *\n * @example\n * bowser.isUnsupportedBrowser({\n * msie: \"10\",\n * firefox: \"23\",\n * chrome: \"29\",\n * safari: \"5.1\",\n * opera: \"16\",\n * phantom: \"534\"\n * });\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @param {String} [ua] user agent string\n * @return {Boolean}\n */\n function isUnsupportedBrowser(minVersions, strictMode, ua) {\n var _bowser = bowser;\n\n // make strictMode param optional with ua param usage\n if (typeof strictMode === 'string') {\n ua = strictMode;\n strictMode = void(0);\n }\n\n if (strictMode === void(0)) {\n strictMode = false;\n }\n if (ua) {\n _bowser = detect(ua);\n }\n\n var version = \"\" + _bowser.version;\n for (var browser in minVersions) {\n if (minVersions.hasOwnProperty(browser)) {\n if (_bowser[browser]) {\n if (typeof minVersions[browser] !== 'string') {\n throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));\n }\n\n // browser version and min supported version.\n return compareVersions([version, minVersions[browser]]) < 0;\n }\n }\n }\n\n return strictMode; // not found\n }\n\n /**\n * Check if browser is supported\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @param {String} [ua] user agent string\n * @return {Boolean}\n */\n function check(minVersions, strictMode, ua) {\n return !isUnsupportedBrowser(minVersions, strictMode, ua);\n }\n\n bowser.isUnsupportedBrowser = isUnsupportedBrowser;\n bowser.compareVersions = compareVersions;\n bowser.check = check;\n\n /*\n * Set our detect method to the main bowser object so we can\n * reuse it to test other user agents.\n * This is needed to implement future tests.\n */\n bowser._detect = detect;\n\n /*\n * Set our detect public method to the main bowser object\n * This is needed to implement bowser in server side\n */\n bowser.detect = detect;\n return bowser\n});\n","module.exports = function (css, customDocument) {\n var doc = customDocument || document;\n if (doc.createStyleSheet) {\n var sheet = doc.createStyleSheet()\n sheet.cssText = css;\n return sheet.ownerNode;\n } else {\n var head = doc.getElementsByTagName('head')[0],\n style = doc.createElement('style');\n\n style.type = 'text/css';\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(doc.createTextNode(css));\n }\n\n head.appendChild(style);\n return style;\n }\n};\n\nmodule.exports.byUrl = function(url) {\n if (document.createStyleSheet) {\n return document.createStyleSheet(url).ownerNode;\n } else {\n var head = document.getElementsByTagName('head')[0],\n link = document.createElement('link');\n\n link.rel = 'stylesheet';\n link.href = url;\n\n head.appendChild(link);\n return link;\n }\n};\n","module.exports = require('cssify');","var Helpers = require('./helpers');\r\nvar Exception = require('./exception');\r\nvar LightBox = require('./lightbox');\r\nvar ChildWindow = require('./childwindow');\r\nvar Device = require('./device');\r\n\r\nmodule.exports = (function () {\r\n function ready(fn) {\r\n if (document.readyState !== 'loading'){\r\n fn();\r\n } else {\r\n document.addEventListener('DOMContentLoaded', fn);\r\n }\r\n }\r\n\r\n function App() {\r\n this.config = Object.assign({}, DEFAULT_CONFIG);\r\n this.eventObject = Helpers.addEventObject(this);\r\n this.isInitiated = false;\r\n this.postMessage = null;\r\n this.childWindow = null;\r\n }\r\n\r\n App.eventTypes = {\r\n INIT: 'init',\r\n OPEN: 'open',\r\n OPEN_WINDOW: 'open-window',\r\n OPEN_LIGHTBOX: 'open-lightbox',\r\n LOAD: 'load',\r\n CLOSE: 'close',\r\n CLOSE_WINDOW: 'close-window',\r\n CLOSE_LIGHTBOX: 'close-lightbox',\r\n STATUS: 'status',\r\n STATUS_INVOICE: 'status-invoice',\r\n STATUS_DELIVERING: 'status-delivering',\r\n STATUS_TROUBLED: 'status-troubled',\r\n STATUS_DONE: 'status-done',\r\n USER_COUNTRY: 'user-country',\r\n FCP: 'fcp',\r\n ERROR: 'error'\r\n };\r\n\r\n var DEFAULT_CONFIG = {\r\n access_token: null,\r\n access_data: null,\r\n sandbox: false,\r\n lightbox: {},\r\n childWindow: {},\r\n host: 'secure.xsolla.com',\r\n iframeOnly: false,\r\n consentId: null\r\n };\r\n var SANDBOX_PAYSTATION_URL = 'https://sandbox-secure.xsolla.com/paystation2/?';\r\n var EVENT_NAMESPACE = '.xpaystation-widget';\r\n var ATTR_PREFIX = 'data-xpaystation-widget-open';\r\n\r\n /** Private Members **/\r\n App.prototype.config = {};\r\n App.prototype.isInitiated = false;\r\n App.prototype.eventObject = Helpers.addEventObject(this);\r\n\r\n App.prototype.getPaymentUrl = function () {\r\n if (this.config.payment_url) {\r\n return this.config.payment_url;\r\n }\r\n\r\n const query = this.config.queryParams || {};\r\n if (this.config.access_token) {\r\n query.access_token = this.config.access_token;\r\n } else {\r\n query.access_data = JSON.stringify(this.config.access_data);\r\n }\r\n\r\n const urlWithoutQueryParams = this.config.sandbox ?\r\n SANDBOX_PAYSTATION_URL :\r\n 'https://' + this.config.host + '/paystation2/?';\r\n\r\n const paymentUrl = urlWithoutQueryParams + Helpers.param(query);\r\n\r\n if (this.config.consentId) {\r\n return Helpers.getPaymentUrlWithConsentId(paymentUrl, this.config.consentId)\r\n }\r\n\r\n return paymentUrl;\r\n };\r\n\r\n App.prototype.checkConfig = function () {\r\n if (Helpers.isEmpty(this.config.access_token) && Helpers.isEmpty(this.config.access_data) && Helpers.isEmpty(this.config.payment_url)) {\r\n this.throwError('No access token or access data or payment URL given');\r\n }\r\n\r\n if (!Helpers.isEmpty(this.config.access_data) && typeof this.config.access_data !== 'object') {\r\n this.throwError('Invalid access data format');\r\n }\r\n\r\n if (Helpers.isEmpty(this.config.host)) {\r\n this.throwError('Invalid host');\r\n }\r\n };\r\n\r\n App.prototype.checkApp = function () {\r\n if (this.isInitiated === undefined) {\r\n this.throwError('Initialize widget before opening');\r\n }\r\n };\r\n\r\n App.prototype.throwError = function (message) {\r\n throw new Exception(message);\r\n };\r\n\r\n App.prototype.triggerEvent = function (eventName, data) {\r\n if (arguments.length === 1) {\r\n [].forEach.call(arguments, (function (eventName) {\r\n var event = document.createEvent('HTMLEvents');\r\n event.initEvent(eventName, true, false);\r\n document.dispatchEvent(event);\r\n }).bind(this));\r\n } else {\r\n this.eventObject.trigger(eventName, data);\r\n }\r\n };\r\n\r\n App.prototype.triggerCustomEvent = function (eventName, data) {\r\n try {\r\n var event = new CustomEvent(eventName, {detail: data}); // Not working in IE\r\n } catch(e) {\r\n var event = document.createEvent('CustomEvent');\r\n event.initCustomEvent(eventName, true, true, data);\r\n }\r\n document.dispatchEvent(event);\r\n };\r\n\r\n /**\r\n * Initialize widget with options\r\n * @param options\r\n */\r\n App.prototype.init = function(options) {\r\n function initialize(options) {\r\n this.isInitiated = true;\r\n this.config = Object.assign({}, DEFAULT_CONFIG, options);\r\n\r\n var bodyElement = global.document.body;\r\n var clickEventName = 'click' + EVENT_NAMESPACE;\r\n\r\n var handleClickEvent = (function(event) {\r\n var targetElement = document.querySelector('[' + ATTR_PREFIX + ']');\r\n if (event.sourceEvent.target === targetElement) {\r\n this.open.call(this, targetElement);\r\n }\r\n }).bind(this);\r\n\r\n bodyElement.removeEventListener(clickEventName, handleClickEvent);\r\n\r\n var clickEvent = document.createEvent('Event');\r\n clickEvent.initEvent(clickEventName, false, true);\r\n\r\n bodyElement.addEventListener('click', (function(event) {\r\n clickEvent.sourceEvent = event;\r\n bodyElement.dispatchEvent(clickEvent);\r\n }).bind(this), false);\r\n\r\n bodyElement.addEventListener(clickEventName, handleClickEvent);\r\n this.triggerEvent(App.eventTypes.INIT);\r\n }\r\n ready(initialize.bind(this, options));\r\n }\r\n\r\n /**\r\n * Open payment interface (PayStation)\r\n */\r\n App.prototype.open = function () {\r\n this.checkConfig();\r\n this.checkApp();\r\n\r\n var triggerSplitStatus = (function (data) {\r\n switch (((data || {}).paymentInfo || {}).status) {\r\n case 'invoice':\r\n this.triggerEvent(App.eventTypes.STATUS_INVOICE, data);\r\n break;\r\n case 'delivering':\r\n this.triggerEvent(App.eventTypes.STATUS_DELIVERING, data);\r\n break;\r\n case 'troubled':\r\n this.triggerEvent(App.eventTypes.STATUS_TROUBLED, data);\r\n break;\r\n case 'done':\r\n this.triggerEvent(App.eventTypes.STATUS_DONE, data);\r\n break;\r\n }\r\n }).bind(this);\r\n\r\n var url = this.getPaymentUrl();\r\n var that = this;\r\n\r\n function handleStatus(event) {\r\n var statusData = event.detail;\r\n that.triggerEvent(App.eventTypes.STATUS, statusData);\r\n triggerSplitStatus(statusData);\r\n }\r\n\r\n function handleUserLocale(event) {\r\n var userCountry = {\r\n user_country: event.detail.user_country\r\n };\r\n that.triggerCustomEvent(App.eventTypes.USER_COUNTRY, userCountry);\r\n }\r\n\r\n function handleFcp(event) {\r\n that.triggerCustomEvent(App.eventTypes.FCP, event.detail);\r\n }\r\n\r\n function handleError(event) {\r\n that.triggerCustomEvent(App.eventTypes.ERROR, event.detail);\r\n }\r\n\r\n this.postMessage = null;\r\n if ((new Device).isMobile() && !this.config.iframeOnly) {\r\n var childWindow = new ChildWindow;\r\n childWindow.on('open', function handleOpen() {\r\n that.postMessage = childWindow.getPostMessage();\r\n that.triggerEvent(App.eventTypes.OPEN);\r\n that.triggerEvent(App.eventTypes.OPEN_WINDOW);\r\n childWindow.off('open', handleOpen);\r\n });\r\n childWindow.on('load', function handleLoad() {\r\n that.triggerEvent(App.eventTypes.LOAD);\r\n childWindow.off('load', handleLoad);\r\n });\r\n childWindow.on('close', function handleClose() {\r\n that.triggerEvent(App.eventTypes.CLOSE);\r\n that.triggerEvent(App.eventTypes.CLOSE_WINDOW);\r\n childWindow.off('status', handleStatus);\r\n childWindow.off(App.eventTypes.USER_COUNTRY, handleUserLocale);\r\n childWindow.off(App.eventTypes.FCP, handleFcp);\r\n childWindow.off(App.eventTypes.ERROR, handleError);\r\n childWindow.off('close', handleClose);\r\n });\r\n childWindow.on('status', handleStatus);\r\n childWindow.on(App.eventTypes.USER_COUNTRY, handleUserLocale);\r\n childWindow.on(App.eventTypes.FCP, handleFcp);\r\n childWindow.on(App.eventTypes.ERROR, handleError);\r\n childWindow.open(url, this.config.childWindow);\r\n that.childWindow = childWindow;\r\n } else {\r\n var lightBox = new LightBox((new Device).isMobile() && this.config.iframeOnly);\r\n lightBox.on('open', function handleOpen() {\r\n that.postMessage = lightBox.getPostMessage();\r\n that.triggerEvent(App.eventTypes.OPEN);\r\n that.triggerEvent(App.eventTypes.OPEN_LIGHTBOX);\r\n lightBox.off('open', handleOpen);\r\n });\r\n lightBox.on('load', function handleLoad() {\r\n that.triggerEvent(App.eventTypes.LOAD);\r\n lightBox.off('load', handleLoad);\r\n });\r\n lightBox.on('close', function handleClose() {\r\n that.triggerEvent(App.eventTypes.CLOSE);\r\n that.triggerEvent(App.eventTypes.CLOSE_LIGHTBOX);\r\n lightBox.off('status', handleStatus);\r\n lightBox.off(App.eventTypes.USER_COUNTRY, handleUserLocale);\r\n lightBox.off(App.eventTypes.FCP, handleFcp);\r\n lightBox.off(App.eventTypes.ERROR, handleError);\r\n lightBox.off('close', handleClose);\r\n });\r\n lightBox.on('status', handleStatus);\r\n lightBox.on(App.eventTypes.USER_COUNTRY, handleUserLocale);\r\n lightBox.on(App.eventTypes.FCP, handleFcp);\r\n lightBox.on(App.eventTypes.ERROR, handleError);\r\n lightBox.openFrame(url, this.config.lightbox);\r\n that.childWindow = lightBox;\r\n }\r\n };\r\n\r\n\r\n /**\r\n * Close payment interface (PayStation)\r\n */\r\n App.prototype.close = function () {\r\n this.childWindow.close();\r\n };\r\n\r\n /**\r\n * Attach an event handler function for one or more events to the widget\r\n * @param event One or more space-separated event types (init, open, load, close, status, status-invoice, status-delivering, status-troubled, status-done)\r\n * @param handler A function to execute when the event is triggered\r\n */\r\n App.prototype.on = function (event, handler, options) {\r\n if (typeof handler !== 'function') {\r\n return;\r\n }\r\n\r\n this.eventObject.on(event, handler, options);\r\n };\r\n\r\n /**\r\n * Remove an event handler\r\n * @param event One or more space-separated event types\r\n * @param handler A handler function previously attached for the event(s)\r\n */\r\n App.prototype.off = function (event, handler, options) {\r\n this.eventObject.off(event, handler, options);\r\n };\r\n\r\n /**\r\n * Send a message directly to PayStation\r\n * @param command\r\n * @param data\r\n */\r\n App.prototype.sendMessage = function (command, data) {\r\n if (this.postMessage) {\r\n this.postMessage.send.apply(this.postMessage, arguments);\r\n }\r\n };\r\n\r\n /**\r\n * Attach an event handler function for message event from PayStation\r\n * @param command\r\n * @param handler\r\n */\r\n App.prototype.onMessage = function (command, handler) {\r\n if (this.postMessage) {\r\n this.postMessage.on.apply(this.postMessage, arguments);\r\n }\r\n };\r\n\r\n return App;\r\n})();\r\n","var version = require('./version');\r\nvar Helpers = require('./helpers');\r\nvar PostMessage = require('./postmessage');\r\n\r\nmodule.exports = (function () {\r\n function ChildWindow() {\r\n this.eventObject = Helpers.addEventObject(this, wrapEventInNamespace);\r\n this.message = null;\r\n }\r\n\r\n function wrapEventInNamespace(eventName) {\r\n return ChildWindow._NAMESPACE + '_' + eventName;\r\n }\r\n\r\n var DEFAULT_OPTIONS = {\r\n target: '_blank'\r\n };\r\n\r\n /** Private Members **/\r\n ChildWindow.prototype.eventObject = null;\r\n ChildWindow.prototype.childWindow = null;\r\n\r\n ChildWindow.prototype.triggerEvent = function (event, data) {\r\n this.eventObject.trigger(event, data);\r\n };\r\n\r\n /** Public Members **/\r\n ChildWindow.prototype.open = function (url, options) {\r\n options = Object.assign({}, DEFAULT_OPTIONS, options);\r\n\r\n if (this.childWindow && !this.childWindow.closed) {\r\n this.childWindow.location.href = url;\r\n }\r\n\r\n var that = this;\r\n var addHandlers = function () {\r\n function closeChildWindow() {\r\n that.off('close', closeChildWindow)\r\n\r\n if (timer) {\r\n global.clearTimeout(timer);\r\n }\r\n if (that.childWindow) {\r\n that.childWindow.close();\r\n }\r\n }\r\n\r\n that.on('close', closeChildWindow);\r\n\r\n // Cross-window communication\r\n that.message = new PostMessage(that.childWindow);\r\n that.message.on('dimensions widget-detection', function handleWidgetDetection() {\r\n that.triggerEvent('load');\r\n that.message.off('dimensions widget-detection', handleWidgetDetection);\r\n });\r\n that.message.on('widget-detection', function handleWidgetDetection() {\r\n that.message.send('widget-detected', {version: version, childWindowOptions: options});\r\n that.message.off('widget-detection', handleWidgetDetection);\r\n });\r\n that.message.on('status', function (event) {\r\n that.triggerEvent('status', event.detail);\r\n });\r\n that.message.on('close', function handleClose() {\r\n closeChildWindow();\r\n that.message.off('close', handleClose);\r\n });\r\n that.message.on('user-country', function (event) {\r\n that.triggerEvent('user-country', event.detail);\r\n });\r\n that.message.on('fcp', function (event) {\r\n that.triggerEvent('fcp', event.detail);\r\n });\r\n that.message.on('error', function (event) {\r\n that.triggerEvent('error', event.detail);\r\n });\r\n };\r\n\r\n switch (options.target) {\r\n case '_self':\r\n this.childWindow = global.window;\r\n addHandlers();\r\n this.childWindow.location.href = url;\r\n break;\r\n case '_parent':\r\n this.childWindow = global.window.parent;\r\n addHandlers();\r\n this.childWindow.location.href = url;\r\n break;\r\n case '_blank':\r\n default:\r\n this.childWindow = global.window.open(url);\r\n this.childWindow.focus();\r\n addHandlers();\r\n\r\n var checkWindow = (function () {\r\n if (this.childWindow) {\r\n if (this.childWindow.closed) {\r\n this.triggerEvent('close');\r\n } else {\r\n timer = global.setTimeout(checkWindow, 100);\r\n }\r\n }\r\n }).bind(this);\r\n var timer = global.setTimeout(checkWindow, 100);\r\n break;\r\n }\r\n\r\n this.triggerEvent('open');\r\n };\r\n\r\n ChildWindow.prototype.close = function () {\r\n this.triggerEvent('close');\r\n };\r\n\r\n ChildWindow.prototype.on = function (event, handler, options) {\r\n if (typeof handler !== 'function') {\r\n return;\r\n }\r\n\r\n this.eventObject.on(event, handler, options);\r\n };\r\n\r\n ChildWindow.prototype.off = function (event, handler, options) {\r\n this.eventObject.off(event, handler, options);\r\n };\r\n\r\n ChildWindow.prototype.getPostMessage = function () {\r\n return this.message;\r\n };\r\n\r\n ChildWindow._NAMESPACE = 'CHILD_WINDOW';\r\n\r\n return ChildWindow;\r\n})();\r\n","var bowser = require('bowser');\r\n\r\nmodule.exports = (function () {\r\n function Device() {\r\n }\r\n\r\n /**\r\n * Mobile devices\r\n * @returns {boolean}\r\n */\r\n Device.prototype.isMobile = function() {\r\n return bowser.mobile || bowser.tablet;\r\n };\r\n\r\n return Device;\r\n})();\r\n","module.exports = function (message) {\r\n this.message = message;\r\n this.name = \"XsollaPayStationWidgetException\";\r\n this.toString = (function () {\r\n return this.name + ': ' + this.message;\r\n }).bind(this);\r\n};\r\n","function isEmpty(value) {\r\n return value === null || value === undefined;\r\n}\r\n\r\nfunction uniq(list) {\r\n return list.filter(function (x, i, a) {\r\n return a.indexOf(x) == i\r\n });\r\n}\r\n\r\nfunction zipObject(props, values) {\r\n var index = -1,\r\n length = props ? props.length : 0,\r\n result = {};\r\n\r\n if (length && !values && !Array.isArray(props[0])) {\r\n values = [];\r\n }\r\n while (++index < length) {\r\n var key = props[index];\r\n if (values) {\r\n result[key] = values[index];\r\n } else if (key) {\r\n result[key[0]] = key[1];\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction param(a) {\r\n var s = [];\r\n\r\n var add = function (k, v) {\r\n v = typeof v === 'function' ? v() : v;\r\n v = v === null ? '' : v === undefined ? '' : v;\r\n s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);\r\n };\r\n\r\n var buildParams = function (prefix, obj) {\r\n var i, len, key;\r\n\r\n if (prefix) {\r\n if (Array.isArray(obj)) {\r\n for (i = 0, len = obj.length; i < len; i++) {\r\n buildParams(\r\n prefix + '[' + (typeof obj[i] === 'object' && obj[i] ? i : '') + ']',\r\n obj[i]\r\n );\r\n }\r\n } else if (String(obj) === '[object Object]') {\r\n for (key in obj) {\r\n buildParams(prefix + '[' + key + ']', obj[key]);\r\n }\r\n } else {\r\n add(prefix, obj);\r\n }\r\n } else if (Array.isArray(obj)) {\r\n for (i = 0, len = obj.length; i < len; i++) {\r\n add(obj[i].name, obj[i].value);\r\n }\r\n } else {\r\n for (key in obj) {\r\n buildParams(key, obj[key]);\r\n }\r\n }\r\n return s;\r\n };\r\n\r\n return buildParams('', a).join('&');\r\n};\r\n\r\n\r\nfunction once(f) {\r\n return function () {\r\n f(arguments);\r\n f = function () {\r\n };\r\n }\r\n}\r\n\r\nfunction addEventObject(context, wrapEventInNamespace) {\r\n var dummyWrapper = function (event) {\r\n return event\r\n };\r\n var wrapEventInNamespace = wrapEventInNamespace || dummyWrapper;\r\n var eventsList = [];\r\n var handlers = new WeakMap();\r\n\r\n function isStringContainedSpace(str) {\r\n return / /.test(str)\r\n }\r\n\r\n return {\r\n trigger: (function (eventName, data) {\r\n var eventInNamespace = wrapEventInNamespace(eventName);\r\n try {\r\n var event = new CustomEvent(eventInNamespace, {detail: data}); // Not working in IE\r\n } catch (e) {\r\n var event = document.createEvent('CustomEvent');\r\n event.initCustomEvent(eventInNamespace, true, true, data);\r\n }\r\n document.dispatchEvent(event);\r\n }).bind(context),\r\n on: (function (eventName, handle, options) {\r\n function addEvent(eventName, handle, options) {\r\n const handlerDecorator = function (event) {\r\n handle(event, event.detail);\r\n }\r\n\r\n handlers.set(handle, handlerDecorator);\r\n\r\n var eventInNamespace = wrapEventInNamespace(eventName);\r\n document.addEventListener(eventInNamespace, handlerDecorator, options);\r\n eventsList.push({name: eventInNamespace, handle: handlerDecorator, options: options});\r\n }\r\n\r\n if (isStringContainedSpace(eventName)) {\r\n var events = eventName.split(' ');\r\n events.forEach(function (parsedEventName) {\r\n addEvent(parsedEventName, handle, options)\r\n })\r\n } else {\r\n addEvent(eventName, handle, options);\r\n }\r\n\r\n }).bind(context),\r\n\r\n off: (function (eventName, handle, options) {\r\n const offAllEvents = !eventName && !handle && !options;\r\n\r\n if (offAllEvents) {\r\n eventsList.forEach(function (event) {\r\n document.removeEventListener(event.name, event.handle, event.options);\r\n });\r\n return;\r\n }\r\n\r\n function removeEvent(eventName, handle, options) {\r\n var eventInNamespace = wrapEventInNamespace(eventName);\r\n\r\n const handlerDecorator = handlers.get(handle);\r\n\r\n document.removeEventListener(eventInNamespace, handlerDecorator, options);\r\n eventsList = eventsList.filter(function (event) {\r\n return event.name !== eventInNamespace;\r\n });\r\n }\r\n\r\n if (isStringContainedSpace(eventName)) {\r\n var events = eventName.split(' ');\r\n events.forEach(function (parsedEventName) {\r\n removeEvent(parsedEventName, handle, options)\r\n })\r\n } else {\r\n removeEvent(eventName, handle, options);\r\n }\r\n\r\n }).bind(context)\r\n };\r\n}\r\n\r\nfunction getPaymentUrlWithConsentId(url, consentId) {\r\n let paymentUrl = new URL(url);\r\n\r\n paymentUrl.searchParams.append('consentId', consentId);\r\n\r\n return paymentUrl.toString();\r\n}\r\n\r\n\r\nmodule.exports = {\r\n addEventObject: addEventObject,\r\n isEmpty: isEmpty,\r\n uniq: uniq,\r\n zipObject: zipObject,\r\n param: param,\r\n once: once,\r\n getPaymentUrlWithConsentId: getPaymentUrlWithConsentId\r\n}\r\n","var version = require('./version');\r\nvar Helpers = require('./helpers');\r\nvar PostMessage = require('./postmessage');\r\n\r\nmodule.exports = (function () {\r\n function LightBox(isMobile) {\r\n require('./styles/lightbox.scss');\r\n this.eventObject = Helpers.addEventObject(this, wrapEventInNamespace);\r\n this.options = isMobile ? DEFAULT_OPTIONS_MOBILE : DEFAULT_OPTIONS;\r\n this.message = null;\r\n }\r\n\r\n var CLASS_PREFIX = 'xpaystation-widget-lightbox';\r\n var COMMON_OPTIONS = {\r\n zIndex: 1000,\r\n overlayOpacity: '.6',\r\n overlayBackground: '#000000',\r\n contentBackground: '#ffffff',\r\n closeByKeyboard: true,\r\n closeByClick: true,\r\n modal: false,\r\n spinner: 'xsolla',\r\n spinnerColor: null,\r\n spinnerUrl: null,\r\n spinnerRotationPeriod: 0\r\n };\r\n var DEFAULT_OPTIONS = Object.assign({}, COMMON_OPTIONS, {\r\n width: null,\r\n height: '100%',\r\n contentMargin: '10px'\r\n });\r\n var DEFAULT_OPTIONS_MOBILE = Object.assign({}, COMMON_OPTIONS, {\r\n width: '100%',\r\n height: '100%', \r\n contentMargin: '0px'\r\n });\r\n\r\n var SPINNERS = {\r\n xsolla: require('./spinners/xsolla.svg'),\r\n round: require('./spinners/round.svg'),\r\n none: ' '\r\n };\r\n\r\n var MIN_PS_DIMENSIONS = {\r\n height: 500,\r\n width: 600\r\n };\r\n\r\n var handleKeyupEventName = wrapEventInNamespace('keyup');\r\n var handleResizeEventName = wrapEventInNamespace('resize');\r\n\r\n var handleGlobalKeyup = function(event) {\r\n\r\n var clickEvent = document.createEvent('Event');\r\n clickEvent.initEvent(handleKeyupEventName, false, true);\r\n clickEvent.sourceEvent = event;\r\n\r\n document.body.dispatchEvent(clickEvent);\r\n }\r\n\r\n var handleSpecificKeyup = function(event) {\r\n if (event.sourceEvent.which == 27) {\r\n this.closeFrame();\r\n }\r\n }\r\n\r\n var handleGlobalResize = function() {\r\n var resizeEvent = document.createEvent('Event');\r\n resizeEvent.initEvent(handleResizeEventName, false, true);\r\n\r\n window.dispatchEvent(resizeEvent);\r\n }\r\n\r\n function wrapEventInNamespace(eventName) {\r\n return LightBox._NAMESPACE + '_' + eventName;\r\n }\r\n\r\n /** Private Members **/\r\n LightBox.prototype.triggerEvent = function () {\r\n this.eventObject.trigger.apply(this.eventObject, arguments);\r\n };\r\n\r\n LightBox.prototype.measureScrollbar = function () { // thx walsh: https://davidwalsh.name/detect-scrollbar-width\r\n var scrollDiv = document.createElement(\"div\");\r\n scrollDiv.classList.add(\"scrollbar-measure\");\r\n scrollDiv.setAttribute(\"style\",\r\n \"position: absolute;\" +\r\n \"top: -9999px\" +\r\n \"width: 50px\" +\r\n \"height: 50px\" +\r\n \"overflow: scroll\"\r\n );\r\n\r\n document.body.appendChild(scrollDiv);\r\n\r\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\r\n document.body.removeChild(scrollDiv);\r\n\r\n return scrollbarWidth;\r\n };\r\n\r\n /** Public Members **/\r\n LightBox.prototype.openFrame = function (url, options) {\r\n this.options = Object.assign({}, this.options, options);\r\n var HandleBoundSpecificKeyup = handleSpecificKeyup.bind(this);\r\n options = this.options;\r\n\r\n var spinner = options.spinner === 'custom' && !!options.spinnerUrl ?\r\n '' : SPINNERS[options.spinner] || Object.values(SPINNERS)[0];\r\n\r\n var template = function (settings) {\r\n var host = document.createElement('div');\r\n host.className = settings.prefix;\r\n\r\n var overlay = document.createElement('div');\r\n overlay.className = settings.prefix + '-overlay';\r\n\r\n var content = document.createElement('div');\r\n content.className = settings.prefix + '-content' + ' ' + settings.prefix + '-content__hidden';\r\n\r\n var iframe = document.createElement('iframe');\r\n iframe.className = settings.prefix + '-content-iframe';\r\n iframe.src = settings.url;\r\n iframe.frameBorder = '0';\r\n iframe.allowFullscreen = true;\r\n\r\n var spinner = document.createElement('div');\r\n spinner.className = settings.prefix + '-spinner';\r\n spinner.innerHTML = settings.spinner;\r\n\r\n content.appendChild(iframe);\r\n\r\n host.appendChild(overlay);\r\n host.appendChild(content);\r\n host.appendChild(spinner);\r\n\r\n return host;\r\n };\r\n\r\n var bodyElement = global.document.body;\r\n var lightBoxElement = template({\r\n prefix: CLASS_PREFIX,\r\n url: url,\r\n spinner: spinner\r\n });\r\n var lightBoxOverlayElement = lightBoxElement.querySelector('.' + CLASS_PREFIX + '-overlay');\r\n var lightBoxContentElement = lightBoxElement.querySelector('.' + CLASS_PREFIX + '-content');\r\n var lightBoxIframeElement = lightBoxContentElement.querySelector('.' + CLASS_PREFIX + '-content-iframe');\r\n var lightBoxSpinnerElement = lightBoxElement.querySelector('.' + CLASS_PREFIX + '-spinner');\r\n\r\n var psDimensions = {\r\n width: withDefaultPXUnit(MIN_PS_DIMENSIONS.width),\r\n height: withDefaultPXUnit(MIN_PS_DIMENSIONS.height)\r\n };\r\n\r\n function withDefaultPXUnit(value) {\r\n var isStringWithoutUnit = typeof value === 'string' && String(parseFloat(value)).length === value.length;\r\n if (isStringWithoutUnit) {\r\n return value + 'px';\r\n }\r\n return typeof value === 'number' ? value + 'px' : value\r\n }\r\n\r\n lightBoxElement.style.zIndex = options.zIndex;\r\n\r\n lightBoxOverlayElement.style.opacity = options.overlayOpacity;\r\n lightBoxOverlayElement.style.backgroundColor = options.overlayBackground;\r\n\r\n lightBoxContentElement.style.backgroundColor = options.contentBackground;\r\n lightBoxContentElement.style.margin = withDefaultPXUnit(options.contentMargin);\r\n lightBoxContentElement.style.width = options.width ? withDefaultPXUnit(options.width) : 'auto';\r\n lightBoxContentElement.style.height = options.height ? withDefaultPXUnit(options.height) : 'auto';\r\n\r\n if (options.spinnerColor) {\r\n lightBoxSpinnerElement.querySelector('path').style.fill = options.spinnerColor;\r\n }\r\n\r\n if (options.spinner === 'custom') {\r\n var spinnerCustom = lightBoxSpinnerElement.querySelector('.spinner-custom');\r\n spinnerCustom.style['-webkit-animation-duration'] = options.spinnerRotationPeriod + 's;';\r\n spinnerCustom.style['animation-duration'] = options.spinnerRotationPeriod + 's;';\r\n }\r\n\r\n if (options.closeByClick) {\r\n lightBoxOverlayElement.addEventListener('click', (function () {\r\n this.closeFrame();\r\n }).bind(this));\r\n }\r\n\r\n bodyElement.appendChild(lightBoxElement);\r\n\r\n if (options.closeByKeyboard) {\r\n\r\n bodyElement.addEventListener(handleKeyupEventName, HandleBoundSpecificKeyup);\r\n\r\n bodyElement.addEventListener('keyup', handleGlobalKeyup, false);\r\n }\r\n\r\n var showContent = Helpers.once((function () {\r\n hideSpinner(options);\r\n lightBoxContentElement.classList.remove(CLASS_PREFIX + '-content__hidden');\r\n this.triggerEvent('load');\r\n }).bind(this));\r\n\r\n var lightBoxResize = function () {\r\n var width = options.width ? options.width : psDimensions.width;\r\n var height = options.height ? options.height : psDimensions.height;\r\n\r\n lightBoxContentElement.style.left = '0px';\r\n lightBoxContentElement.style.top = '0px';\r\n lightBoxContentElement.style.borderRadius = '8px';\r\n lightBoxContentElement.style.width = withDefaultPXUnit(width);\r\n lightBoxContentElement.style.height = withDefaultPXUnit(height);\r\n\r\n var containerWidth = lightBoxElement.clientWidth,\r\n containerHeight = lightBoxElement.clientHeight;\r\n\r\n var contentWidth = outerWidth(lightBoxContentElement),\r\n contentHeight = outerHeight(lightBoxContentElement);\r\n\r\n var horMargin = contentWidth - lightBoxContentElement.offsetWidth,\r\n vertMargin = contentHeight - lightBoxContentElement.offsetHeight;\r\n\r\n var widthAfterResize = containerWidth - horMargin;\r\n\r\n if (widthAfterResize > contentWidth) {\r\n widthAfterResize = contentWidth;\r\n }\r\n\r\n if (widthAfterResize > containerWidth) {\r\n widthAfterResize = containerWidth;\r\n }\r\n\r\n var heightAfterResize = containerHeight - vertMargin;\r\n\r\n if (heightAfterResize > contentHeight) {\r\n heightAfterResize = contentHeight;\r\n }\r\n\r\n if (heightAfterResize > containerHeight) {\r\n heightAfterResize = containerHeight;\r\n }\r\n\r\n lightBoxContentElement.style.width = withDefaultPXUnit(widthAfterResize);\r\n lightBoxContentElement.style.height = withDefaultPXUnit(heightAfterResize);\r\n\r\n var leftOffset = ((window.innerWidth - widthAfterResize) / 2) - (horMargin / 2);\r\n var topOffset = ((window.innerHeight - heightAfterResize) / 2) - (vertMargin / 2);\r\n\r\n lightBoxContentElement.style.left = withDefaultPXUnit(Math.max(leftOffset, 0));\r\n lightBoxContentElement.style.top = withDefaultPXUnit(Math.max(topOffset, 0));\r\n };\r\n\r\n function outerWidth(el) {\r\n var width = el.offsetWidth;\r\n var style = getComputedStyle(el);\r\n\r\n width += parseInt(style.marginLeft) + parseInt(style.marginRight);\r\n return width;\r\n }\r\n\r\n function outerHeight(el) {\r\n var height = el.offsetHeight;\r\n var style = getComputedStyle(el);\r\n\r\n height += parseInt(style.marginTop) + parseInt(style.marginBottom);\r\n return height;\r\n }\r\n\r\n var bodyStyles;\r\n var hideScrollbar = (function () {\r\n bodyStyles = Helpers.zipObject(['overflow', 'paddingRight'].map(function (key) {\r\n return [key, getComputedStyle(bodyElement)[key]];\r\n }));\r\n\r\n var bodyPad = parseInt((getComputedStyle(bodyElement)['paddingRight'] || 0), 10);\r\n bodyElement.style.overflow = 'hidden';\r\n bodyElement.style.paddingRight = withDefaultPXUnit(bodyPad + this.measureScrollbar());\r\n }).bind(this);\r\n\r\n var resetScrollbar = function () {\r\n if (bodyStyles) {\r\n Object.keys(bodyStyles).forEach(function(key) {\r\n bodyElement.style[key] = bodyStyles[key];\r\n })\r\n }\r\n };\r\n\r\n var showSpinner = function () {\r\n lightBoxSpinnerElement.style.display = 'block';\r\n };\r\n\r\n var hideSpinner = function () {\r\n lightBoxSpinnerElement.style.display = 'none';\r\n };\r\n\r\n var loadTimer;\r\n lightBoxIframeElement.addEventListener('load', function handleLoad(event) {\r\n var timeout = !(options.width && options.height) ? (options.resizeTimeout || 30000) : 1000; // 30000 if psDimensions will not arrive and custom timeout is not provided\r\n loadTimer = global.setTimeout(function () {\r\n lightBoxResize();\r\n showContent();\r\n }, timeout);\r\n lightBoxIframeElement.removeEventListener('load', handleLoad);\r\n\r\n });\r\n\r\n var iframeWindow = lightBoxIframeElement.contentWindow || lightBoxIframeElement;\r\n\r\n // Cross-window communication\r\n this.message = new PostMessage(iframeWindow);\r\n if (options.width && options.height) {\r\n this.message.on('dimensions', (function () {\r\n lightBoxResize();\r\n showContent();\r\n }));\r\n } else {\r\n this.message.on('dimensions', (function (event) {\r\n var data = event.detail;\r\n if (data.dimensions) {\r\n psDimensions = Helpers.zipObject(['width', 'height'].map(function (dim) {\r\n return [dim, Math.max(MIN_PS_DIMENSIONS[dim] || 0, data.dimensions[dim] || 0) + 'px'];\r\n }));\r\n\r\n lightBoxResize();\r\n }\r\n showContent();\r\n }));\r\n }\r\n this.message.on('widget-detection', (function () {\r\n this.message.send('widget-detected', {version: version, lightBoxOptions: options});\r\n }).bind(this));\r\n this.message.on('widget-close', (function () {\r\n this.closeFrame();\r\n }).bind(this));\r\n this.message.on('close', (function () {\r\n this.closeFrame();\r\n }).bind(this));\r\n this.message.on('status', (function (event) {\r\n this.triggerEvent('status', event.detail);\r\n }).bind(this));\r\n this.message.on('user-country', (function (event) {\r\n this.triggerEvent('user-country', event.detail);\r\n }).bind(this));\r\n this.message.on('fcp', (function (event) {\r\n this.triggerEvent('fcp', event.detail);\r\n }).bind(this));\r\n this.message.on('error', (function (event) {\r\n this.triggerEvent('error', event.detail);\r\n }).bind(this));\r\n\r\n // Resize\r\n window.addEventListener(handleResizeEventName, lightBoxResize);\r\n window.addEventListener('resize', handleGlobalResize);\r\n\r\n // Clean up after close\r\n var that = this;\r\n this.on('close', function handleClose(event) {\r\n that.message.off();\r\n bodyElement.removeEventListener(handleKeyupEventName, HandleBoundSpecificKeyup)\r\n bodyElement.removeEventListener('keyup', handleGlobalKeyup);\r\n\r\n window.removeEventListener('resize', handleGlobalResize)\r\n\r\n window.removeEventListener(handleResizeEventName, lightBoxResize);\r\n lightBoxElement.parentNode.removeChild(lightBoxElement);\r\n resetScrollbar();\r\n that.off('close', handleClose);\r\n });\r\n\r\n showSpinner();\r\n hideScrollbar();\r\n this.triggerEvent('open');\r\n };\r\n\r\n LightBox.prototype.closeFrame = function () {\r\n if (!this.options.modal) {\r\n this.triggerEvent('close');\r\n }\r\n };\r\n\r\n LightBox.prototype.close = function () {\r\n this.closeFrame();\r\n };\r\n\r\n LightBox.prototype.on = function () {\r\n this.eventObject.on.apply(this.eventObject, arguments);\r\n };\r\n\r\n LightBox.prototype.off = function () {\r\n this.eventObject.off.apply(this.eventObject, arguments);\r\n };\r\n\r\n LightBox.prototype.getPostMessage = function () {\r\n return this.message;\r\n };\r\n\r\n LightBox._NAMESPACE = '.xpaystation-widget-lightbox';\r\n\r\n return LightBox;\r\n})();\r\n","function objectAssign() {\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign Polyfill\r\n Object.assign||Object.defineProperty(Object,\"assign\",{enumerable:!1,configurable:!0,writable:!0,value:function(e,r){\"use strict\";if(null==e)throw new TypeError(\"Cannot convert first argument to object\");for(var t=Object(e),n=1;n>>0;if(\"function\"!=typeof r)throw new TypeError(r+\" is not a function\");for(arguments.length>1&&(t=o),n=0;n\";\n","module.exports = \"\";\n","module.exports = require('sassify')('.xpaystation-widget-lightbox{position:fixed;top:0;left:0;bottom:0;right:0;width:100%;height:100%;-webkit-animation:xpaystation-widget-lightbox-fadein 0.15s;animation:xpaystation-widget-lightbox-fadein 0.15s}.xpaystation-widget-lightbox-overlay{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1}.xpaystation-widget-lightbox-content{position:relative;top:0;left:0;z-index:3}.xpaystation-widget-lightbox-content__hidden{visibility:hidden;z-index:-1}.xpaystation-widget-lightbox-content-iframe{width:100%;height:100%;border:0;background:transparent}.xpaystation-widget-lightbox-spinner{position:absolute;top:50%;left:50%;display:none;z-index:2;pointer-events:none}.xpaystation-widget-lightbox-spinner .spinner-xsolla{width:56px;height:55px;margin-top:-28px;margin-left:-26px}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;-webkit-animation-fill-mode:both;animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;animation-fill-mode:both}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x{-webkit-animation-delay:0s;animation-delay:0s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s{-webkit-animation-delay:.2s;animation-delay:.2s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o{-webkit-animation-delay:.4s;animation-delay:.4s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l{-webkit-animation-delay:.6s;animation-delay:.6s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation-delay:.8s;animation-delay:.8s}.xpaystation-widget-lightbox-spinner .spinner-round{margin-top:-23px;margin-left:-23px;-webkit-animation:xpaystation-widget-lightbox-spin 3s infinite linear;animation:xpaystation-widget-lightbox-spin 3s infinite linear}.xpaystation-widget-lightbox-spinner .spinner-custom{-webkit-animation:xpaystation-widget-lightbox-spin infinite linear;animation:xpaystation-widget-lightbox-spin infinite linear}@-webkit-keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes xpaystation-widget-lightbox-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} /*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAibGlnaHRib3guc2NzcyIsCgkic291cmNlcyI6IFsKCQkibGlnaHRib3guc2NzcyIKCV0sCgkic291cmNlc0NvbnRlbnQiOiBbCgkJIiRsaWdodGJveC1wcmVmaXg6ICd4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gnO1xyXG4kbGlnaHRib3gtY2xhc3M6ICcuJyArICRsaWdodGJveC1wcmVmaXg7XHJcblxyXG4jeyRsaWdodGJveC1jbGFzc30ge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMDtcclxuICBib3R0b206IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiAuMTVzO1xyXG4gIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1mYWRlaW4gLjE1cztcclxufVxyXG5cclxuI3skbGlnaHRib3gtY2xhc3N9LW92ZXJsYXkge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB0b3A6MDtcclxuICBsZWZ0OiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICByaWdodDogMDtcclxuICB6LWluZGV4OiAxO1xyXG59XHJcblxyXG4jeyRsaWdodGJveC1jbGFzc30tY29udGVudCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHotaW5kZXg6IDM7XHJcbn1cclxuXHJcbiN7JGxpZ2h0Ym94LWNsYXNzfS1jb250ZW50X19oaWRkZW4ge1xyXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICB6LWluZGV4OiAtMTtcclxufVxyXG5cclxuI3skbGlnaHRib3gtY2xhc3N9LWNvbnRlbnQtaWZyYW1lIHtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYm9yZGVyOiAwO1xyXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG4jeyRsaWdodGJveC1jbGFzc30tc3Bpbm5lciB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogNTAlO1xyXG4gIGxlZnQ6IDUwJTtcclxuICBkaXNwbGF5OiBub25lO1xyXG4gIHotaW5kZXg6IDI7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcblxyXG4gIC5zcGlubmVyLXhzb2xsYSB7XHJcbiAgICB3aWR0aDogNTZweDtcclxuICAgIGhlaWdodDogNTVweDtcclxuICAgIG1hcmdpbjoge1xyXG4gICAgICB0b3A6IC0yOHB4O1xyXG4gICAgICBsZWZ0OiAtMjZweDtcclxuICAgIH1cclxuXHJcbiAgICAuc3Bpbm5lci14c29sbGEteCwgLnNwaW5uZXIteHNvbGxhLXMsIC5zcGlubmVyLXhzb2xsYS1vLCAuc3Bpbm5lci14c29sbGEtbCwgLnNwaW5uZXIteHNvbGxhLWEge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcclxuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xyXG4gICAgICBhbmltYXRpb246ICN7JGxpZ2h0Ym94LXByZWZpeH0tYm91bmNlZGVsYXkgMXMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7XHJcbiAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLnNwaW5uZXIteHNvbGxhLXgge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMHM7XHJcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMHM7XHJcbiAgICB9XHJcblxyXG4gICAgLnNwaW5uZXIteHNvbGxhLXMge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjJzO1xyXG4gICAgICBhbmltYXRpb24tZGVsYXk6IC4ycztcclxuICAgIH1cclxuXHJcbiAgICAuc3Bpbm5lci14c29sbGEtbyB7XHJcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAuNHM7XHJcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjRzO1xyXG4gICAgfVxyXG5cclxuICAgIC5zcGlubmVyLXhzb2xsYS1sIHtcclxuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IC42cztcclxuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuNnM7XHJcbiAgICB9XHJcblxyXG4gICAgLnNwaW5uZXIteHNvbGxhLWEge1xyXG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjhzO1xyXG4gICAgICBhbmltYXRpb24tZGVsYXk6IC44cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5zcGlubmVyLXJvdW5kIHtcclxuICAgIG1hcmdpbjoge1xyXG4gICAgICB0b3A6IC0yM3B4O1xyXG4gICAgICBsZWZ0OiAtMjNweDtcclxuICAgIH1cclxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gM3MgaW5maW5pdGUgbGluZWFyO1xyXG4gICAgYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gM3MgaW5maW5pdGUgbGluZWFyO1xyXG4gIH1cclxuXHJcbiAgLnNwaW5uZXItY3VzdG9tIHtcclxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gaW5maW5pdGUgbGluZWFyO1xyXG4gICAgYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gaW5maW5pdGUgbGluZWFyO1xyXG4gIH1cclxufVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tYm91bmNlZGVsYXkge1xyXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XHJcbiAgNDAlIHsgb3BhY2l0eTogMSB9XHJcbn1cclxuXHJcbkBrZXlmcmFtZXMgI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSB7XHJcbiAgMCUsIDgwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cclxuICA0MCUgeyBvcGFjaXR5OiAxOyB9XHJcbn1cclxuXHJcbkAtd2Via2l0LWtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiB7XHJcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cclxuICB0byB7IG9wYWNpdHk6IDE7IH1cclxufVxyXG5cclxuQGtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiB7XHJcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cclxuICB0byB7IG9wYWNpdHk6IDE7IH1cclxufVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiB7XHJcbiAgZnJvbSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cclxuICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxyXG59XHJcblxyXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiB7XHJcbiAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XHJcbiAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XHJcbn1cclxuIgoJXSwKCSJtYXBwaW5ncyI6ICJBQUdBLEFBQUEsNEJBQTRCLEFBQTVCLENBQ0UsUUFBUSxDQUFFLEtBQU0sQ0FDaEIsR0FBRyxDQUFFLENBQUUsQ0FDUCxJQUFJLENBQUUsQ0FBRSxDQUNSLE1BQU0sQ0FBRSxDQUFFLENBQ1YsS0FBSyxDQUFFLENBQUUsQ0FDVCxLQUFLLENBQUUsSUFBSyxDQUNaLE1BQU0sQ0FBRSxJQUFLLENBQ2IsaUJBQWlCLENBQUUsa0NBQTBCLENBQVEsS0FBSSxDQUN6RCxTQUFTLENBQUUsa0NBQTBCLENBQVEsS0FBSSxDQUNsRCxBQUVELEFBQUEsb0NBQW9DLEFBQXBDLENBQ0UsUUFBUSxDQUFFLFFBQVMsQ0FDbkIsR0FBRyxDQUFDLENBQUUsQ0FDTixJQUFJ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 */');;","module.exports = '1.2.12';\r\n","var Helpers = require('./helpers')\r\nvar App = require('./app');\r\nvar polyfills = require('./polyfills');\r\n\r\npolyfills.applyPolyfills();\r\n\r\nvar instance;\r\n\r\nmodule.exports = (function () {\r\n var getInstance = function () {\r\n if (!instance) {\r\n instance = new App();\r\n }\r\n return instance;\r\n };\r\n\r\n return Object.assign(Helpers.zipObject(['init', 'open', 'close', 'on', 'off', 'sendMessage', 'onMessage'].map(function (methodName) {\r\n var app = getInstance();\r\n return [methodName, function () {\r\n return app[methodName].apply(app, arguments);\r\n }];\r\n })), {\r\n eventTypes: App.eventTypes,\r\n });\r\n})();\r\n"],"sourceRoot":"."}
\ No newline at end of file
+{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/bowser/src/bowser.js","node_modules/cssify/browser.js","node_modules/sassify/lib/sassify-browser.js","src/app.js","src/childwindow.js","src/device.js","src/exception.js","src/helpers.js","src/lightbox.js","src/polyfills.js","src/postmessage.js","src/spinners/round.svg","src/spinners/xsolla.svg","src/styles/lightbox.scss","src/version.js","src/main.js"],"names":["f","exports","module","define","amd","window","global","self","this","XPayStationWidget","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","root","name","definition","detect","ua","getFirstMatch","regex","match","getSecondMatch","result","iosdevice","toLowerCase","android","test","nexusMobile","nexusTablet","chromeos","silk","sailfish","tizen","webos","windowsphone","windows","mac","linux","edgeVersion","versionIdentifier","tablet","mobile","xbox","opera","version","samsungBrowser","whale","mzbrowser","coast","focus","yandexbrowser","ucbrowser","maxthon","epiphany","puffin","sleipnir","kMeleon","osname","msedge","msie","chromeBook","chrome","vivaldi","seamonkey","firefox","firefoxos","phantom","slimer","blackberry","touchpad","bada","qupzilla","chromium","safari","googlebot","blink","webkit","gecko","ios","osVersion","replace","osversion","osMajorVersion","split","compareVersions","c","x","bowser","navigator","userAgent","getVersionPrecision","map","arr","iterator","Array","prototype","push","versions","precision","Math","max","chunks","delta","join","chunk","reverse","isUnsupportedBrowser","minVersions","strictMode","browser","_bowser","hasOwnProperty","String","browserList","browserItem","check","_detect","css","customDocument","head","style","doc","document","createStyleSheet","sheet","cssText","ownerNode","getElementsByTagName","createElement","type","styleSheet","appendChild","createTextNode","byUrl","url","link","rel","href","Helpers","Exception","LightBox","ChildWindow","Device","App","config","Object","assign","DEFAULT_CONFIG","eventObject","addEventObject","isInitiated","postMessage","childWindow","access_token","access_data","sandbox","eventTypes","INIT","OPEN","OPEN_WINDOW","OPEN_LIGHTBOX","LOAD","CLOSE","CLOSE_WINDOW","CLOSE_LIGHTBOX","STATUS","STATUS_INVOICE","STATUS_DELIVERING","STATUS_TROUBLED","STATUS_DONE","USER_COUNTRY","FCP","ERROR","lightbox","host","iframeOnly","consentId","getPaymentUrl","paymentUrl","payment_url","query","queryParams","JSON","stringify","param","getPaymentUrlWithConsentId","checkConfig","isEmpty","throwError","checkApp","undefined","message","triggerEvent","eventName","data","arguments","forEach","event","createEvent","initEvent","dispatchEvent","bind","trigger","triggerCustomEvent","CustomEvent","detail","initCustomEvent","init","options","fn","bodyElement","body","clickEventName","handleClickEvent","targetElement","querySelector","sourceEvent","target","open","clickEvent","removeEventListener","addEventListener","readyState","lightBox","triggerSplitStatus","paymentInfo","status","that","handleStatus","statusData","handleUserLocale","userCountry","user_country","handleFcp","handleError","isMobile","on","handleOpen","getPostMessage","off","handleLoad","handleClose","openFrame","close","handler","sendMessage","command","send","apply","onMessage","DEFAULT_OPTIONS","PostMessage","wrapEventInNamespace","_NAMESPACE","closed","location","addHandlers","closeChildWindow","timer","clearTimeout","handleWidgetDetection","childWindowOptions","parent","checkWindow","setTimeout","toString","context","eventsList","handlers","WeakMap","isStringContainedSpace","str","eventInNamespace","handle","addEvent","handlerDecorator","set","parsedEventName","removeEvent","get","filter","value","uniq","list","indexOf","zipObject","props","values","index","isArray","key","add","k","v","encodeURIComponent","buildParams","prefix","obj","len","once","URL","searchParams","append","CLASS_PREFIX","COMMON_OPTIONS","DEFAULT_OPTIONS_MOBILE","SPINNERS","MIN_PS_DIMENSIONS","handleKeyupEventName","handleResizeEventName","handleGlobalKeyup","handleGlobalResize","resizeEvent","zIndex","overlayOpacity","overlayBackground","contentBackground","closeByKeyboard","closeByClick","modal","spinner","spinnerColor","spinnerUrl","spinnerRotationPeriod","width","height","contentMargin","xsolla","round","none","measureScrollbar","scrollDiv","scrollbarWidth","classList","setAttribute","offsetWidth","clientWidth","removeChild","spinnerCustom","HandleBoundSpecificKeyup","which","closeFrame","encodeURI","lightBoxElement","settings","className","overlay","content","iframe","src","frameBorder","allowFullscreen","innerHTML","lightBoxOverlayElement","lightBoxContentElement","lightBoxIframeElement","lightBoxSpinnerElement","psDimensions","withDefaultPXUnit","parseFloat","opacity","backgroundColor","margin","fill","lightBoxResize","containerWidth","left","top","borderRadius","containerHeight","clientHeight","contentWidth","el","getComputedStyle","parseInt","marginLeft","marginRight","contentHeight","offsetHeight","marginTop","marginBottom","horMargin","vertMargin","widthAfterResize","heightAfterResize","leftOffset","innerWidth","topOffset","innerHeight","bodyStyles","showContent","hideSpinner","remove","hideScrollbar","bodyPad","overflow","paddingRight","display","iframeWindow","timeout","resizeTimeout","contentWindow","dimensions","dim","lightBoxOptions","parentNode","keys","applyPolyfills","defineProperty","enumerable","configurable","writable","TypeError","b","getOwnPropertyDescriptor","linkedWindow","source","parse","targetOrigin","instance","methodName","app"],"mappings":"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","file":"widget.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 1 && match[1]) || '';\n }\n\n function getSecondMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()\n , likeAndroid = /like android/i.test(ua)\n , android = !likeAndroid && /android/i.test(ua)\n , nexusMobile = /nexus\\s*[0-6]\\s*/i.test(ua)\n , nexusTablet = !nexusMobile && /nexus\\s*[0-9]+/i.test(ua)\n , chromeos = /CrOS/.test(ua)\n , silk = /silk/i.test(ua)\n , sailfish = /sailfish/i.test(ua)\n , tizen = /tizen/i.test(ua)\n , webos = /(web|hpw)(o|0)s/i.test(ua)\n , windowsphone = /windows phone/i.test(ua)\n , samsungBrowser = /SamsungBrowser/i.test(ua)\n , windows = !windowsphone && /windows/i.test(ua)\n , mac = !iosdevice && !silk && /macintosh/i.test(ua)\n , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)\n , edgeVersion = getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.\\d+)?)/i)\n , versionIdentifier = getFirstMatch(/version\\/(\\d+(\\.\\d+)?)/i)\n , tablet = /tablet/i.test(ua) && !/tablet pc/i.test(ua)\n , mobile = !tablet && /[^-]mobi/i.test(ua)\n , xbox = /xbox/i.test(ua)\n , result\n\n if (/opera/i.test(ua)) {\n // an old Opera\n result = {\n name: 'Opera'\n , opera: t\n , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n } else if (/opr\\/|opios/i.test(ua)) {\n // a new Opera\n result = {\n name: 'Opera'\n , opera: t\n , version: getFirstMatch(/(?:opr|opios)[\\s\\/](\\d+(\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (/SamsungBrowser/i.test(ua)) {\n result = {\n name: 'Samsung Internet for Android'\n , samsungBrowser: t\n , version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/Whale/i.test(ua)) {\n result = {\n name: 'NAVER Whale browser'\n , whale: t\n , version: getFirstMatch(/(?:whale)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/MZBrowser/i.test(ua)) {\n result = {\n name: 'MZ Browser'\n , mzbrowser: t\n , version: getFirstMatch(/(?:MZBrowser)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/coast/i.test(ua)) {\n result = {\n name: 'Opera Coast'\n , coast: t\n , version: versionIdentifier || getFirstMatch(/(?:coast)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/focus/i.test(ua)) {\n result = {\n name: 'Focus'\n , focus: t\n , version: getFirstMatch(/(?:focus)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/yabrowser/i.test(ua)) {\n result = {\n name: 'Yandex Browser'\n , yandexbrowser: t\n , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/ucbrowser/i.test(ua)) {\n result = {\n name: 'UC Browser'\n , ucbrowser: t\n , version: getFirstMatch(/(?:ucbrowser)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/mxios/i.test(ua)) {\n result = {\n name: 'Maxthon'\n , maxthon: t\n , version: getFirstMatch(/(?:mxios)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/epiphany/i.test(ua)) {\n result = {\n name: 'Epiphany'\n , epiphany: t\n , version: getFirstMatch(/(?:epiphany)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/puffin/i.test(ua)) {\n result = {\n name: 'Puffin'\n , puffin: t\n , version: getFirstMatch(/(?:puffin)[\\s\\/](\\d+(?:\\.\\d+)?)/i)\n }\n }\n else if (/sleipnir/i.test(ua)) {\n result = {\n name: 'Sleipnir'\n , sleipnir: t\n , version: getFirstMatch(/(?:sleipnir)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (/k-meleon/i.test(ua)) {\n result = {\n name: 'K-Meleon'\n , kMeleon: t\n , version: getFirstMatch(/(?:k-meleon)[\\s\\/](\\d+(?:\\.\\d+)+)/i)\n }\n }\n else if (windowsphone) {\n result = {\n name: 'Windows Phone'\n , osname: 'Windows Phone'\n , windowsphone: t\n }\n if (edgeVersion) {\n result.msedge = t\n result.version = edgeVersion\n }\n else {\n result.msie = t\n result.version = getFirstMatch(/iemobile\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/msie|trident/i.test(ua)) {\n result = {\n name: 'Internet Explorer'\n , msie: t\n , version: getFirstMatch(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)\n }\n } else if (chromeos) {\n result = {\n name: 'Chrome'\n , osname: 'Chrome OS'\n , chromeos: t\n , chromeBook: t\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n } else if (/edg([ea]|ios)/i.test(ua)) {\n result = {\n name: 'Microsoft Edge'\n , msedge: t\n , version: edgeVersion\n }\n }\n else if (/vivaldi/i.test(ua)) {\n result = {\n name: 'Vivaldi'\n , vivaldi: t\n , version: getFirstMatch(/vivaldi\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (sailfish) {\n result = {\n name: 'Sailfish'\n , osname: 'Sailfish OS'\n , sailfish: t\n , version: getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/seamonkey\\//i.test(ua)) {\n result = {\n name: 'SeaMonkey'\n , seamonkey: t\n , version: getFirstMatch(/seamonkey\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/firefox|iceweasel|fxios/i.test(ua)) {\n result = {\n name: 'Firefox'\n , firefox: t\n , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \\/](\\d+(\\.\\d+)?)/i)\n }\n if (/\\((mobile|tablet);[^\\)]*rv:[\\d\\.]+\\)/i.test(ua)) {\n result.firefoxos = t\n result.osname = 'Firefox OS'\n }\n }\n else if (silk) {\n result = {\n name: 'Amazon Silk'\n , silk: t\n , version : getFirstMatch(/silk\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/phantom/i.test(ua)) {\n result = {\n name: 'PhantomJS'\n , phantom: t\n , version: getFirstMatch(/phantomjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/slimerjs/i.test(ua)) {\n result = {\n name: 'SlimerJS'\n , slimer: t\n , version: getFirstMatch(/slimerjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/blackberry|\\bbb\\d+/i.test(ua) || /rim\\stablet/i.test(ua)) {\n result = {\n name: 'BlackBerry'\n , osname: 'BlackBerry OS'\n , blackberry: t\n , version: versionIdentifier || getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (webos) {\n result = {\n name: 'WebOS'\n , osname: 'WebOS'\n , webos: t\n , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\\/(\\d+(\\.\\d+)?)/i)\n };\n /touchpad\\//i.test(ua) && (result.touchpad = t)\n }\n else if (/bada/i.test(ua)) {\n result = {\n name: 'Bada'\n , osname: 'Bada'\n , bada: t\n , version: getFirstMatch(/dolfin\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (tizen) {\n result = {\n name: 'Tizen'\n , osname: 'Tizen'\n , tizen: t\n , version: getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (/qupzilla/i.test(ua)) {\n result = {\n name: 'QupZilla'\n , qupzilla: t\n , version: getFirstMatch(/(?:qupzilla)[\\s\\/](\\d+(?:\\.\\d+)+)/i) || versionIdentifier\n }\n }\n else if (/chromium/i.test(ua)) {\n result = {\n name: 'Chromium'\n , chromium: t\n , version: getFirstMatch(/(?:chromium)[\\s\\/](\\d+(?:\\.\\d+)?)/i) || versionIdentifier\n }\n }\n else if (/chrome|crios|crmo/i.test(ua)) {\n result = {\n name: 'Chrome'\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (android) {\n result = {\n name: 'Android'\n , version: versionIdentifier\n }\n }\n else if (/safari|applewebkit/i.test(ua)) {\n result = {\n name: 'Safari'\n , safari: t\n }\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if (iosdevice) {\n result = {\n name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'\n }\n // WTF: version is not part of user agent in web apps\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if(/googlebot/i.test(ua)) {\n result = {\n name: 'Googlebot'\n , googlebot: t\n , version: getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i) || versionIdentifier\n }\n }\n else {\n result = {\n name: getFirstMatch(/^(.*)\\/(.*) /),\n version: getSecondMatch(/^(.*)\\/(.*) /)\n };\n }\n\n // set webkit or gecko flag for browsers based on these engines\n if (!result.msedge && /(apple)?webkit/i.test(ua)) {\n if (/(apple)?webkit\\/537\\.36/i.test(ua)) {\n result.name = result.name || \"Blink\"\n result.blink = t\n } else {\n result.name = result.name || \"Webkit\"\n result.webkit = t\n }\n if (!result.version && versionIdentifier) {\n result.version = versionIdentifier\n }\n } else if (!result.opera && /gecko\\//i.test(ua)) {\n result.name = result.name || \"Gecko\"\n result.gecko = t\n result.version = result.version || getFirstMatch(/gecko\\/(\\d+(\\.\\d+)?)/i)\n }\n\n // set OS flags for platforms that have multiple browsers\n if (!result.windowsphone && (android || result.silk)) {\n result.android = t\n result.osname = 'Android'\n } else if (!result.windowsphone && iosdevice) {\n result[iosdevice] = t\n result.ios = t\n result.osname = 'iOS'\n } else if (mac) {\n result.mac = t\n result.osname = 'macOS'\n } else if (xbox) {\n result.xbox = t\n result.osname = 'Xbox'\n } else if (windows) {\n result.windows = t\n result.osname = 'Windows'\n } else if (linux) {\n result.linux = t\n result.osname = 'Linux'\n }\n\n function getWindowsVersion (s) {\n switch (s) {\n case 'NT': return 'NT'\n case 'XP': return 'XP'\n case 'NT 5.0': return '2000'\n case 'NT 5.1': return 'XP'\n case 'NT 5.2': return '2003'\n case 'NT 6.0': return 'Vista'\n case 'NT 6.1': return '7'\n case 'NT 6.2': return '8'\n case 'NT 6.3': return '8.1'\n case 'NT 10.0': return '10'\n default: return undefined\n }\n }\n\n // OS version extraction\n var osVersion = '';\n if (result.windows) {\n osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i))\n } else if (result.windowsphone) {\n osVersion = getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i);\n } else if (result.mac) {\n osVersion = getFirstMatch(/Mac OS X (\\d+([_\\.\\s]\\d+)*)/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (iosdevice) {\n osVersion = getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (android) {\n osVersion = getFirstMatch(/android[ \\/-](\\d+(\\.\\d+)*)/i);\n } else if (result.webos) {\n osVersion = getFirstMatch(/(?:web|hpw)os\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.blackberry) {\n osVersion = getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i);\n } else if (result.bada) {\n osVersion = getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.tizen) {\n osVersion = getFirstMatch(/tizen[\\/\\s](\\d+(\\.\\d+)*)/i);\n }\n if (osVersion) {\n result.osversion = osVersion;\n }\n\n // device type extraction\n var osMajorVersion = !result.windows && osVersion.split('.')[0];\n if (\n tablet\n || nexusTablet\n || iosdevice == 'ipad'\n || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))\n || result.silk\n ) {\n result.tablet = t\n } else if (\n mobile\n || iosdevice == 'iphone'\n || iosdevice == 'ipod'\n || android\n || nexusMobile\n || result.blackberry\n || result.webos\n || result.bada\n ) {\n result.mobile = t\n }\n\n // Graded Browser Support\n // http://developer.yahoo.com/yui/articles/gbs\n if (result.msedge ||\n (result.msie && result.version >= 10) ||\n (result.yandexbrowser && result.version >= 15) ||\n\t\t (result.vivaldi && result.version >= 1.0) ||\n (result.chrome && result.version >= 20) ||\n (result.samsungBrowser && result.version >= 4) ||\n (result.whale && compareVersions([result.version, '1.0']) === 1) ||\n (result.mzbrowser && compareVersions([result.version, '6.0']) === 1) ||\n (result.focus && compareVersions([result.version, '1.0']) === 1) ||\n (result.firefox && result.version >= 20.0) ||\n (result.safari && result.version >= 6) ||\n (result.opera && result.version >= 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] >= 6) ||\n (result.blackberry && result.version >= 10.1)\n || (result.chromium && result.version >= 20)\n ) {\n result.a = t;\n }\n else if ((result.msie && result.version < 10) ||\n (result.chrome && result.version < 20) ||\n (result.firefox && result.version < 20.0) ||\n (result.safari && result.version < 6) ||\n (result.opera && result.version < 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] < 6)\n || (result.chromium && result.version < 20)\n ) {\n result.c = t\n } else result.x = t\n\n return result\n }\n\n var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')\n\n bowser.test = function (browserList) {\n for (var i = 0; i < browserList.length; ++i) {\n var browserItem = browserList[i];\n if (typeof browserItem=== 'string') {\n if (browserItem in bowser) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n function getVersionPrecision(version) {\n return version.split(\".\").length;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n function map(arr, iterator) {\n var result = [], i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i++) {\n result.push(iterator(arr[i]));\n }\n return result;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1\n * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1\n * compareVersions(['1.10.2.1', '1.10.2.1']); // 0\n * compareVersions(['1.10.2.1', '1.0800.2']); // -1\n *\n * @param {Array} versions versions to compare\n * @return {Number} comparison result\n */\n function compareVersions(versions) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));\n var chunks = map(versions, function (version) {\n var delta = precision - getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n version = version + new Array(delta + 1).join(\".0\");\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return map(version.split(\".\"), function (chunk) {\n return new Array(20 - chunk.length).join(\"0\") + chunk;\n }).reverse();\n });\n\n // iterate in reverse order by reversed chunks array\n while (--precision >= 0) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n else if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === 0) {\n // all version chunks are same\n return 0;\n }\n }\n else {\n return -1;\n }\n }\n }\n\n /**\n * Check if browser is unsupported\n *\n * @example\n * bowser.isUnsupportedBrowser({\n * msie: \"10\",\n * firefox: \"23\",\n * chrome: \"29\",\n * safari: \"5.1\",\n * opera: \"16\",\n * phantom: \"534\"\n * });\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @param {String} [ua] user agent string\n * @return {Boolean}\n */\n function isUnsupportedBrowser(minVersions, strictMode, ua) {\n var _bowser = bowser;\n\n // make strictMode param optional with ua param usage\n if (typeof strictMode === 'string') {\n ua = strictMode;\n strictMode = void(0);\n }\n\n if (strictMode === void(0)) {\n strictMode = false;\n }\n if (ua) {\n _bowser = detect(ua);\n }\n\n var version = \"\" + _bowser.version;\n for (var browser in minVersions) {\n if (minVersions.hasOwnProperty(browser)) {\n if (_bowser[browser]) {\n if (typeof minVersions[browser] !== 'string') {\n throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));\n }\n\n // browser version and min supported version.\n return compareVersions([version, minVersions[browser]]) < 0;\n }\n }\n }\n\n return strictMode; // not found\n }\n\n /**\n * Check if browser is supported\n *\n * @param {Object} minVersions map of minimal version to browser\n * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map\n * @param {String} [ua] user agent string\n * @return {Boolean}\n */\n function check(minVersions, strictMode, ua) {\n return !isUnsupportedBrowser(minVersions, strictMode, ua);\n }\n\n bowser.isUnsupportedBrowser = isUnsupportedBrowser;\n bowser.compareVersions = compareVersions;\n bowser.check = check;\n\n /*\n * Set our detect method to the main bowser object so we can\n * reuse it to test other user agents.\n * This is needed to implement future tests.\n */\n bowser._detect = detect;\n\n /*\n * Set our detect public method to the main bowser object\n * This is needed to implement bowser in server side\n */\n bowser.detect = detect;\n return bowser\n});\n","module.exports = function (css, customDocument) {\n var doc = customDocument || document;\n if (doc.createStyleSheet) {\n var sheet = doc.createStyleSheet()\n sheet.cssText = css;\n return sheet.ownerNode;\n } else {\n var head = doc.getElementsByTagName('head')[0],\n style = doc.createElement('style');\n\n style.type = 'text/css';\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(doc.createTextNode(css));\n }\n\n head.appendChild(style);\n return style;\n }\n};\n\nmodule.exports.byUrl = function(url) {\n if (document.createStyleSheet) {\n return document.createStyleSheet(url).ownerNode;\n } else {\n var head = document.getElementsByTagName('head')[0],\n link = document.createElement('link');\n\n link.rel = 'stylesheet';\n link.href = url;\n\n head.appendChild(link);\n return link;\n }\n};\n","module.exports = require('cssify');","var Helpers = require('./helpers');\nvar Exception = require('./exception');\nvar LightBox = require('./lightbox');\nvar ChildWindow = require('./childwindow');\nvar Device = require('./device');\n\nmodule.exports = (function () {\n function ready(fn) {\n if (document.readyState !== 'loading'){\n fn();\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n }\n\n function App() {\n this.config = Object.assign({}, DEFAULT_CONFIG);\n this.eventObject = Helpers.addEventObject(this);\n this.isInitiated = false;\n this.postMessage = null;\n this.childWindow = null;\n }\n\n App.eventTypes = {\n INIT: 'init',\n OPEN: 'open',\n OPEN_WINDOW: 'open-window',\n OPEN_LIGHTBOX: 'open-lightbox',\n LOAD: 'load',\n CLOSE: 'close',\n CLOSE_WINDOW: 'close-window',\n CLOSE_LIGHTBOX: 'close-lightbox',\n STATUS: 'status',\n STATUS_INVOICE: 'status-invoice',\n STATUS_DELIVERING: 'status-delivering',\n STATUS_TROUBLED: 'status-troubled',\n STATUS_DONE: 'status-done',\n USER_COUNTRY: 'user-country',\n FCP: 'fcp',\n ERROR: 'error'\n };\n\n var DEFAULT_CONFIG = {\n access_token: null,\n access_data: null,\n sandbox: false,\n lightbox: {},\n childWindow: {},\n host: 'secure.xsolla.com',\n iframeOnly: false,\n consentId: null\n };\n var SANDBOX_PAYSTATION_URL = 'https://sandbox-secure.xsolla.com/paystation2/?';\n var EVENT_NAMESPACE = '.xpaystation-widget';\n var ATTR_PREFIX = 'data-xpaystation-widget-open';\n\n /** Private Members **/\n App.prototype.config = {};\n App.prototype.isInitiated = false;\n App.prototype.eventObject = Helpers.addEventObject(this);\n\n App.prototype.getPaymentUrl = function () {\n if (this.config.payment_url) {\n return this.config.payment_url;\n }\n\n const query = this.config.queryParams || {};\n if (this.config.access_token) {\n query.access_token = this.config.access_token;\n } else {\n query.access_data = JSON.stringify(this.config.access_data);\n }\n\n const urlWithoutQueryParams = this.config.sandbox ?\n SANDBOX_PAYSTATION_URL :\n 'https://' + this.config.host + '/paystation2/?';\n\n const paymentUrl = urlWithoutQueryParams + Helpers.param(query);\n\n if (this.config.consentId) {\n return Helpers.getPaymentUrlWithConsentId(paymentUrl, this.config.consentId)\n }\n\n return paymentUrl;\n };\n\n App.prototype.checkConfig = function () {\n if (Helpers.isEmpty(this.config.access_token) && Helpers.isEmpty(this.config.access_data) && Helpers.isEmpty(this.config.payment_url)) {\n this.throwError('No access token or access data or payment URL given');\n }\n\n if (!Helpers.isEmpty(this.config.access_data) && typeof this.config.access_data !== 'object') {\n this.throwError('Invalid access data format');\n }\n\n if (Helpers.isEmpty(this.config.host)) {\n this.throwError('Invalid host');\n }\n };\n\n App.prototype.checkApp = function () {\n if (this.isInitiated === undefined) {\n this.throwError('Initialize widget before opening');\n }\n };\n\n App.prototype.throwError = function (message) {\n throw new Exception(message);\n };\n\n App.prototype.triggerEvent = function (eventName, data) {\n if (arguments.length === 1) {\n [].forEach.call(arguments, (function (eventName) {\n var event = document.createEvent('HTMLEvents');\n event.initEvent(eventName, true, false);\n document.dispatchEvent(event);\n }).bind(this));\n } else {\n this.eventObject.trigger(eventName, data);\n }\n };\n\n App.prototype.triggerCustomEvent = function (eventName, data) {\n try {\n var event = new CustomEvent(eventName, {detail: data}); // Not working in IE\n } catch(e) {\n var event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, true, true, data);\n }\n document.dispatchEvent(event);\n };\n\n /**\n * Initialize widget with options\n * @param options\n */\n App.prototype.init = function(options) {\n function initialize(options) {\n this.isInitiated = true;\n this.config = Object.assign({}, DEFAULT_CONFIG, options);\n\n var bodyElement = global.document.body;\n var clickEventName = 'click' + EVENT_NAMESPACE;\n\n var handleClickEvent = (function(event) {\n var targetElement = document.querySelector('[' + ATTR_PREFIX + ']');\n if (event.sourceEvent.target === targetElement) {\n this.open.call(this, targetElement);\n }\n }).bind(this);\n\n bodyElement.removeEventListener(clickEventName, handleClickEvent);\n\n var clickEvent = document.createEvent('Event');\n clickEvent.initEvent(clickEventName, false, true);\n\n bodyElement.addEventListener('click', (function(event) {\n clickEvent.sourceEvent = event;\n bodyElement.dispatchEvent(clickEvent);\n }).bind(this), false);\n\n bodyElement.addEventListener(clickEventName, handleClickEvent);\n this.triggerEvent(App.eventTypes.INIT);\n }\n ready(initialize.bind(this, options));\n }\n\n /**\n * Open payment interface (PayStation)\n */\n App.prototype.open = function () {\n this.checkConfig();\n this.checkApp();\n\n var triggerSplitStatus = (function (data) {\n switch (((data || {}).paymentInfo || {}).status) {\n case 'invoice':\n this.triggerEvent(App.eventTypes.STATUS_INVOICE, data);\n break;\n case 'delivering':\n this.triggerEvent(App.eventTypes.STATUS_DELIVERING, data);\n break;\n case 'troubled':\n this.triggerEvent(App.eventTypes.STATUS_TROUBLED, data);\n break;\n case 'done':\n this.triggerEvent(App.eventTypes.STATUS_DONE, data);\n break;\n }\n }).bind(this);\n\n var url = this.getPaymentUrl();\n var that = this;\n\n function handleStatus(event) {\n var statusData = event.detail;\n that.triggerEvent(App.eventTypes.STATUS, statusData);\n triggerSplitStatus(statusData);\n }\n\n function handleUserLocale(event) {\n var userCountry = {\n user_country: event.detail.user_country\n };\n that.triggerCustomEvent(App.eventTypes.USER_COUNTRY, userCountry);\n }\n\n function handleFcp(event) {\n that.triggerCustomEvent(App.eventTypes.FCP, event.detail);\n }\n\n function handleError(event) {\n that.triggerCustomEvent(App.eventTypes.ERROR, event.detail);\n }\n\n this.postMessage = null;\n if ((new Device).isMobile() && !this.config.iframeOnly) {\n var childWindow = new ChildWindow;\n childWindow.on('open', function handleOpen() {\n that.postMessage = childWindow.getPostMessage();\n that.triggerEvent(App.eventTypes.OPEN);\n that.triggerEvent(App.eventTypes.OPEN_WINDOW);\n childWindow.off('open', handleOpen);\n });\n childWindow.on('load', function handleLoad() {\n that.triggerEvent(App.eventTypes.LOAD);\n childWindow.off('load', handleLoad);\n });\n childWindow.on('close', function handleClose() {\n that.triggerEvent(App.eventTypes.CLOSE);\n that.triggerEvent(App.eventTypes.CLOSE_WINDOW);\n childWindow.off('status', handleStatus);\n childWindow.off(App.eventTypes.USER_COUNTRY, handleUserLocale);\n childWindow.off(App.eventTypes.FCP, handleFcp);\n childWindow.off(App.eventTypes.ERROR, handleError);\n childWindow.off('close', handleClose);\n });\n childWindow.on('status', handleStatus);\n childWindow.on(App.eventTypes.USER_COUNTRY, handleUserLocale);\n childWindow.on(App.eventTypes.FCP, handleFcp);\n childWindow.on(App.eventTypes.ERROR, handleError);\n childWindow.open(url, this.config.childWindow);\n that.childWindow = childWindow;\n } else {\n var lightBox = new LightBox((new Device).isMobile() && this.config.iframeOnly);\n lightBox.on('open', function handleOpen() {\n that.postMessage = lightBox.getPostMessage();\n that.triggerEvent(App.eventTypes.OPEN);\n that.triggerEvent(App.eventTypes.OPEN_LIGHTBOX);\n lightBox.off('open', handleOpen);\n });\n lightBox.on('load', function handleLoad() {\n that.triggerEvent(App.eventTypes.LOAD);\n lightBox.off('load', handleLoad);\n });\n lightBox.on('close', function handleClose() {\n that.triggerEvent(App.eventTypes.CLOSE);\n that.triggerEvent(App.eventTypes.CLOSE_LIGHTBOX);\n lightBox.off('status', handleStatus);\n lightBox.off(App.eventTypes.USER_COUNTRY, handleUserLocale);\n lightBox.off(App.eventTypes.FCP, handleFcp);\n lightBox.off(App.eventTypes.ERROR, handleError);\n lightBox.off('close', handleClose);\n });\n lightBox.on('status', handleStatus);\n lightBox.on(App.eventTypes.USER_COUNTRY, handleUserLocale);\n lightBox.on(App.eventTypes.FCP, handleFcp);\n lightBox.on(App.eventTypes.ERROR, handleError);\n lightBox.openFrame(url, this.config.lightbox);\n that.childWindow = lightBox;\n }\n };\n\n\n /**\n * Close payment interface (PayStation)\n */\n App.prototype.close = function () {\n this.childWindow.close();\n };\n\n /**\n * Attach an event handler function for one or more events to the widget\n * @param event One or more space-separated event types (init, open, load, close, status, status-invoice, status-delivering, status-troubled, status-done)\n * @param handler A function to execute when the event is triggered\n */\n App.prototype.on = function (event, handler, options) {\n if (typeof handler !== 'function') {\n return;\n }\n\n this.eventObject.on(event, handler, options);\n };\n\n /**\n * Remove an event handler\n * @param event One or more space-separated event types\n * @param handler A handler function previously attached for the event(s)\n */\n App.prototype.off = function (event, handler, options) {\n this.eventObject.off(event, handler, options);\n };\n\n /**\n * Send a message directly to PayStation\n * @param command\n * @param data\n */\n App.prototype.sendMessage = function (command, data) {\n if (this.postMessage) {\n this.postMessage.send.apply(this.postMessage, arguments);\n }\n };\n\n /**\n * Attach an event handler function for message event from PayStation\n * @param command\n * @param handler\n */\n App.prototype.onMessage = function (command, handler) {\n if (this.postMessage) {\n this.postMessage.on.apply(this.postMessage, arguments);\n }\n };\n\n return App;\n})();\n","var version = require('./version');\nvar Helpers = require('./helpers');\nvar PostMessage = require('./postmessage');\n\nmodule.exports = (function () {\n function ChildWindow() {\n this.eventObject = Helpers.addEventObject(this, wrapEventInNamespace);\n this.message = null;\n }\n\n function wrapEventInNamespace(eventName) {\n return ChildWindow._NAMESPACE + '_' + eventName;\n }\n\n var DEFAULT_OPTIONS = {\n target: '_blank'\n };\n\n /** Private Members **/\n ChildWindow.prototype.eventObject = null;\n ChildWindow.prototype.childWindow = null;\n\n ChildWindow.prototype.triggerEvent = function (event, data) {\n this.eventObject.trigger(event, data);\n };\n\n /** Public Members **/\n ChildWindow.prototype.open = function (url, options) {\n options = Object.assign({}, DEFAULT_OPTIONS, options);\n\n if (this.childWindow && !this.childWindow.closed) {\n this.childWindow.location.href = url;\n }\n\n var that = this;\n var addHandlers = function () {\n function closeChildWindow() {\n that.off('close', closeChildWindow)\n\n if (timer) {\n global.clearTimeout(timer);\n }\n if (that.childWindow) {\n that.childWindow.close();\n }\n }\n\n that.on('close', closeChildWindow);\n\n // Cross-window communication\n that.message = new PostMessage(that.childWindow);\n that.message.on('dimensions widget-detection', function handleWidgetDetection() {\n that.triggerEvent('load');\n that.message.off('dimensions widget-detection', handleWidgetDetection);\n });\n that.message.on('widget-detection', function handleWidgetDetection() {\n that.message.send('widget-detected', {version: version, childWindowOptions: options});\n that.message.off('widget-detection', handleWidgetDetection);\n });\n that.message.on('status', function (event) {\n that.triggerEvent('status', event.detail);\n });\n that.message.on('close', function handleClose() {\n closeChildWindow();\n that.message.off('close', handleClose);\n });\n that.message.on('user-country', function (event) {\n that.triggerEvent('user-country', event.detail);\n });\n that.message.on('fcp', function (event) {\n that.triggerEvent('fcp', event.detail);\n });\n that.message.on('error', function (event) {\n that.triggerEvent('error', event.detail);\n });\n };\n\n switch (options.target) {\n case '_self':\n this.childWindow = global.window;\n addHandlers();\n this.childWindow.location.href = url;\n break;\n case '_parent':\n this.childWindow = global.window.parent;\n addHandlers();\n this.childWindow.location.href = url;\n break;\n case '_blank':\n default:\n this.childWindow = global.window.open(url);\n this.childWindow.focus();\n addHandlers();\n\n var checkWindow = (function () {\n if (this.childWindow) {\n if (this.childWindow.closed) {\n this.triggerEvent('close');\n } else {\n timer = global.setTimeout(checkWindow, 100);\n }\n }\n }).bind(this);\n var timer = global.setTimeout(checkWindow, 100);\n break;\n }\n\n this.triggerEvent('open');\n };\n\n ChildWindow.prototype.close = function () {\n this.triggerEvent('close');\n };\n\n ChildWindow.prototype.on = function (event, handler, options) {\n if (typeof handler !== 'function') {\n return;\n }\n\n this.eventObject.on(event, handler, options);\n };\n\n ChildWindow.prototype.off = function (event, handler, options) {\n this.eventObject.off(event, handler, options);\n };\n\n ChildWindow.prototype.getPostMessage = function () {\n return this.message;\n };\n\n ChildWindow._NAMESPACE = 'CHILD_WINDOW';\n\n return ChildWindow;\n})();\n","var bowser = require('bowser');\n\nmodule.exports = (function () {\n function Device() {\n }\n\n /**\n * Mobile devices\n * @returns {boolean}\n */\n Device.prototype.isMobile = function() {\n return bowser.mobile || bowser.tablet;\n };\n\n return Device;\n})();\n","module.exports = function (message) {\n this.message = message;\n this.name = \"XsollaPayStationWidgetException\";\n this.toString = (function () {\n return this.name + ': ' + this.message;\n }).bind(this);\n};\n","function isEmpty(value) {\n return value === null || value === undefined;\n}\n\nfunction uniq(list) {\n return list.filter(function (x, i, a) {\n return a.indexOf(x) == i\n });\n}\n\nfunction zipObject(props, values) {\n var index = -1,\n length = props ? props.length : 0,\n result = {};\n\n if (length && !values && !Array.isArray(props[0])) {\n values = [];\n }\n while (++index < length) {\n var key = props[index];\n if (values) {\n result[key] = values[index];\n } else if (key) {\n result[key[0]] = key[1];\n }\n }\n return result;\n}\n\nfunction param(a) {\n var s = [];\n\n var add = function (k, v) {\n v = typeof v === 'function' ? v() : v;\n v = v === null ? '' : v === undefined ? '' : v;\n s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);\n };\n\n var buildParams = function (prefix, obj) {\n var i, len, key;\n\n if (prefix) {\n if (Array.isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n buildParams(\n prefix + '[' + (typeof obj[i] === 'object' && obj[i] ? i : '') + ']',\n obj[i]\n );\n }\n } else if (String(obj) === '[object Object]') {\n for (key in obj) {\n buildParams(prefix + '[' + key + ']', obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (Array.isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n };\n\n return buildParams('', a).join('&');\n};\n\n\nfunction once(f) {\n return function () {\n f(arguments);\n f = function () {\n };\n }\n}\n\nfunction addEventObject(context, wrapEventInNamespace) {\n var dummyWrapper = function (event) {\n return event\n };\n var wrapEventInNamespace = wrapEventInNamespace || dummyWrapper;\n var eventsList = [];\n var handlers = new WeakMap();\n\n function isStringContainedSpace(str) {\n return / /.test(str)\n }\n\n return {\n trigger: (function (eventName, data) {\n var eventInNamespace = wrapEventInNamespace(eventName);\n try {\n var event = new CustomEvent(eventInNamespace, {detail: data}); // Not working in IE\n } catch (e) {\n var event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventInNamespace, true, true, data);\n }\n document.dispatchEvent(event);\n }).bind(context),\n on: (function (eventName, handle, options) {\n function addEvent(eventName, handle, options) {\n const handlerDecorator = function (event) {\n handle(event, event.detail);\n }\n\n handlers.set(handle, handlerDecorator);\n\n var eventInNamespace = wrapEventInNamespace(eventName);\n document.addEventListener(eventInNamespace, handlerDecorator, options);\n eventsList.push({name: eventInNamespace, handle: handlerDecorator, options: options});\n }\n\n if (isStringContainedSpace(eventName)) {\n var events = eventName.split(' ');\n events.forEach(function (parsedEventName) {\n addEvent(parsedEventName, handle, options)\n })\n } else {\n addEvent(eventName, handle, options);\n }\n\n }).bind(context),\n\n off: (function (eventName, handle, options) {\n const offAllEvents = !eventName && !handle && !options;\n\n if (offAllEvents) {\n eventsList.forEach(function (event) {\n document.removeEventListener(event.name, event.handle, event.options);\n });\n return;\n }\n\n function removeEvent(eventName, handle, options) {\n var eventInNamespace = wrapEventInNamespace(eventName);\n\n const handlerDecorator = handlers.get(handle);\n\n document.removeEventListener(eventInNamespace, handlerDecorator, options);\n eventsList = eventsList.filter(function (event) {\n return event.name !== eventInNamespace;\n });\n }\n\n if (isStringContainedSpace(eventName)) {\n var events = eventName.split(' ');\n events.forEach(function (parsedEventName) {\n removeEvent(parsedEventName, handle, options)\n })\n } else {\n removeEvent(eventName, handle, options);\n }\n\n }).bind(context)\n };\n}\n\nfunction getPaymentUrlWithConsentId(url, consentId) {\n let paymentUrl = new URL(url);\n\n paymentUrl.searchParams.append('consentId', consentId);\n\n return paymentUrl.toString();\n}\n\n\nmodule.exports = {\n addEventObject: addEventObject,\n isEmpty: isEmpty,\n uniq: uniq,\n zipObject: zipObject,\n param: param,\n once: once,\n getPaymentUrlWithConsentId: getPaymentUrlWithConsentId\n}\n","var version = require('./version');\nvar Helpers = require('./helpers');\nvar PostMessage = require('./postmessage');\n\nmodule.exports = (function () {\n function LightBox(isMobile) {\n require('./styles/lightbox.scss');\n this.eventObject = Helpers.addEventObject(this, wrapEventInNamespace);\n this.options = isMobile ? DEFAULT_OPTIONS_MOBILE : DEFAULT_OPTIONS;\n this.message = null;\n }\n\n var CLASS_PREFIX = 'xpaystation-widget-lightbox';\n var COMMON_OPTIONS = {\n zIndex: 1000,\n overlayOpacity: '.6',\n overlayBackground: '#000000',\n contentBackground: '#ffffff',\n closeByKeyboard: true,\n closeByClick: true,\n modal: false,\n spinner: 'xsolla',\n spinnerColor: null,\n spinnerUrl: null,\n spinnerRotationPeriod: 0\n };\n var DEFAULT_OPTIONS = Object.assign({}, COMMON_OPTIONS, {\n width: null,\n height: '100%',\n contentMargin: '10px'\n });\n var DEFAULT_OPTIONS_MOBILE = Object.assign({}, COMMON_OPTIONS, {\n width: '100%',\n height: '100%', \n contentMargin: '0px'\n });\n\n var SPINNERS = {\n xsolla: require('./spinners/xsolla.svg'),\n round: require('./spinners/round.svg'),\n none: ' '\n };\n\n var MIN_PS_DIMENSIONS = {\n height: 500,\n width: 600\n };\n\n var handleKeyupEventName = wrapEventInNamespace('keyup');\n var handleResizeEventName = wrapEventInNamespace('resize');\n\n var handleGlobalKeyup = function(event) {\n\n var clickEvent = document.createEvent('Event');\n clickEvent.initEvent(handleKeyupEventName, false, true);\n clickEvent.sourceEvent = event;\n\n document.body.dispatchEvent(clickEvent);\n }\n\n var handleSpecificKeyup = function(event) {\n if (event.sourceEvent.which == 27) {\n this.closeFrame();\n }\n }\n\n var handleGlobalResize = function() {\n var resizeEvent = document.createEvent('Event');\n resizeEvent.initEvent(handleResizeEventName, false, true);\n\n window.dispatchEvent(resizeEvent);\n }\n\n function wrapEventInNamespace(eventName) {\n return LightBox._NAMESPACE + '_' + eventName;\n }\n\n /** Private Members **/\n LightBox.prototype.triggerEvent = function () {\n this.eventObject.trigger.apply(this.eventObject, arguments);\n };\n\n LightBox.prototype.measureScrollbar = function () { // thx walsh: https://davidwalsh.name/detect-scrollbar-width\n var scrollDiv = document.createElement(\"div\");\n scrollDiv.classList.add(\"scrollbar-measure\");\n scrollDiv.setAttribute(\"style\",\n \"position: absolute;\" +\n \"top: -9999px\" +\n \"width: 50px\" +\n \"height: 50px\" +\n \"overflow: scroll\"\n );\n\n document.body.appendChild(scrollDiv);\n\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n\n return scrollbarWidth;\n };\n\n /** Public Members **/\n LightBox.prototype.openFrame = function (url, options) {\n this.options = Object.assign({}, this.options, options);\n var HandleBoundSpecificKeyup = handleSpecificKeyup.bind(this);\n options = this.options;\n\n var spinner = options.spinner === 'custom' && !!options.spinnerUrl ?\n '' : SPINNERS[options.spinner] || Object.values(SPINNERS)[0];\n\n var template = function (settings) {\n var host = document.createElement('div');\n host.className = settings.prefix;\n\n var overlay = document.createElement('div');\n overlay.className = settings.prefix + '-overlay';\n\n var content = document.createElement('div');\n content.className = settings.prefix + '-content' + ' ' + settings.prefix + '-content__hidden';\n\n var iframe = document.createElement('iframe');\n iframe.className = settings.prefix + '-content-iframe';\n iframe.src = settings.url;\n iframe.frameBorder = '0';\n iframe.allowFullscreen = true;\n\n var spinner = document.createElement('div');\n spinner.className = settings.prefix + '-spinner';\n spinner.innerHTML = settings.spinner;\n\n content.appendChild(iframe);\n\n host.appendChild(overlay);\n host.appendChild(content);\n host.appendChild(spinner);\n\n return host;\n };\n\n var bodyElement = global.document.body;\n var lightBoxElement = template({\n prefix: CLASS_PREFIX,\n url: url,\n spinner: spinner\n });\n var lightBoxOverlayElement = lightBoxElement.querySelector('.' + CLASS_PREFIX + '-overlay');\n var lightBoxContentElement = lightBoxElement.querySelector('.' + CLASS_PREFIX + '-content');\n var lightBoxIframeElement = lightBoxContentElement.querySelector('.' + CLASS_PREFIX + '-content-iframe');\n var lightBoxSpinnerElement = lightBoxElement.querySelector('.' + CLASS_PREFIX + '-spinner');\n\n var psDimensions = {\n width: withDefaultPXUnit(MIN_PS_DIMENSIONS.width),\n height: withDefaultPXUnit(MIN_PS_DIMENSIONS.height)\n };\n\n function withDefaultPXUnit(value) {\n var isStringWithoutUnit = typeof value === 'string' && String(parseFloat(value)).length === value.length;\n if (isStringWithoutUnit) {\n return value + 'px';\n }\n return typeof value === 'number' ? value + 'px' : value\n }\n\n lightBoxElement.style.zIndex = options.zIndex;\n\n lightBoxOverlayElement.style.opacity = options.overlayOpacity;\n lightBoxOverlayElement.style.backgroundColor = options.overlayBackground;\n\n lightBoxContentElement.style.backgroundColor = options.contentBackground;\n lightBoxContentElement.style.margin = withDefaultPXUnit(options.contentMargin);\n lightBoxContentElement.style.width = options.width ? withDefaultPXUnit(options.width) : 'auto';\n lightBoxContentElement.style.height = options.height ? withDefaultPXUnit(options.height) : 'auto';\n\n if (options.spinnerColor) {\n lightBoxSpinnerElement.querySelector('path').style.fill = options.spinnerColor;\n }\n\n if (options.spinner === 'custom') {\n var spinnerCustom = lightBoxSpinnerElement.querySelector('.spinner-custom');\n spinnerCustom.style['-webkit-animation-duration'] = options.spinnerRotationPeriod + 's;';\n spinnerCustom.style['animation-duration'] = options.spinnerRotationPeriod + 's;';\n }\n\n if (options.closeByClick) {\n lightBoxOverlayElement.addEventListener('click', (function () {\n this.closeFrame();\n }).bind(this));\n }\n\n bodyElement.appendChild(lightBoxElement);\n\n if (options.closeByKeyboard) {\n\n bodyElement.addEventListener(handleKeyupEventName, HandleBoundSpecificKeyup);\n\n bodyElement.addEventListener('keyup', handleGlobalKeyup, false);\n }\n\n var showContent = Helpers.once((function () {\n hideSpinner(options);\n lightBoxContentElement.classList.remove(CLASS_PREFIX + '-content__hidden');\n this.triggerEvent('load');\n }).bind(this));\n\n var lightBoxResize = function () {\n var width = options.width ? options.width : psDimensions.width;\n var height = options.height ? options.height : psDimensions.height;\n\n lightBoxContentElement.style.left = '0px';\n lightBoxContentElement.style.top = '0px';\n lightBoxContentElement.style.borderRadius = '8px';\n lightBoxContentElement.style.width = withDefaultPXUnit(width);\n lightBoxContentElement.style.height = withDefaultPXUnit(height);\n\n var containerWidth = lightBoxElement.clientWidth,\n containerHeight = lightBoxElement.clientHeight;\n\n var contentWidth = outerWidth(lightBoxContentElement),\n contentHeight = outerHeight(lightBoxContentElement);\n\n var horMargin = contentWidth - lightBoxContentElement.offsetWidth,\n vertMargin = contentHeight - lightBoxContentElement.offsetHeight;\n\n var widthAfterResize = containerWidth - horMargin;\n\n if (widthAfterResize > contentWidth) {\n widthAfterResize = contentWidth;\n }\n\n if (widthAfterResize > containerWidth) {\n widthAfterResize = containerWidth;\n }\n\n var heightAfterResize = containerHeight - vertMargin;\n\n if (heightAfterResize > contentHeight) {\n heightAfterResize = contentHeight;\n }\n\n if (heightAfterResize > containerHeight) {\n heightAfterResize = containerHeight;\n }\n\n lightBoxContentElement.style.width = withDefaultPXUnit(widthAfterResize);\n lightBoxContentElement.style.height = withDefaultPXUnit(heightAfterResize);\n\n var leftOffset = ((window.innerWidth - widthAfterResize) / 2) - (horMargin / 2);\n var topOffset = ((window.innerHeight - heightAfterResize) / 2) - (vertMargin / 2);\n\n lightBoxContentElement.style.left = withDefaultPXUnit(Math.max(leftOffset, 0));\n lightBoxContentElement.style.top = withDefaultPXUnit(Math.max(topOffset, 0));\n };\n\n function outerWidth(el) {\n var width = el.offsetWidth;\n var style = getComputedStyle(el);\n\n width += parseInt(style.marginLeft) + parseInt(style.marginRight);\n return width;\n }\n\n function outerHeight(el) {\n var height = el.offsetHeight;\n var style = getComputedStyle(el);\n\n height += parseInt(style.marginTop) + parseInt(style.marginBottom);\n return height;\n }\n\n var bodyStyles;\n var hideScrollbar = (function () {\n bodyStyles = Helpers.zipObject(['overflow', 'paddingRight'].map(function (key) {\n return [key, getComputedStyle(bodyElement)[key]];\n }));\n\n var bodyPad = parseInt((getComputedStyle(bodyElement)['paddingRight'] || 0), 10);\n bodyElement.style.overflow = 'hidden';\n bodyElement.style.paddingRight = withDefaultPXUnit(bodyPad + this.measureScrollbar());\n }).bind(this);\n\n var resetScrollbar = function () {\n if (bodyStyles) {\n Object.keys(bodyStyles).forEach(function(key) {\n bodyElement.style[key] = bodyStyles[key];\n })\n }\n };\n\n var showSpinner = function () {\n lightBoxSpinnerElement.style.display = 'block';\n };\n\n var hideSpinner = function () {\n lightBoxSpinnerElement.style.display = 'none';\n };\n\n var loadTimer;\n lightBoxIframeElement.addEventListener('load', function handleLoad(event) {\n var timeout = !(options.width && options.height) ? (options.resizeTimeout || 30000) : 1000; // 30000 if psDimensions will not arrive and custom timeout is not provided\n loadTimer = global.setTimeout(function () {\n lightBoxResize();\n showContent();\n }, timeout);\n lightBoxIframeElement.removeEventListener('load', handleLoad);\n\n });\n\n var iframeWindow = lightBoxIframeElement.contentWindow || lightBoxIframeElement;\n\n // Cross-window communication\n this.message = new PostMessage(iframeWindow);\n if (options.width && options.height) {\n this.message.on('dimensions', (function () {\n lightBoxResize();\n showContent();\n }));\n } else {\n this.message.on('dimensions', (function (event) {\n var data = event.detail;\n if (data.dimensions) {\n psDimensions = Helpers.zipObject(['width', 'height'].map(function (dim) {\n return [dim, Math.max(MIN_PS_DIMENSIONS[dim] || 0, data.dimensions[dim] || 0) + 'px'];\n }));\n\n lightBoxResize();\n }\n showContent();\n }));\n }\n this.message.on('widget-detection', (function () {\n this.message.send('widget-detected', {version: version, lightBoxOptions: options});\n }).bind(this));\n this.message.on('widget-close', (function () {\n this.closeFrame();\n }).bind(this));\n this.message.on('close', (function () {\n this.closeFrame();\n }).bind(this));\n this.message.on('status', (function (event) {\n this.triggerEvent('status', event.detail);\n }).bind(this));\n this.message.on('user-country', (function (event) {\n this.triggerEvent('user-country', event.detail);\n }).bind(this));\n this.message.on('fcp', (function (event) {\n this.triggerEvent('fcp', event.detail);\n }).bind(this));\n this.message.on('error', (function (event) {\n this.triggerEvent('error', event.detail);\n }).bind(this));\n\n // Resize\n window.addEventListener(handleResizeEventName, lightBoxResize);\n window.addEventListener('resize', handleGlobalResize);\n\n // Clean up after close\n var that = this;\n this.on('close', function handleClose(event) {\n that.message.off();\n bodyElement.removeEventListener(handleKeyupEventName, HandleBoundSpecificKeyup)\n bodyElement.removeEventListener('keyup', handleGlobalKeyup);\n\n window.removeEventListener('resize', handleGlobalResize)\n\n window.removeEventListener(handleResizeEventName, lightBoxResize);\n lightBoxElement.parentNode.removeChild(lightBoxElement);\n resetScrollbar();\n that.off('close', handleClose);\n });\n\n showSpinner();\n hideScrollbar();\n this.triggerEvent('open');\n };\n\n LightBox.prototype.closeFrame = function () {\n if (!this.options.modal) {\n this.triggerEvent('close');\n }\n };\n\n LightBox.prototype.close = function () {\n this.closeFrame();\n };\n\n LightBox.prototype.on = function () {\n this.eventObject.on.apply(this.eventObject, arguments);\n };\n\n LightBox.prototype.off = function () {\n this.eventObject.off.apply(this.eventObject, arguments);\n };\n\n LightBox.prototype.getPostMessage = function () {\n return this.message;\n };\n\n LightBox._NAMESPACE = '.xpaystation-widget-lightbox';\n\n return LightBox;\n})();\n","function objectAssign() {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign Polyfill\n Object.assign||Object.defineProperty(Object,\"assign\",{enumerable:!1,configurable:!0,writable:!0,value:function(e,r){\"use strict\";if(null==e)throw new TypeError(\"Cannot convert first argument to object\");for(var t=Object(e),n=1;n>>0;if(\"function\"!=typeof r)throw new TypeError(r+\" is not a function\");for(arguments.length>1&&(t=o),n=0;n\";\n","module.exports = \"\";\n","module.exports = require('sassify')('.xpaystation-widget-lightbox{position:fixed;top:0;left:0;bottom:0;right:0;width:100%;height:100%;-webkit-animation:xpaystation-widget-lightbox-fadein 0.15s;animation:xpaystation-widget-lightbox-fadein 0.15s}.xpaystation-widget-lightbox-overlay{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1}.xpaystation-widget-lightbox-content{position:relative;top:0;left:0;z-index:3}.xpaystation-widget-lightbox-content__hidden{visibility:hidden;z-index:-1}.xpaystation-widget-lightbox-content-iframe{width:100%;height:100%;border:0;background:transparent}.xpaystation-widget-lightbox-spinner{position:absolute;top:50%;left:50%;display:none;z-index:2;pointer-events:none}.xpaystation-widget-lightbox-spinner .spinner-xsolla{width:56px;height:55px;margin-top:-28px;margin-left:-26px}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l,.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;-webkit-animation-fill-mode:both;animation:xpaystation-widget-lightbox-bouncedelay 1s infinite ease-in-out;animation-fill-mode:both}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-x{-webkit-animation-delay:0s;animation-delay:0s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-s{-webkit-animation-delay:.2s;animation-delay:.2s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-o{-webkit-animation-delay:.4s;animation-delay:.4s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-l{-webkit-animation-delay:.6s;animation-delay:.6s}.xpaystation-widget-lightbox-spinner .spinner-xsolla .spinner-xsolla-a{-webkit-animation-delay:.8s;animation-delay:.8s}.xpaystation-widget-lightbox-spinner .spinner-round{margin-top:-23px;margin-left:-23px;-webkit-animation:xpaystation-widget-lightbox-spin 3s infinite linear;animation:xpaystation-widget-lightbox-spin 3s infinite linear}.xpaystation-widget-lightbox-spinner .spinner-custom{-webkit-animation:xpaystation-widget-lightbox-spin infinite linear;animation:xpaystation-widget-lightbox-spin infinite linear}@-webkit-keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@keyframes xpaystation-widget-lightbox-bouncedelay{0%,80%,100%{opacity:0}40%{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@keyframes xpaystation-widget-lightbox-fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes xpaystation-widget-lightbox-spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes xpaystation-widget-lightbox-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} /*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAibGlnaHRib3guc2NzcyIsCgkic291cmNlcyI6IFsKCQkibGlnaHRib3guc2NzcyIKCV0sCgkic291cmNlc0NvbnRlbnQiOiBbCgkJIiRsaWdodGJveC1wcmVmaXg6ICd4cGF5c3RhdGlvbi13aWRnZXQtbGlnaHRib3gnO1xuJGxpZ2h0Ym94LWNsYXNzOiAnLicgKyAkbGlnaHRib3gtcHJlZml4O1xuXG4jeyRsaWdodGJveC1jbGFzc30ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgLXdlYmtpdC1hbmltYXRpb246ICN7JGxpZ2h0Ym94LXByZWZpeH0tZmFkZWluIC4xNXM7XG4gIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1mYWRlaW4gLjE1cztcbn1cblxuI3skbGlnaHRib3gtY2xhc3N9LW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDowO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiAxO1xufVxuXG4jeyRsaWdodGJveC1jbGFzc30tY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAzO1xufVxuXG4jeyRsaWdodGJveC1jbGFzc30tY29udGVudF9faGlkZGVuIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICB6LWluZGV4OiAtMTtcbn1cblxuI3skbGlnaHRib3gtY2xhc3N9LWNvbnRlbnQtaWZyYW1lIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiAwO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuI3skbGlnaHRib3gtY2xhc3N9LXNwaW5uZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHotaW5kZXg6IDI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gIC5zcGlubmVyLXhzb2xsYSB7XG4gICAgd2lkdGg6IDU2cHg7XG4gICAgaGVpZ2h0OiA1NXB4O1xuICAgIG1hcmdpbjoge1xuICAgICAgdG9wOiAtMjhweDtcbiAgICAgIGxlZnQ6IC0yNnB4O1xuICAgIH1cblxuICAgIC5zcGlubmVyLXhzb2xsYS14LCAuc3Bpbm5lci14c29sbGEtcywgLnNwaW5uZXIteHNvbGxhLW8sIC5zcGlubmVyLXhzb2xsYS1sLCAuc3Bpbm5lci14c29sbGEtYSB7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDtcbiAgICAgIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDtcbiAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgfVxuXG4gICAgLnNwaW5uZXIteHNvbGxhLXgge1xuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDBzO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwcztcbiAgICB9XG5cbiAgICAuc3Bpbm5lci14c29sbGEtcyB7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjJzO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuMnM7XG4gICAgfVxuXG4gICAgLnNwaW5uZXIteHNvbGxhLW8ge1xuICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IC40cztcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjRzO1xuICAgIH1cblxuICAgIC5zcGlubmVyLXhzb2xsYS1sIHtcbiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAuNnM7XG4gICAgICBhbmltYXRpb24tZGVsYXk6IC42cztcbiAgICB9XG5cbiAgICAuc3Bpbm5lci14c29sbGEtYSB7XG4gICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjhzO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOHM7XG4gICAgfVxuICB9XG5cbiAgLnNwaW5uZXItcm91bmQge1xuICAgIG1hcmdpbjoge1xuICAgICAgdG9wOiAtMjNweDtcbiAgICAgIGxlZnQ6IC0yM3B4O1xuICAgIH1cbiAgICAtd2Via2l0LWFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1zcGluIDNzIGluZmluaXRlIGxpbmVhcjtcbiAgICBhbmltYXRpb246ICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiAzcyBpbmZpbml0ZSBsaW5lYXI7XG4gIH1cblxuICAuc3Bpbm5lci1jdXN0b20ge1xuICAgIC13ZWJraXQtYW5pbWF0aW9uOiAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4gaW5maW5pdGUgbGluZWFyO1xuICAgIGFuaW1hdGlvbjogI3skbGlnaHRib3gtcHJlZml4fS1zcGluIGluZmluaXRlIGxpbmVhcjtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgI3skbGlnaHRib3gtcHJlZml4fS1ib3VuY2VkZWxheSB7XG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDEgfVxufVxuXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tYm91bmNlZGVsYXkge1xuICAwJSwgODAlLCAxMDAlIHsgb3BhY2l0eTogMDsgfVxuICA0MCUgeyBvcGFjaXR5OiAxOyB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LWZhZGVpbiB7XG4gIGZyb20geyBvcGFjaXR5OiAwOyB9XG4gIHRvIHsgb3BhY2l0eTogMTsgfVxufVxuXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tZmFkZWluIHtcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cbiAgdG8geyBvcGFjaXR5OiAxOyB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyAjeyRsaWdodGJveC1wcmVmaXh9LXNwaW4ge1xuICBmcm9tIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxufVxuXG5Aa2V5ZnJhbWVzICN7JGxpZ2h0Ym94LXByZWZpeH0tc3BpbiB7XG4gIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbn1cbiIKCV0sCgkibWFwcGluZ3MiOiAiQUFHQSxBQUFBLDRCQUE0QixBQUE1QixDQUNFLFFBQVEsQ0FBRSxLQUFNLENBQ2hCLEdBQUcsQ0FBRSxDQUFFLENBQ1AsSUFBSSxDQUFFLENBQUUsQ0FDUixNQUFNLENBQUUsQ0FBRSxDQUNWLEtBQUssQ0FBRSxDQUFFLENBQ1QsS0FBSyxDQUFFLElBQUssQ0FDWixNQUFNLENBQUUsSUFBSyxDQUNiLGlCQUFpQixDQUFFLGtDQUEwQixDQUFRLEtBQUksQ0FDekQsU0FBUyxDQUFFLGtDQUEwQixDQUFRLEtBQUksQ0FDbEQsQUFFRCxBQUFBLG9DQUFvQyxBQUFwQyxDQUNFLFFBQVEsQ0FBRSxRQUFTLENBQ25CLEdBQUcsQ0FBQyxDQUFFLENBQ04sSUFBSSxDQUFFLENBQUUsQ0FDUixNQUFNLENBQUUsQ0FBRSxDQUNWLEtBQUssQ0FBRSxDQUFFLENBQ1QsT0FBTyxDQUFFLENBQUUsQ0FDWixBQUVELEFBQUEsb0NBQW9DLEFBQXBDLENBQ0UsUUFBUSxDQUFFLFFBQVMsQ0FDbkIsR0FBRyxDQUFFLENBQUUsQ0FDUCxJQUFJLENBQUUsQ0FBRSxDQUNSLE9BQU8sQ0FBRSxDQUFFLENBQ1osQUFFRCxBQUFBLDRDQUE0QyxBQUE1QyxDQUNFLFVBQVUsQ0FBRSxNQUFPLENBQ25CLE9BQU8sQ0FBRSxFQUFHLENBQ2IsQUFFRCxBQUFBLDJDQUEyQyxB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 */');;","module.exports = '1.2.12';\n","var Helpers = require('./helpers')\nvar App = require('./app');\nvar polyfills = require('./polyfills');\n\npolyfills.applyPolyfills();\n\nvar instance;\n\nmodule.exports = (function () {\n var getInstance = function () {\n if (!instance) {\n instance = new App();\n }\n return instance;\n };\n\n return Object.assign(Helpers.zipObject(['init', 'open', 'close', 'on', 'off', 'sendMessage', 'onMessage'].map(function (methodName) {\n var app = getInstance();\n return [methodName, function () {\n return app[methodName].apply(app, arguments);\n }];\n })), {\n eventTypes: App.eventTypes,\n });\n})();\n"],"sourceRoot":"."}
\ No newline at end of file