diff --git a/NEWS.md b/NEWS.md index fffe460f..2ed1796a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,8 @@ +shinyWidgets 0.8.2 +====================== + +* Fixed a bug where `virtualSelectInput()` did not register the `onServerSearch` or `labelRenderer` parameters. + shinyWidgets 0.8.1 ====================== diff --git a/R/virtual-select.R b/R/virtual-select.R index 64fa28b9..02481501 100644 --- a/R/virtual-select.R +++ b/R/virtual-select.R @@ -101,6 +101,11 @@ prepare_choices <- function(.data, #' @note State of the menu (open or close) is accessible server-side through the input value: #' `input$_open`, which can be `TRUE` (opened) or `FALSE` (closed) or `NULL` (when initialized). #' +#' @note For arguments that accept a function (`onServerSearch`, `labelRenderer`), only a string with a function name +#' is accepted. The function must be defined outside of any `$(document).ready({...})` javascript block. For examples, see the +#' documentation for [onServerSearch](https://sa-si-dev.github.io/virtual-select/#/examples?id=server-search) +#' and [labelRenderer](https://sa-si-dev.github.io/virtual-select/#/examples?id=add-imageicon). +#' #' @seealso #' * [demoVirtualSelect()] for demo apps #' * [updateVirtualSelect()] for updating from server @@ -112,6 +117,7 @@ prepare_choices <- function(.data, #' @importFrom jsonlite toJSON #' #' @example inst/examples/virtual-select/default/app.R +#' @example examples/virtual-select-funcs.R virtualSelectInput <- function(inputId, label, choices, diff --git a/examples/virtual-select-funcs.R b/examples/virtual-select-funcs.R new file mode 100644 index 00000000..d7345f39 --- /dev/null +++ b/examples/virtual-select-funcs.R @@ -0,0 +1,90 @@ +# labelRenderer example ---- + +library(shiny) +library(shinyWidgets) + +ui <- fluidPage( + tags$head( + tags$script(HTML(" + function colorText(data) { + let text = `${data.label}`; + return text; + }" + )), + ), + tags$h1("Custom LabelRenderer"), + br(), + fluidRow( + column( + width = 6, + virtualSelectInput( + inputId = "search", + label = "Color picker", + choices = c("red", "blue", "green", "#cbf752"), + width = "100%", + keepAlwaysOpen = TRUE, + labelRenderer = "colorText", + allowNewOption = TRUE + ) + ) + ) + +) + +server <- function(input, output, session) {} + +if (interactive()) + shinyApp(ui, server) + +# onServerSearch example ---- + +library(shiny) +library(shinyWidgets) + +ui <- fluidPage( + tags$head( + tags$script(HTML(r"( + // Main function that is called + function searchLabel(searchValue, virtualSelect) { + // Words to search for - split by a space + const searchWords = searchValue.split(/[\s]/); + + // Update visibility + const found = virtualSelect.options.map(opt => { + opt.isVisible = searchWords.every(word => opt.label.includes(word)); + return opt; + }); + + virtualSelect.setServerOptions(found); + } + )" + )), + ), + tags$h1("Custom onServerSearch"), + br(), + fluidRow( + column( + width = 6, + virtualSelectInput( + inputId = "search", + label = "Better search", + choices = c("This is some random long text", + "This text is long and looks differently", + "Writing this text is a pure love", + "I love writing!" + ), + width = "100%", + keepAlwaysOpen = TRUE, + search = TRUE, + autoSelectFirstOption = FALSE, + onServerSearch = "searchLabel" + ) + ) + ) + +) + +server <- function(input, output, session) {} + +if (interactive()) + shinyApp(ui, server) diff --git a/inst/packer/virtual-select.js b/inst/packer/virtual-select.js index 61980845..2606c857 100644 --- a/inst/packer/virtual-select.js +++ b/inst/packer/virtual-select.js @@ -1,2 +1,815 @@ -/*! For license information please see virtual-select.js.LICENSE.txt */ -(()=>{var e={716:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});var i=o(8081),s=o.n(i),n=o(3645),r=o.n(n)()(s());r.push([e.id,'/*!\n * Virtual Select v1.0.39\n * https://sa-si-dev.github.io/virtual-select\n * Licensed under MIT (https://github.com/sa-si-dev/virtual-select/blob/master/LICENSE)\n */\n@keyframes vscomp-animation-spin{to{transform:rotateZ(360deg)}}.vscomp-popup-active{overflow:hidden !important}.vscomp-ele{display:inline-block;max-width:250px;width:100%}.vscomp-wrapper{color:#333;display:inline-flex;flex-wrap:wrap;font-family:sans-serif;font-size:14px;position:relative;text-align:left;width:100%}.vscomp-wrapper *,.vscomp-wrapper *::before,.vscomp-wrapper *::after{box-sizing:border-box}.vscomp-wrapper:focus{outline:none}.vscomp-dropbox-wrapper{left:0;position:absolute;top:0}.vscomp-toggle-button{align-items:center;background-color:#fff;border:1px solid #ddd;cursor:pointer;display:flex;padding:7px 30px 7px 10px;position:relative;width:100%}.vscomp-value{height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vscomp-arrow{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;width:30px}.vscomp-arrow::after{transform:rotate(45deg);border:1px solid rgba(0,0,0,0);border-bottom-color:#111;border-right-color:#111;content:"";height:8px;margin-top:-6px;width:8px}.vscomp-clear-icon{height:12px;position:relative;width:12px}.vscomp-clear-icon::before,.vscomp-clear-icon::after{background-color:#999;content:"";height:12px;left:5px;position:absolute;top:0;width:2px}.vscomp-clear-icon::before{transform:rotate(45deg)}.vscomp-clear-icon::after{transform:rotate(-45deg)}.vscomp-clear-icon:hover::before,.vscomp-clear-icon:hover::after{background:#333}.vscomp-clear-button{align-items:center;border-radius:50%;display:none;height:24px;justify-content:center;margin-top:-12px;position:absolute;right:30px;top:50%;width:24px}.vscomp-clear-button:hover{background:#ccc}.vscomp-clear-button:hover .vscomp-clear-icon::before,.vscomp-clear-button:hover .vscomp-clear-icon::after{background-color:#333}.vscomp-dropbox-close-button{align-items:center;background-color:#fff;border-radius:50%;bottom:-48px;cursor:pointer;display:none;height:40px;justify-content:center;left:50%;margin-left:-20px;position:absolute;width:40px}.vscomp-value-tag.more-value-count{white-space:nowrap}.vscomp-dropbox-container{width:100%;z-index:2}.vscomp-dropbox{background-color:#fff;width:100%}.vscomp-options-container{max-height:210px;overflow:auto;position:relative}.vscomp-options-bottom-freezer{bottom:0;height:2px;left:0;position:absolute;right:0}.vscomp-option{align-items:center;cursor:pointer;display:flex;flex-wrap:wrap;height:40px;padding:0 15px;position:relative}.vscomp-option.selected{background-color:#eee}.vscomp-option.focused{background-color:#ccc}.vscomp-option.disabled{cursor:default;opacity:.5}.vscomp-option.group-title .vscomp-option-text{cursor:default;opacity:.6}.vscomp-option.group-title.selected{background-color:rgba(0,0,0,0)}.vscomp-option.group-option{padding-left:30px}.vscomp-new-option-icon{height:30px;position:absolute;right:0;top:0;width:30px}.vscomp-new-option-icon::before{border:15px solid #512da8;border-bottom-color:rgba(0,0,0,0);border-left-color:rgba(0,0,0,0);content:"";position:absolute;right:0;top:0}.vscomp-new-option-icon::after{align-items:center;color:#fff;content:"+";display:flex;font-size:18px;height:15px;justify-content:center;position:absolute;right:1px;top:0;width:15px}.vscomp-option-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.vscomp-option-description{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#666;font-size:13px;line-height:15px;width:100%}.vscomp-search-container{align-items:center;border-bottom:1px solid #ddd;display:flex;height:40px;padding:0 5px 0 15px;position:relative}.vscomp-search-label,.vscomp-live-region{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.vscomp-search-input{background-color:rgba(0,0,0,0);border:0;color:inherit;font-size:15px;height:38px;padding:10px 0;width:calc(100% - 30px)}.vscomp-search-input:focus{outline:none}.vscomp-search-clear{align-items:center;color:#999;cursor:pointer;display:flex;font-size:25px;height:30px;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;visibility:hidden;width:30px}.vscomp-search-clear:hover{color:inherit}.vscomp-no-options,.vscomp-no-search-results{align-items:center;display:none;justify-content:center;padding:20px 10px}.vscomp-options-loader{display:none;padding:20px 0;text-align:center}.vscomp-options-loader::before{animation:vscomp-animation-spin .8s infinite linear;background-color:#fff;border-radius:50%;box-shadow:-4px -5px 3px -3px rgba(0,0,0,.3);content:"";display:inline-block;height:40px;opacity:.7;width:40px}.vscomp-ele[disabled]{cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vscomp-ele[disabled] .vscomp-wrapper{opacity:.7;pointer-events:none}.vscomp-wrapper .checkbox-icon{display:inline-flex;height:15px;margin-right:10px;position:relative;width:15px}.vscomp-wrapper .checkbox-icon::after{transition-duration:.2s;border:2px solid #888;content:"";display:inline-block;height:100%;width:100%}.vscomp-wrapper .checkbox-icon.checked::after{transform:rotate(45deg) translate(1px, -4px);border-color:#512da8;border-left-color:rgba(0,0,0,0);border-top-color:rgba(0,0,0,0);width:50%}.vscomp-wrapper.show-as-popup .vscomp-dropbox-container{align-items:center;background-color:rgba(0,0,0,.5);display:flex;height:100vh;justify-content:center;left:0;opacity:1;overflow:auto;padding:0 10px;position:fixed;top:0;width:100vw}.vscomp-wrapper.show-as-popup .vscomp-dropbox{margin-top:-24px;max-height:calc(80% - 48px);max-width:500px;position:relative;width:80%}.vscomp-wrapper.show-as-popup .vscomp-dropbox-close-button{display:flex}.vscomp-wrapper.popup-position-left .vscomp-dropbox-container{justify-content:flex-start}.vscomp-wrapper.popup-position-right .vscomp-dropbox-container{justify-content:flex-end}.vscomp-wrapper.has-select-all .vscomp-toggle-all-button{align-items:center;cursor:pointer;display:flex}.vscomp-wrapper.has-select-all .vscomp-search-input,.vscomp-wrapper.has-select-all .vscomp-toggle-all-label{width:calc(100% - 55px)}.vscomp-wrapper.has-select-all .vscomp-toggle-all-label{display:none}.vscomp-wrapper:not(.has-search-input) .vscomp-toggle-all-button{width:100%}.vscomp-wrapper:not(.has-search-input) .vscomp-toggle-all-label{display:inline-block}.vscomp-wrapper.multiple .vscomp-option .vscomp-option-text{width:calc(100% - 25px)}.vscomp-wrapper.multiple .vscomp-option .vscomp-option-description{padding-left:25px}.vscomp-wrapper.multiple .vscomp-option.selected .checkbox-icon::after{transform:rotate(45deg) translate(1px, -4px);border-color:#512da8;border-left-color:rgba(0,0,0,0);border-top-color:rgba(0,0,0,0);width:50%}.vscomp-wrapper.focused .vscomp-toggle-button,.vscomp-wrapper:focus .vscomp-toggle-button{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2)}.vscomp-wrapper.closed .vscomp-dropbox-container,.vscomp-wrapper.closed.vscomp-dropbox-wrapper{display:none}.vscomp-wrapper:not(.has-value) .vscomp-value{opacity:.5}.vscomp-wrapper.has-clear-button.has-value .vscomp-clear-button{display:flex}.vscomp-wrapper.has-clear-button .vscomp-toggle-button{padding-right:54px}.vscomp-wrapper.has-no-options .vscomp-options-container,.vscomp-wrapper.has-no-search-results .vscomp-options-container{display:none}.vscomp-wrapper.has-no-options .vscomp-no-options{display:flex}.vscomp-wrapper.has-no-search-results .vscomp-no-search-results{display:flex}.vscomp-wrapper.has-search-value .vscomp-search-clear{visibility:visible}.vscomp-wrapper.has-no-options .vscomp-toggle-all-button{opacity:.5;pointer-events:none}.vscomp-wrapper.keep-always-open .vscomp-toggle-button{padding-right:24px}.vscomp-wrapper.keep-always-open .vscomp-clear-button{right:5px}.vscomp-wrapper.keep-always-open .vscomp-arrow{display:none}.vscomp-wrapper.keep-always-open .vscomp-dropbox-container{position:relative;z-index:1}.vscomp-wrapper.keep-always-open .vscomp-dropbox{transition-duration:0s;border:1px solid #ddd;box-shadow:none}.vscomp-wrapper.keep-always-open.focused,.vscomp-wrapper.keep-always-open:focus,.vscomp-wrapper.keep-always-open:hover{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2)}.vscomp-wrapper.server-searching .vscomp-options-list{display:none}.vscomp-wrapper.server-searching .vscomp-options-loader{display:block}.vscomp-wrapper.has-error .vscomp-toggle-button{border-color:#b00020}.vscomp-wrapper.show-value-as-tags .vscomp-toggle-button{padding:4px 22px 0 10px}.vscomp-wrapper.show-value-as-tags .vscomp-value{display:flex;flex-wrap:wrap;height:auto;min-height:28px;overflow:auto;text-overflow:unset;white-space:normal}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-items:center;border:1px solid #ddd;border-radius:20px;display:inline-flex;font-size:12px;line-height:16px;margin:0 4px 4px 0;max-width:100%;padding:2px 3px 2px 8px}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag.more-value-count{padding-right:8px}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 20px)}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag-clear-button{align-items:center;display:flex;height:20px;justify-content:center;width:20px}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag-clear-button .vscomp-clear-icon{transform:scale(0.8)}.vscomp-wrapper.show-value-as-tags .vscomp-arrow{height:34px}.vscomp-wrapper.show-value-as-tags .vscomp-clear-button{margin-top:0;top:5px}.vscomp-wrapper.show-value-as-tags.has-value .vscomp-arrow{display:none}.vscomp-wrapper.show-value-as-tags.has-value .vscomp-clear-button{right:2px}.vscomp-wrapper.show-value-as-tags:not(.has-value) .vscomp-toggle-button{padding-bottom:2px}.vscomp-wrapper.show-value-as-tags:not(.has-value) .vscomp-value{align-items:center;padding-bottom:3px}.vscomp-wrapper.text-direction-rtl{direction:rtl}.vscomp-wrapper.text-direction-rtl .vscomp-toggle-button{padding:7px 10px 7px 30px}.vscomp-wrapper.text-direction-rtl .vscomp-arrow{left:0;right:auto}.vscomp-wrapper.text-direction-rtl .vscomp-clear-button{left:30px;right:auto !important}.vscomp-wrapper.text-direction-rtl .checkbox-icon{margin-left:10px;margin-right:0}.vscomp-wrapper.text-direction-rtl .checkbox-icon.checked::after{transform:rotate(45deg) translate(-4px, 1px)}.vscomp-wrapper.text-direction-rtl .vscomp-search-container{padding:0 15px 0 5px}.vscomp-wrapper.text-direction-rtl .vscomp-toggle-all-label{text-align:right}.vscomp-wrapper.text-direction-rtl .vscomp-option{text-align:right}.vscomp-wrapper.text-direction-rtl .vscomp-option.group-option{padding-right:30px}.vscomp-wrapper.text-direction-rtl .vscomp-new-option-icon{left:0;right:auto}.vscomp-wrapper.text-direction-rtl .vscomp-new-option-icon::before{border-left-color:#512da8;border-right-color:rgba(0,0,0,0)}.vscomp-wrapper.text-direction-rtl .vscomp-new-option-icon::after{left:1px;right:auto}.vscomp-wrapper.text-direction-rtl.multiple .vscomp-option.selected .checkbox-icon::after{transform:rotate(45deg) translate(-4px, 1px)}.vscomp-wrapper.text-direction-rtl.has-clear-button .vscomp-toggle-button{padding-left:54px}.vscomp-wrapper.text-direction-rtl.keep-always-open .vscomp-toggle-button{padding-left:24px}.vscomp-wrapper.text-direction-rtl.keep-always-open .vscomp-clear-button{left:5px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags .vscomp-toggle-button{padding:4px 10px 0 22px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags .vscomp-value-tag{margin:0 0 4px 4px;padding:2px 8px 2px 3px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags .vscomp-value-tag.more-value-count{padding-left:8px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags.has-value .vscomp-clear-button{left:2px}\n/*!\n * Popover v1.0.12\n * https://sa-si-dev.github.io/popover\n * Licensed under MIT (https://github.com/sa-si-dev/popover/blob/master/LICENSE)\n */\n.pop-comp-wrapper{display:none;position:absolute;top:0;left:0;opacity:0;color:#000;background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);text-align:left;flex-wrap:wrap;z-index:1}.pop-comp-arrow{position:absolute;z-index:1;width:16px;height:16px;overflow:hidden;pointer-events:none}.pop-comp-arrow::before{content:"";position:absolute;top:8px;left:8px;width:16px;height:16px;background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);-webkit-transform-origin:left top;transform-origin:left top;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.pop-comp-content{position:relative;z-index:2}.pop-comp-wrapper.position-bottom>.pop-comp-arrow{margin-left:-8px;left:0;top:-15px}.pop-comp-wrapper.position-bottom>.pop-comp-arrow::before{box-shadow:0px 0px 2px 0 rgba(0,0,0,.14)}.pop-comp-wrapper.position-top>.pop-comp-arrow{margin-left:-8px;left:0;bottom:-15px}.pop-comp-wrapper.position-right>.pop-comp-arrow{margin-top:-8px;top:0;left:-15px}.pop-comp-wrapper.position-left>.pop-comp-arrow{margin-top:-8px;top:0;right:-15px}.pop-comp-disable-events{pointer-events:none}\n\n',""]);const a=r},3645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var o="",i=void 0!==t[5];return t[4]&&(o+="@supports (".concat(t[4],") {")),t[2]&&(o+="@media ".concat(t[2]," {")),i&&(o+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),o+=e(t),i&&(o+="}"),t[2]&&(o+="}"),t[4]&&(o+="}"),o})).join("")},t.i=function(e,o,i,s,n){"string"==typeof e&&(e=[[null,e,void 0]]);var r={};if(i)for(var a=0;a0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=n),o&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=o):c[2]=o),s&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=s):c[4]="".concat(s)),t.push(c))}},t}},8081:e=>{"use strict";e.exports=function(e){return e[1]}},3379:e=>{"use strict";var t=[];function o(e){for(var o=-1,i=0;i{"use strict";var t={};e.exports=function(e,o){var i=function(e){if(void 0===t[e]){var o=document.querySelector(e);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}(e);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(o)}},9216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},3565:(e,t,o)=>{"use strict";e.exports=function(e){var t=o.nc;t&&e.setAttribute("nonce",t)}},7795:e=>{"use strict";e.exports=function(e){var t=e.insertStyleElement(e);return{update:function(o){!function(e,t,o){var i="";o.supports&&(i+="@supports (".concat(o.supports,") {")),o.media&&(i+="@media ".concat(o.media," {"));var s=void 0!==o.layer;s&&(i+="@layer".concat(o.layer.length>0?" ".concat(o.layer):""," {")),i+=o.css,s&&(i+="}"),o.media&&(i+="}"),o.supports&&(i+="}");var n=o.sourceMap;n&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(n))))," */")),t.styleTagTransform(i,e,t.options)}(t,e,o)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},4589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},8196:()=>{!function(){"use strict";function e(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,o){if(e){if("string"==typeof e)return t(e,o);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?t(e,o):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,i=new Array(t);o1&&void 0!==arguments[1]&&arguments[1];return!0===e||"true"===e||!1!==e&&"false"!==e&&t}},{key:"isEmpty",value:function(e){var t=!1;return e?Array.isArray(e)?0===e.length&&(t=!0):"object"===o(e)&&0===Object.keys(e).length&&(t=!0):t=!0,t}},{key:"isNotEmpty",value:function(e){return!this.isEmpty(e)}},{key:"removeItemFromArray",value:function(t,o){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Array.isArray(t)||!t.length)return t;var s=i?e(t):t,n=s.indexOf(o);return-1!==n&&s.splice(n,1),s}},{key:"removeArrayEmpty",value:function(e){return Array.isArray(e)&&e.length?e.filter((function(e){return!!e})):[]}},{key:"getRandomInt",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=Math.ceil(t),i=Math.floor(e);return Math.floor(Math.random()*(i-o-1))+o}},{key:"regexEscape",value:function(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}},{key:"normalizeString",value:function(e){return e.normalize("NFD").replace(/[^\w]/g,"")}}],n&&i(s,n),Object.defineProperty(s,"prototype",{writable:!1}),t}();function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||a(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){if(e){if("string"==typeof e)return l(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,i=new Array(t);oe.offsetWidth}},{key:"getData",value:function(e,t,o){if(e){var i=e?e.dataset[t]:"";return"number"===o?i=parseFloat(i)||0:"true"===i?i=!0:"false"===i&&(i=!1),i}}},{key:"setData",value:function(e,t,o){e&&(e.dataset[t]=o)}},{key:"setAttr",value:function(e,t,o){e&&e.setAttribute(t,o)}},{key:"setAttrFromEle",value:function(e,t,o,i){var s={};o.forEach((function(t){s[t]=e.getAttribute(t)})),o.forEach((function(e){var o=s[e];(o||-1!==i.indexOf(e)&&""===o)&&t.setAttribute(e,o)}))}},{key:"setStyle",value:function(e,t,o){e&&(e.style[t]=o)}},{key:"setStyles",value:function(e,t){e&&t&&Object.keys(t).forEach((function(o){e.style[o]=t[o]}))}},{key:"setAria",value:function(e,t,o){var i=t;"role"!==i&&(i="aria-".concat(i)),e.setAttribute(i,o)}},{key:"getElements",value:function(e){return e?void 0===e.forEach?[e]:e:[]}},{key:"addEvent",value:function(t,o,i){t&&s.removeArrayEmpty(o.split(" ")).forEach((function(o){e.getElements(t).forEach((function(e){e.addEventListener(o,i)}))}))}},{key:"dispatchEvent",value:function(t,o){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t){var s=e.getElements(t);setTimeout((function(){s.forEach((function(e){e.dispatchEvent(new CustomEvent(o,{bubbles:i}))}))}),0)}}},{key:"getAttributesText",value:function(e){var t="";return e?(Object.entries(e).forEach((function(e){var o=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i,s,n,r,a=[],l=!0,p=!1;try{for(n=(o=o.call(e)).next,0;!(l=(i=n.call(o)).done)&&(a.push(i.value),2!==a.length);l=!0);}catch(e){p=!0,s=e}finally{try{if(!l&&null!=o.return&&(r=o.return(),Object(r)!==r))return}finally{if(p)throw s}}return a}}(e)||a(e,2)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(e),i=o[0],s=o[1];void 0!==s&&(t+=" ".concat(i,'="').concat(s,'" '))})),t):t}},{key:"convertPropToDataAttr",value:function(e){return e?"data-".concat(e).replace(/([A-Z])/g,"-$1").toLowerCase():""}},{key:"changeTabIndex",value:function(t,o){t?e.getElements(t).forEach((function(e){e.tabIndex=o})):console.log(t,"Invalid element provided.")}}],o&&p(t,o),Object.defineProperty(t,"prototype",{writable:!1}),e}();function u(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function h(e){for(var t=1;te.length)&&(t=e.length);for(var o=0,i=new Array(t);o\n \n\n
\n
\n ").concat(this.placeholder,'\n
\n\n
\n\n
\n \n
\n
\n\n
\n

\n
\n\n ').concat(this.renderDropbox({wrapperClasses:t}),"\n ");this.$ele.innerHTML=a,this.$body=document.querySelector("body"),this.$wrapper=this.$ele.querySelector(".vscomp-wrapper"),this.$ariaLiveElem=this.$ele.querySelector(".vscomp-live-region-title"),this.hasDropboxWrapper?(this.$allWrappers=[this.$wrapper,this.$dropboxWrapper],this.$dropboxContainer=this.$dropboxWrapper.querySelector(".vscomp-dropbox-container"),c.addClass(this.$dropboxContainer,"pop-comp-wrapper")):(this.$allWrappers=[this.$wrapper],this.$dropboxContainer=this.$wrapper.querySelector(".vscomp-dropbox-container")),this.$toggleButton=this.$ele.querySelector(".vscomp-toggle-button"),this.$clearButton=this.$ele.querySelector(".vscomp-clear-button"),this.$valueText=this.$ele.querySelector(".vscomp-value"),this.$hiddenInput=this.$ele.querySelector(".vscomp-hidden-input"),this.$dropbox=this.$dropboxContainer.querySelector(".vscomp-dropbox"),this.$dropboxCloseButton=this.$dropboxContainer.querySelector(".vscomp-dropbox-close-button"),this.$search=this.$dropboxContainer.querySelector(".vscomp-search-wrapper"),this.$optionsContainer=this.$dropboxContainer.querySelector(".vscomp-options-container"),this.$optionsList=this.$dropboxContainer.querySelector(".vscomp-options-list"),this.$options=this.$dropboxContainer.querySelector(".vscomp-options"),this.$noOptions=this.$dropboxContainer.querySelector(".vscomp-no-options"),this.$noSearchResults=this.$dropboxContainer.querySelector(".vscomp-no-search-results"),this.afterRenderWrapper()}}},{key:"renderDropbox",value:function(e){var t=e.wrapperClasses,o="self"!==this.dropboxWrapper?document.querySelector(this.dropboxWrapper):null,i='
\n
\n
\n\n
\n
\n\n
\n
\n
\n
\n\n
\n
').concat(this.noOptionsText,'
\n
').concat(this.noSearchResultsText,'
\n\n \n
\n
\n');if(o){var s=document.createElement("div");return this.$dropboxWrapper=s,this.hasDropboxWrapper=!0,s.innerHTML=i,o.appendChild(s),c.addClass(s,"vscomp-dropbox-wrapper ".concat(t)),""}return this.hasDropboxWrapper=!1,i}},{key:"renderOptions",value:function(){var e,t=this,o="",i=this.getVisibleOptions(),n="",r="",a=!(!this.markSearchResults||!this.searchValue),l=this.labelRenderer,p=this.disableOptionGroupCheckbox,c=this.uniqueId,u=this.searchGroup,h="function"==typeof l,d=s.convertToBoolean;if(a&&(e=new RegExp("(".concat(s.regexEscape(this.searchValue),")(?!([^<]+)?>)"),"gi")),this.multiple&&(n=''),this.allowNewOption){var v=this.getTooltipAttrText("New Option");r='")}i.forEach((function(i){var s,v=i.index,f="vscomp-option",m=t.getTooltipAttrText("",!0,!0),b=n,g="",y="",x="",w=d(i.isSelected),O="";i.classNames&&(f+=" ".concat(i.classNames)),i.isFocused&&(f+=" focused"),i.isDisabled&&(f+=" disabled",O='aria-disabled="true"'),i.isGroupTitle&&(f+=" group-title",p&&(b="")),w&&(f+=" selected"),i.isGroupOption&&(f+=" group-option",x='data-group-index="'.concat(i.groupIndex,'"')),s=h?l(i):i.label,i.description&&(y='
").concat(i.description,"
")),i.isCurrentNew?(f+=" current-new",g+=r):!a||i.isGroupTitle&&!u||(s=s.replace(e,"$1")),o+='
\n ").concat(b,'\n \n ").concat(s,"\n \n ").concat(y,"\n ").concat(g,"\n
")})),this.$options.innerHTML=o,this.$visibleOptions=this.$options.querySelectorAll(".vscomp-option"),this.afterRenderOptions()}},{key:"renderSearch",value:function(){if(this.hasSearchContainer){var e="",t="";this.multiple&&!this.disableSelectAll&&(e='\n \n '.concat(this.selectAllText,"\n ")),this.hasSearch&&(t='\n \n ×'));var o='
\n '.concat(e,"\n ").concat(t,"\n
");this.$search.innerHTML=o,this.$searchInput=this.$dropboxContainer.querySelector(".vscomp-search-input"),this.$searchClear=this.$dropboxContainer.querySelector(".vscomp-search-clear"),this.$toggleAllButton=this.$dropboxContainer.querySelector(".vscomp-toggle-all-button"),this.$toggleAllCheckbox=this.$dropboxContainer.querySelector(".vscomp-toggle-all-checkbox"),this.addEvent(this.$searchInput,"input","onSearch"),this.addEvent(this.$searchClear,"click","onSearchClear"),this.addEvent(this.$toggleAllButton,"click","onToggleAllOptions")}}},{key:"addEvents",value:function(){this.addEvent(document,"click","onDocumentClick"),this.addEvent(this.$allWrappers,"keydown","onKeyDown"),this.addEvent(this.$toggleButton,"click","onToggleButtonClick"),this.addEvent(this.$clearButton,"click","onClearButtonClick"),this.addEvent(this.$dropboxContainer,"click","onDropboxContainerClick"),this.addEvent(this.$dropboxCloseButton,"click","onDropboxCloseButtonClick"),this.addEvent(this.$optionsContainer,"scroll","onOptionsScroll"),this.addEvent(this.$options,"click","onOptionsClick"),this.addEvent(this.$options,"mouseover","onOptionsMouseOver"),this.addEvent(this.$options,"touchmove","onOptionsTouchMove"),this.addMutationObserver()}},{key:"addEvent",value:function(e,t,o){var i=this;e&&s.removeArrayEmpty(t.split(" ")).forEach((function(t){var s="".concat(o,"-").concat(t),n=i.events[s];n||(n=i[o].bind(i),i.events[s]=n),c.addEvent(e,t,n)}))}},{key:"onDocumentClick",value:function(e){var t=e.target.closest(".vscomp-wrapper");t!==this.$wrapper&&t!==this.$dropboxWrapper&&this.isOpened()&&this.closeDropbox()}},{key:"onKeyDown",value:function(e){var t=e.which||e.keyCode,o=w[t];document.activeElement===this.$searchInput&&(9===t||e.shiftKey&&9===t)?this.closeDropbox():document.activeElement!==this.$wrapper||27!==t&&"Escape"!==e.key||!this.showAsPopup?o&&this[o](e):this.closeDropbox()}},{key:"onEnterPress",value:function(e){e.preventDefault(),this.isOpened()?this.selectFocusedOption():this.openDropbox()}},{key:"onDownArrowPress",value:function(e){e.preventDefault(),this.isOpened()?this.focusOption({direction:"next"}):this.openDropbox()}},{key:"onUpArrowPress",value:function(e){e.preventDefault(),this.isOpened()?this.focusOption({direction:"previous"}):this.openDropbox()}},{key:"onToggleButtonClick",value:function(e){var t=e.target;t.closest(".vscomp-value-tag-clear-button")?this.removeValue(t.closest(".vscomp-value-tag")):t.closest(".toggle-button-child")||this.toggleDropbox()}},{key:"onClearButtonClick",value:function(){this.reset()}},{key:"onOptionsScroll",value:function(){this.setVisibleOptions()}},{key:"onOptionsClick",value:function(e){var t=e.target.closest(".vscomp-option");t&&!c.hasClass(t,"disabled")&&(c.hasClass(t,"group-title")?this.onGroupTitleClick(t):this.selectOption(t,{event:e}))}},{key:"onGroupTitleClick",value:function(e){if(e&&this.multiple&&!this.disableOptionGroupCheckbox){var t=!c.hasClass(e,"selected");this.toggleGroupTitleCheckbox(e,t),this.toggleGroupOptions(e,t)}}},{key:"onDropboxContainerClick",value:function(e){e.target.closest(".vscomp-dropbox")||this.closeDropbox()}},{key:"onDropboxCloseButtonClick",value:function(){this.closeDropbox()}},{key:"onOptionsMouseOver",value:function(e){var t=e.target.closest(".vscomp-option");t&&this.isOpened()&&(c.hasClass(t,"disabled")||c.hasClass(t,"group-title")?this.removeOptionFocus():this.focusOption({$option:t}))}},{key:"onOptionsTouchMove",value:function(){this.removeOptionFocus()}},{key:"onSearch",value:function(e){e.stopPropagation(),this.setSearchValue(e.target.value,!0)}},{key:"onSearchClear",value:function(){this.setSearchValue(""),this.focusSearchInput()}},{key:"onToggleAllOptions",value:function(){this.toggleAllOptions()}},{key:"onResize",value:function(){this.setOptionsContainerHeight(!0)}},{key:"addMutationObserver",value:function(){var e=this;if(this.hasDropboxWrapper){var t=this.$ele;this.mutationObserver=new MutationObserver((function(o){var i=!1,s=!1;o.forEach((function(e){i||(i=f(e.addedNodes).some((function(e){return!(e!==t&&!e.contains(t))}))),s||(s=f(e.removedNodes).some((function(e){return!(e!==t&&!e.contains(t))})))})),s&&!i&&e.destroy()})),this.mutationObserver.observe(document.querySelector("body"),{childList:!0,subtree:!0})}}},{key:"beforeValueSet",value:function(e){this.toggleAllOptionsClass(!e&&void 0)}},{key:"beforeSelectNewValue",value:function(){var e=this,t=this.getNewOption(),o=t.index;this.newValues.push(t.value),this.setOptionProp(o,"isCurrentNew",!1),this.setOptionProp(o,"isNew",!0),setTimeout((function(){e.setSearchValue(""),e.focusSearchInput()}),0)}},{key:"afterRenderWrapper",value:function(){c.addClass(this.$ele,"vscomp-ele"),this.renderSearch(),this.setEleStyles(),this.setDropboxStyles(),this.setOptionsHeight(),this.setVisibleOptions(),this.setOptionsContainerHeight(),this.addEvents(),this.setEleProps(),this.keepAlwaysOpen||this.showAsPopup||this.initDropboxPopover(),this.initialSelectedValue?this.setValueMethod(this.initialSelectedValue,this.silentInitialValueSet):this.autoSelectFirstOption&&this.visibleOptions.length&&this.setValueMethod(this.visibleOptions[0].value,this.silentInitialValueSet),this.showOptionsOnlyOnSearch&&this.setSearchValue("",!1,!0),this.initialDisabled&&this.disable(),this.autofocus&&this.focus()}},{key:"afterRenderOptions",value:function(){var e=this.getVisibleOptions(),t=!this.options.length&&!this.hasServerSearch,o=!t&&!e.length;(!this.allowNewOption||this.hasServerSearch||this.showOptionsOnlyOnSearch)&&c.toggleClass(this.$allWrappers,"has-no-search-results",o),c.toggleClass(this.$allWrappers,"has-no-options",t),this.setOptionAttr(),this.setOptionsPosition(),this.setOptionsTooltip()}},{key:"afterSetOptionsContainerHeight",value:function(e){e&&this.showAsPopup&&this.setVisibleOptions()}},{key:"afterSetSearchValue",value:function(){var e=this;this.hasServerSearch?(clearInterval(this.serverSearchTimeout),this.serverSearchTimeout=setTimeout((function(){e.serverSearch()}),this.searchDelay)):this.setVisibleOptionsCount(),this.selectAllOnlyVisible&&this.toggleAllOptionsClass(),this.focusOption({focusFirst:!0})}},{key:"afterSetVisibleOptionsCount",value:function(){this.scrollToTop(),this.setOptionsHeight(),this.setVisibleOptions(),this.updatePosition()}},{key:"afterValueSet",value:function(){this.scrollToTop(),this.setSearchValue(""),this.renderOptions()}},{key:"afterSetOptions",value:function(e){e&&this.setSelectedProp(),this.setOptionsHeight(),this.setVisibleOptions(),this.showOptionsOnlyOnSearch&&this.setSearchValue("",!1,!0),e||this.reset()}},{key:"setProps",value:function(e){var t=this.setDefaultProps(e);this.setPropsFromElementAttr(t);var o=s.convertToBoolean;this.$ele=t.ele,this.dropboxWrapper=t.dropboxWrapper,this.valueKey=t.valueKey,this.labelKey=t.labelKey,this.descriptionKey=t.descriptionKey,this.aliasKey=t.aliasKey,this.optionHeightText=t.optionHeight,this.optionHeight=parseFloat(this.optionHeightText),this.multiple=o(t.multiple),this.hasSearch=o(t.search),this.searchByStartsWith=o(t.searchByStartsWith),this.searchGroup=o(t.searchGroup),this.hideClearButton=o(t.hideClearButton),this.autoSelectFirstOption=o(t.autoSelectFirstOption),this.hasOptionDescription=o(t.hasOptionDescription),this.silentInitialValueSet=o(t.silentInitialValueSet),this.allowNewOption=o(t.allowNewOption),this.markSearchResults=o(t.markSearchResults),this.showSelectedOptionsFirst=o(t.showSelectedOptionsFirst),this.disableSelectAll=o(t.disableSelectAll),this.keepAlwaysOpen=o(t.keepAlwaysOpen),this.showDropboxAsPopup=o(t.showDropboxAsPopup),this.hideValueTooltipOnSelectAll=o(t.hideValueTooltipOnSelectAll),this.showOptionsOnlyOnSearch=o(t.showOptionsOnlyOnSearch),this.selectAllOnlyVisible=o(t.selectAllOnlyVisible),this.alwaysShowSelectedOptionsCount=o(t.alwaysShowSelectedOptionsCount),this.alwaysShowSelectedOptionsLabel=o(t.alwaysShowSelectedOptionsLabel),this.disableAllOptionsSelectedText=o(t.disableAllOptionsSelectedText),this.showValueAsTags=o(t.showValueAsTags),this.disableOptionGroupCheckbox=o(t.disableOptionGroupCheckbox),this.enableSecureText=o(t.enableSecureText),this.setValueAsArray=o(t.setValueAsArray),this.disableValidation=o(t.disableValidation),this.initialDisabled=o(t.disabled),this.required=o(t.required),this.autofocus=o(t.autofocus),this.useGroupValue=o(t.useGroupValue),this.focusSelectedOptionOnOpen=o(t.focusSelectedOptionOnOpen),this.noOptionsText=t.noOptionsText,this.noSearchResultsText=t.noSearchResultsText,this.selectAllText=t.selectAllText,this.searchNormalize=t.searchNormalize,this.searchPlaceholderText=t.searchPlaceholderText,this.searchFormLabel=t.searchFormLabel,this.optionsSelectedText=t.optionsSelectedText,this.optionSelectedText=t.optionSelectedText,this.allOptionsSelectedText=t.allOptionsSelectedText,this.clearButtonText=t.clearButtonText,this.moreText=t.moreText,this.placeholder=t.placeholder,this.position=t.position,this.textDirection=t.textDirection,this.dropboxWidth=t.dropboxWidth,this.tooltipFontSize=t.tooltipFontSize,this.tooltipAlignment=t.tooltipAlignment,this.tooltipMaxWidth=t.tooltipMaxWidth,this.updatePositionThrottle=t.updatePositionThrottle,this.noOfDisplayValues=parseInt(t.noOfDisplayValues),this.zIndex=parseInt(t.zIndex),this.maxValues=parseInt(t.maxValues),this.minValues=parseInt(t.minValues),this.name=this.secureText(t.name),this.additionalClasses=t.additionalClasses,this.popupDropboxBreakpoint=t.popupDropboxBreakpoint,this.popupPosition=t.popupPosition,this.onServerSearch=t.onServerSearch,this.labelRenderer=t.labelRenderer,this.initialSelectedValue=0===t.selectedValue?"0":t.selectedValue,this.emptyValue=t.emptyValue,this.ariaLabelledby=t.ariaLabelledby,this.ariaLabelText=t.ariaLabelText,this.maxWidth=t.maxWidth,this.searchDelay=t.searchDelay,this.selectedValues=[],this.selectedOptions=[],this.newValues=[],this.events={},this.tooltipEnterDelay=200,this.searchValue="",this.searchValueOriginal="",this.isAllSelected=!1,(void 0===t.search&&this.multiple||this.allowNewOption||this.showOptionsOnlyOnSearch)&&(this.hasSearch=!0),this.hasServerSearch="function"==typeof this.onServerSearch,(this.maxValues||this.hasServerSearch||this.showOptionsOnlyOnSearch)&&(this.disableSelectAll=!0,this.disableOptionGroupCheckbox=!0),this.keepAlwaysOpen&&(this.dropboxWrapper="self"),this.showAsPopup=this.showDropboxAsPopup&&!this.keepAlwaysOpen&&window.innerWidth<=parseFloat(this.popupDropboxBreakpoint),this.hasSearchContainer=this.hasSearch||this.multiple&&!this.disableSelectAll,this.optionsCount=this.getOptionsCount(t.optionsCount),this.halfOptionsCount=Math.ceil(this.optionsCount/2),this.optionsHeight=this.getOptionsHeight(),this.uniqueId=this.getUniqueId()}},{key:"setDefaultProps",value:function(e){var t={dropboxWrapper:"self",valueKey:"value",labelKey:"label",descriptionKey:"description",aliasKey:"alias",ariaLabelText:"Options list",optionsCount:5,noOfDisplayValues:50,optionHeight:"40px",noOptionsText:"No options found",noSearchResultsText:"No results found",selectAllText:"Select All",searchNormalize:!1,searchPlaceholderText:"Search...",searchFormLabel:"Search",clearButtonText:"Clear",moreText:"more...",optionsSelectedText:"options selected",optionSelectedText:"option selected",allOptionsSelectedText:"All",placeholder:"Select",position:"bottom left",zIndex:e.keepAlwaysOpen?1:2,tooltipFontSize:"14px",tooltipAlignment:"center",tooltipMaxWidth:"300px",updatePositionThrottle:100,name:"",additionalClasses:"",maxValues:0,showDropboxAsPopup:!0,popupDropboxBreakpoint:"576px",popupPosition:"center",hideValueTooltipOnSelectAll:!0,emptyValue:"",searchDelay:300,focusSelectedOptionOnOpen:!0};return e.hasOptionDescription&&(t.optionsCount=4,t.optionHeight="50px"),Object.assign(t,e)}},{key:"setPropsFromElementAttr",value:function(e){var t=e.ele;Object.keys(x).forEach((function(o){var i=t.getAttribute(o);-1===O.indexOf(o)||""!==i&&"true"!==i||(i=!0),i&&(e[x[o]]=i)}))}},{key:"setEleProps",value:function(){var t=this.$ele;t.virtualSelect=this,t.value=this.multiple?[]:"",t.name=this.name,t.disabled=!1,t.required=this.required,t.autofocus=this.autofocus,t.multiple=this.multiple,t.form=t.closest("form"),t.reset=e.reset,t.setValue=e.setValueMethod,t.setOptions=e.setOptionsMethod,t.setDisabledOptions=e.setDisabledOptionsMethod,t.setEnabledOptions=e.setEnabledOptionsMethod,t.toggleSelectAll=e.toggleSelectAll,t.isAllSelected=e.isAllSelected,t.addOption=e.addOptionMethod,t.getNewValue=e.getNewValueMethod,t.getDisplayValue=e.getDisplayValueMethod,t.getSelectedOptions=e.getSelectedOptionsMethod,t.getDisabledOptions=e.getDisabledOptionsMethod,t.open=e.openMethod,t.close=e.closeMethod,t.focus=e.focusMethod,t.enable=e.enableMethod,t.disable=e.disableMethod,t.destroy=e.destroyMethod,t.validate=e.validateMethod,t.toggleRequired=e.toggleRequiredMethod,this.hasDropboxWrapper&&(this.$dropboxWrapper.virtualSelect=this)}},{key:"setValueMethod",value:function(e,t){var o={},i={},s=[],n=this.multiple,r=e;if(r){if(Array.isArray(r)||(r=[r]),n){var a=this.maxValues;a&&r.length>a&&r.splice(a)}else r.length>1&&(r=[r[0]]);r=r.map((function(e){return e||0===e?e.toString():""})),this.useGroupValue&&(r=this.setGroupOptionsValue(r)),r.forEach((function(e,t){o[e]=!0,i[e]=t})),this.allowNewOption&&r&&this.setNewOptionsFromValue(r)}if(this.options.forEach((function(e){!0!==o[e.value]||e.isDisabled||e.isGroupTitle?e.isSelected=!1:(e.isSelected=!0,s.push(e.value))})),n)this.hasOptionGroup&&this.setGroupsSelectedProp(),s.sort((function(e,t){return i[e]-i[t]}));else{var l=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i,s,n,r,a=[],l=!0,p=!1;try{for(n=(o=o.call(e)).next,0;!(l=(i=n.call(o)).done)&&(a.push(i.value),1!==a.length);l=!0);}catch(e){p=!0,s=e}finally{try{if(!l&&null!=o.return&&(r=o.return(),Object(r)!==r))return}finally{if(p)throw s}}return a}}(e)||m(e,1)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(s);s=l[0]}this.beforeValueSet(),this.setValue(s,{disableEvent:t}),this.afterValueSet()}},{key:"setGroupOptionsValue",value:function(e){var t=[],o={},i={};return e.forEach((function(e){i[e]=!0})),this.options.forEach((function(e){var s=e.value,n=!0===i[s];e.isGroupTitle?n&&(o[e.index]=!0):(n||o[e.groupIndex])&&t.push(s)})),t}},{key:"setGroupsSelectedProp",value:function(){var e=this.isAllGroupOptionsSelected.bind(this);this.options.forEach((function(t){t.isGroupTitle&&(t.isSelected=e(t.index))}))}},{key:"setOptionsMethod",value:function(e,t){this.setOptions(e),this.afterSetOptions(t)}},{key:"setDisabledOptionsMethod",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.setDisabledOptions(e,!0),t||(this.setValueMethod(null),this.toggleAllOptionsClass()),this.setVisibleOptions()}},{key:"setDisabledOptions",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=[];if(e)if(!0===e)t&&this.options.forEach((function(e){return e.isDisabled=!0,o.push(e.value),e}));else{o=e.map((function(e){return e.toString()}));var i={};o.forEach((function(e){i[e]=!0})),t&&this.options.forEach((function(e){return e.isDisabled=!0===i[e.value],e}))}else t&&this.options.forEach((function(e){return e.isDisabled=!1,e}));this.disabledOptions=o}},{key:"setEnabledOptionsMethod",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.setEnabledOptions(e),t||(this.setValueMethod(null),this.toggleAllOptionsClass()),this.setVisibleOptions()}},{key:"setEnabledOptions",value:function(e){if(void 0!==e){var t=[];if(!0===e)this.options.forEach((function(e){return e.isDisabled=!1,e}));else{var o={};e.forEach((function(e){o[e]=!0})),this.options.forEach((function(e){var i=!0!==o[e.value];return e.isDisabled=i,i&&t.push(e.value),e}))}this.disabledOptions=t}}},{key:"setOptions",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],o=[],i=this.disabledOptions.length,n=this.valueKey,r=this.labelKey,a=this.descriptionKey,l=this.aliasKey,p=this.hasOptionDescription,c=s.getString,u=s.convertToBoolean,h=this.secureText.bind(this),f=this.getAlias.bind(this),m=0,b=!1,g={},y=!1;this.disabledOptions.forEach((function(e){g[e]=!0}));var x=function t(x){var w;"object"!==v(x)&&(d(w={},n,x),d(w,r,x),x=w);var O=h(c(x[n])),S=h(c(x[r])),k=x.options,E=!!k,C={index:m,value:O,label:S,labelNormalized:e.searchNormalize?s.normalizeString(S).toLowerCase():S.toLowerCase(),alias:f(x[l]),isVisible:u(x.isVisible,!0),isNew:x.isNew||!1,isGroupTitle:E,classNames:x.classNames};if(y||""!==O||(y=!0),i&&(C.isDisabled=!0===g[O]),x.isGroupOption&&(C.isGroupOption=!0,C.groupIndex=x.groupIndex),p&&(C.description=h(c(x[a]))),x.customData&&(C.customData=x.customData),o.push(C),m+=1,E){var A=C.index;b=!0,k.forEach((function(e){e.isGroupOption=!0,e.groupIndex=A,t(e)}))}};Array.isArray(t)&&t.forEach(x);var w=o.length,O=this.$ele;O.options=o,O.length=w,this.options=o,this.visibleOptionsCount=w,this.lastOptionIndex=w-1,this.newValues=[],this.hasOptionGroup=b,this.hasEmptyValueOption=y,this.setSortedOptions()}},{key:"setServerOptions",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.setOptionsMethod(t,!0);var o=this.selectedOptions,i=this.options,s=!1;if(o.length){var n={};s=!0,i.forEach((function(e){n[e.value]=!0})),o.forEach((function(e){!0!==n[e.value]&&(e.isVisible=!1,i.push(e))})),this.setOptionsMethod(i,!0)}if(this.allowNewOption&&this.searchValue){var r=i.some((function(t){return t.label.toLowerCase()===e.searchValue}));r||(s=!0,this.setNewOption())}s?(this.setVisibleOptionsCount(),this.multiple&&this.toggleAllOptionsClass(),this.setValueText()):this.updatePosition(),c.removeClass(this.$allWrappers,"server-searching")}},{key:"setSelectedOptions",value:function(){this.selectedOptions=this.options.filter((function(e){return e.isSelected}))}},{key:"setSortedOptions",value:function(){var e=f(this.options);this.showSelectedOptionsFirst&&this.selectedValues.length&&(e=this.hasOptionGroup?this.sortOptionsGroup(e):this.sortOptions(e)),this.sortedOptions=e}},{key:"setVisibleOptions",value:function(){var e=f(this.sortedOptions),t=2*this.optionsCount,o=this.getVisibleStartIndex(),i=this.getNewOption(),s=o+t-1,n=0;i&&(i.visibleIndex=n,n+=1),e=e.filter((function(e){var t=!1;return e.isVisible&&!e.isCurrentNew&&(t=n>=o&&n<=s,e.visibleIndex=n,n+=1),t})),i&&(e=[i].concat(f(e))),this.visibleOptions=e,this.renderOptions()}},{key:"setOptionsPosition",value:function(e){var t=(e||this.getVisibleStartIndex())*this.optionHeight;this.$options.style.transform="translate3d(0, ".concat(t,"px, 0)"),c.setData(this.$options,"top",t)}},{key:"setOptionsTooltip",value:function(){var e=this,t=this.getVisibleOptions(),o=this.hasOptionDescription;t.forEach((function(t){var i=e.$dropboxContainer.querySelector('.vscomp-option[data-index="'.concat(t.index,'"]'));c.setData(i.querySelector(".vscomp-option-text"),"tooltip",t.label),o&&c.setData(i.querySelector(".vscomp-option-description"),"tooltip",t.description)}))}},{key:"setValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=t.disableEvent,i=void 0!==o&&o,n=t.disableValidation,r=void 0!==n&&n,a=this.hasEmptyValueOption&&""===e||e;a?Array.isArray(e)?this.selectedValues=f(e):this.selectedValues=[e]:this.selectedValues=[];var l=this.getValue();this.$ele.value=l,this.$hiddenInput.value=this.getInputValue(l),this.isMaxValuesSelected=!!(this.maxValues&&this.maxValues<=this.selectedValues.length),this.toggleAllOptionsClass(),this.setValueText(),c.toggleClass(this.$allWrappers,"has-value",s.isNotEmpty(this.selectedValues)),c.toggleClass(this.$allWrappers,"max-value-selected",this.isMaxValuesSelected),r||this.validate(),i||c.dispatchEvent(this.$ele,"change",!0)}},{key:"setValueText",value:function(){var e=this.multiple,t=this.selectedValues,o=this.noOfDisplayValues,i=this.showValueAsTags,s=this.$valueText,n=[],r=[],a=t.length,l=0,p=this.isAllSelected&&!this.hasServerSearch&&!this.disableAllOptionsSelectedText&&!i;if(p&&this.hideValueTooltipOnSelectAll)s.innerHTML="".concat(this.allOptionsSelectedText," (").concat(a,")");else{this.getSelectedOptions({fullDetails:!0,keepSelectionOrder:!0}).some((function(e){if(e.isCurrentNew)return!1;if(l>=o)return!0;var t=e.label;if(n.push(t),l+=1,i){var s='\n ').concat(t,'\n \n \n \n ');r.push(s)}else r.push(t);return!1}));var u=a-o;u>0&&r.push('+ '.concat(u," ").concat(this.moreText,""));var h=n.join(", ");if(""===h)s.innerHTML=this.placeholder;else if(s.innerHTML=h,e){var d=this.maxValues;if(this.alwaysShowSelectedOptionsCount||c.hasEllipsis(s)||d||i){var v=''.concat(a,"");if(d&&(v+=' / '.concat(d,"")),p)s.innerHTML="".concat(this.allOptionsSelectedText," (").concat(a,")");else if(i)s.innerHTML=r.join(""),this.$valueTags=s.querySelectorAll(".vscomp-value-tag"),this.setValueTagAttr();else if(!this.alwaysShowSelectedOptionsLabel){var f=1===a?this.optionSelectedText:this.optionsSelectedText;s.innerHTML="".concat(v," ").concat(f)}}else r=[]}}var m="";0===a?m=this.placeholder:i||(m=r.join(", ")),c.setData(s,"tooltip",m),e&&(c.setData(s,"tooltipEllipsisOnly",0===a),i&&this.updatePosition())}},{key:"setSearchValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(e!==this.searchValueOriginal||o){t||(this.$searchInput.value=e);var i=e.replace(/\\/g,"").toLowerCase().trim();this.searchValue=i,this.searchValueOriginal=e,c.toggleClass(this.$allWrappers,"has-search-value",e),this.afterSetSearchValue()}}},{key:"setVisibleOptionsCount",value:function(){var e,t=0,o=!1,i=this.searchGroup,n=this.showOptionsOnlyOnSearch,r=this.searchByStartsWith,a=this.searchValue;a=this.searchNormalize?s.normalizeString(a):a;var l=this.isOptionVisible.bind(this);this.hasOptionGroup&&(e=this.getVisibleOptionGroupsMapping(a)),this.options.forEach((function(s){var p;s.isCurrentNew||(n&&!a?(s.isVisible=!1,p={isVisible:!1,hasExactOption:!1}):p=l({data:s,searchValue:a,hasExactOption:o,visibleOptionGroupsMapping:e,searchGroup:i,searchByStartsWith:r}),p.isVisible&&(t+=1),o||(o=p.hasExactOption))})),this.allowNewOption&&(a&&!o?(this.setNewOption(),t+=1):this.removeNewOption()),this.visibleOptionsCount=t,this.afterSetVisibleOptionsCount()}},{key:"setOptionProp",value:function(e,t,o){this.options[e]&&(this.options[e][t]=o)}},{key:"setOptionsHeight",value:function(){this.$optionsList.style.height="".concat(this.optionHeight*this.visibleOptionsCount,"px")}},{key:"setOptionsContainerHeight",value:function(e){var t;e?this.showAsPopup&&(this.optionsCount=this.getOptionsCount(),this.halfOptionsCount=Math.ceil(this.optionsCount/2),t=this.getOptionsHeight(),this.optionsHeight=t):(t=this.optionsHeight,this.keepAlwaysOpen&&(c.setStyle(this.$noOptions,"height",t),c.setStyle(this.$noSearchResults,"height",t))),c.setStyle(this.$optionsContainer,"max-height",t),this.afterSetOptionsContainerHeight(e)}},{key:"setNewOption",value:function(e){var t=e||this.searchValueOriginal.trim();if(t){var o=this.getNewOption();if(o){var i=o.index;this.setOptionProp(i,"value",this.secureText(t)),this.setOptionProp(i,"label",this.secureText(t))}else{var s={value:t,label:t};e?(s.isNew=!0,this.newValues.push(t)):s.isCurrentNew=!0,this.addOption(s)}}}},{key:"setSelectedProp",value:function(){var e={};this.selectedValues.forEach((function(t){e[t]=!0})),this.options.forEach((function(t){!0===e[t.value]&&(t.isSelected=!0)}))}},{key:"setNewOptionsFromValue",value:function(e){if(e){var t=this.setNewOption.bind(this),o={};this.options.forEach((function(e){o[e.value]=!0})),e.forEach((function(e){e&&!0!==o[e]&&t(e)}))}}},{key:"setDropboxWrapperWidth",value:function(){if(!this.showAsPopup){var e=this.dropboxWidth||"".concat(this.$wrapper.offsetWidth,"px");c.setStyle(this.$dropboxContainer,"max-width",e)}}},{key:"setEleStyles",value:function(){var e=this.maxWidth,t={};e&&(t["max-width"]=e),c.setStyles(this.$ele,t)}},{key:"setDropboxStyles",value:function(){var e=this.dropboxWidth,t={},o={"z-index":this.zIndex};e&&(this.showAsPopup?t["max-width"]=e:o.width=e),c.setStyles(this.$dropboxContainer,o),c.setStyles(this.$dropbox,t)}},{key:"setOptionAttr",value:function(){var e=this.$visibleOptions,t=this.options,o="".concat(this.optionHeight,"px"),i=c.setStyle,s=c.getData,n=c.setData;e&&e.length&&e.forEach((function(e){var r=t[s(e,"index")];i(e,"height",o),n(e,"value",r.value)}))}},{key:"setValueTagAttr",value:function(){var e=this.$valueTags;if(e&&e.length){var t=c.getData,o=c.setData,i=this.options;e.forEach((function(e){var s=t(e,"index");if(void 0!==s){var n=i[s];o(e,"value",n.value)}}))}}},{key:"setScrollTop",value:function(){var e=this.selectedValues;if(!this.showSelectedOptionsFirst&&this.focusSelectedOptionOnOpen&&0!==e.length){var t,o={};e.forEach((function(e){o[e]=!0})),this.options.some((function(e){return!!o[e.value]&&(t=e.visibleIndex,!0)})),t&&(this.$optionsContainer.scrollTop=this.optionHeight*t)}}},{key:"getVisibleOptions",value:function(){return this.visibleOptions||[]}},{key:"getValue",value:function(){return this.multiple?this.useGroupValue?this.getGroupValue():this.selectedValues:this.selectedValues[0]||""}},{key:"getGroupValue",value:function(){var e=[],t={};return this.options.forEach((function(o){if(o.isSelected){var i=o.value;o.isGroupTitle?i&&(t[o.index]=!0,e.push(i)):!0!==t[o.groupIndex]&&e.push(i)}})),e}},{key:"getInputValue",value:function(e){var t=e;return t&&t.length?this.setValueAsArray&&this.multiple&&(t=JSON.stringify(t)):t=this.emptyValue,t}},{key:"getFirstVisibleOptionIndex",value:function(){return Math.ceil(this.$optionsContainer.scrollTop/this.optionHeight)}},{key:"getVisibleStartIndex",value:function(){var e=this.getFirstVisibleOptionIndex()-this.halfOptionsCount;return e<0&&(e=0),e}},{key:"getTooltipAttrText",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i={"data-tooltip":e||"","data-tooltip-enter-delay":this.tooltipEnterDelay,"data-tooltip-z-index":this.zIndex,"data-tooltip-font-size":this.tooltipFontSize,"data-tooltip-alignment":this.tooltipAlignment,"data-tooltip-max-width":this.tooltipMaxWidth,"data-tooltip-ellipsis-only":t,"data-tooltip-allow-html":o};return c.getAttributesText(i)}},{key:"getOptionObj",value:function(e){if(e){var t=s.getString,o=this.secureText.bind(this);return{index:e.index,value:o(t(e.value)),label:o(t(e.label)),description:o(t(e.description)),alias:this.getAlias(e.alias),isCurrentNew:e.isCurrentNew||!1,isNew:e.isNew||!1,isVisible:!0}}}},{key:"getNewOption",value:function(){var e=this.options[this.lastOptionIndex];if(e&&e.isCurrentNew)return e}},{key:"getOptionIndex",value:function(e){var t;return this.options.some((function(o){return o.value===e&&(t=o.index,!0)})),t}},{key:"getNewValue",value:function(){var e={};this.newValues.forEach((function(t){e[t]=!0}));var t=this.selectedValues.filter((function(t){return!0===e[t]}));return this.multiple?t:t[0]}},{key:"getAlias",value:function(e){var t=e;return t&&(t=(t=Array.isArray(t)?t.join(","):t.toString().trim()).toLowerCase()),t||""}},{key:"getDisplayValue",value:function(){var e=[];return this.options.forEach((function(t){t.isSelected&&e.push(t.label)})),this.multiple?e:e[0]||""}},{key:"getSelectedOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.fullDetails,o=void 0!==t&&t,i=e.keepSelectionOrder,s=void 0!==i&&i,n=this.valueKey,r=this.labelKey,a=this.selectedValues,l=[];if(this.options.forEach((function(e){if(e.isSelected&&!e.isGroupTitle)if(o)l.push(e);else{var t,i=(d(t={},n,e.value),d(t,r,e.label),t);e.isNew&&(i.isNew=!0),e.customData&&(i.customData=e.customData),l.push(i)}})),s){var p={};a.forEach((function(e,t){p[e]=t})),l.sort((function(e,t){return p[e.value]-p[t.value]}))}return this.multiple||o?l:l[0]}},{key:"getDisabledOptions",value:function(){var e=this.valueKey,t=this.labelKey,o=this.disabledOptions,i={},s=[];return o.forEach((function(e){i[e]=!0})),this.options.forEach((function(o){var n,r=o.value,a=o.label;i[r]&&s.push((d(n={},e,r),d(n,t,a),n))})),s}},{key:"getVisibleOptionGroupsMapping",value:function(e){var t=this.options,o={},i=this.isOptionVisible.bind(this);return(t=this.structureOptionGroup(t)).forEach((function(t){o[t.index]=t.options.some((function(t){return i({data:t,searchValue:e}).isVisible}))})),o}},{key:"getOptionsCount",value:function(e){var t;if(this.showAsPopup){var o=80*window.innerHeight/100-48;this.hasSearchContainer&&(o-=40),t=Math.floor(o/this.optionHeight)}else t=parseInt(e);return t}},{key:"getOptionsHeight",value:function(){return"".concat(this.optionsCount*this.optionHeight,"px")}},{key:"getSibling",value:function(e,t){var o="next"===t?"nextElementSibling":"previousElementSibling",i=e;do{i&&(i=i[o])}while(c.hasClass(i,"disabled")||c.hasClass(i,"group-title"));return i}},{key:"getUniqueId",value:function(){var e=s.getRandomInt(1e4);return document.querySelector("#vscomp-ele-wrapper-".concat(e))?this.getUniqueId():e}},{key:"initDropboxPopover",value:function(){var e={ele:this.$ele,target:this.$dropboxContainer,position:this.position,zIndex:this.zIndex,margin:4,transitionDistance:30,hideArrowIcon:!0,disableManualAction:!0,disableUpdatePosition:!this.hasDropboxWrapper,updatePositionThrottle:this.updatePositionThrottle,afterShow:this.afterShowPopper.bind(this),afterHide:this.afterHidePopper.bind(this)};this.dropboxPopover=new PopoverComponent(e)}},{key:"openDropbox",value:function(e){this.isSilentOpen=e,e?c.setStyle(this.$dropboxContainer,"display","inline-flex"):(c.dispatchEvent(this.$ele,"beforeOpen"),c.setAria(this.$wrapper,"expanded",!0)),this.setDropboxWrapperWidth(),c.removeClass(this.$allWrappers,"closed"),c.changeTabIndex(this.$allWrappers,0),this.dropboxPopover&&!e?this.dropboxPopover.show():this.afterShowPopper()}},{key:"afterShowPopper",value:function(){var e=this.isSilentOpen;this.isSilentOpen=!1,e||(this.moveSelectedOptionsFirst(),this.setScrollTop(),c.addClass(this.$allWrappers,"focused"),this.showAsPopup?(c.addClass(this.$body,"vscomp-popup-active"),this.isPopupActive=!0):this.focusSearchInput(),c.dispatchEvent(this.$ele,"afterOpen"))}},{key:"closeDropbox",value:function(e){this.isSilentClose=e,this.keepAlwaysOpen?this.removeOptionFocus():(e?c.setStyle(this.$dropboxContainer,"display",""):(c.dispatchEvent(this.$ele,"beforeClose"),c.setAria(this.$wrapper,"expanded",!1),c.setAria(this.$wrapper,"activedescendant","")),this.dropboxPopover&&!e?this.dropboxPopover.hide():this.afterHidePopper())}},{key:"afterHidePopper",value:function(){var e=this.isSilentClose;this.isSilentClose=!1,c.removeClass(this.$allWrappers,"focused"),this.removeOptionFocus(),!e&&this.isPopupActive&&(c.removeClass(this.$body,"vscomp-popup-active"),this.isPopupActive=!1),c.addClass(this.$allWrappers,"closed"),e||c.dispatchEvent(this.$ele,"afterClose"),this.focus()}},{key:"moveSelectedOptionsFirst",value:function(){this.showSelectedOptionsFirst&&(this.setSortedOptions(),this.$optionsContainer.scrollTop&&this.selectedValues.length?this.scrollToTop():this.setVisibleOptions())}},{key:"toggleDropbox",value:function(){this.isOpened()?this.closeDropbox():this.openDropbox()}},{key:"updatePosition",value:function(){this.dropboxPopover&&this.isOpened()&&this.$ele.updatePosition()}},{key:"isOpened",value:function(){return!c.hasClass(this.$wrapper,"closed")}},{key:"focusSearchInput",value:function(){var e=this.$searchInput;e&&e.focus()}},{key:"focusOption",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=t.direction,i=t.$option,s=t.focusFirst,n=this.$dropboxContainer.querySelector(".vscomp-option.focused");if(i)e=i;else if(!n||s){var r=this.getFirstVisibleOptionIndex();e=this.$dropboxContainer.querySelector('.vscomp-option[data-visible-index="'.concat(r,'"]')),(c.hasClass(e,"disabled")||c.hasClass(e,"group-title"))&&(e=this.getSibling(e,"next"))}else e=this.getSibling(n,o);e&&e!==n&&(n&&this.toggleOptionFocusedState(n,!1),this.$ariaLiveElem&&(this.$ariaLiveElem.textContent=e.textContent),this.toggleOptionFocusedState(e,!0),this.toggleFocusedProp(c.getData(e,"index"),!0),this.moveFocusedOptionToView(e))}},{key:"moveFocusedOptionToView",value:function(e){var t=e||this.$dropboxContainer.querySelector(".vscomp-option.focused");if(t){var o,i=this.$optionsContainer.getBoundingClientRect(),s=t.getBoundingClientRect(),n=i.top,r=i.bottom,a=i.height,l=s.top,p=s.bottom,u=s.height,h=t.offsetTop,d=c.getData(this.$options,"top","number");n>l?o=h+d:r1&&void 0!==arguments[1]?arguments[1]:{},o=t.event;if(e){var i=!c.hasClass(e,"selected");if(i){if(this.multiple&&this.isMaxValuesSelected)return}else if(!this.multiple)return void this.closeDropbox();var n=this.selectedValues,r=c.getData(e,"value"),a=c.getData(e,"index","number"),l=c.hasClass(e,"current-new"),p=!1,u=this.lastSelectedOptionIndex;if(this.lastSelectedOptionIndex=null,this.toggleSelectedProp(a,i),i){if(this.multiple)n.push(r),this.toggleAllOptionsClass(),this.toggleGroupOptionsParent(e),o&&o.shiftKey&&(p=!0);else{n.length&&this.toggleSelectedProp(this.getOptionIndex(n[0]),!1),n=[r];var h=this.$dropboxContainer.querySelector(".vscomp-option.selected");h&&this.toggleOptionSelectedState(h,!1),this.closeDropbox(),l||this.setSearchValue("")}this.lastSelectedOptionIndex=a,this.toggleOptionSelectedState(e)}else this.multiple&&(this.toggleOptionSelectedState(e),s.removeItemFromArray(n,r),this.toggleAllOptionsClass(!1),this.toggleGroupOptionsParent(e,!1));l&&this.beforeSelectNewValue(),this.setValue(n),p&&this.selectRangeOptions(u,a)}}},{key:"selectFocusedOption",value:function(){this.selectOption(this.$dropboxContainer.querySelector(".vscomp-option.focused"))}},{key:"selectRangeOptions",value:function(e,t){var o=this;if("number"==typeof e&&!this.maxValues){var i,s,n=this.selectedValues,r=this.hasOptionGroup,a={};if(ei&&t1&&void 0!==arguments[1]&&arguments[1];this.focusedOptionIndex&&this.setOptionProp(this.focusedOptionIndex,"isFocused",!1),this.setOptionProp(e,"isFocused",t),this.focusedOptionIndex=e}},{key:"toggleSelectedProp",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.setOptionProp(e,"isSelected",t)}},{key:"scrollToTop",value:function(){var e=!this.isOpened();e&&this.openDropbox(!0),this.$optionsContainer.scrollTop>0&&(this.$optionsContainer.scrollTop=0),e&&this.closeDropbox(!0)}},{key:"reset",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.options.forEach((function(e){e.isSelected=!1})),this.beforeValueSet(!0),this.setValue(null,{disableValidation:e}),this.afterValueSet(),e&&c.removeClass(this.$allWrappers,"has-error"),c.dispatchEvent(this.$ele,"reset")}},{key:"addOption",value:function(e,t){if(e){this.lastOptionIndex+=1;var o=this.getOptionObj(h(h({},e),{},{index:this.lastOptionIndex}));this.options.push(o),this.sortedOptions.push(o),t&&(this.visibleOptionsCount+=1,this.afterSetOptions())}}},{key:"removeOption",value:function(e){(e||0===e)&&(this.options.splice(e,1),this.lastOptionIndex-=1)}},{key:"removeNewOption",value:function(){var e=this.getNewOption();e&&this.removeOption(e.index)}},{key:"sortOptions",value:function(e){return e.sort((function(e,t){var o=e.isSelected||e.isAnySelected,i=t.isSelected||t.isAnySelected;return o||i?o&&(!i||e.indexe.length)&&(t=e.length);for(var o=0,i=new Array(t);oo-s-t.width?"left":"right",vertical:n>i-n-t.height?"top":"bottom"}}},{key:"getAbsoluteCoords",value:function(e){if(e){var t=e.getBoundingClientRect(),o=window.pageXOffset,i=window.pageYOffset;return{width:t.width,height:t.height,top:t.top+i,right:t.right+o,bottom:t.bottom+i,left:t.left+o}}}},{key:"getCoords",value:function(e){return e?e.getBoundingClientRect():{}}},{key:"getData",value:function(e,t,o){if(e){var i=e?e.dataset[t]:"";return"number"===o?i=parseFloat(i)||0:"true"===i?i=!0:"false"===i&&(i=!1),i}}},{key:"setData",value:function(e,t,o){e&&(e.dataset[t]=o)}},{key:"setStyle",value:function(e,t,o){e&&(e.style[t]=o)}},{key:"show",value:function(e){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"block";t.setStyle(e,"display",o)}},{key:"hide",value:function(e){t.setStyle(e,"display","none")}},{key:"getHideableParent",value:function(e){for(var t,o=e.parentElement;o;){var i=getComputedStyle(o).overflow;if(-1!==i.indexOf("scroll")||-1!==i.indexOf("auto")){t=o;break}o=o.parentElement}return t}}])&&function(e,t){for(var o=0;oy?y-f:M:k+c>L&&("right"===C?n="left":k=L+fx?x-h:P:E+u>I&&("bottom"===C?n="top":E=I+hc-B&&(z=c-B):"left"!==C&&"right"!==C||((W=b/2+g-R)u-B&&(W=u-B)),o.setStyle(this.$arrowEle,"transform","translate3d(".concat(z,"px, ").concat(W,"px, 0) ").concat(K))}o.hide(this.$popperEle)}},{key:"resetPosition",value:function(){o.setStyle(this.$popperEle,"transform","none"),this.setPosition()}},{key:"show",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.resetPosition,s=t.data;clearTimeout(this.exitDelayTimeout),clearTimeout(this.hideDurationTimeout),i&&this.resetPosition(),this.enterDelayTimeout=setTimeout((function(){var t=o.getData(e.$popperEle,"left"),i=o.getData(e.$popperEle,"top"),n="translate3d(".concat(t,"px, ").concat(i,"px, 0)"),r=e.showDuration;o.show(e.$popperEle,"inline-flex"),o.getCoords(e.$popperEle),o.setStyle(e.$popperEle,"transitionDuration",r+"ms"),o.setStyle(e.$popperEle,"transform",n),o.setStyle(e.$popperEle,"opacity",1),e.showDurationTimeout=setTimeout((function(){"function"==typeof e.afterShowCallback&&e.afterShowCallback(s)}),r)}),this.enterDelay)}},{key:"hide",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.data;clearTimeout(this.enterDelayTimeout),clearTimeout(this.showDurationTimeout),this.exitDelayTimeout=setTimeout((function(){if(e.$popperEle){var t=o.getData(e.$popperEle,"fromLeft"),s=o.getData(e.$popperEle,"fromTop"),n="translate3d(".concat(t,"px, ").concat(s,"px, 0)"),r=e.hideDuration;o.setStyle(e.$popperEle,"transitionDuration",r+"ms"),o.setStyle(e.$popperEle,"transform",n),o.setStyle(e.$popperEle,"opacity",0),e.hideDurationTimeout=setTimeout((function(){o.hide(e.$popperEle),"function"==typeof e.afterHideCallback&&e.afterHideCallback(i)}),r)}}),this.exitDelay)}},{key:"updatePosition",value:function(){o.setStyle(this.$popperEle,"transitionDuration","0ms"),this.resetPosition();var e=o.getData(this.$popperEle,"left"),t=o.getData(this.$popperEle,"top");o.show(this.$popperEle,"inline-flex"),o.setStyle(this.$popperEle,"transform","translate3d(".concat(e,"px, ").concat(t,"px, 0)"))}}])&&function(e,t){for(var o=0;o1&&void 0!==arguments[1]&&arguments[1];return!0===e||"true"===e||!1!==e&&"false"!==e&&t}},{key:"removeArrayEmpty",value:function(e){return Array.isArray(e)&&e.length?e.filter((function(e){return!!e})):[]}},{key:"throttle",value:function(e,t){var o,i=0;return function(){for(var s=arguments.length,n=new Array(s),r=0;re.length)&&(t=e.length);for(var o=0,i=new Array(t);o'),e=this.$popover.querySelector(".pop-comp-arrow")),this.$arrowEle=e}}},{key:"destroy",value:function(){this.removeEvents()}}])&&s(o.prototype,l),p&&s(o,p),Object.defineProperty(o,"prototype",{writable:!1}),t}();n=l.getAttrProps(),window.PopoverComponent=l}()}},t={};function o(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={id:i,exports:{}};return e[i](n,n.exports,o),n.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var i in t)o.o(t,i)&&!o.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nc=void 0,(()=>{"use strict";const e=jQuery;var t=o.n(e);Shiny;var i=o(3379),s=o.n(i),n=o(7795),r=o.n(n),a=o(569),l=o.n(a),p=o(3565),c=o.n(p),u=o(9216),h=o.n(u),d=o(4589),v=o.n(d),f=o(716),m={};function b(e){var t,o,i=[];for(t in e)for(o=0;o({label:e,value:e})));else if("transpose"==e.type)t=b(e.choices);else if("transpose_group"==e.type){for(var o=e.choices,i=0;it()(e).find(".virtual-select"),getValue:e=>e.value,setValue:(e,t)=>{e.setValue(t)},subscribe:(e,o)=>{t()(e).on("change.virtualSelectBinding",(function(e){o()}))},unsubscribe:e=>{t()(e).off(".virtualSelectBinding")},receiveMessage:(e,o)=>{if(o.hasOwnProperty("label")){var i=t()("#"+e.id+"-label");!function(e,t){if(void 0!==e){if(1!==t.length)throw new Error("labelNode must be of length 1");Array.isArray(e)&&0===e.length?t.addClass("shiny-label-null"):(t.html(e),t.removeClass("shiny-label-null"))}}(o.label,i)}if(o.hasOwnProperty("options")){var s=g(o.options);e.setOptions(s)}o.hasOwnProperty("value")&&e.setValue(o.value),o.hasOwnProperty("disable")&&(o.disable?e.disable():e.enable()),o.hasOwnProperty("disabledChoices")&&e.setDisabledOptions(o.disabledChoices,!0)},initialize:e=>{var o=e.querySelector('script[data-for="'+e.id+'"]'),i=(o=JSON.parse(o.text)).config;i.options=g(o.options),i.ele=e,VirtualSelect.init(i),o.stateInput&&(t()(e).on("afterOpen",(function(t){Shiny.setInputValue(e.id+"_open",!0)})),t()(e).on("afterClose",(function(t){Shiny.setInputValue(e.id+"_open",!1)})))}}),Shiny.inputBindings.register(y,"shinyWidgets.virtualSelectBinding")})()})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/virtual-select-plugin/dist/virtual-select.min.css": +/*!**************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/virtual-select-plugin/dist/virtual-select.min.css ***! + \**************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "/*!\n * Virtual Select v1.0.39\n * https://sa-si-dev.github.io/virtual-select\n * Licensed under MIT (https://github.com/sa-si-dev/virtual-select/blob/master/LICENSE)\n */\n@keyframes vscomp-animation-spin{to{transform:rotateZ(360deg)}}.vscomp-popup-active{overflow:hidden !important}.vscomp-ele{display:inline-block;max-width:250px;width:100%}.vscomp-wrapper{color:#333;display:inline-flex;flex-wrap:wrap;font-family:sans-serif;font-size:14px;position:relative;text-align:left;width:100%}.vscomp-wrapper *,.vscomp-wrapper *::before,.vscomp-wrapper *::after{box-sizing:border-box}.vscomp-wrapper:focus{outline:none}.vscomp-dropbox-wrapper{left:0;position:absolute;top:0}.vscomp-toggle-button{align-items:center;background-color:#fff;border:1px solid #ddd;cursor:pointer;display:flex;padding:7px 30px 7px 10px;position:relative;width:100%}.vscomp-value{height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vscomp-arrow{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;width:30px}.vscomp-arrow::after{transform:rotate(45deg);border:1px solid rgba(0,0,0,0);border-bottom-color:#111;border-right-color:#111;content:\"\";height:8px;margin-top:-6px;width:8px}.vscomp-clear-icon{height:12px;position:relative;width:12px}.vscomp-clear-icon::before,.vscomp-clear-icon::after{background-color:#999;content:\"\";height:12px;left:5px;position:absolute;top:0;width:2px}.vscomp-clear-icon::before{transform:rotate(45deg)}.vscomp-clear-icon::after{transform:rotate(-45deg)}.vscomp-clear-icon:hover::before,.vscomp-clear-icon:hover::after{background:#333}.vscomp-clear-button{align-items:center;border-radius:50%;display:none;height:24px;justify-content:center;margin-top:-12px;position:absolute;right:30px;top:50%;width:24px}.vscomp-clear-button:hover{background:#ccc}.vscomp-clear-button:hover .vscomp-clear-icon::before,.vscomp-clear-button:hover .vscomp-clear-icon::after{background-color:#333}.vscomp-dropbox-close-button{align-items:center;background-color:#fff;border-radius:50%;bottom:-48px;cursor:pointer;display:none;height:40px;justify-content:center;left:50%;margin-left:-20px;position:absolute;width:40px}.vscomp-value-tag.more-value-count{white-space:nowrap}.vscomp-dropbox-container{width:100%;z-index:2}.vscomp-dropbox{background-color:#fff;width:100%}.vscomp-options-container{max-height:210px;overflow:auto;position:relative}.vscomp-options-bottom-freezer{bottom:0;height:2px;left:0;position:absolute;right:0}.vscomp-option{align-items:center;cursor:pointer;display:flex;flex-wrap:wrap;height:40px;padding:0 15px;position:relative}.vscomp-option.selected{background-color:#eee}.vscomp-option.focused{background-color:#ccc}.vscomp-option.disabled{cursor:default;opacity:.5}.vscomp-option.group-title .vscomp-option-text{cursor:default;opacity:.6}.vscomp-option.group-title.selected{background-color:rgba(0,0,0,0)}.vscomp-option.group-option{padding-left:30px}.vscomp-new-option-icon{height:30px;position:absolute;right:0;top:0;width:30px}.vscomp-new-option-icon::before{border:15px solid #512da8;border-bottom-color:rgba(0,0,0,0);border-left-color:rgba(0,0,0,0);content:\"\";position:absolute;right:0;top:0}.vscomp-new-option-icon::after{align-items:center;color:#fff;content:\"+\";display:flex;font-size:18px;height:15px;justify-content:center;position:absolute;right:1px;top:0;width:15px}.vscomp-option-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.vscomp-option-description{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#666;font-size:13px;line-height:15px;width:100%}.vscomp-search-container{align-items:center;border-bottom:1px solid #ddd;display:flex;height:40px;padding:0 5px 0 15px;position:relative}.vscomp-search-label,.vscomp-live-region{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.vscomp-search-input{background-color:rgba(0,0,0,0);border:0;color:inherit;font-size:15px;height:38px;padding:10px 0;width:calc(100% - 30px)}.vscomp-search-input:focus{outline:none}.vscomp-search-clear{align-items:center;color:#999;cursor:pointer;display:flex;font-size:25px;height:30px;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;visibility:hidden;width:30px}.vscomp-search-clear:hover{color:inherit}.vscomp-no-options,.vscomp-no-search-results{align-items:center;display:none;justify-content:center;padding:20px 10px}.vscomp-options-loader{display:none;padding:20px 0;text-align:center}.vscomp-options-loader::before{animation:vscomp-animation-spin .8s infinite linear;background-color:#fff;border-radius:50%;box-shadow:-4px -5px 3px -3px rgba(0,0,0,.3);content:\"\";display:inline-block;height:40px;opacity:.7;width:40px}.vscomp-ele[disabled]{cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vscomp-ele[disabled] .vscomp-wrapper{opacity:.7;pointer-events:none}.vscomp-wrapper .checkbox-icon{display:inline-flex;height:15px;margin-right:10px;position:relative;width:15px}.vscomp-wrapper .checkbox-icon::after{transition-duration:.2s;border:2px solid #888;content:\"\";display:inline-block;height:100%;width:100%}.vscomp-wrapper .checkbox-icon.checked::after{transform:rotate(45deg) translate(1px, -4px);border-color:#512da8;border-left-color:rgba(0,0,0,0);border-top-color:rgba(0,0,0,0);width:50%}.vscomp-wrapper.show-as-popup .vscomp-dropbox-container{align-items:center;background-color:rgba(0,0,0,.5);display:flex;height:100vh;justify-content:center;left:0;opacity:1;overflow:auto;padding:0 10px;position:fixed;top:0;width:100vw}.vscomp-wrapper.show-as-popup .vscomp-dropbox{margin-top:-24px;max-height:calc(80% - 48px);max-width:500px;position:relative;width:80%}.vscomp-wrapper.show-as-popup .vscomp-dropbox-close-button{display:flex}.vscomp-wrapper.popup-position-left .vscomp-dropbox-container{justify-content:flex-start}.vscomp-wrapper.popup-position-right .vscomp-dropbox-container{justify-content:flex-end}.vscomp-wrapper.has-select-all .vscomp-toggle-all-button{align-items:center;cursor:pointer;display:flex}.vscomp-wrapper.has-select-all .vscomp-search-input,.vscomp-wrapper.has-select-all .vscomp-toggle-all-label{width:calc(100% - 55px)}.vscomp-wrapper.has-select-all .vscomp-toggle-all-label{display:none}.vscomp-wrapper:not(.has-search-input) .vscomp-toggle-all-button{width:100%}.vscomp-wrapper:not(.has-search-input) .vscomp-toggle-all-label{display:inline-block}.vscomp-wrapper.multiple .vscomp-option .vscomp-option-text{width:calc(100% - 25px)}.vscomp-wrapper.multiple .vscomp-option .vscomp-option-description{padding-left:25px}.vscomp-wrapper.multiple .vscomp-option.selected .checkbox-icon::after{transform:rotate(45deg) translate(1px, -4px);border-color:#512da8;border-left-color:rgba(0,0,0,0);border-top-color:rgba(0,0,0,0);width:50%}.vscomp-wrapper.focused .vscomp-toggle-button,.vscomp-wrapper:focus .vscomp-toggle-button{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2)}.vscomp-wrapper.closed .vscomp-dropbox-container,.vscomp-wrapper.closed.vscomp-dropbox-wrapper{display:none}.vscomp-wrapper:not(.has-value) .vscomp-value{opacity:.5}.vscomp-wrapper.has-clear-button.has-value .vscomp-clear-button{display:flex}.vscomp-wrapper.has-clear-button .vscomp-toggle-button{padding-right:54px}.vscomp-wrapper.has-no-options .vscomp-options-container,.vscomp-wrapper.has-no-search-results .vscomp-options-container{display:none}.vscomp-wrapper.has-no-options .vscomp-no-options{display:flex}.vscomp-wrapper.has-no-search-results .vscomp-no-search-results{display:flex}.vscomp-wrapper.has-search-value .vscomp-search-clear{visibility:visible}.vscomp-wrapper.has-no-options .vscomp-toggle-all-button{opacity:.5;pointer-events:none}.vscomp-wrapper.keep-always-open .vscomp-toggle-button{padding-right:24px}.vscomp-wrapper.keep-always-open .vscomp-clear-button{right:5px}.vscomp-wrapper.keep-always-open .vscomp-arrow{display:none}.vscomp-wrapper.keep-always-open .vscomp-dropbox-container{position:relative;z-index:1}.vscomp-wrapper.keep-always-open .vscomp-dropbox{transition-duration:0s;border:1px solid #ddd;box-shadow:none}.vscomp-wrapper.keep-always-open.focused,.vscomp-wrapper.keep-always-open:focus,.vscomp-wrapper.keep-always-open:hover{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2)}.vscomp-wrapper.server-searching .vscomp-options-list{display:none}.vscomp-wrapper.server-searching .vscomp-options-loader{display:block}.vscomp-wrapper.has-error .vscomp-toggle-button{border-color:#b00020}.vscomp-wrapper.show-value-as-tags .vscomp-toggle-button{padding:4px 22px 0 10px}.vscomp-wrapper.show-value-as-tags .vscomp-value{display:flex;flex-wrap:wrap;height:auto;min-height:28px;overflow:auto;text-overflow:unset;white-space:normal}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-items:center;border:1px solid #ddd;border-radius:20px;display:inline-flex;font-size:12px;line-height:16px;margin:0 4px 4px 0;max-width:100%;padding:2px 3px 2px 8px}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag.more-value-count{padding-right:8px}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 20px)}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag-clear-button{align-items:center;display:flex;height:20px;justify-content:center;width:20px}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag-clear-button .vscomp-clear-icon{transform:scale(0.8)}.vscomp-wrapper.show-value-as-tags .vscomp-arrow{height:34px}.vscomp-wrapper.show-value-as-tags .vscomp-clear-button{margin-top:0;top:5px}.vscomp-wrapper.show-value-as-tags.has-value .vscomp-arrow{display:none}.vscomp-wrapper.show-value-as-tags.has-value .vscomp-clear-button{right:2px}.vscomp-wrapper.show-value-as-tags:not(.has-value) .vscomp-toggle-button{padding-bottom:2px}.vscomp-wrapper.show-value-as-tags:not(.has-value) .vscomp-value{align-items:center;padding-bottom:3px}.vscomp-wrapper.text-direction-rtl{direction:rtl}.vscomp-wrapper.text-direction-rtl .vscomp-toggle-button{padding:7px 10px 7px 30px}.vscomp-wrapper.text-direction-rtl .vscomp-arrow{left:0;right:auto}.vscomp-wrapper.text-direction-rtl .vscomp-clear-button{left:30px;right:auto !important}.vscomp-wrapper.text-direction-rtl .checkbox-icon{margin-left:10px;margin-right:0}.vscomp-wrapper.text-direction-rtl .checkbox-icon.checked::after{transform:rotate(45deg) translate(-4px, 1px)}.vscomp-wrapper.text-direction-rtl .vscomp-search-container{padding:0 15px 0 5px}.vscomp-wrapper.text-direction-rtl .vscomp-toggle-all-label{text-align:right}.vscomp-wrapper.text-direction-rtl .vscomp-option{text-align:right}.vscomp-wrapper.text-direction-rtl .vscomp-option.group-option{padding-right:30px}.vscomp-wrapper.text-direction-rtl .vscomp-new-option-icon{left:0;right:auto}.vscomp-wrapper.text-direction-rtl .vscomp-new-option-icon::before{border-left-color:#512da8;border-right-color:rgba(0,0,0,0)}.vscomp-wrapper.text-direction-rtl .vscomp-new-option-icon::after{left:1px;right:auto}.vscomp-wrapper.text-direction-rtl.multiple .vscomp-option.selected .checkbox-icon::after{transform:rotate(45deg) translate(-4px, 1px)}.vscomp-wrapper.text-direction-rtl.has-clear-button .vscomp-toggle-button{padding-left:54px}.vscomp-wrapper.text-direction-rtl.keep-always-open .vscomp-toggle-button{padding-left:24px}.vscomp-wrapper.text-direction-rtl.keep-always-open .vscomp-clear-button{left:5px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags .vscomp-toggle-button{padding:4px 10px 0 22px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags .vscomp-value-tag{margin:0 0 4px 4px;padding:2px 8px 2px 3px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags .vscomp-value-tag.more-value-count{padding-left:8px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags.has-value .vscomp-clear-button{left:2px}\n/*!\n * Popover v1.0.12\n * https://sa-si-dev.github.io/popover\n * Licensed under MIT (https://github.com/sa-si-dev/popover/blob/master/LICENSE)\n */\n.pop-comp-wrapper{display:none;position:absolute;top:0;left:0;opacity:0;color:#000;background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);text-align:left;flex-wrap:wrap;z-index:1}.pop-comp-arrow{position:absolute;z-index:1;width:16px;height:16px;overflow:hidden;pointer-events:none}.pop-comp-arrow::before{content:\"\";position:absolute;top:8px;left:8px;width:16px;height:16px;background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);-webkit-transform-origin:left top;transform-origin:left top;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.pop-comp-content{position:relative;z-index:2}.pop-comp-wrapper.position-bottom>.pop-comp-arrow{margin-left:-8px;left:0;top:-15px}.pop-comp-wrapper.position-bottom>.pop-comp-arrow::before{box-shadow:0px 0px 2px 0 rgba(0,0,0,.14)}.pop-comp-wrapper.position-top>.pop-comp-arrow{margin-left:-8px;left:0;bottom:-15px}.pop-comp-wrapper.position-right>.pop-comp-arrow{margin-top:-8px;top:0;left:-15px}.pop-comp-wrapper.position-left>.pop-comp-arrow{margin-top:-8px;top:0;right:-15px}.pop-comp-disable-events{pointer-events:none}\n\n", "",{"version":3,"sources":["webpack://./node_modules/virtual-select-plugin/dist/virtual-select.min.css"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Virtual Select v1.0.39\n * https://sa-si-dev.github.io/virtual-select\n * Licensed under MIT (https://github.com/sa-si-dev/virtual-select/blob/master/LICENSE)\n */\n@keyframes vscomp-animation-spin{to{transform:rotateZ(360deg)}}.vscomp-popup-active{overflow:hidden !important}.vscomp-ele{display:inline-block;max-width:250px;width:100%}.vscomp-wrapper{color:#333;display:inline-flex;flex-wrap:wrap;font-family:sans-serif;font-size:14px;position:relative;text-align:left;width:100%}.vscomp-wrapper *,.vscomp-wrapper *::before,.vscomp-wrapper *::after{box-sizing:border-box}.vscomp-wrapper:focus{outline:none}.vscomp-dropbox-wrapper{left:0;position:absolute;top:0}.vscomp-toggle-button{align-items:center;background-color:#fff;border:1px solid #ddd;cursor:pointer;display:flex;padding:7px 30px 7px 10px;position:relative;width:100%}.vscomp-value{height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vscomp-arrow{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;width:30px}.vscomp-arrow::after{transform:rotate(45deg);border:1px solid rgba(0,0,0,0);border-bottom-color:#111;border-right-color:#111;content:\"\";height:8px;margin-top:-6px;width:8px}.vscomp-clear-icon{height:12px;position:relative;width:12px}.vscomp-clear-icon::before,.vscomp-clear-icon::after{background-color:#999;content:\"\";height:12px;left:5px;position:absolute;top:0;width:2px}.vscomp-clear-icon::before{transform:rotate(45deg)}.vscomp-clear-icon::after{transform:rotate(-45deg)}.vscomp-clear-icon:hover::before,.vscomp-clear-icon:hover::after{background:#333}.vscomp-clear-button{align-items:center;border-radius:50%;display:none;height:24px;justify-content:center;margin-top:-12px;position:absolute;right:30px;top:50%;width:24px}.vscomp-clear-button:hover{background:#ccc}.vscomp-clear-button:hover .vscomp-clear-icon::before,.vscomp-clear-button:hover .vscomp-clear-icon::after{background-color:#333}.vscomp-dropbox-close-button{align-items:center;background-color:#fff;border-radius:50%;bottom:-48px;cursor:pointer;display:none;height:40px;justify-content:center;left:50%;margin-left:-20px;position:absolute;width:40px}.vscomp-value-tag.more-value-count{white-space:nowrap}.vscomp-dropbox-container{width:100%;z-index:2}.vscomp-dropbox{background-color:#fff;width:100%}.vscomp-options-container{max-height:210px;overflow:auto;position:relative}.vscomp-options-bottom-freezer{bottom:0;height:2px;left:0;position:absolute;right:0}.vscomp-option{align-items:center;cursor:pointer;display:flex;flex-wrap:wrap;height:40px;padding:0 15px;position:relative}.vscomp-option.selected{background-color:#eee}.vscomp-option.focused{background-color:#ccc}.vscomp-option.disabled{cursor:default;opacity:.5}.vscomp-option.group-title .vscomp-option-text{cursor:default;opacity:.6}.vscomp-option.group-title.selected{background-color:rgba(0,0,0,0)}.vscomp-option.group-option{padding-left:30px}.vscomp-new-option-icon{height:30px;position:absolute;right:0;top:0;width:30px}.vscomp-new-option-icon::before{border:15px solid #512da8;border-bottom-color:rgba(0,0,0,0);border-left-color:rgba(0,0,0,0);content:\"\";position:absolute;right:0;top:0}.vscomp-new-option-icon::after{align-items:center;color:#fff;content:\"+\";display:flex;font-size:18px;height:15px;justify-content:center;position:absolute;right:1px;top:0;width:15px}.vscomp-option-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.vscomp-option-description{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#666;font-size:13px;line-height:15px;width:100%}.vscomp-search-container{align-items:center;border-bottom:1px solid #ddd;display:flex;height:40px;padding:0 5px 0 15px;position:relative}.vscomp-search-label,.vscomp-live-region{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.vscomp-search-input{background-color:rgba(0,0,0,0);border:0;color:inherit;font-size:15px;height:38px;padding:10px 0;width:calc(100% - 30px)}.vscomp-search-input:focus{outline:none}.vscomp-search-clear{align-items:center;color:#999;cursor:pointer;display:flex;font-size:25px;height:30px;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;visibility:hidden;width:30px}.vscomp-search-clear:hover{color:inherit}.vscomp-no-options,.vscomp-no-search-results{align-items:center;display:none;justify-content:center;padding:20px 10px}.vscomp-options-loader{display:none;padding:20px 0;text-align:center}.vscomp-options-loader::before{animation:vscomp-animation-spin .8s infinite linear;background-color:#fff;border-radius:50%;box-shadow:-4px -5px 3px -3px rgba(0,0,0,.3);content:\"\";display:inline-block;height:40px;opacity:.7;width:40px}.vscomp-ele[disabled]{cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vscomp-ele[disabled] .vscomp-wrapper{opacity:.7;pointer-events:none}.vscomp-wrapper .checkbox-icon{display:inline-flex;height:15px;margin-right:10px;position:relative;width:15px}.vscomp-wrapper .checkbox-icon::after{transition-duration:.2s;border:2px solid #888;content:\"\";display:inline-block;height:100%;width:100%}.vscomp-wrapper .checkbox-icon.checked::after{transform:rotate(45deg) translate(1px, -4px);border-color:#512da8;border-left-color:rgba(0,0,0,0);border-top-color:rgba(0,0,0,0);width:50%}.vscomp-wrapper.show-as-popup .vscomp-dropbox-container{align-items:center;background-color:rgba(0,0,0,.5);display:flex;height:100vh;justify-content:center;left:0;opacity:1;overflow:auto;padding:0 10px;position:fixed;top:0;width:100vw}.vscomp-wrapper.show-as-popup .vscomp-dropbox{margin-top:-24px;max-height:calc(80% - 48px);max-width:500px;position:relative;width:80%}.vscomp-wrapper.show-as-popup .vscomp-dropbox-close-button{display:flex}.vscomp-wrapper.popup-position-left .vscomp-dropbox-container{justify-content:flex-start}.vscomp-wrapper.popup-position-right .vscomp-dropbox-container{justify-content:flex-end}.vscomp-wrapper.has-select-all .vscomp-toggle-all-button{align-items:center;cursor:pointer;display:flex}.vscomp-wrapper.has-select-all .vscomp-search-input,.vscomp-wrapper.has-select-all .vscomp-toggle-all-label{width:calc(100% - 55px)}.vscomp-wrapper.has-select-all .vscomp-toggle-all-label{display:none}.vscomp-wrapper:not(.has-search-input) .vscomp-toggle-all-button{width:100%}.vscomp-wrapper:not(.has-search-input) .vscomp-toggle-all-label{display:inline-block}.vscomp-wrapper.multiple .vscomp-option .vscomp-option-text{width:calc(100% - 25px)}.vscomp-wrapper.multiple .vscomp-option .vscomp-option-description{padding-left:25px}.vscomp-wrapper.multiple .vscomp-option.selected .checkbox-icon::after{transform:rotate(45deg) translate(1px, -4px);border-color:#512da8;border-left-color:rgba(0,0,0,0);border-top-color:rgba(0,0,0,0);width:50%}.vscomp-wrapper.focused .vscomp-toggle-button,.vscomp-wrapper:focus .vscomp-toggle-button{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2)}.vscomp-wrapper.closed .vscomp-dropbox-container,.vscomp-wrapper.closed.vscomp-dropbox-wrapper{display:none}.vscomp-wrapper:not(.has-value) .vscomp-value{opacity:.5}.vscomp-wrapper.has-clear-button.has-value .vscomp-clear-button{display:flex}.vscomp-wrapper.has-clear-button .vscomp-toggle-button{padding-right:54px}.vscomp-wrapper.has-no-options .vscomp-options-container,.vscomp-wrapper.has-no-search-results .vscomp-options-container{display:none}.vscomp-wrapper.has-no-options .vscomp-no-options{display:flex}.vscomp-wrapper.has-no-search-results .vscomp-no-search-results{display:flex}.vscomp-wrapper.has-search-value .vscomp-search-clear{visibility:visible}.vscomp-wrapper.has-no-options .vscomp-toggle-all-button{opacity:.5;pointer-events:none}.vscomp-wrapper.keep-always-open .vscomp-toggle-button{padding-right:24px}.vscomp-wrapper.keep-always-open .vscomp-clear-button{right:5px}.vscomp-wrapper.keep-always-open .vscomp-arrow{display:none}.vscomp-wrapper.keep-always-open .vscomp-dropbox-container{position:relative;z-index:1}.vscomp-wrapper.keep-always-open .vscomp-dropbox{transition-duration:0s;border:1px solid #ddd;box-shadow:none}.vscomp-wrapper.keep-always-open.focused,.vscomp-wrapper.keep-always-open:focus,.vscomp-wrapper.keep-always-open:hover{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2)}.vscomp-wrapper.server-searching .vscomp-options-list{display:none}.vscomp-wrapper.server-searching .vscomp-options-loader{display:block}.vscomp-wrapper.has-error .vscomp-toggle-button{border-color:#b00020}.vscomp-wrapper.show-value-as-tags .vscomp-toggle-button{padding:4px 22px 0 10px}.vscomp-wrapper.show-value-as-tags .vscomp-value{display:flex;flex-wrap:wrap;height:auto;min-height:28px;overflow:auto;text-overflow:unset;white-space:normal}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-items:center;border:1px solid #ddd;border-radius:20px;display:inline-flex;font-size:12px;line-height:16px;margin:0 4px 4px 0;max-width:100%;padding:2px 3px 2px 8px}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag.more-value-count{padding-right:8px}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 20px)}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag-clear-button{align-items:center;display:flex;height:20px;justify-content:center;width:20px}.vscomp-wrapper.show-value-as-tags .vscomp-value-tag-clear-button .vscomp-clear-icon{transform:scale(0.8)}.vscomp-wrapper.show-value-as-tags .vscomp-arrow{height:34px}.vscomp-wrapper.show-value-as-tags .vscomp-clear-button{margin-top:0;top:5px}.vscomp-wrapper.show-value-as-tags.has-value .vscomp-arrow{display:none}.vscomp-wrapper.show-value-as-tags.has-value .vscomp-clear-button{right:2px}.vscomp-wrapper.show-value-as-tags:not(.has-value) .vscomp-toggle-button{padding-bottom:2px}.vscomp-wrapper.show-value-as-tags:not(.has-value) .vscomp-value{align-items:center;padding-bottom:3px}.vscomp-wrapper.text-direction-rtl{direction:rtl}.vscomp-wrapper.text-direction-rtl .vscomp-toggle-button{padding:7px 10px 7px 30px}.vscomp-wrapper.text-direction-rtl .vscomp-arrow{left:0;right:auto}.vscomp-wrapper.text-direction-rtl .vscomp-clear-button{left:30px;right:auto !important}.vscomp-wrapper.text-direction-rtl .checkbox-icon{margin-left:10px;margin-right:0}.vscomp-wrapper.text-direction-rtl .checkbox-icon.checked::after{transform:rotate(45deg) translate(-4px, 1px)}.vscomp-wrapper.text-direction-rtl .vscomp-search-container{padding:0 15px 0 5px}.vscomp-wrapper.text-direction-rtl .vscomp-toggle-all-label{text-align:right}.vscomp-wrapper.text-direction-rtl .vscomp-option{text-align:right}.vscomp-wrapper.text-direction-rtl .vscomp-option.group-option{padding-right:30px}.vscomp-wrapper.text-direction-rtl .vscomp-new-option-icon{left:0;right:auto}.vscomp-wrapper.text-direction-rtl .vscomp-new-option-icon::before{border-left-color:#512da8;border-right-color:rgba(0,0,0,0)}.vscomp-wrapper.text-direction-rtl .vscomp-new-option-icon::after{left:1px;right:auto}.vscomp-wrapper.text-direction-rtl.multiple .vscomp-option.selected .checkbox-icon::after{transform:rotate(45deg) translate(-4px, 1px)}.vscomp-wrapper.text-direction-rtl.has-clear-button .vscomp-toggle-button{padding-left:54px}.vscomp-wrapper.text-direction-rtl.keep-always-open .vscomp-toggle-button{padding-left:24px}.vscomp-wrapper.text-direction-rtl.keep-always-open .vscomp-clear-button{left:5px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags .vscomp-toggle-button{padding:4px 10px 0 22px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags .vscomp-value-tag{margin:0 0 4px 4px;padding:2px 8px 2px 3px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags .vscomp-value-tag.more-value-count{padding-left:8px}.vscomp-wrapper.text-direction-rtl.show-value-as-tags.has-value .vscomp-clear-button{left:2px}\n/*!\n * Popover v1.0.12\n * https://sa-si-dev.github.io/popover\n * Licensed under MIT (https://github.com/sa-si-dev/popover/blob/master/LICENSE)\n */\n.pop-comp-wrapper{display:none;position:absolute;top:0;left:0;opacity:0;color:#000;background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);text-align:left;flex-wrap:wrap;z-index:1}.pop-comp-arrow{position:absolute;z-index:1;width:16px;height:16px;overflow:hidden;pointer-events:none}.pop-comp-arrow::before{content:\"\";position:absolute;top:8px;left:8px;width:16px;height:16px;background-color:#fff;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);-webkit-transform-origin:left top;transform-origin:left top;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.pop-comp-content{position:relative;z-index:2}.pop-comp-wrapper.position-bottom>.pop-comp-arrow{margin-left:-8px;left:0;top:-15px}.pop-comp-wrapper.position-bottom>.pop-comp-arrow::before{box-shadow:0px 0px 2px 0 rgba(0,0,0,.14)}.pop-comp-wrapper.position-top>.pop-comp-arrow{margin-left:-8px;left:0;bottom:-15px}.pop-comp-wrapper.position-right>.pop-comp-arrow{margin-top:-8px;top:0;left:-15px}.pop-comp-wrapper.position-left>.pop-comp-arrow{margin-top:-8px;top:0;right:-15px}.pop-comp-disable-events{pointer-events:none}\n\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/api.js": +/*!*****************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/api.js ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function (cssWithMappingToString) { + var list = []; // return the list of modules as css string + + list.toString = function toString() { + return this.map(function (item) { + var content = ""; + var needLayer = typeof item[5] !== "undefined"; + + if (item[4]) { + content += "@supports (".concat(item[4], ") {"); + } + + if (item[2]) { + content += "@media ".concat(item[2], " {"); + } + + if (needLayer) { + content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); + } + + content += cssWithMappingToString(item); + + if (needLayer) { + content += "}"; + } + + if (item[2]) { + content += "}"; + } + + if (item[4]) { + content += "}"; + } + + return content; + }).join(""); + }; // import a list of modules into the list + + + list.i = function i(modules, media, dedupe, supports, layer) { + if (typeof modules === "string") { + modules = [[null, modules, undefined]]; + } + + var alreadyImportedModules = {}; + + if (dedupe) { + for (var k = 0; k < this.length; k++) { + var id = this[k][0]; + + if (id != null) { + alreadyImportedModules[id] = true; + } + } + } + + for (var _k = 0; _k < modules.length; _k++) { + var item = [].concat(modules[_k]); + + if (dedupe && alreadyImportedModules[item[0]]) { + continue; + } + + if (typeof layer !== "undefined") { + if (typeof item[5] === "undefined") { + item[5] = layer; + } else { + item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); + item[5] = layer; + } + } + + if (media) { + if (!item[2]) { + item[2] = media; + } else { + item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); + item[2] = media; + } + } + + if (supports) { + if (!item[4]) { + item[4] = "".concat(supports); + } else { + item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); + item[4] = supports; + } + } + + list.push(item); + } + }; + + return list; +}; + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js": +/*!************************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports = function (item) { + var content = item[1]; + var cssMapping = item[3]; + + if (!cssMapping) { + return content; + } + + if (typeof btoa === "function") { + var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); + var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); + var sourceMapping = "/*# ".concat(data, " */"); + var sourceURLs = cssMapping.sources.map(function (source) { + return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */"); + }); + return [content].concat(sourceURLs).concat([sourceMapping]).join("\n"); + } + + return [content].join("\n"); +}; + +/***/ }), + +/***/ "./node_modules/virtual-select-plugin/dist/virtual-select.min.css": +/*!************************************************************************!*\ + !*** ./node_modules/virtual-select-plugin/dist/virtual-select.min.css ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); +/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); +/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); +/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); +/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); +/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); +/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _css_loader_dist_cjs_js_virtual_select_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../css-loader/dist/cjs.js!./virtual-select.min.css */ "./node_modules/css-loader/dist/cjs.js!./node_modules/virtual-select-plugin/dist/virtual-select.min.css"); + + + + + + + + + + + +var options = {}; + +options.styleTagTransform = (_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); +options.setAttributes = (_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); + + options.insert = _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); + +options.domAPI = (_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); +options.insertStyleElement = (_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); + +var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_virtual_select_min_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); + + + + + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_virtual_select_min_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _css_loader_dist_cjs_js_virtual_select_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _css_loader_dist_cjs_js_virtual_select_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); + + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": +/*!****************************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! + \****************************************************************************/ +/***/ ((module) => { + +"use strict"; + + +var stylesInDOM = []; + +function getIndexByIdentifier(identifier) { + var result = -1; + + for (var i = 0; i < stylesInDOM.length; i++) { + if (stylesInDOM[i].identifier === identifier) { + result = i; + break; + } + } + + return result; +} + +function modulesToDom(list, options) { + var idCountMap = {}; + var identifiers = []; + + for (var i = 0; i < list.length; i++) { + var item = list[i]; + var id = options.base ? item[0] + options.base : item[0]; + var count = idCountMap[id] || 0; + var identifier = "".concat(id, " ").concat(count); + idCountMap[id] = count + 1; + var indexByIdentifier = getIndexByIdentifier(identifier); + var obj = { + css: item[1], + media: item[2], + sourceMap: item[3], + supports: item[4], + layer: item[5] + }; + + if (indexByIdentifier !== -1) { + stylesInDOM[indexByIdentifier].references++; + stylesInDOM[indexByIdentifier].updater(obj); + } else { + var updater = addElementStyle(obj, options); + options.byIndex = i; + stylesInDOM.splice(i, 0, { + identifier: identifier, + updater: updater, + references: 1 + }); + } + + identifiers.push(identifier); + } + + return identifiers; +} + +function addElementStyle(obj, options) { + var api = options.domAPI(options); + api.update(obj); + + var updater = function updater(newObj) { + if (newObj) { + if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) { + return; + } + + api.update(obj = newObj); + } else { + api.remove(); + } + }; + + return updater; +} + +module.exports = function (list, options) { + options = options || {}; + list = list || []; + var lastIdentifiers = modulesToDom(list, options); + return function update(newList) { + newList = newList || []; + + for (var i = 0; i < lastIdentifiers.length; i++) { + var identifier = lastIdentifiers[i]; + var index = getIndexByIdentifier(identifier); + stylesInDOM[index].references--; + } + + var newLastIdentifiers = modulesToDom(newList, options); + + for (var _i = 0; _i < lastIdentifiers.length; _i++) { + var _identifier = lastIdentifiers[_i]; + + var _index = getIndexByIdentifier(_identifier); + + if (stylesInDOM[_index].references === 0) { + stylesInDOM[_index].updater(); + + stylesInDOM.splice(_index, 1); + } + } + + lastIdentifiers = newLastIdentifiers; + }; +}; + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js": +/*!********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***! + \********************************************************************/ +/***/ ((module) => { + +"use strict"; + + +var memo = {}; +/* istanbul ignore next */ + +function getTarget(target) { + if (typeof memo[target] === "undefined") { + var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself + + if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { + try { + // This will throw an exception if access to iframe is blocked + // due to cross-origin restrictions + styleTarget = styleTarget.contentDocument.head; + } catch (e) { + // istanbul ignore next + styleTarget = null; + } + } + + memo[target] = styleTarget; + } + + return memo[target]; +} +/* istanbul ignore next */ + + +function insertBySelector(insert, style) { + var target = getTarget(insert); + + if (!target) { + throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); + } + + target.appendChild(style); +} + +module.exports = insertBySelector; + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js": +/*!**********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***! + \**********************************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* istanbul ignore next */ +function insertStyleElement(options) { + var element = document.createElement("style"); + options.setAttributes(element, options.attributes); + options.insert(element, options.options); + return element; +} + +module.exports = insertStyleElement; + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***! + \**********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +/* istanbul ignore next */ +function setAttributesWithoutAttributes(styleElement) { + var nonce = true ? __webpack_require__.nc : 0; + + if (nonce) { + styleElement.setAttribute("nonce", nonce); + } +} + +module.exports = setAttributesWithoutAttributes; + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js": +/*!***************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***! + \***************************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* istanbul ignore next */ +function apply(styleElement, options, obj) { + var css = ""; + + if (obj.supports) { + css += "@supports (".concat(obj.supports, ") {"); + } + + if (obj.media) { + css += "@media ".concat(obj.media, " {"); + } + + var needLayer = typeof obj.layer !== "undefined"; + + if (needLayer) { + css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {"); + } + + css += obj.css; + + if (needLayer) { + css += "}"; + } + + if (obj.media) { + css += "}"; + } + + if (obj.supports) { + css += "}"; + } + + var sourceMap = obj.sourceMap; + + if (sourceMap && typeof btoa !== "undefined") { + css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); + } // For old IE + + /* istanbul ignore if */ + + + options.styleTagTransform(css, styleElement, options.options); +} + +function removeStyleElement(styleElement) { + // istanbul ignore if + if (styleElement.parentNode === null) { + return false; + } + + styleElement.parentNode.removeChild(styleElement); +} +/* istanbul ignore next */ + + +function domAPI(options) { + var styleElement = options.insertStyleElement(options); + return { + update: function update(obj) { + apply(styleElement, options, obj); + }, + remove: function remove() { + removeStyleElement(styleElement); + } + }; +} + +module.exports = domAPI; + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js": +/*!*********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***! + \*********************************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* istanbul ignore next */ +function styleTagTransform(css, styleElement) { + if (styleElement.styleSheet) { + styleElement.styleSheet.cssText = css; + } else { + while (styleElement.firstChild) { + styleElement.removeChild(styleElement.firstChild); + } + + styleElement.appendChild(document.createTextNode(css)); + } +} + +module.exports = styleTagTransform; + +/***/ }), + +/***/ "./node_modules/virtual-select-plugin/dist/virtual-select.min.js": +/*!***********************************************************************!*\ + !*** ./node_modules/virtual-select-plugin/dist/virtual-select.min.js ***! + \***********************************************************************/ +/***/ (() => { + +/*! + * Virtual Select v1.0.39 + * https://sa-si-dev.github.io/virtual-select + * Licensed under MIT (https://github.com/sa-si-dev/virtual-select/blob/master/LICENSE) + */!function(){"use strict";function e(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,i){if(e){if("string"==typeof e)return t(e,i);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?t(e,i):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,o=new Array(t);i1&&void 0!==arguments[1]&&arguments[1];return!0===e||"true"===e||!1!==e&&"false"!==e&&t}},{key:"isEmpty",value:function(e){var t=!1;return e?Array.isArray(e)?0===e.length&&(t=!0):"object"===i(e)&&0===Object.keys(e).length&&(t=!0):t=!0,t}},{key:"isNotEmpty",value:function(e){return!this.isEmpty(e)}},{key:"removeItemFromArray",value:function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Array.isArray(t)||!t.length)return t;var s=o?e(t):t,n=s.indexOf(i);return-1!==n&&s.splice(n,1),s}},{key:"removeArrayEmpty",value:function(e){return Array.isArray(e)&&e.length?e.filter((function(e){return!!e})):[]}},{key:"getRandomInt",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),o=Math.floor(e);return Math.floor(Math.random()*(o-i-1))+i}},{key:"regexEscape",value:function(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}},{key:"normalizeString",value:function(e){return e.normalize("NFD").replace(/[^\w]/g,"")}}],(n=null)&&o(s.prototype,n),r&&o(s,r),Object.defineProperty(s,"prototype",{writable:!1}),t}();function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var i=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=i){var o,s,n,r,a=[],l=!0,u=!1;try{if(n=(i=i.call(e)).next,0===t){if(Object(i)!==i)return;l=!1}else for(;!(l=(o=n.call(i)).done)&&(a.push(o.value),a.length!==t);l=!0);}catch(e){u=!0,s=e}finally{try{if(!l&&null!=i.return&&(r=i.return(),Object(r)!==r))return}finally{if(u)throw s}}return a}}(e,t)||l(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e){return function(e){if(Array.isArray(e))return u(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){if(e){if("string"==typeof e)return u(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,o=new Array(t);ie.offsetWidth}},{key:"getData",value:function(e,t,i){if(e){var o=e?e.dataset[t]:"";return"number"===i?o=parseFloat(o)||0:"true"===o?o=!0:"false"===o&&(o=!1),o}}},{key:"setData",value:function(e,t,i){e&&(e.dataset[t]=i)}},{key:"setAttr",value:function(e,t,i){e&&e.setAttribute(t,i)}},{key:"setAttrFromEle",value:function(e,t,i,o){var s={};i.forEach((function(t){s[t]=e.getAttribute(t)})),i.forEach((function(e){var i=s[e];(i||-1!==o.indexOf(e)&&""===i)&&t.setAttribute(e,i)}))}},{key:"setStyle",value:function(e,t,i){e&&(e.style[t]=i)}},{key:"setStyles",value:function(e,t){e&&t&&Object.keys(t).forEach((function(i){e.style[i]=t[i]}))}},{key:"setAria",value:function(e,t,i){var o=t;"role"!==o&&(o="aria-".concat(o)),e.setAttribute(o,i)}},{key:"getElements",value:function(e){return e?void 0===e.forEach?[e]:e:[]}},{key:"addEvent",value:function(t,i,o){t&&s.removeArrayEmpty(i.split(" ")).forEach((function(i){e.getElements(t).forEach((function(e){e.addEventListener(i,o)}))}))}},{key:"dispatchEvent",value:function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t){var s=e.getElements(t);setTimeout((function(){s.forEach((function(e){e.dispatchEvent(new CustomEvent(i,{bubbles:o}))}))}),0)}}},{key:"getAttributesText",value:function(e){var t="";return e?(Object.entries(e).forEach((function(e){var i=r(e,2),o=i[0],s=i[1];void 0!==s&&(t+=" ".concat(o,'="').concat(s,'" '))})),t):t}},{key:"convertPropToDataAttr",value:function(e){return e?"data-".concat(e).replace(/([A-Z])/g,"-$1").toLowerCase():""}},{key:"changeTabIndex",value:function(t,i){t?e.getElements(t).forEach((function(e){e.tabIndex=i})):console.log(t,"Invalid element provided.")}}],(i=null)&&p(t.prototype,i),o&&p(t,o),Object.defineProperty(t,"prototype",{writable:!1}),e}();function h(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,o)}return i}function d(e){for(var t=1;te.length)&&(t=e.length);for(var i=0,o=new Array(t);i\n \n\n
\n
\n ").concat(this.placeholder,'\n
\n\n
\n\n
\n \n
\n
\n\n
\n

\n
\n\n ').concat(this.renderDropbox({wrapperClasses:t}),"\n ");this.$ele.innerHTML=a,this.$body=document.querySelector("body"),this.$wrapper=this.$ele.querySelector(".vscomp-wrapper"),this.$ariaLiveElem=this.$ele.querySelector(".vscomp-live-region-title"),this.hasDropboxWrapper?(this.$allWrappers=[this.$wrapper,this.$dropboxWrapper],this.$dropboxContainer=this.$dropboxWrapper.querySelector(".vscomp-dropbox-container"),c.addClass(this.$dropboxContainer,"pop-comp-wrapper")):(this.$allWrappers=[this.$wrapper],this.$dropboxContainer=this.$wrapper.querySelector(".vscomp-dropbox-container")),this.$toggleButton=this.$ele.querySelector(".vscomp-toggle-button"),this.$clearButton=this.$ele.querySelector(".vscomp-clear-button"),this.$valueText=this.$ele.querySelector(".vscomp-value"),this.$hiddenInput=this.$ele.querySelector(".vscomp-hidden-input"),this.$dropbox=this.$dropboxContainer.querySelector(".vscomp-dropbox"),this.$dropboxCloseButton=this.$dropboxContainer.querySelector(".vscomp-dropbox-close-button"),this.$search=this.$dropboxContainer.querySelector(".vscomp-search-wrapper"),this.$optionsContainer=this.$dropboxContainer.querySelector(".vscomp-options-container"),this.$optionsList=this.$dropboxContainer.querySelector(".vscomp-options-list"),this.$options=this.$dropboxContainer.querySelector(".vscomp-options"),this.$noOptions=this.$dropboxContainer.querySelector(".vscomp-no-options"),this.$noSearchResults=this.$dropboxContainer.querySelector(".vscomp-no-search-results"),this.afterRenderWrapper()}}},{key:"renderDropbox",value:function(e){var t=e.wrapperClasses,i="self"!==this.dropboxWrapper?document.querySelector(this.dropboxWrapper):null,o='
\n
\n
\n\n
\n
\n\n
\n
\n
\n
\n\n
\n
').concat(this.noOptionsText,'
\n
').concat(this.noSearchResultsText,'
\n\n \n
\n
\n');if(i){var s=document.createElement("div");return this.$dropboxWrapper=s,this.hasDropboxWrapper=!0,s.innerHTML=o,i.appendChild(s),c.addClass(s,"vscomp-dropbox-wrapper ".concat(t)),""}return this.hasDropboxWrapper=!1,o}},{key:"renderOptions",value:function(){var e,t=this,i="",o=this.getVisibleOptions(),n="",r="",a=!(!this.markSearchResults||!this.searchValue),l=this.labelRenderer,u=this.disableOptionGroupCheckbox,p=this.uniqueId,c=this.searchGroup,h="function"==typeof l,d=s.convertToBoolean;if(a&&(e=new RegExp("(".concat(s.regexEscape(this.searchValue),")(?!([^<]+)?>)"),"gi")),this.multiple&&(n=''),this.allowNewOption){var v=this.getTooltipAttrText("New Option");r='")}o.forEach((function(o){var s,v=o.index,f="vscomp-option",y=t.getTooltipAttrText("",!0,!0),b=n,m="",g="",O="",S=d(o.isSelected),x="";o.classNames&&(f+=" ".concat(o.classNames)),o.isFocused&&(f+=" focused"),o.isDisabled&&(f+=" disabled",x='aria-disabled="true"'),o.isGroupTitle&&(f+=" group-title",u&&(b="")),S&&(f+=" selected"),o.isGroupOption&&(f+=" group-option",O='data-group-index="'.concat(o.groupIndex,'"')),s=h?l(o):o.label,o.description&&(g='
").concat(o.description,"
")),o.isCurrentNew?(f+=" current-new",m+=r):!a||o.isGroupTitle&&!c||(s=s.replace(e,"$1")),i+='
\n ").concat(b,'\n \n ").concat(s,"\n \n ").concat(g,"\n ").concat(m,"\n
")})),this.$options.innerHTML=i,this.$visibleOptions=this.$options.querySelectorAll(".vscomp-option"),this.afterRenderOptions()}},{key:"renderSearch",value:function(){if(this.hasSearchContainer){var e="",t="";this.multiple&&!this.disableSelectAll&&(e='\n \n '.concat(this.selectAllText,"\n ")),this.hasSearch&&(t='\n \n ×'));var i='
\n '.concat(e,"\n ").concat(t,"\n
");this.$search.innerHTML=i,this.$searchInput=this.$dropboxContainer.querySelector(".vscomp-search-input"),this.$searchClear=this.$dropboxContainer.querySelector(".vscomp-search-clear"),this.$toggleAllButton=this.$dropboxContainer.querySelector(".vscomp-toggle-all-button"),this.$toggleAllCheckbox=this.$dropboxContainer.querySelector(".vscomp-toggle-all-checkbox"),this.addEvent(this.$searchInput,"input","onSearch"),this.addEvent(this.$searchClear,"click","onSearchClear"),this.addEvent(this.$toggleAllButton,"click","onToggleAllOptions")}}},{key:"addEvents",value:function(){this.addEvent(document,"click","onDocumentClick"),this.addEvent(this.$allWrappers,"keydown","onKeyDown"),this.addEvent(this.$toggleButton,"click","onToggleButtonClick"),this.addEvent(this.$clearButton,"click","onClearButtonClick"),this.addEvent(this.$dropboxContainer,"click","onDropboxContainerClick"),this.addEvent(this.$dropboxCloseButton,"click","onDropboxCloseButtonClick"),this.addEvent(this.$optionsContainer,"scroll","onOptionsScroll"),this.addEvent(this.$options,"click","onOptionsClick"),this.addEvent(this.$options,"mouseover","onOptionsMouseOver"),this.addEvent(this.$options,"touchmove","onOptionsTouchMove"),this.addMutationObserver()}},{key:"addEvent",value:function(e,t,i){var o=this;e&&s.removeArrayEmpty(t.split(" ")).forEach((function(t){var s="".concat(i,"-").concat(t),n=o.events[s];n||(n=o[i].bind(o),o.events[s]=n),c.addEvent(e,t,n)}))}},{key:"onDocumentClick",value:function(e){var t=e.target.closest(".vscomp-wrapper");t!==this.$wrapper&&t!==this.$dropboxWrapper&&this.isOpened()&&this.closeDropbox()}},{key:"onKeyDown",value:function(e){var t=e.which||e.keyCode,i=w[t];document.activeElement===this.$searchInput&&(9===t||e.shiftKey&&9===t)?this.closeDropbox():document.activeElement!==this.$wrapper||27!==t&&"Escape"!==e.key||!this.showAsPopup?i&&this[i](e):this.closeDropbox()}},{key:"onEnterPress",value:function(e){e.preventDefault(),this.isOpened()?this.selectFocusedOption():this.openDropbox()}},{key:"onDownArrowPress",value:function(e){e.preventDefault(),this.isOpened()?this.focusOption({direction:"next"}):this.openDropbox()}},{key:"onUpArrowPress",value:function(e){e.preventDefault(),this.isOpened()?this.focusOption({direction:"previous"}):this.openDropbox()}},{key:"onToggleButtonClick",value:function(e){var t=e.target;t.closest(".vscomp-value-tag-clear-button")?this.removeValue(t.closest(".vscomp-value-tag")):t.closest(".toggle-button-child")||this.toggleDropbox()}},{key:"onClearButtonClick",value:function(){this.reset()}},{key:"onOptionsScroll",value:function(){this.setVisibleOptions()}},{key:"onOptionsClick",value:function(e){var t=e.target.closest(".vscomp-option");t&&!c.hasClass(t,"disabled")&&(c.hasClass(t,"group-title")?this.onGroupTitleClick(t):this.selectOption(t,{event:e}))}},{key:"onGroupTitleClick",value:function(e){if(e&&this.multiple&&!this.disableOptionGroupCheckbox){var t=!c.hasClass(e,"selected");this.toggleGroupTitleCheckbox(e,t),this.toggleGroupOptions(e,t)}}},{key:"onDropboxContainerClick",value:function(e){e.target.closest(".vscomp-dropbox")||this.closeDropbox()}},{key:"onDropboxCloseButtonClick",value:function(){this.closeDropbox()}},{key:"onOptionsMouseOver",value:function(e){var t=e.target.closest(".vscomp-option");t&&this.isOpened()&&(c.hasClass(t,"disabled")||c.hasClass(t,"group-title")?this.removeOptionFocus():this.focusOption({$option:t}))}},{key:"onOptionsTouchMove",value:function(){this.removeOptionFocus()}},{key:"onSearch",value:function(e){e.stopPropagation(),this.setSearchValue(e.target.value,!0)}},{key:"onSearchClear",value:function(){this.setSearchValue(""),this.focusSearchInput()}},{key:"onToggleAllOptions",value:function(){this.toggleAllOptions()}},{key:"onResize",value:function(){this.setOptionsContainerHeight(!0)}},{key:"addMutationObserver",value:function(){var e=this;if(this.hasDropboxWrapper){var t=this.$ele;this.mutationObserver=new MutationObserver((function(i){var o=!1,s=!1;i.forEach((function(e){o||(o=b(e.addedNodes).some((function(e){return!(e!==t&&!e.contains(t))}))),s||(s=b(e.removedNodes).some((function(e){return!(e!==t&&!e.contains(t))})))})),s&&!o&&e.destroy()})),this.mutationObserver.observe(document.querySelector("body"),{childList:!0,subtree:!0})}}},{key:"beforeValueSet",value:function(e){this.toggleAllOptionsClass(!e&&void 0)}},{key:"beforeSelectNewValue",value:function(){var e=this,t=this.getNewOption(),i=t.index;this.newValues.push(t.value),this.setOptionProp(i,"isCurrentNew",!1),this.setOptionProp(i,"isNew",!0),setTimeout((function(){e.setSearchValue(""),e.focusSearchInput()}),0)}},{key:"afterRenderWrapper",value:function(){c.addClass(this.$ele,"vscomp-ele"),this.renderSearch(),this.setEleStyles(),this.setDropboxStyles(),this.setOptionsHeight(),this.setVisibleOptions(),this.setOptionsContainerHeight(),this.addEvents(),this.setEleProps(),this.keepAlwaysOpen||this.showAsPopup||this.initDropboxPopover(),this.initialSelectedValue?this.setValueMethod(this.initialSelectedValue,this.silentInitialValueSet):this.autoSelectFirstOption&&this.visibleOptions.length&&this.setValueMethod(this.visibleOptions[0].value,this.silentInitialValueSet),this.showOptionsOnlyOnSearch&&this.setSearchValue("",!1,!0),this.initialDisabled&&this.disable(),this.autofocus&&this.focus()}},{key:"afterRenderOptions",value:function(){var e=this.getVisibleOptions(),t=!this.options.length&&!this.hasServerSearch,i=!t&&!e.length;(!this.allowNewOption||this.hasServerSearch||this.showOptionsOnlyOnSearch)&&c.toggleClass(this.$allWrappers,"has-no-search-results",i),c.toggleClass(this.$allWrappers,"has-no-options",t),this.setOptionAttr(),this.setOptionsPosition(),this.setOptionsTooltip()}},{key:"afterSetOptionsContainerHeight",value:function(e){e&&this.showAsPopup&&this.setVisibleOptions()}},{key:"afterSetSearchValue",value:function(){var e=this;this.hasServerSearch?(clearInterval(this.serverSearchTimeout),this.serverSearchTimeout=setTimeout((function(){e.serverSearch()}),this.searchDelay)):this.setVisibleOptionsCount(),this.selectAllOnlyVisible&&this.toggleAllOptionsClass(),this.focusOption({focusFirst:!0})}},{key:"afterSetVisibleOptionsCount",value:function(){this.scrollToTop(),this.setOptionsHeight(),this.setVisibleOptions(),this.updatePosition()}},{key:"afterValueSet",value:function(){this.scrollToTop(),this.setSearchValue(""),this.renderOptions()}},{key:"afterSetOptions",value:function(e){e&&this.setSelectedProp(),this.setOptionsHeight(),this.setVisibleOptions(),this.showOptionsOnlyOnSearch&&this.setSearchValue("",!1,!0),e||this.reset()}},{key:"setProps",value:function(e){var t=this.setDefaultProps(e);this.setPropsFromElementAttr(t);var i=s.convertToBoolean;this.$ele=t.ele,this.dropboxWrapper=t.dropboxWrapper,this.valueKey=t.valueKey,this.labelKey=t.labelKey,this.descriptionKey=t.descriptionKey,this.aliasKey=t.aliasKey,this.optionHeightText=t.optionHeight,this.optionHeight=parseFloat(this.optionHeightText),this.multiple=i(t.multiple),this.hasSearch=i(t.search),this.searchByStartsWith=i(t.searchByStartsWith),this.searchGroup=i(t.searchGroup),this.hideClearButton=i(t.hideClearButton),this.autoSelectFirstOption=i(t.autoSelectFirstOption),this.hasOptionDescription=i(t.hasOptionDescription),this.silentInitialValueSet=i(t.silentInitialValueSet),this.allowNewOption=i(t.allowNewOption),this.markSearchResults=i(t.markSearchResults),this.showSelectedOptionsFirst=i(t.showSelectedOptionsFirst),this.disableSelectAll=i(t.disableSelectAll),this.keepAlwaysOpen=i(t.keepAlwaysOpen),this.showDropboxAsPopup=i(t.showDropboxAsPopup),this.hideValueTooltipOnSelectAll=i(t.hideValueTooltipOnSelectAll),this.showOptionsOnlyOnSearch=i(t.showOptionsOnlyOnSearch),this.selectAllOnlyVisible=i(t.selectAllOnlyVisible),this.alwaysShowSelectedOptionsCount=i(t.alwaysShowSelectedOptionsCount),this.alwaysShowSelectedOptionsLabel=i(t.alwaysShowSelectedOptionsLabel),this.disableAllOptionsSelectedText=i(t.disableAllOptionsSelectedText),this.showValueAsTags=i(t.showValueAsTags),this.disableOptionGroupCheckbox=i(t.disableOptionGroupCheckbox),this.enableSecureText=i(t.enableSecureText),this.setValueAsArray=i(t.setValueAsArray),this.disableValidation=i(t.disableValidation),this.initialDisabled=i(t.disabled),this.required=i(t.required),this.autofocus=i(t.autofocus),this.useGroupValue=i(t.useGroupValue),this.focusSelectedOptionOnOpen=i(t.focusSelectedOptionOnOpen),this.noOptionsText=t.noOptionsText,this.noSearchResultsText=t.noSearchResultsText,this.selectAllText=t.selectAllText,this.searchNormalize=t.searchNormalize,this.searchPlaceholderText=t.searchPlaceholderText,this.searchFormLabel=t.searchFormLabel,this.optionsSelectedText=t.optionsSelectedText,this.optionSelectedText=t.optionSelectedText,this.allOptionsSelectedText=t.allOptionsSelectedText,this.clearButtonText=t.clearButtonText,this.moreText=t.moreText,this.placeholder=t.placeholder,this.position=t.position,this.textDirection=t.textDirection,this.dropboxWidth=t.dropboxWidth,this.tooltipFontSize=t.tooltipFontSize,this.tooltipAlignment=t.tooltipAlignment,this.tooltipMaxWidth=t.tooltipMaxWidth,this.updatePositionThrottle=t.updatePositionThrottle,this.noOfDisplayValues=parseInt(t.noOfDisplayValues),this.zIndex=parseInt(t.zIndex),this.maxValues=parseInt(t.maxValues),this.minValues=parseInt(t.minValues),this.name=this.secureText(t.name),this.additionalClasses=t.additionalClasses,this.popupDropboxBreakpoint=t.popupDropboxBreakpoint,this.popupPosition=t.popupPosition,this.onServerSearch=t.onServerSearch,this.labelRenderer=t.labelRenderer,this.initialSelectedValue=0===t.selectedValue?"0":t.selectedValue,this.emptyValue=t.emptyValue,this.ariaLabelledby=t.ariaLabelledby,this.ariaLabelText=t.ariaLabelText,this.maxWidth=t.maxWidth,this.searchDelay=t.searchDelay,this.selectedValues=[],this.selectedOptions=[],this.newValues=[],this.events={},this.tooltipEnterDelay=200,this.searchValue="",this.searchValueOriginal="",this.isAllSelected=!1,(void 0===t.search&&this.multiple||this.allowNewOption||this.showOptionsOnlyOnSearch)&&(this.hasSearch=!0),this.hasServerSearch="function"==typeof this.onServerSearch,(this.maxValues||this.hasServerSearch||this.showOptionsOnlyOnSearch)&&(this.disableSelectAll=!0,this.disableOptionGroupCheckbox=!0),this.keepAlwaysOpen&&(this.dropboxWrapper="self"),this.showAsPopup=this.showDropboxAsPopup&&!this.keepAlwaysOpen&&window.innerWidth<=parseFloat(this.popupDropboxBreakpoint),this.hasSearchContainer=this.hasSearch||this.multiple&&!this.disableSelectAll,this.optionsCount=this.getOptionsCount(t.optionsCount),this.halfOptionsCount=Math.ceil(this.optionsCount/2),this.optionsHeight=this.getOptionsHeight(),this.uniqueId=this.getUniqueId()}},{key:"setDefaultProps",value:function(e){var t={dropboxWrapper:"self",valueKey:"value",labelKey:"label",descriptionKey:"description",aliasKey:"alias",ariaLabelText:"Options list",optionsCount:5,noOfDisplayValues:50,optionHeight:"40px",noOptionsText:"No options found",noSearchResultsText:"No results found",selectAllText:"Select All",searchNormalize:!1,searchPlaceholderText:"Search...",searchFormLabel:"Search",clearButtonText:"Clear",moreText:"more...",optionsSelectedText:"options selected",optionSelectedText:"option selected",allOptionsSelectedText:"All",placeholder:"Select",position:"bottom left",zIndex:e.keepAlwaysOpen?1:2,tooltipFontSize:"14px",tooltipAlignment:"center",tooltipMaxWidth:"300px",updatePositionThrottle:100,name:"",additionalClasses:"",maxValues:0,showDropboxAsPopup:!0,popupDropboxBreakpoint:"576px",popupPosition:"center",hideValueTooltipOnSelectAll:!0,emptyValue:"",searchDelay:300,focusSelectedOptionOnOpen:!0};return e.hasOptionDescription&&(t.optionsCount=4,t.optionHeight="50px"),Object.assign(t,e)}},{key:"setPropsFromElementAttr",value:function(e){var t=e.ele;Object.keys(x).forEach((function(i){var o=t.getAttribute(i);-1===k.indexOf(i)||""!==o&&"true"!==o||(o=!0),o&&(e[x[i]]=o)}))}},{key:"setEleProps",value:function(){var t=this.$ele;t.virtualSelect=this,t.value=this.multiple?[]:"",t.name=this.name,t.disabled=!1,t.required=this.required,t.autofocus=this.autofocus,t.multiple=this.multiple,t.form=t.closest("form"),t.reset=e.reset,t.setValue=e.setValueMethod,t.setOptions=e.setOptionsMethod,t.setDisabledOptions=e.setDisabledOptionsMethod,t.setEnabledOptions=e.setEnabledOptionsMethod,t.toggleSelectAll=e.toggleSelectAll,t.isAllSelected=e.isAllSelected,t.addOption=e.addOptionMethod,t.getNewValue=e.getNewValueMethod,t.getDisplayValue=e.getDisplayValueMethod,t.getSelectedOptions=e.getSelectedOptionsMethod,t.getDisabledOptions=e.getDisabledOptionsMethod,t.open=e.openMethod,t.close=e.closeMethod,t.focus=e.focusMethod,t.enable=e.enableMethod,t.disable=e.disableMethod,t.destroy=e.destroyMethod,t.validate=e.validateMethod,t.toggleRequired=e.toggleRequiredMethod,this.hasDropboxWrapper&&(this.$dropboxWrapper.virtualSelect=this)}},{key:"setValueMethod",value:function(e,t){var i={},o={},s=[],n=this.multiple,r=e;if(r){if(Array.isArray(r)||(r=[r]),n){var a=this.maxValues;a&&r.length>a&&r.splice(a)}else r.length>1&&(r=[r[0]]);r=r.map((function(e){return e||0===e?e.toString():""})),this.useGroupValue&&(r=this.setGroupOptionsValue(r)),r.forEach((function(e,t){i[e]=!0,o[e]=t})),this.allowNewOption&&r&&this.setNewOptionsFromValue(r)}if(this.options.forEach((function(e){!0!==i[e.value]||e.isDisabled||e.isGroupTitle?e.isSelected=!1:(e.isSelected=!0,s.push(e.value))})),n)this.hasOptionGroup&&this.setGroupsSelectedProp(),s.sort((function(e,t){return o[e]-o[t]}));else{var l=y(s,1);s=l[0]}this.beforeValueSet(),this.setValue(s,{disableEvent:t}),this.afterValueSet()}},{key:"setGroupOptionsValue",value:function(e){var t=[],i={},o={};return e.forEach((function(e){o[e]=!0})),this.options.forEach((function(e){var s=e.value,n=!0===o[s];e.isGroupTitle?n&&(i[e.index]=!0):(n||i[e.groupIndex])&&t.push(s)})),t}},{key:"setGroupsSelectedProp",value:function(){var e=this.isAllGroupOptionsSelected.bind(this);this.options.forEach((function(t){t.isGroupTitle&&(t.isSelected=e(t.index))}))}},{key:"setOptionsMethod",value:function(e,t){this.setOptions(e),this.afterSetOptions(t)}},{key:"setDisabledOptionsMethod",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.setDisabledOptions(e,!0),t||(this.setValueMethod(null),this.toggleAllOptionsClass()),this.setVisibleOptions()}},{key:"setDisabledOptions",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=[];if(e)if(!0===e)t&&this.options.forEach((function(e){return e.isDisabled=!0,i.push(e.value),e}));else{i=e.map((function(e){return e.toString()}));var o={};i.forEach((function(e){o[e]=!0})),t&&this.options.forEach((function(e){return e.isDisabled=!0===o[e.value],e}))}else t&&this.options.forEach((function(e){return e.isDisabled=!1,e}));this.disabledOptions=i}},{key:"setEnabledOptionsMethod",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.setEnabledOptions(e),t||(this.setValueMethod(null),this.toggleAllOptionsClass()),this.setVisibleOptions()}},{key:"setEnabledOptions",value:function(e){if(void 0!==e){var t=[];if(!0===e)this.options.forEach((function(e){return e.isDisabled=!1,e}));else{var i={};e.forEach((function(e){i[e]=!0})),this.options.forEach((function(e){var o=!0!==i[e.value];return e.isDisabled=o,o&&t.push(e.value),e}))}this.disabledOptions=t}}},{key:"setOptions",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],i=[],o=this.disabledOptions.length,n=this.valueKey,r=this.labelKey,a=this.descriptionKey,l=this.aliasKey,u=this.hasOptionDescription,p=s.getString,c=s.convertToBoolean,h=this.secureText.bind(this),d=this.getAlias.bind(this),y=0,b=!1,m={},g=!1;this.disabledOptions.forEach((function(e){m[e]=!0}));var O=function t(O){var S;"object"!==f(O)&&(v(S={},n,O),v(S,r,O),O=S);var x=h(p(O[n])),w=h(p(O[r])),k=O.options,E=!!k,C={index:y,value:x,label:w,labelNormalized:e.searchNormalize?s.normalizeString(w).toLowerCase():w.toLowerCase(),alias:d(O[l]),isVisible:c(O.isVisible,!0),isNew:O.isNew||!1,isGroupTitle:E,classNames:O.classNames};if(g||""!==x||(g=!0),o&&(C.isDisabled=!0===m[x]),O.isGroupOption&&(C.isGroupOption=!0,C.groupIndex=O.groupIndex),u&&(C.description=h(p(O[a]))),O.customData&&(C.customData=O.customData),i.push(C),y+=1,E){var A=C.index;b=!0,k.forEach((function(e){e.isGroupOption=!0,e.groupIndex=A,t(e)}))}};Array.isArray(t)&&t.forEach(O);var S=i.length,x=this.$ele;x.options=i,x.length=S,this.options=i,this.visibleOptionsCount=S,this.lastOptionIndex=S-1,this.newValues=[],this.hasOptionGroup=b,this.hasEmptyValueOption=g,this.setSortedOptions()}},{key:"setServerOptions",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.setOptionsMethod(t,!0);var i=this.selectedOptions,o=this.options,s=!1;if(i.length){var n={};s=!0,o.forEach((function(e){n[e.value]=!0})),i.forEach((function(e){!0!==n[e.value]&&(e.isVisible=!1,o.push(e))})),this.setOptionsMethod(o,!0)}if(this.allowNewOption&&this.searchValue){var r=o.some((function(t){return t.label.toLowerCase()===e.searchValue}));r||(s=!0,this.setNewOption())}s?(this.setVisibleOptionsCount(),this.multiple&&this.toggleAllOptionsClass(),this.setValueText()):this.updatePosition(),c.removeClass(this.$allWrappers,"server-searching")}},{key:"setSelectedOptions",value:function(){this.selectedOptions=this.options.filter((function(e){return e.isSelected}))}},{key:"setSortedOptions",value:function(){var e=b(this.options);this.showSelectedOptionsFirst&&this.selectedValues.length&&(e=this.hasOptionGroup?this.sortOptionsGroup(e):this.sortOptions(e)),this.sortedOptions=e}},{key:"setVisibleOptions",value:function(){var e=b(this.sortedOptions),t=2*this.optionsCount,i=this.getVisibleStartIndex(),o=this.getNewOption(),s=i+t-1,n=0;o&&(o.visibleIndex=n,n+=1),e=e.filter((function(e){var t=!1;return e.isVisible&&!e.isCurrentNew&&(t=n>=i&&n<=s,e.visibleIndex=n,n+=1),t})),o&&(e=[o].concat(b(e))),this.visibleOptions=e,this.renderOptions()}},{key:"setOptionsPosition",value:function(e){var t=(e||this.getVisibleStartIndex())*this.optionHeight;this.$options.style.transform="translate3d(0, ".concat(t,"px, 0)"),c.setData(this.$options,"top",t)}},{key:"setOptionsTooltip",value:function(){var e=this,t=this.getVisibleOptions(),i=this.hasOptionDescription;t.forEach((function(t){var o=e.$dropboxContainer.querySelector('.vscomp-option[data-index="'.concat(t.index,'"]'));c.setData(o.querySelector(".vscomp-option-text"),"tooltip",t.label),i&&c.setData(o.querySelector(".vscomp-option-description"),"tooltip",t.description)}))}},{key:"setValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.disableEvent,o=void 0!==i&&i,n=t.disableValidation,r=void 0!==n&&n,a=this.hasEmptyValueOption&&""===e||e;a?Array.isArray(e)?this.selectedValues=b(e):this.selectedValues=[e]:this.selectedValues=[];var l=this.getValue();this.$ele.value=l,this.$hiddenInput.value=this.getInputValue(l),this.isMaxValuesSelected=!!(this.maxValues&&this.maxValues<=this.selectedValues.length),this.toggleAllOptionsClass(),this.setValueText(),c.toggleClass(this.$allWrappers,"has-value",s.isNotEmpty(this.selectedValues)),c.toggleClass(this.$allWrappers,"max-value-selected",this.isMaxValuesSelected),r||this.validate(),o||c.dispatchEvent(this.$ele,"change",!0)}},{key:"setValueText",value:function(){var e=this.multiple,t=this.selectedValues,i=this.noOfDisplayValues,o=this.showValueAsTags,s=this.$valueText,n=[],r=[],a=t.length,l=0,u=this.isAllSelected&&!this.hasServerSearch&&!this.disableAllOptionsSelectedText&&!o;if(u&&this.hideValueTooltipOnSelectAll)s.innerHTML="".concat(this.allOptionsSelectedText," (").concat(a,")");else{this.getSelectedOptions({fullDetails:!0,keepSelectionOrder:!0}).some((function(e){if(e.isCurrentNew)return!1;if(l>=i)return!0;var t=e.label;if(n.push(t),l+=1,o){var s='\n ').concat(t,'\n \n \n \n ');r.push(s)}else r.push(t);return!1}));var p=a-i;p>0&&r.push('+ '.concat(p," ").concat(this.moreText,""));var h=n.join(", ");if(""===h)s.innerHTML=this.placeholder;else if(s.innerHTML=h,e){var d=this.maxValues;if(this.alwaysShowSelectedOptionsCount||c.hasEllipsis(s)||d||o){var v=''.concat(a,"");if(d&&(v+=' / '.concat(d,"")),u)s.innerHTML="".concat(this.allOptionsSelectedText," (").concat(a,")");else if(o)s.innerHTML=r.join(""),this.$valueTags=s.querySelectorAll(".vscomp-value-tag"),this.setValueTagAttr();else if(!this.alwaysShowSelectedOptionsLabel){var f=1===a?this.optionSelectedText:this.optionsSelectedText;s.innerHTML="".concat(v," ").concat(f)}}else r=[]}}var y="";0===a?y=this.placeholder:o||(y=r.join(", ")),c.setData(s,"tooltip",y),e&&(c.setData(s,"tooltipEllipsisOnly",0===a),o&&this.updatePosition())}},{key:"setSearchValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(e!==this.searchValueOriginal||i){t||(this.$searchInput.value=e);var o=e.replace(/\\/g,"").toLowerCase().trim();this.searchValue=o,this.searchValueOriginal=e,c.toggleClass(this.$allWrappers,"has-search-value",e),this.afterSetSearchValue()}}},{key:"setVisibleOptionsCount",value:function(){var e,t=0,i=!1,o=this.searchGroup,n=this.showOptionsOnlyOnSearch,r=this.searchByStartsWith,a=this.searchValue;a=this.searchNormalize?s.normalizeString(a):a;var l=this.isOptionVisible.bind(this);this.hasOptionGroup&&(e=this.getVisibleOptionGroupsMapping(a)),this.options.forEach((function(s){var u;s.isCurrentNew||(n&&!a?(s.isVisible=!1,u={isVisible:!1,hasExactOption:!1}):u=l({data:s,searchValue:a,hasExactOption:i,visibleOptionGroupsMapping:e,searchGroup:o,searchByStartsWith:r}),u.isVisible&&(t+=1),i||(i=u.hasExactOption))})),this.allowNewOption&&(a&&!i?(this.setNewOption(),t+=1):this.removeNewOption()),this.visibleOptionsCount=t,this.afterSetVisibleOptionsCount()}},{key:"setOptionProp",value:function(e,t,i){this.options[e]&&(this.options[e][t]=i)}},{key:"setOptionsHeight",value:function(){this.$optionsList.style.height="".concat(this.optionHeight*this.visibleOptionsCount,"px")}},{key:"setOptionsContainerHeight",value:function(e){var t;e?this.showAsPopup&&(this.optionsCount=this.getOptionsCount(),this.halfOptionsCount=Math.ceil(this.optionsCount/2),t=this.getOptionsHeight(),this.optionsHeight=t):(t=this.optionsHeight,this.keepAlwaysOpen&&(c.setStyle(this.$noOptions,"height",t),c.setStyle(this.$noSearchResults,"height",t))),c.setStyle(this.$optionsContainer,"max-height",t),this.afterSetOptionsContainerHeight(e)}},{key:"setNewOption",value:function(e){var t=e||this.searchValueOriginal.trim();if(t){var i=this.getNewOption();if(i){var o=i.index;this.setOptionProp(o,"value",this.secureText(t)),this.setOptionProp(o,"label",this.secureText(t))}else{var s={value:t,label:t};e?(s.isNew=!0,this.newValues.push(t)):s.isCurrentNew=!0,this.addOption(s)}}}},{key:"setSelectedProp",value:function(){var e={};this.selectedValues.forEach((function(t){e[t]=!0})),this.options.forEach((function(t){!0===e[t.value]&&(t.isSelected=!0)}))}},{key:"setNewOptionsFromValue",value:function(e){if(e){var t=this.setNewOption.bind(this),i={};this.options.forEach((function(e){i[e.value]=!0})),e.forEach((function(e){e&&!0!==i[e]&&t(e)}))}}},{key:"setDropboxWrapperWidth",value:function(){if(!this.showAsPopup){var e=this.dropboxWidth||"".concat(this.$wrapper.offsetWidth,"px");c.setStyle(this.$dropboxContainer,"max-width",e)}}},{key:"setEleStyles",value:function(){var e=this.maxWidth,t={};e&&(t["max-width"]=e),c.setStyles(this.$ele,t)}},{key:"setDropboxStyles",value:function(){var e=this.dropboxWidth,t={},i={"z-index":this.zIndex};e&&(this.showAsPopup?t["max-width"]=e:i.width=e),c.setStyles(this.$dropboxContainer,i),c.setStyles(this.$dropbox,t)}},{key:"setOptionAttr",value:function(){var e=this.$visibleOptions,t=this.options,i="".concat(this.optionHeight,"px"),o=c.setStyle,s=c.getData,n=c.setData;e&&e.length&&e.forEach((function(e){var r=t[s(e,"index")];o(e,"height",i),n(e,"value",r.value)}))}},{key:"setValueTagAttr",value:function(){var e=this.$valueTags;if(e&&e.length){var t=c.getData,i=c.setData,o=this.options;e.forEach((function(e){var s=t(e,"index");if(void 0!==s){var n=o[s];i(e,"value",n.value)}}))}}},{key:"setScrollTop",value:function(){var e=this.selectedValues;if(!this.showSelectedOptionsFirst&&this.focusSelectedOptionOnOpen&&0!==e.length){var t,i={};e.forEach((function(e){i[e]=!0})),this.options.some((function(e){return!!i[e.value]&&(t=e.visibleIndex,!0)})),t&&(this.$optionsContainer.scrollTop=this.optionHeight*t)}}},{key:"getVisibleOptions",value:function(){return this.visibleOptions||[]}},{key:"getValue",value:function(){return this.multiple?this.useGroupValue?this.getGroupValue():this.selectedValues:this.selectedValues[0]||""}},{key:"getGroupValue",value:function(){var e=[],t={};return this.options.forEach((function(i){if(i.isSelected){var o=i.value;i.isGroupTitle?o&&(t[i.index]=!0,e.push(o)):!0!==t[i.groupIndex]&&e.push(o)}})),e}},{key:"getInputValue",value:function(e){var t=e;return t&&t.length?this.setValueAsArray&&this.multiple&&(t=JSON.stringify(t)):t=this.emptyValue,t}},{key:"getFirstVisibleOptionIndex",value:function(){return Math.ceil(this.$optionsContainer.scrollTop/this.optionHeight)}},{key:"getVisibleStartIndex",value:function(){var e=this.getFirstVisibleOptionIndex()-this.halfOptionsCount;return e<0&&(e=0),e}},{key:"getTooltipAttrText",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o={"data-tooltip":e||"","data-tooltip-enter-delay":this.tooltipEnterDelay,"data-tooltip-z-index":this.zIndex,"data-tooltip-font-size":this.tooltipFontSize,"data-tooltip-alignment":this.tooltipAlignment,"data-tooltip-max-width":this.tooltipMaxWidth,"data-tooltip-ellipsis-only":t,"data-tooltip-allow-html":i};return c.getAttributesText(o)}},{key:"getOptionObj",value:function(e){if(e){var t=s.getString,i=this.secureText.bind(this);return{index:e.index,value:i(t(e.value)),label:i(t(e.label)),description:i(t(e.description)),alias:this.getAlias(e.alias),isCurrentNew:e.isCurrentNew||!1,isNew:e.isNew||!1,isVisible:!0}}}},{key:"getNewOption",value:function(){var e=this.options[this.lastOptionIndex];if(e&&e.isCurrentNew)return e}},{key:"getOptionIndex",value:function(e){var t;return this.options.some((function(i){return i.value===e&&(t=i.index,!0)})),t}},{key:"getNewValue",value:function(){var e={};this.newValues.forEach((function(t){e[t]=!0}));var t=this.selectedValues.filter((function(t){return!0===e[t]}));return this.multiple?t:t[0]}},{key:"getAlias",value:function(e){var t=e;return t&&(t=(t=Array.isArray(t)?t.join(","):t.toString().trim()).toLowerCase()),t||""}},{key:"getDisplayValue",value:function(){var e=[];return this.options.forEach((function(t){t.isSelected&&e.push(t.label)})),this.multiple?e:e[0]||""}},{key:"getSelectedOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.fullDetails,i=void 0!==t&&t,o=e.keepSelectionOrder,s=void 0!==o&&o,n=this.valueKey,r=this.labelKey,a=this.selectedValues,l=[];if(this.options.forEach((function(e){if(e.isSelected&&!e.isGroupTitle)if(i)l.push(e);else{var t,o=(v(t={},n,e.value),v(t,r,e.label),t);e.isNew&&(o.isNew=!0),e.customData&&(o.customData=e.customData),l.push(o)}})),s){var u={};a.forEach((function(e,t){u[e]=t})),l.sort((function(e,t){return u[e.value]-u[t.value]}))}return this.multiple||i?l:l[0]}},{key:"getDisabledOptions",value:function(){var e=this.valueKey,t=this.labelKey,i=this.disabledOptions,o={},s=[];return i.forEach((function(e){o[e]=!0})),this.options.forEach((function(i){var n,r=i.value,a=i.label;o[r]&&s.push((v(n={},e,r),v(n,t,a),n))})),s}},{key:"getVisibleOptionGroupsMapping",value:function(e){var t=this.options,i={},o=this.isOptionVisible.bind(this);return(t=this.structureOptionGroup(t)).forEach((function(t){i[t.index]=t.options.some((function(t){return o({data:t,searchValue:e}).isVisible}))})),i}},{key:"getOptionsCount",value:function(e){var t;if(this.showAsPopup){var i=80*window.innerHeight/100-48;this.hasSearchContainer&&(i-=40),t=Math.floor(i/this.optionHeight)}else t=parseInt(e);return t}},{key:"getOptionsHeight",value:function(){return"".concat(this.optionsCount*this.optionHeight,"px")}},{key:"getSibling",value:function(e,t){var i="next"===t?"nextElementSibling":"previousElementSibling",o=e;do{o&&(o=o[i])}while(c.hasClass(o,"disabled")||c.hasClass(o,"group-title"));return o}},{key:"getUniqueId",value:function(){var e=s.getRandomInt(1e4);return document.querySelector("#vscomp-ele-wrapper-".concat(e))?this.getUniqueId():e}},{key:"initDropboxPopover",value:function(){var e={ele:this.$ele,target:this.$dropboxContainer,position:this.position,zIndex:this.zIndex,margin:4,transitionDistance:30,hideArrowIcon:!0,disableManualAction:!0,disableUpdatePosition:!this.hasDropboxWrapper,updatePositionThrottle:this.updatePositionThrottle,afterShow:this.afterShowPopper.bind(this),afterHide:this.afterHidePopper.bind(this)};this.dropboxPopover=new PopoverComponent(e)}},{key:"openDropbox",value:function(e){this.isSilentOpen=e,e?c.setStyle(this.$dropboxContainer,"display","inline-flex"):(c.dispatchEvent(this.$ele,"beforeOpen"),c.setAria(this.$wrapper,"expanded",!0)),this.setDropboxWrapperWidth(),c.removeClass(this.$allWrappers,"closed"),c.changeTabIndex(this.$allWrappers,0),this.dropboxPopover&&!e?this.dropboxPopover.show():this.afterShowPopper()}},{key:"afterShowPopper",value:function(){var e=this.isSilentOpen;this.isSilentOpen=!1,e||(this.moveSelectedOptionsFirst(),this.setScrollTop(),c.addClass(this.$allWrappers,"focused"),this.showAsPopup?(c.addClass(this.$body,"vscomp-popup-active"),this.isPopupActive=!0):this.focusSearchInput(),c.dispatchEvent(this.$ele,"afterOpen"))}},{key:"closeDropbox",value:function(e){this.isSilentClose=e,this.keepAlwaysOpen?this.removeOptionFocus():(e?c.setStyle(this.$dropboxContainer,"display",""):(c.dispatchEvent(this.$ele,"beforeClose"),c.setAria(this.$wrapper,"expanded",!1),c.setAria(this.$wrapper,"activedescendant","")),this.dropboxPopover&&!e?this.dropboxPopover.hide():this.afterHidePopper())}},{key:"afterHidePopper",value:function(){var e=this.isSilentClose;this.isSilentClose=!1,c.removeClass(this.$allWrappers,"focused"),this.removeOptionFocus(),!e&&this.isPopupActive&&(c.removeClass(this.$body,"vscomp-popup-active"),this.isPopupActive=!1),c.addClass(this.$allWrappers,"closed"),e||c.dispatchEvent(this.$ele,"afterClose"),this.focus()}},{key:"moveSelectedOptionsFirst",value:function(){this.showSelectedOptionsFirst&&(this.setSortedOptions(),this.$optionsContainer.scrollTop&&this.selectedValues.length?this.scrollToTop():this.setVisibleOptions())}},{key:"toggleDropbox",value:function(){this.isOpened()?this.closeDropbox():this.openDropbox()}},{key:"updatePosition",value:function(){this.dropboxPopover&&this.isOpened()&&this.$ele.updatePosition()}},{key:"isOpened",value:function(){return!c.hasClass(this.$wrapper,"closed")}},{key:"focusSearchInput",value:function(){var e=this.$searchInput;e&&e.focus()}},{key:"focusOption",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.direction,o=t.$option,s=t.focusFirst,n=this.$dropboxContainer.querySelector(".vscomp-option.focused");if(o)e=o;else if(!n||s){var r=this.getFirstVisibleOptionIndex();e=this.$dropboxContainer.querySelector('.vscomp-option[data-visible-index="'.concat(r,'"]')),(c.hasClass(e,"disabled")||c.hasClass(e,"group-title"))&&(e=this.getSibling(e,"next"))}else e=this.getSibling(n,i);e&&e!==n&&(n&&this.toggleOptionFocusedState(n,!1),this.$ariaLiveElem&&(this.$ariaLiveElem.textContent=e.textContent),this.toggleOptionFocusedState(e,!0),this.toggleFocusedProp(c.getData(e,"index"),!0),this.moveFocusedOptionToView(e))}},{key:"moveFocusedOptionToView",value:function(e){var t=e||this.$dropboxContainer.querySelector(".vscomp-option.focused");if(t){var i,o=this.$optionsContainer.getBoundingClientRect(),s=t.getBoundingClientRect(),n=o.top,r=o.bottom,a=o.height,l=s.top,u=s.bottom,p=s.height,h=t.offsetTop,d=c.getData(this.$options,"top","number");n>l?i=h+d:r1&&void 0!==arguments[1]?arguments[1]:{},i=t.event;if(e){var o=!c.hasClass(e,"selected");if(o){if(this.multiple&&this.isMaxValuesSelected)return}else if(!this.multiple)return void this.closeDropbox();var n=this.selectedValues,r=c.getData(e,"value"),a=c.getData(e,"index","number"),l=c.hasClass(e,"current-new"),u=!1,p=this.lastSelectedOptionIndex;if(this.lastSelectedOptionIndex=null,this.toggleSelectedProp(a,o),o){if(this.multiple)n.push(r),this.toggleAllOptionsClass(),this.toggleGroupOptionsParent(e),i&&i.shiftKey&&(u=!0);else{n.length&&this.toggleSelectedProp(this.getOptionIndex(n[0]),!1),n=[r];var h=this.$dropboxContainer.querySelector(".vscomp-option.selected");h&&this.toggleOptionSelectedState(h,!1),this.closeDropbox(),l||this.setSearchValue("")}this.lastSelectedOptionIndex=a,this.toggleOptionSelectedState(e)}else this.multiple&&(this.toggleOptionSelectedState(e),s.removeItemFromArray(n,r),this.toggleAllOptionsClass(!1),this.toggleGroupOptionsParent(e,!1));l&&this.beforeSelectNewValue(),this.setValue(n),u&&this.selectRangeOptions(p,a)}}},{key:"selectFocusedOption",value:function(){this.selectOption(this.$dropboxContainer.querySelector(".vscomp-option.focused"))}},{key:"selectRangeOptions",value:function(e,t){var i=this;if("number"==typeof e&&!this.maxValues){var o,s,n=this.selectedValues,r=this.hasOptionGroup,a={};if(eo&&t1&&void 0!==arguments[1]&&arguments[1];this.focusedOptionIndex&&this.setOptionProp(this.focusedOptionIndex,"isFocused",!1),this.setOptionProp(e,"isFocused",t),this.focusedOptionIndex=e}},{key:"toggleSelectedProp",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.setOptionProp(e,"isSelected",t)}},{key:"scrollToTop",value:function(){var e=!this.isOpened();e&&this.openDropbox(!0),this.$optionsContainer.scrollTop>0&&(this.$optionsContainer.scrollTop=0),e&&this.closeDropbox(!0)}},{key:"reset",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.options.forEach((function(e){e.isSelected=!1})),this.beforeValueSet(!0),this.setValue(null,{disableValidation:e}),this.afterValueSet(),e&&c.removeClass(this.$allWrappers,"has-error"),c.dispatchEvent(this.$ele,"reset")}},{key:"addOption",value:function(e,t){if(e){this.lastOptionIndex+=1;var i=this.getOptionObj(d(d({},e),{},{index:this.lastOptionIndex}));this.options.push(i),this.sortedOptions.push(i),t&&(this.visibleOptionsCount+=1,this.afterSetOptions())}}},{key:"removeOption",value:function(e){(e||0===e)&&(this.options.splice(e,1),this.lastOptionIndex-=1)}},{key:"removeNewOption",value:function(){var e=this.getNewOption();e&&this.removeOption(e.index)}},{key:"sortOptions",value:function(e){return e.sort((function(e,t){var i=e.isSelected||e.isAnySelected,o=t.isSelected||t.isAnySelected;return i||o?i&&(!o||e.indexe.length)&&(t=e.length);for(var i=0,o=new Array(t);ii-s-t.width?"left":"right",vertical:n>o-n-t.height?"top":"bottom"}}},{key:"getAbsoluteCoords",value:function(e){if(e){var t=e.getBoundingClientRect(),i=window.pageXOffset,o=window.pageYOffset;return{width:t.width,height:t.height,top:t.top+o,right:t.right+i,bottom:t.bottom+o,left:t.left+i}}}},{key:"getCoords",value:function(e){return e?e.getBoundingClientRect():{}}},{key:"getData",value:function(e,t,i){if(e){var o=e?e.dataset[t]:"";return"number"===i?o=parseFloat(o)||0:"true"===o?o=!0:"false"===o&&(o=!1),o}}},{key:"setData",value:function(e,t,i){e&&(e.dataset[t]=i)}},{key:"setStyle",value:function(e,t,i){e&&(e.style[t]=i)}},{key:"show",value:function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"block";t.setStyle(e,"display",i)}},{key:"hide",value:function(e){t.setStyle(e,"display","none")}},{key:"getHideableParent",value:function(e){for(var t,i=e.parentElement;i;){var o=getComputedStyle(i).overflow;if(-1!==o.indexOf("scroll")||-1!==o.indexOf("auto")){t=i;break}i=i.parentElement}return t}}])&&function(e,t){for(var i=0;ig?g-f:M:k+p>F&&("right"===C?n="left":k=F+fO?O-h:P:E+c>I&&("bottom"===C?n="top":E=I+hp-B&&(W=p-B):"left"!==C&&"right"!==C||((q=b/2+m-z)c-B&&(q=c-B)),i.setStyle(this.$arrowEle,"transform","translate3d(".concat(W,"px, ").concat(q,"px, 0) ").concat(K))}i.hide(this.$popperEle)}},{key:"resetPosition",value:function(){i.setStyle(this.$popperEle,"transform","none"),this.setPosition()}},{key:"show",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=t.resetPosition,s=t.data;clearTimeout(this.exitDelayTimeout),clearTimeout(this.hideDurationTimeout),o&&this.resetPosition(),this.enterDelayTimeout=setTimeout((function(){var t=i.getData(e.$popperEle,"left"),o=i.getData(e.$popperEle,"top"),n="translate3d(".concat(t,"px, ").concat(o,"px, 0)"),r=e.showDuration;i.show(e.$popperEle,"inline-flex"),i.getCoords(e.$popperEle),i.setStyle(e.$popperEle,"transitionDuration",r+"ms"),i.setStyle(e.$popperEle,"transform",n),i.setStyle(e.$popperEle,"opacity",1),e.showDurationTimeout=setTimeout((function(){"function"==typeof e.afterShowCallback&&e.afterShowCallback(s)}),r)}),this.enterDelay)}},{key:"hide",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=t.data;clearTimeout(this.enterDelayTimeout),clearTimeout(this.showDurationTimeout),this.exitDelayTimeout=setTimeout((function(){if(e.$popperEle){var t=i.getData(e.$popperEle,"fromLeft"),s=i.getData(e.$popperEle,"fromTop"),n="translate3d(".concat(t,"px, ").concat(s,"px, 0)"),r=e.hideDuration;i.setStyle(e.$popperEle,"transitionDuration",r+"ms"),i.setStyle(e.$popperEle,"transform",n),i.setStyle(e.$popperEle,"opacity",0),e.hideDurationTimeout=setTimeout((function(){i.hide(e.$popperEle),"function"==typeof e.afterHideCallback&&e.afterHideCallback(o)}),r)}}),this.exitDelay)}},{key:"updatePosition",value:function(){i.setStyle(this.$popperEle,"transitionDuration","0ms"),this.resetPosition();var e=i.getData(this.$popperEle,"left"),t=i.getData(this.$popperEle,"top");i.show(this.$popperEle,"inline-flex"),i.setStyle(this.$popperEle,"transform","translate3d(".concat(e,"px, ").concat(t,"px, 0)"))}}])&&function(e,t){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];return!0===e||"true"===e||!1!==e&&"false"!==e&&t}},{key:"removeArrayEmpty",value:function(e){return Array.isArray(e)&&e.length?e.filter((function(e){return!!e})):[]}},{key:"throttle",value:function(e,t){var i,o=0;return function(){for(var s=arguments.length,n=new Array(s),r=0;re.length)&&(t=e.length);for(var i=0,o=new Array(t);i'),e=this.$popover.querySelector(".pop-comp-arrow")),this.$arrowEle=e}}},{key:"destroy",value:function(){this.removeEvents()}}])&&r(i.prototype,o),s&&r(i,s),Object.defineProperty(i,"prototype",{writable:!1}),e}();a=p.getAttrProps(),window.PopoverComponent=p}(); + +/***/ }), + +/***/ "./srcjs/modules/utils.js": +/*!********************************!*\ + !*** ./srcjs/modules/utils.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "updateLabel": () => (/* binding */ updateLabel) +/* harmony export */ }); +function updateLabel(labelTxt, labelNode) { + if (typeof labelTxt === "undefined") return; + if (labelNode.length !== 1) { + throw new Error("labelNode must be of length 1"); + } + var emptyLabel = Array.isArray(labelTxt) && labelTxt.length === 0; + if (emptyLabel) { + labelNode.addClass("shiny-label-null"); + } else { + labelNode.html(labelTxt); + labelNode.removeClass("shiny-label-null"); + } +} + + + +/***/ }), + +/***/ "shiny": +/*!************************!*\ + !*** external "Shiny" ***! + \************************/ +/***/ ((module) => { + +"use strict"; +module.exports = Shiny; + +/***/ }), + +/***/ "jquery": +/*!*************************!*\ + !*** external "jQuery" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = jQuery; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/nonce */ +/******/ (() => { +/******/ __webpack_require__.nc = undefined; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!****************************************!*\ + !*** ./srcjs/inputs/virtual-select.js ***! + \****************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); +/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var shiny__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! shiny */ "shiny"); +/* harmony import */ var shiny__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(shiny__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _modules_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modules/utils */ "./srcjs/modules/utils.js"); +/* harmony import */ var virtual_select_plugin_dist_virtual_select_min_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! virtual-select-plugin/dist/virtual-select.min.css */ "./node_modules/virtual-select-plugin/dist/virtual-select.min.css"); +/* harmony import */ var virtual_select_plugin_dist_virtual_select_min_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! virtual-select-plugin/dist/virtual-select.min.js */ "./node_modules/virtual-select-plugin/dist/virtual-select.min.js"); +/* harmony import */ var virtual_select_plugin_dist_virtual_select_min_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(virtual_select_plugin_dist_virtual_select_min_js__WEBPACK_IMPORTED_MODULE_4__); + + + + + + +function transpose(data) { + var res = []; + var key, i; + for (key in data) { + for (i = 0; i < data[key].length; i++) { + res[i] = res[i] || {}; + if (data[key][i] !== undefined) res[i][key] = data[key][i]; + } + } + return res; +} + +function makeOptions(options) { + var newOptions; + if (options.type == "vector") { + newOptions = options.choices.map(x => { + return { label: x, value: x }; + }); + } else if (options.type == "transpose") { + newOptions = transpose(options.choices); + } else if (options.type == "transpose_group") { + var choices = options.choices; + for (var i = 0; i < choices.length; i++) { + choices[i].options = transpose(choices[i].options); + } + newOptions = choices; + } else { + newOptions = options.choices; + } + return newOptions; +} + +var virtualSelectBinding = new Shiny.InputBinding(); + +jquery__WEBPACK_IMPORTED_MODULE_0___default().extend(virtualSelectBinding, { + find: scope => { + return jquery__WEBPACK_IMPORTED_MODULE_0___default()(scope).find(".virtual-select"); + }, + getValue: el => { + return el.value; + }, + setValue: (el, value) => { + el.setValue(value); + }, + subscribe: (el, callback) => { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).on("change.virtualSelectBinding", function(e) { + callback(); + }); + }, + unsubscribe: el => { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).off(".virtualSelectBinding"); + }, + receiveMessage: (el, data) => { + if (data.hasOwnProperty("label")) { + var label = jquery__WEBPACK_IMPORTED_MODULE_0___default()("#" + el.id + "-label"); + (0,_modules_utils__WEBPACK_IMPORTED_MODULE_2__.updateLabel)(data.label, label); + } + + if (data.hasOwnProperty("options")) { + var newOptions = makeOptions(data.options); + el.setOptions(newOptions); + } + + if (data.hasOwnProperty("value")) { + el.setValue(data.value); + } + + if (data.hasOwnProperty("disable")) { + if (data.disable) { + el.disable(); + } else { + el.enable(); + } + } + + if (data.hasOwnProperty("disabledChoices")) { + el.setDisabledOptions(data.disabledChoices, true); + } + }, + initialize: el => { + var data = el.querySelector('script[data-for="' + el.id + '"]'); + data = JSON.parse(data.text); + var config = data.config; + config.options = makeOptions(data.options); + if (config.onServerSearch) { + config.onServerSearch = window[config.onServerSearch]; + } + if (config.labelRenderer) { + config.labelRenderer = window[config.labelRenderer]; + } + config.ele = el; + VirtualSelect.init(config); + if (data.stateInput) { + jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).on("afterOpen", function(e) { + Shiny.setInputValue(el.id + "_open", true); + }); + jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).on("afterClose", function(e) { + Shiny.setInputValue(el.id + "_open", false); + }); + } + } +}); + +Shiny.inputBindings.register( + virtualSelectBinding, + "shinyWidgets.virtualSelectBinding" +); + + +})(); + +/******/ })() +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBUTtBQUNSO0FBQ0EsV0FBVyw2Q0FBQztBQUNaLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxJQUFJLDZDQUFDO0FBQ0w7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsSUFBSSw2Q0FBQztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0Esa0JBQWtCLDZDQUFDO0FBQ25CLE1BQU0sMkRBQVc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSw2Q0FBQztBQUNQO0FBQ0EsT0FBTztBQUNQLE1BQU0sNkNBQUM7QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NoaW55V2lkZ2V0cy8uL25vZGVfbW9kdWxlcy92aXJ0dWFsLXNlbGVjdC1wbHVnaW4vZGlzdC92aXJ0dWFsLXNlbGVjdC5taW4uY3NzIiwid2VicGFjazovL3NoaW55V2lkZ2V0cy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vc2hpbnlXaWRnZXRzLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vc2hpbnlXaWRnZXRzLy4vbm9kZV9tb2R1bGVzL3ZpcnR1YWwtc2VsZWN0LXBsdWdpbi9kaXN0L3ZpcnR1YWwtc2VsZWN0Lm1pbi5jc3M/NjEzYiIsIndlYnBhY2s6Ly9zaGlueVdpZGdldHMvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vc2hpbnlXaWRnZXRzLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9zaGlueVdpZGdldHMvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vc2hpbnlXaWRnZXRzLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL3NoaW55V2lkZ2V0cy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL3NoaW55V2lkZ2V0cy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL3NoaW55V2lkZ2V0cy8uL25vZGVfbW9kdWxlcy92aXJ0dWFsLXNlbGVjdC1wbHVnaW4vZGlzdC92aXJ0dWFsLXNlbGVjdC5taW4uanMiLCJ3ZWJwYWNrOi8vc2hpbnlXaWRnZXRzLy4vc3JjanMvbW9kdWxlcy91dGlscy5qcyIsIndlYnBhY2s6Ly9zaGlueVdpZGdldHMvZXh0ZXJuYWwgdmFyIFwiU2hpbnlcIiIsIndlYnBhY2s6Ly9zaGlueVdpZGdldHMvZXh0ZXJuYWwgdmFyIFwialF1ZXJ5XCIiLCJ3ZWJwYWNrOi8vc2hpbnlXaWRnZXRzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3NoaW55V2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9zaGlueVdpZGdldHMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3NoaW55V2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3NoaW55V2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3NoaW55V2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvbm9uY2UiLCJ3ZWJwYWNrOi8vc2hpbnlXaWRnZXRzLy4vc3JjanMvaW5wdXRzL3ZpcnR1YWwtc2VsZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi8qIVxcbiAqIFZpcnR1YWwgU2VsZWN0IHYxLjAuMzlcXG4gKiBodHRwczovL3NhLXNpLWRldi5naXRodWIuaW8vdmlydHVhbC1zZWxlY3RcXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9zYS1zaS1kZXYvdmlydHVhbC1zZWxlY3QvYmxvYi9tYXN0ZXIvTElDRU5TRSlcXG4gKi9cXG5Aa2V5ZnJhbWVzIHZzY29tcC1hbmltYXRpb24tc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlWigzNjBkZWcpfX0udnNjb21wLXBvcHVwLWFjdGl2ZXtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH0udnNjb21wLWVsZXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MjUwcHg7d2lkdGg6MTAwJX0udnNjb21wLXdyYXBwZXJ7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtd3JhcDp3cmFwO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOjEwMCV9LnZzY29tcC13cmFwcGVyICosLnZzY29tcC13cmFwcGVyICo6OmJlZm9yZSwudnNjb21wLXdyYXBwZXIgKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fS52c2NvbXAtd3JhcHBlcjpmb2N1c3tvdXRsaW5lOm5vbmV9LnZzY29tcC1kcm9wYm94LXdyYXBwZXJ7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS52c2NvbXAtdG9nZ2xlLWJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7cGFkZGluZzo3cHggMzBweCA3cHggMTBweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS52c2NvbXAtdmFsdWV7aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MjBweDttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LnZzY29tcC1hcnJvd3thbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDozMHB4fS52c2NvbXAtYXJyb3c6OmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItYm90dG9tLWNvbG9yOiMxMTE7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMxMTE7Y29udGVudDpcXFwiXFxcIjtoZWlnaHQ6OHB4O21hcmdpbi10b3A6LTZweDt3aWR0aDo4cHh9LnZzY29tcC1jbGVhci1pY29ue2hlaWdodDoxMnB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEycHh9LnZzY29tcC1jbGVhci1pY29uOjpiZWZvcmUsLnZzY29tcC1jbGVhci1pY29uOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y29udGVudDpcXFwiXFxcIjtoZWlnaHQ6MTJweDtsZWZ0OjVweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoycHh9LnZzY29tcC1jbGVhci1pY29uOjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LnZzY29tcC1jbGVhci1pY29uOjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9LnZzY29tcC1jbGVhci1pY29uOmhvdmVyOjpiZWZvcmUsLnZzY29tcC1jbGVhci1pY29uOmhvdmVyOjphZnRlcntiYWNrZ3JvdW5kOiMzMzN9LnZzY29tcC1jbGVhci1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6bm9uZTtoZWlnaHQ6MjRweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6LTEycHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MzBweDt0b3A6NTAlO3dpZHRoOjI0cHh9LnZzY29tcC1jbGVhci1idXR0b246aG92ZXJ7YmFja2dyb3VuZDojY2NjfS52c2NvbXAtY2xlYXItYnV0dG9uOmhvdmVyIC52c2NvbXAtY2xlYXItaWNvbjo6YmVmb3JlLC52c2NvbXAtY2xlYXItYnV0dG9uOmhvdmVyIC52c2NvbXAtY2xlYXItaWNvbjo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojMzMzfS52c2NvbXAtZHJvcGJveC1jbG9zZS1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjUwJTtib3R0b206LTQ4cHg7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpub25lO2hlaWdodDo0MHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTIwcHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6NDBweH0udnNjb21wLXZhbHVlLXRhZy5tb3JlLXZhbHVlLWNvdW50e3doaXRlLXNwYWNlOm5vd3JhcH0udnNjb21wLWRyb3Bib3gtY29udGFpbmVye3dpZHRoOjEwMCU7ei1pbmRleDoyfS52c2NvbXAtZHJvcGJveHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7d2lkdGg6MTAwJX0udnNjb21wLW9wdGlvbnMtY29udGFpbmVye21heC1oZWlnaHQ6MjEwcHg7b3ZlcmZsb3c6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0udnNjb21wLW9wdGlvbnMtYm90dG9tLWZyZWV6ZXJ7Ym90dG9tOjA7aGVpZ2h0OjJweDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0udnNjb21wLW9wdGlvbnthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2hlaWdodDo0MHB4O3BhZGRpbmc6MCAxNXB4O3Bvc2l0aW9uOnJlbGF0aXZlfS52c2NvbXAtb3B0aW9uLnNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2VlZX0udnNjb21wLW9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6I2NjY30udnNjb21wLW9wdGlvbi5kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi41fS52c2NvbXAtb3B0aW9uLmdyb3VwLXRpdGxlIC52c2NvbXAtb3B0aW9uLXRleHR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouNn0udnNjb21wLW9wdGlvbi5ncm91cC10aXRsZS5zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9LnZzY29tcC1vcHRpb24uZ3JvdXAtb3B0aW9ue3BhZGRpbmctbGVmdDozMHB4fS52c2NvbXAtbmV3LW9wdGlvbi1pY29ue2hlaWdodDozMHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MzBweH0udnNjb21wLW5ldy1vcHRpb24taWNvbjo6YmVmb3Jle2JvcmRlcjoxNXB4IHNvbGlkICM1MTJkYTg7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsMCk7Y29udGVudDpcXFwiXFxcIjtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS52c2NvbXAtbmV3LW9wdGlvbi1pY29uOjphZnRlcnthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtjb250ZW50OlxcXCIrXFxcIjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjE4cHg7aGVpZ2h0OjE1cHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxcHg7dG9wOjA7d2lkdGg6MTVweH0udnNjb21wLW9wdGlvbi10ZXh0e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7d2lkdGg6MTAwJX0udnNjb21wLW9wdGlvbi1kZXNjcmlwdGlvbntvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6IzY2Njtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxNXB4O3dpZHRoOjEwMCV9LnZzY29tcC1zZWFyY2gtY29udGFpbmVye2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDBweDtwYWRkaW5nOjAgNXB4IDAgMTVweDtwb3NpdGlvbjpyZWxhdGl2ZX0udnNjb21wLXNlYXJjaC1sYWJlbCwudnNjb21wLWxpdmUtcmVnaW9ue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjFweH0udnNjb21wLXNlYXJjaC1pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Ym9yZGVyOjA7Y29sb3I6aW5oZXJpdDtmb250LXNpemU6MTVweDtoZWlnaHQ6MzhweDtwYWRkaW5nOjEwcHggMDt3aWR0aDpjYWxjKDEwMCUgLSAzMHB4KX0udnNjb21wLXNlYXJjaC1pbnB1dDpmb2N1c3tvdXRsaW5lOm5vbmV9LnZzY29tcC1zZWFyY2gtY2xlYXJ7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToyNXB4O2hlaWdodDozMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjMwcHh9LnZzY29tcC1zZWFyY2gtY2xlYXI6aG92ZXJ7Y29sb3I6aW5oZXJpdH0udnNjb21wLW5vLW9wdGlvbnMsLnZzY29tcC1uby1zZWFyY2gtcmVzdWx0c3thbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyMHB4IDEwcHh9LnZzY29tcC1vcHRpb25zLWxvYWRlcntkaXNwbGF5Om5vbmU7cGFkZGluZzoyMHB4IDA7dGV4dC1hbGlnbjpjZW50ZXJ9LnZzY29tcC1vcHRpb25zLWxvYWRlcjo6YmVmb3Jle2FuaW1hdGlvbjp2c2NvbXAtYW5pbWF0aW9uLXNwaW4gLjhzIGluZmluaXRlIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzotNHB4IC01cHggM3B4IC0zcHggcmdiYSgwLDAsMCwuMyk7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6NDBweDtvcGFjaXR5Oi43O3dpZHRoOjQwcHh9LnZzY29tcC1lbGVbZGlzYWJsZWRde2N1cnNvcjpub3QtYWxsb3dlZDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnZzY29tcC1lbGVbZGlzYWJsZWRdIC52c2NvbXAtd3JhcHBlcntvcGFjaXR5Oi43O3BvaW50ZXItZXZlbnRzOm5vbmV9LnZzY29tcC13cmFwcGVyIC5jaGVja2JveC1pY29ue2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjE1cHg7bWFyZ2luLXJpZ2h0OjEwcHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTVweH0udnNjb21wLXdyYXBwZXIgLmNoZWNrYm94LWljb246OmFmdGVye3RyYW5zaXRpb24tZHVyYXRpb246LjJzO2JvcmRlcjoycHggc29saWQgIzg4ODtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnZzY29tcC13cmFwcGVyIC5jaGVja2JveC1pY29uLmNoZWNrZWQ6OmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHRyYW5zbGF0ZSgxcHgsIC00cHgpO2JvcmRlci1jb2xvcjojNTEyZGE4O2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLDApO3dpZHRoOjUwJX0udnNjb21wLXdyYXBwZXIuc2hvdy1hcy1wb3B1cCAudnNjb21wLWRyb3Bib3gtY29udGFpbmVye2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjUpO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwdmg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsZWZ0OjA7b3BhY2l0eToxO292ZXJmbG93OmF1dG87cGFkZGluZzowIDEwcHg7cG9zaXRpb246Zml4ZWQ7dG9wOjA7d2lkdGg6MTAwdnd9LnZzY29tcC13cmFwcGVyLnNob3ctYXMtcG9wdXAgLnZzY29tcC1kcm9wYm94e21hcmdpbi10b3A6LTI0cHg7bWF4LWhlaWdodDpjYWxjKDgwJSAtIDQ4cHgpO21heC13aWR0aDo1MDBweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDo4MCV9LnZzY29tcC13cmFwcGVyLnNob3ctYXMtcG9wdXAgLnZzY29tcC1kcm9wYm94LWNsb3NlLWJ1dHRvbntkaXNwbGF5OmZsZXh9LnZzY29tcC13cmFwcGVyLnBvcHVwLXBvc2l0aW9uLWxlZnQgLnZzY29tcC1kcm9wYm94LWNvbnRhaW5lcntqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0udnNjb21wLXdyYXBwZXIucG9wdXAtcG9zaXRpb24tcmlnaHQgLnZzY29tcC1kcm9wYm94LWNvbnRhaW5lcntqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnZzY29tcC13cmFwcGVyLmhhcy1zZWxlY3QtYWxsIC52c2NvbXAtdG9nZ2xlLWFsbC1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleH0udnNjb21wLXdyYXBwZXIuaGFzLXNlbGVjdC1hbGwgLnZzY29tcC1zZWFyY2gtaW5wdXQsLnZzY29tcC13cmFwcGVyLmhhcy1zZWxlY3QtYWxsIC52c2NvbXAtdG9nZ2xlLWFsbC1sYWJlbHt3aWR0aDpjYWxjKDEwMCUgLSA1NXB4KX0udnNjb21wLXdyYXBwZXIuaGFzLXNlbGVjdC1hbGwgLnZzY29tcC10b2dnbGUtYWxsLWxhYmVse2Rpc3BsYXk6bm9uZX0udnNjb21wLXdyYXBwZXI6bm90KC5oYXMtc2VhcmNoLWlucHV0KSAudnNjb21wLXRvZ2dsZS1hbGwtYnV0dG9ue3dpZHRoOjEwMCV9LnZzY29tcC13cmFwcGVyOm5vdCguaGFzLXNlYXJjaC1pbnB1dCkgLnZzY29tcC10b2dnbGUtYWxsLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfS52c2NvbXAtd3JhcHBlci5tdWx0aXBsZSAudnNjb21wLW9wdGlvbiAudnNjb21wLW9wdGlvbi10ZXh0e3dpZHRoOmNhbGMoMTAwJSAtIDI1cHgpfS52c2NvbXAtd3JhcHBlci5tdWx0aXBsZSAudnNjb21wLW9wdGlvbiAudnNjb21wLW9wdGlvbi1kZXNjcmlwdGlvbntwYWRkaW5nLWxlZnQ6MjVweH0udnNjb21wLXdyYXBwZXIubXVsdGlwbGUgLnZzY29tcC1vcHRpb24uc2VsZWN0ZWQgLmNoZWNrYm94LWljb246OmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHRyYW5zbGF0ZSgxcHgsIC00cHgpO2JvcmRlci1jb2xvcjojNTEyZGE4O2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLDApO3dpZHRoOjUwJX0udnNjb21wLXdyYXBwZXIuZm9jdXNlZCAudnNjb21wLXRvZ2dsZS1idXR0b24sLnZzY29tcC13cmFwcGVyOmZvY3VzIC52c2NvbXAtdG9nZ2xlLWJ1dHRvbntib3gtc2hhZG93OjAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4xMiksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMil9LnZzY29tcC13cmFwcGVyLmNsb3NlZCAudnNjb21wLWRyb3Bib3gtY29udGFpbmVyLC52c2NvbXAtd3JhcHBlci5jbG9zZWQudnNjb21wLWRyb3Bib3gtd3JhcHBlcntkaXNwbGF5Om5vbmV9LnZzY29tcC13cmFwcGVyOm5vdCguaGFzLXZhbHVlKSAudnNjb21wLXZhbHVle29wYWNpdHk6LjV9LnZzY29tcC13cmFwcGVyLmhhcy1jbGVhci1idXR0b24uaGFzLXZhbHVlIC52c2NvbXAtY2xlYXItYnV0dG9ue2Rpc3BsYXk6ZmxleH0udnNjb21wLXdyYXBwZXIuaGFzLWNsZWFyLWJ1dHRvbiAudnNjb21wLXRvZ2dsZS1idXR0b257cGFkZGluZy1yaWdodDo1NHB4fS52c2NvbXAtd3JhcHBlci5oYXMtbm8tb3B0aW9ucyAudnNjb21wLW9wdGlvbnMtY29udGFpbmVyLC52c2NvbXAtd3JhcHBlci5oYXMtbm8tc2VhcmNoLXJlc3VsdHMgLnZzY29tcC1vcHRpb25zLWNvbnRhaW5lcntkaXNwbGF5Om5vbmV9LnZzY29tcC13cmFwcGVyLmhhcy1uby1vcHRpb25zIC52c2NvbXAtbm8tb3B0aW9uc3tkaXNwbGF5OmZsZXh9LnZzY29tcC13cmFwcGVyLmhhcy1uby1zZWFyY2gtcmVzdWx0cyAudnNjb21wLW5vLXNlYXJjaC1yZXN1bHRze2Rpc3BsYXk6ZmxleH0udnNjb21wLXdyYXBwZXIuaGFzLXNlYXJjaC12YWx1ZSAudnNjb21wLXNlYXJjaC1jbGVhcnt2aXNpYmlsaXR5OnZpc2libGV9LnZzY29tcC13cmFwcGVyLmhhcy1uby1vcHRpb25zIC52c2NvbXAtdG9nZ2xlLWFsbC1idXR0b257b3BhY2l0eTouNTtwb2ludGVyLWV2ZW50czpub25lfS52c2NvbXAtd3JhcHBlci5rZWVwLWFsd2F5cy1vcGVuIC52c2NvbXAtdG9nZ2xlLWJ1dHRvbntwYWRkaW5nLXJpZ2h0OjI0cHh9LnZzY29tcC13cmFwcGVyLmtlZXAtYWx3YXlzLW9wZW4gLnZzY29tcC1jbGVhci1idXR0b257cmlnaHQ6NXB4fS52c2NvbXAtd3JhcHBlci5rZWVwLWFsd2F5cy1vcGVuIC52c2NvbXAtYXJyb3d7ZGlzcGxheTpub25lfS52c2NvbXAtd3JhcHBlci5rZWVwLWFsd2F5cy1vcGVuIC52c2NvbXAtZHJvcGJveC1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfS52c2NvbXAtd3JhcHBlci5rZWVwLWFsd2F5cy1vcGVuIC52c2NvbXAtZHJvcGJveHt0cmFuc2l0aW9uLWR1cmF0aW9uOjBzO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3gtc2hhZG93Om5vbmV9LnZzY29tcC13cmFwcGVyLmtlZXAtYWx3YXlzLW9wZW4uZm9jdXNlZCwudnNjb21wLXdyYXBwZXIua2VlcC1hbHdheXMtb3Blbjpmb2N1cywudnNjb21wLXdyYXBwZXIua2VlcC1hbHdheXMtb3Blbjpob3Zlcntib3gtc2hhZG93OjAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4xMiksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMil9LnZzY29tcC13cmFwcGVyLnNlcnZlci1zZWFyY2hpbmcgLnZzY29tcC1vcHRpb25zLWxpc3R7ZGlzcGxheTpub25lfS52c2NvbXAtd3JhcHBlci5zZXJ2ZXItc2VhcmNoaW5nIC52c2NvbXAtb3B0aW9ucy1sb2FkZXJ7ZGlzcGxheTpibG9ja30udnNjb21wLXdyYXBwZXIuaGFzLWVycm9yIC52c2NvbXAtdG9nZ2xlLWJ1dHRvbntib3JkZXItY29sb3I6I2IwMDAyMH0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzIC52c2NvbXAtdG9nZ2xlLWJ1dHRvbntwYWRkaW5nOjRweCAyMnB4IDAgMTBweH0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzIC52c2NvbXAtdmFsdWV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MjhweDtvdmVyZmxvdzphdXRvO3RleHQtb3ZlcmZsb3c6dW5zZXQ7d2hpdGUtc3BhY2U6bm9ybWFsfS52c2NvbXAtd3JhcHBlci5zaG93LXZhbHVlLWFzLXRhZ3MgLnZzY29tcC12YWx1ZS10YWd7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czoyMHB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTZweDttYXJnaW46MCA0cHggNHB4IDA7bWF4LXdpZHRoOjEwMCU7cGFkZGluZzoycHggM3B4IDJweCA4cHh9LnZzY29tcC13cmFwcGVyLnNob3ctdmFsdWUtYXMtdGFncyAudnNjb21wLXZhbHVlLXRhZy5tb3JlLXZhbHVlLWNvdW50e3BhZGRpbmctcmlnaHQ6OHB4fS52c2NvbXAtd3JhcHBlci5zaG93LXZhbHVlLWFzLXRhZ3MgLnZzY29tcC12YWx1ZS10YWctY29udGVudHtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6Y2FsYygxMDAlIC0gMjBweCl9LnZzY29tcC13cmFwcGVyLnNob3ctdmFsdWUtYXMtdGFncyAudnNjb21wLXZhbHVlLXRhZy1jbGVhci1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MjBweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjIwcHh9LnZzY29tcC13cmFwcGVyLnNob3ctdmFsdWUtYXMtdGFncyAudnNjb21wLXZhbHVlLXRhZy1jbGVhci1idXR0b24gLnZzY29tcC1jbGVhci1pY29ue3RyYW5zZm9ybTpzY2FsZSgwLjgpfS52c2NvbXAtd3JhcHBlci5zaG93LXZhbHVlLWFzLXRhZ3MgLnZzY29tcC1hcnJvd3toZWlnaHQ6MzRweH0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzIC52c2NvbXAtY2xlYXItYnV0dG9ue21hcmdpbi10b3A6MDt0b3A6NXB4fS52c2NvbXAtd3JhcHBlci5zaG93LXZhbHVlLWFzLXRhZ3MuaGFzLXZhbHVlIC52c2NvbXAtYXJyb3d7ZGlzcGxheTpub25lfS52c2NvbXAtd3JhcHBlci5zaG93LXZhbHVlLWFzLXRhZ3MuaGFzLXZhbHVlIC52c2NvbXAtY2xlYXItYnV0dG9ue3JpZ2h0OjJweH0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzOm5vdCguaGFzLXZhbHVlKSAudnNjb21wLXRvZ2dsZS1idXR0b257cGFkZGluZy1ib3R0b206MnB4fS52c2NvbXAtd3JhcHBlci5zaG93LXZhbHVlLWFzLXRhZ3M6bm90KC5oYXMtdmFsdWUpIC52c2NvbXAtdmFsdWV7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmctYm90dG9tOjNweH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRse2RpcmVjdGlvbjpydGx9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bCAudnNjb21wLXRvZ2dsZS1idXR0b257cGFkZGluZzo3cHggMTBweCA3cHggMzBweH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsIC52c2NvbXAtYXJyb3d7bGVmdDowO3JpZ2h0OmF1dG99LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bCAudnNjb21wLWNsZWFyLWJ1dHRvbntsZWZ0OjMwcHg7cmlnaHQ6YXV0byAhaW1wb3J0YW50fS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwgLmNoZWNrYm94LWljb257bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsIC5jaGVja2JveC1pY29uLmNoZWNrZWQ6OmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHRyYW5zbGF0ZSgtNHB4LCAxcHgpfS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwgLnZzY29tcC1zZWFyY2gtY29udGFpbmVye3BhZGRpbmc6MCAxNXB4IDAgNXB4fS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwgLnZzY29tcC10b2dnbGUtYWxsLWxhYmVse3RleHQtYWxpZ246cmlnaHR9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bCAudnNjb21wLW9wdGlvbnt0ZXh0LWFsaWduOnJpZ2h0fS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwgLnZzY29tcC1vcHRpb24uZ3JvdXAtb3B0aW9ue3BhZGRpbmctcmlnaHQ6MzBweH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsIC52c2NvbXAtbmV3LW9wdGlvbi1pY29ue2xlZnQ6MDtyaWdodDphdXRvfS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwgLnZzY29tcC1uZXctb3B0aW9uLWljb246OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjojNTEyZGE4O2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwgLnZzY29tcC1uZXctb3B0aW9uLWljb246OmFmdGVye2xlZnQ6MXB4O3JpZ2h0OmF1dG99LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bC5tdWx0aXBsZSAudnNjb21wLW9wdGlvbi5zZWxlY3RlZCAuY2hlY2tib3gtaWNvbjo6YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlKC00cHgsIDFweCl9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bC5oYXMtY2xlYXItYnV0dG9uIC52c2NvbXAtdG9nZ2xlLWJ1dHRvbntwYWRkaW5nLWxlZnQ6NTRweH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsLmtlZXAtYWx3YXlzLW9wZW4gLnZzY29tcC10b2dnbGUtYnV0dG9ue3BhZGRpbmctbGVmdDoyNHB4fS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwua2VlcC1hbHdheXMtb3BlbiAudnNjb21wLWNsZWFyLWJ1dHRvbntsZWZ0OjVweH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsLnNob3ctdmFsdWUtYXMtdGFncyAudnNjb21wLXRvZ2dsZS1idXR0b257cGFkZGluZzo0cHggMTBweCAwIDIycHh9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bC5zaG93LXZhbHVlLWFzLXRhZ3MgLnZzY29tcC12YWx1ZS10YWd7bWFyZ2luOjAgMCA0cHggNHB4O3BhZGRpbmc6MnB4IDhweCAycHggM3B4fS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwuc2hvdy12YWx1ZS1hcy10YWdzIC52c2NvbXAtdmFsdWUtdGFnLm1vcmUtdmFsdWUtY291bnR7cGFkZGluZy1sZWZ0OjhweH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsLnNob3ctdmFsdWUtYXMtdGFncy5oYXMtdmFsdWUgLnZzY29tcC1jbGVhci1idXR0b257bGVmdDoycHh9XFxuLyohXFxuICogUG9wb3ZlciB2MS4wLjEyXFxuICogaHR0cHM6Ly9zYS1zaS1kZXYuZ2l0aHViLmlvL3BvcG92ZXJcXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9zYS1zaS1kZXYvcG9wb3Zlci9ibG9iL21hc3Rlci9MSUNFTlNFKVxcbiAqL1xcbi5wb3AtY29tcC13cmFwcGVye2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7b3BhY2l0eTowO2NvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JveC1zaGFkb3c6MCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjEyKSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4yKTt0ZXh0LWFsaWduOmxlZnQ7ZmxleC13cmFwOndyYXA7ei1pbmRleDoxfS5wb3AtY29tcC1hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZX0ucG9wLWNvbXAtYXJyb3c6OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHg7bGVmdDo4cHg7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym94LXNoYWRvdzowIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMTIpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjIpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpsZWZ0IHRvcDt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgdG9wOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LnBvcC1jb21wLWNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyfS5wb3AtY29tcC13cmFwcGVyLnBvc2l0aW9uLWJvdHRvbT4ucG9wLWNvbXAtYXJyb3d7bWFyZ2luLWxlZnQ6LThweDtsZWZ0OjA7dG9wOi0xNXB4fS5wb3AtY29tcC13cmFwcGVyLnBvc2l0aW9uLWJvdHRvbT4ucG9wLWNvbXAtYXJyb3c6OmJlZm9yZXtib3gtc2hhZG93OjBweCAwcHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpfS5wb3AtY29tcC13cmFwcGVyLnBvc2l0aW9uLXRvcD4ucG9wLWNvbXAtYXJyb3d7bWFyZ2luLWxlZnQ6LThweDtsZWZ0OjA7Ym90dG9tOi0xNXB4fS5wb3AtY29tcC13cmFwcGVyLnBvc2l0aW9uLXJpZ2h0Pi5wb3AtY29tcC1hcnJvd3ttYXJnaW4tdG9wOi04cHg7dG9wOjA7bGVmdDotMTVweH0ucG9wLWNvbXAtd3JhcHBlci5wb3NpdGlvbi1sZWZ0Pi5wb3AtY29tcC1hcnJvd3ttYXJnaW4tdG9wOi04cHg7dG9wOjA7cmlnaHQ6LTE1cHh9LnBvcC1jb21wLWRpc2FibGUtZXZlbnRze3BvaW50ZXItZXZlbnRzOm5vbmV9XFxuXFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL3ZpcnR1YWwtc2VsZWN0LXBsdWdpbi9kaXN0L3ZpcnR1YWwtc2VsZWN0Lm1pbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7Ozs7RUFJRTtBQUNGLGlDQUFpQyxHQUFHLHlCQUF5QixDQUFDLENBQUMscUJBQXFCLDBCQUEwQixDQUFDLFlBQVksb0JBQW9CLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMs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RixrQkFBa0IsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxnR0FBZ0csQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixVQUFVLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLGdHQUFnRyxDQUFDLGlDQUFpQyxDQUFDLHlCQUF5QixDQUFDLCtCQUErQixDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsa0RBQWtELGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsMERBQTBELHdDQUF3QyxDQUFDLCtDQUErQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGlEQUFpRCxlQUFlLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxnREFBZ0QsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMseUJBQXlCLG1CQUFtQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKiFcXG4gKiBWaXJ0dWFsIFNlbGVjdCB2MS4wLjM5XFxuICogaHR0cHM6Ly9zYS1zaS1kZXYuZ2l0aHViLmlvL3ZpcnR1YWwtc2VsZWN0XFxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vc2Etc2ktZGV2L3ZpcnR1YWwtc2VsZWN0L2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXFxuICovXFxuQGtleWZyYW1lcyB2c2NvbXAtYW5pbWF0aW9uLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZVooMzYwZGVnKX19LnZzY29tcC1wb3B1cC1hY3RpdmV7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9LnZzY29tcC1lbGV7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjI1MHB4O3dpZHRoOjEwMCV9LnZzY29tcC13cmFwcGVye2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LXdyYXA6d3JhcDtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMDAlfS52c2NvbXAtd3JhcHBlciAqLC52c2NvbXAtd3JhcHBlciAqOjpiZWZvcmUsLnZzY29tcC13cmFwcGVyICo6OmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH0udnNjb21wLXdyYXBwZXI6Zm9jdXN7b3V0bGluZTpub25lfS52c2NvbXAtZHJvcGJveC13cmFwcGVye2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0udnNjb21wLXRvZ2dsZS1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O3BhZGRpbmc6N3B4IDMwcHggN3B4IDEwcHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0udnNjb21wLXZhbHVle2hlaWdodDoyMHB4O2xpbmUtaGVpZ2h0OjIwcHg7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS52c2NvbXAtYXJyb3d7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MzBweH0udnNjb21wLWFycm93OjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMTExO2JvcmRlci1yaWdodC1jb2xvcjojMTExO2NvbnRlbnQ6XFxcIlxcXCI7aGVpZ2h0OjhweDttYXJnaW4tdG9wOi02cHg7d2lkdGg6OHB4fS52c2NvbXAtY2xlYXItaWNvbntoZWlnaHQ6MTJweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMnB4fS52c2NvbXAtY2xlYXItaWNvbjo6YmVmb3JlLC52c2NvbXAtY2xlYXItaWNvbjo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2NvbnRlbnQ6XFxcIlxcXCI7aGVpZ2h0OjEycHg7bGVmdDo1cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MnB4fS52c2NvbXAtY2xlYXItaWNvbjo6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS52c2NvbXAtY2xlYXItaWNvbjo6YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS52c2NvbXAtY2xlYXItaWNvbjpob3Zlcjo6YmVmb3JlLC52c2NvbXAtY2xlYXItaWNvbjpob3Zlcjo6YWZ0ZXJ7YmFja2dyb3VuZDojMzMzfS52c2NvbXAtY2xlYXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5Om5vbmU7aGVpZ2h0OjI0cHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOi0xMnB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjMwcHg7dG9wOjUwJTt3aWR0aDoyNHB4fS52c2NvbXAtY2xlYXItYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6I2NjY30udnNjb21wLWNsZWFyLWJ1dHRvbjpob3ZlciAudnNjb21wLWNsZWFyLWljb246OmJlZm9yZSwudnNjb21wLWNsZWFyLWJ1dHRvbjpob3ZlciAudnNjb21wLWNsZWFyLWljb246OmFmdGVye2JhY2tncm91bmQtY29sb3I6IzMzM30udnNjb21wLWRyb3Bib3gtY2xvc2UtYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo1MCU7Ym90dG9tOi00OHB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6bm9uZTtoZWlnaHQ6NDBweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0yMHB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjQwcHh9LnZzY29tcC12YWx1ZS10YWcubW9yZS12YWx1ZS1jb3VudHt3aGl0ZS1zcGFjZTpub3dyYXB9LnZzY29tcC1kcm9wYm94LWNvbnRhaW5lcnt3aWR0aDoxMDAlO3otaW5kZXg6Mn0udnNjb21wLWRyb3Bib3h7YmFja2dyb3VuZC1jb2xvcjojZmZmO3dpZHRoOjEwMCV9LnZzY29tcC1vcHRpb25zLWNvbnRhaW5lcnttYXgtaGVpZ2h0OjIxMHB4O292ZXJmbG93OmF1dG87cG9zaXRpb246cmVsYXRpdmV9LnZzY29tcC1vcHRpb25zLWJvdHRvbS1mcmVlemVye2JvdHRvbTowO2hlaWdodDoycHg7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9LnZzY29tcC1vcHRpb257YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtoZWlnaHQ6NDBweDtwYWRkaW5nOjAgMTVweDtwb3NpdGlvbjpyZWxhdGl2ZX0udnNjb21wLW9wdGlvbi5zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LnZzY29tcC1vcHRpb24uZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOiNjY2N9LnZzY29tcC1vcHRpb24uZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouNX0udnNjb21wLW9wdGlvbi5ncm91cC10aXRsZSAudnNjb21wLW9wdGlvbi10ZXh0e2N1cnNvcjpkZWZhdWx0O29wYWNpdHk6LjZ9LnZzY29tcC1vcHRpb24uZ3JvdXAtdGl0bGUuc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS52c2NvbXAtb3B0aW9uLmdyb3VwLW9wdGlvbntwYWRkaW5nLWxlZnQ6MzBweH0udnNjb21wLW5ldy1vcHRpb24taWNvbntoZWlnaHQ6MzBweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3dpZHRoOjMwcHh9LnZzY29tcC1uZXctb3B0aW9uLWljb246OmJlZm9yZXtib3JkZXI6MTVweCBzb2xpZCAjNTEyZGE4O2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udnNjb21wLW5ldy1vcHRpb24taWNvbjo6YWZ0ZXJ7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7Y29udGVudDpcXFwiK1xcXCI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxOHB4O2hlaWdodDoxNXB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MXB4O3RvcDowO3dpZHRoOjE1cHh9LnZzY29tcC1vcHRpb24tdGV4dHtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3dpZHRoOjEwMCV9LnZzY29tcC1vcHRpb24tZGVzY3JpcHRpb257b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOiM2NjY7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MTVweDt3aWR0aDoxMDAlfS52c2NvbXAtc2VhcmNoLWNvbnRhaW5lcnthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQwcHg7cGFkZGluZzowIDVweCAwIDE1cHg7cG9zaXRpb246cmVsYXRpdmV9LnZzY29tcC1zZWFyY2gtbGFiZWwsLnZzY29tcC1saXZlLXJlZ2lvbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxcHh9LnZzY29tcC1zZWFyY2gtaW5wdXR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOjE1cHg7aGVpZ2h0OjM4cHg7cGFkZGluZzoxMHB4IDA7d2lkdGg6Y2FsYygxMDAlIC0gMzBweCl9LnZzY29tcC1zZWFyY2gtaW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS52c2NvbXAtc2VhcmNoLWNsZWFye2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MjVweDtoZWlnaHQ6MzBweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbjt3aWR0aDozMHB4fS52c2NvbXAtc2VhcmNoLWNsZWFyOmhvdmVye2NvbG9yOmluaGVyaXR9LnZzY29tcC1uby1vcHRpb25zLC52c2NvbXAtbm8tc2VhcmNoLXJlc3VsdHN7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjBweCAxMHB4fS52c2NvbXAtb3B0aW9ucy1sb2FkZXJ7ZGlzcGxheTpub25lO3BhZGRpbmc6MjBweCAwO3RleHQtYWxpZ246Y2VudGVyfS52c2NvbXAtb3B0aW9ucy1sb2FkZXI6OmJlZm9yZXthbmltYXRpb246dnNjb21wLWFuaW1hdGlvbi1zcGluIC44cyBpbmZpbml0ZSBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6LTRweCAtNXB4IDNweCAtM3B4IHJnYmEoMCwwLDAsLjMpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjQwcHg7b3BhY2l0eTouNzt3aWR0aDo0MHB4fS52c2NvbXAtZWxlW2Rpc2FibGVkXXtjdXJzb3I6bm90LWFsbG93ZWQ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS52c2NvbXAtZWxlW2Rpc2FibGVkXSAudnNjb21wLXdyYXBwZXJ7b3BhY2l0eTouNztwb2ludGVyLWV2ZW50czpub25lfS52c2NvbXAtd3JhcHBlciAuY2hlY2tib3gtaWNvbntkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxNXB4O21hcmdpbi1yaWdodDoxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE1cHh9LnZzY29tcC13cmFwcGVyIC5jaGVja2JveC1pY29uOjphZnRlcnt0cmFuc2l0aW9uLWR1cmF0aW9uOi4ycztib3JkZXI6MnB4IHNvbGlkICM4ODg7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS52c2NvbXAtd3JhcHBlciAuY2hlY2tib3gtaWNvbi5jaGVja2VkOjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGUoMXB4LCAtNHB4KTtib3JkZXItY29sb3I6IzUxMmRhODtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwKTt3aWR0aDo1MCV9LnZzY29tcC13cmFwcGVyLnNob3ctYXMtcG9wdXAgLnZzY29tcC1kcm9wYm94LWNvbnRhaW5lcnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC41KTtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMHZoO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGVmdDowO29wYWNpdHk6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6MCAxMHB4O3Bvc2l0aW9uOmZpeGVkO3RvcDowO3dpZHRoOjEwMHZ3fS52c2NvbXAtd3JhcHBlci5zaG93LWFzLXBvcHVwIC52c2NvbXAtZHJvcGJveHttYXJnaW4tdG9wOi0yNHB4O21heC1oZWlnaHQ6Y2FsYyg4MCUgLSA0OHB4KTttYXgtd2lkdGg6NTAwcHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6ODAlfS52c2NvbXAtd3JhcHBlci5zaG93LWFzLXBvcHVwIC52c2NvbXAtZHJvcGJveC1jbG9zZS1idXR0b257ZGlzcGxheTpmbGV4fS52c2NvbXAtd3JhcHBlci5wb3B1cC1wb3NpdGlvbi1sZWZ0IC52c2NvbXAtZHJvcGJveC1jb250YWluZXJ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnZzY29tcC13cmFwcGVyLnBvcHVwLXBvc2l0aW9uLXJpZ2h0IC52c2NvbXAtZHJvcGJveC1jb250YWluZXJ7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS52c2NvbXAtd3JhcHBlci5oYXMtc2VsZWN0LWFsbCAudnNjb21wLXRvZ2dsZS1hbGwtYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXh9LnZzY29tcC13cmFwcGVyLmhhcy1zZWxlY3QtYWxsIC52c2NvbXAtc2VhcmNoLWlucHV0LC52c2NvbXAtd3JhcHBlci5oYXMtc2VsZWN0LWFsbCAudnNjb21wLXRvZ2dsZS1hbGwtbGFiZWx7d2lkdGg6Y2FsYygxMDAlIC0gNTVweCl9LnZzY29tcC13cmFwcGVyLmhhcy1zZWxlY3QtYWxsIC52c2NvbXAtdG9nZ2xlLWFsbC1sYWJlbHtkaXNwbGF5Om5vbmV9LnZzY29tcC13cmFwcGVyOm5vdCguaGFzLXNlYXJjaC1pbnB1dCkgLnZzY29tcC10b2dnbGUtYWxsLWJ1dHRvbnt3aWR0aDoxMDAlfS52c2NvbXAtd3JhcHBlcjpub3QoLmhhcy1zZWFyY2gtaW5wdXQpIC52c2NvbXAtdG9nZ2xlLWFsbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9ja30udnNjb21wLXdyYXBwZXIubXVsdGlwbGUgLnZzY29tcC1vcHRpb24gLnZzY29tcC1vcHRpb24tdGV4dHt3aWR0aDpjYWxjKDEwMCUgLSAyNXB4KX0udnNjb21wLXdyYXBwZXIubXVsdGlwbGUgLnZzY29tcC1vcHRpb24gLnZzY29tcC1vcHRpb24tZGVzY3JpcHRpb257cGFkZGluZy1sZWZ0OjI1cHh9LnZzY29tcC13cmFwcGVyLm11bHRpcGxlIC52c2NvbXAtb3B0aW9uLnNlbGVjdGVkIC5jaGVja2JveC1pY29uOjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGUoMXB4LCAtNHB4KTtib3JkZXItY29sb3I6IzUxMmRhODtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwKTt3aWR0aDo1MCV9LnZzY29tcC13cmFwcGVyLmZvY3VzZWQgLnZzY29tcC10b2dnbGUtYnV0dG9uLC52c2NvbXAtd3JhcHBlcjpmb2N1cyAudnNjb21wLXRvZ2dsZS1idXR0b257Ym94LXNoYWRvdzowIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMTIpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjIpfS52c2NvbXAtd3JhcHBlci5jbG9zZWQgLnZzY29tcC1kcm9wYm94LWNvbnRhaW5lciwudnNjb21wLXdyYXBwZXIuY2xvc2VkLnZzY29tcC1kcm9wYm94LXdyYXBwZXJ7ZGlzcGxheTpub25lfS52c2NvbXAtd3JhcHBlcjpub3QoLmhhcy12YWx1ZSkgLnZzY29tcC12YWx1ZXtvcGFjaXR5Oi41fS52c2NvbXAtd3JhcHBlci5oYXMtY2xlYXItYnV0dG9uLmhhcy12YWx1ZSAudnNjb21wLWNsZWFyLWJ1dHRvbntkaXNwbGF5OmZsZXh9LnZzY29tcC13cmFwcGVyLmhhcy1jbGVhci1idXR0b24gLnZzY29tcC10b2dnbGUtYnV0dG9ue3BhZGRpbmctcmlnaHQ6NTRweH0udnNjb21wLXdyYXBwZXIuaGFzLW5vLW9wdGlvbnMgLnZzY29tcC1vcHRpb25zLWNvbnRhaW5lciwudnNjb21wLXdyYXBwZXIuaGFzLW5vLXNlYXJjaC1yZXN1bHRzIC52c2NvbXAtb3B0aW9ucy1jb250YWluZXJ7ZGlzcGxheTpub25lfS52c2NvbXAtd3JhcHBlci5oYXMtbm8tb3B0aW9ucyAudnNjb21wLW5vLW9wdGlvbnN7ZGlzcGxheTpmbGV4fS52c2NvbXAtd3JhcHBlci5oYXMtbm8tc2VhcmNoLXJlc3VsdHMgLnZzY29tcC1uby1zZWFyY2gtcmVzdWx0c3tkaXNwbGF5OmZsZXh9LnZzY29tcC13cmFwcGVyLmhhcy1zZWFyY2gtdmFsdWUgLnZzY29tcC1zZWFyY2gtY2xlYXJ7dmlzaWJpbGl0eTp2aXNpYmxlfS52c2NvbXAtd3JhcHBlci5oYXMtbm8tb3B0aW9ucyAudnNjb21wLXRvZ2dsZS1hbGwtYnV0dG9ue29wYWNpdHk6LjU7cG9pbnRlci1ldmVudHM6bm9uZX0udnNjb21wLXdyYXBwZXIua2VlcC1hbHdheXMtb3BlbiAudnNjb21wLXRvZ2dsZS1idXR0b257cGFkZGluZy1yaWdodDoyNHB4fS52c2NvbXAtd3JhcHBlci5rZWVwLWFsd2F5cy1vcGVuIC52c2NvbXAtY2xlYXItYnV0dG9ue3JpZ2h0OjVweH0udnNjb21wLXdyYXBwZXIua2VlcC1hbHdheXMtb3BlbiAudnNjb21wLWFycm93e2Rpc3BsYXk6bm9uZX0udnNjb21wLXdyYXBwZXIua2VlcC1hbHdheXMtb3BlbiAudnNjb21wLWRyb3Bib3gtY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MX0udnNjb21wLXdyYXBwZXIua2VlcC1hbHdheXMtb3BlbiAudnNjb21wLWRyb3Bib3h7dHJhbnNpdGlvbi1kdXJhdGlvbjowcztib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym94LXNoYWRvdzpub25lfS52c2NvbXAtd3JhcHBlci5rZWVwLWFsd2F5cy1vcGVuLmZvY3VzZWQsLnZzY29tcC13cmFwcGVyLmtlZXAtYWx3YXlzLW9wZW46Zm9jdXMsLnZzY29tcC13cmFwcGVyLmtlZXAtYWx3YXlzLW9wZW46aG92ZXJ7Ym94LXNoYWRvdzowIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMTIpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjIpfS52c2NvbXAtd3JhcHBlci5zZXJ2ZXItc2VhcmNoaW5nIC52c2NvbXAtb3B0aW9ucy1saXN0e2Rpc3BsYXk6bm9uZX0udnNjb21wLXdyYXBwZXIuc2VydmVyLXNlYXJjaGluZyAudnNjb21wLW9wdGlvbnMtbG9hZGVye2Rpc3BsYXk6YmxvY2t9LnZzY29tcC13cmFwcGVyLmhhcy1lcnJvciAudnNjb21wLXRvZ2dsZS1idXR0b257Ym9yZGVyLWNvbG9yOiNiMDAwMjB9LnZzY29tcC13cmFwcGVyLnNob3ctdmFsdWUtYXMtdGFncyAudnNjb21wLXRvZ2dsZS1idXR0b257cGFkZGluZzo0cHggMjJweCAwIDEwcHh9LnZzY29tcC13cmFwcGVyLnNob3ctdmFsdWUtYXMtdGFncyAudnNjb21wLXZhbHVle2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OjI4cHg7b3ZlcmZsb3c6YXV0bzt0ZXh0LW92ZXJmbG93OnVuc2V0O3doaXRlLXNwYWNlOm5vcm1hbH0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzIC52c2NvbXAtdmFsdWUtdGFne292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6MjBweDtkaXNwbGF5OmlubGluZS1mbGV4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE2cHg7bWFyZ2luOjAgNHB4IDRweCAwO21heC13aWR0aDoxMDAlO3BhZGRpbmc6MnB4IDNweCAycHggOHB4fS52c2NvbXAtd3JhcHBlci5zaG93LXZhbHVlLWFzLXRhZ3MgLnZzY29tcC12YWx1ZS10YWcubW9yZS12YWx1ZS1jb3VudHtwYWRkaW5nLXJpZ2h0OjhweH0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzIC52c2NvbXAtdmFsdWUtdGFnLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOmNhbGMoMTAwJSAtIDIwcHgpfS52c2NvbXAtd3JhcHBlci5zaG93LXZhbHVlLWFzLXRhZ3MgLnZzY29tcC12YWx1ZS10YWctY2xlYXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjIwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoyMHB4fS52c2NvbXAtd3JhcHBlci5zaG93LXZhbHVlLWFzLXRhZ3MgLnZzY29tcC12YWx1ZS10YWctY2xlYXItYnV0dG9uIC52c2NvbXAtY2xlYXItaWNvbnt0cmFuc2Zvcm06c2NhbGUoMC44KX0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzIC52c2NvbXAtYXJyb3d7aGVpZ2h0OjM0cHh9LnZzY29tcC13cmFwcGVyLnNob3ctdmFsdWUtYXMtdGFncyAudnNjb21wLWNsZWFyLWJ1dHRvbnttYXJnaW4tdG9wOjA7dG9wOjVweH0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzLmhhcy12YWx1ZSAudnNjb21wLWFycm93e2Rpc3BsYXk6bm9uZX0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzLmhhcy12YWx1ZSAudnNjb21wLWNsZWFyLWJ1dHRvbntyaWdodDoycHh9LnZzY29tcC13cmFwcGVyLnNob3ctdmFsdWUtYXMtdGFnczpub3QoLmhhcy12YWx1ZSkgLnZzY29tcC10b2dnbGUtYnV0dG9ue3BhZGRpbmctYm90dG9tOjJweH0udnNjb21wLXdyYXBwZXIuc2hvdy12YWx1ZS1hcy10YWdzOm5vdCguaGFzLXZhbHVlKSAudnNjb21wLXZhbHVle2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWJvdHRvbTozcHh9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bHtkaXJlY3Rpb246cnRsfS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwgLnZzY29tcC10b2dnbGUtYnV0dG9ue3BhZGRpbmc6N3B4IDEwcHggN3B4IDMwcHh9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bCAudnNjb21wLWFycm93e2xlZnQ6MDtyaWdodDphdXRvfS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwgLnZzY29tcC1jbGVhci1idXR0b257bGVmdDozMHB4O3JpZ2h0OmF1dG8gIWltcG9ydGFudH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsIC5jaGVja2JveC1pY29ue21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjB9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bCAuY2hlY2tib3gtaWNvbi5jaGVja2VkOjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGUoLTRweCwgMXB4KX0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsIC52c2NvbXAtc2VhcmNoLWNvbnRhaW5lcntwYWRkaW5nOjAgMTVweCAwIDVweH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsIC52c2NvbXAtdG9nZ2xlLWFsbC1sYWJlbHt0ZXh0LWFsaWduOnJpZ2h0fS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwgLnZzY29tcC1vcHRpb257dGV4dC1hbGlnbjpyaWdodH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsIC52c2NvbXAtb3B0aW9uLmdyb3VwLW9wdGlvbntwYWRkaW5nLXJpZ2h0OjMwcHh9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bCAudnNjb21wLW5ldy1vcHRpb24taWNvbntsZWZ0OjA7cmlnaHQ6YXV0b30udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsIC52c2NvbXAtbmV3LW9wdGlvbi1pY29uOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6IzUxMmRhODtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsIC52c2NvbXAtbmV3LW9wdGlvbi1pY29uOjphZnRlcntsZWZ0OjFweDtyaWdodDphdXRvfS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwubXVsdGlwbGUgLnZzY29tcC1vcHRpb24uc2VsZWN0ZWQgLmNoZWNrYm94LWljb246OmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHRyYW5zbGF0ZSgtNHB4LCAxcHgpfS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwuaGFzLWNsZWFyLWJ1dHRvbiAudnNjb21wLXRvZ2dsZS1idXR0b257cGFkZGluZy1sZWZ0OjU0cHh9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bC5rZWVwLWFsd2F5cy1vcGVuIC52c2NvbXAtdG9nZ2xlLWJ1dHRvbntwYWRkaW5nLWxlZnQ6MjRweH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsLmtlZXAtYWx3YXlzLW9wZW4gLnZzY29tcC1jbGVhci1idXR0b257bGVmdDo1cHh9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bC5zaG93LXZhbHVlLWFzLXRhZ3MgLnZzY29tcC10b2dnbGUtYnV0dG9ue3BhZGRpbmc6NHB4IDEwcHggMCAyMnB4fS52c2NvbXAtd3JhcHBlci50ZXh0LWRpcmVjdGlvbi1ydGwuc2hvdy12YWx1ZS1hcy10YWdzIC52c2NvbXAtdmFsdWUtdGFne21hcmdpbjowIDAgNHB4IDRweDtwYWRkaW5nOjJweCA4cHggMnB4IDNweH0udnNjb21wLXdyYXBwZXIudGV4dC1kaXJlY3Rpb24tcnRsLnNob3ctdmFsdWUtYXMtdGFncyAudnNjb21wLXZhbHVlLXRhZy5tb3JlLXZhbHVlLWNvdW50e3BhZGRpbmctbGVmdDo4cHh9LnZzY29tcC13cmFwcGVyLnRleHQtZGlyZWN0aW9uLXJ0bC5zaG93LXZhbHVlLWFzLXRhZ3MuaGFzLXZhbHVlIC52c2NvbXAtY2xlYXItYnV0dG9ue2xlZnQ6MnB4fVxcbi8qIVxcbiAqIFBvcG92ZXIgdjEuMC4xMlxcbiAqIGh0dHBzOi8vc2Etc2ktZGV2LmdpdGh1Yi5pby9wb3BvdmVyXFxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vc2Etc2ktZGV2L3BvcG92ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRSlcXG4gKi9cXG4ucG9wLWNvbXAtd3JhcHBlcntkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO29wYWNpdHk6MDtjb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLC4xMiksMCAxcHggNXB4IDAgcmdiYSgwLDAsMCwuMik7dGV4dC1hbGlnbjpsZWZ0O2ZsZXgtd3JhcDp3cmFwO3otaW5kZXg6MX0ucG9wLWNvbXAtYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7b3ZlcmZsb3c6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmV9LnBvcC1jb21wLWFycm93OjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4O2xlZnQ6OHB4O3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JveC1zaGFkb3c6MCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjEyKSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4yKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46bGVmdCB0b3A7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0IHRvcDstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5wb3AtY29tcC1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6Mn0ucG9wLWNvbXAtd3JhcHBlci5wb3NpdGlvbi1ib3R0b20+LnBvcC1jb21wLWFycm93e21hcmdpbi1sZWZ0Oi04cHg7bGVmdDowO3RvcDotMTVweH0ucG9wLWNvbXAtd3JhcHBlci5wb3NpdGlvbi1ib3R0b20+LnBvcC1jb21wLWFycm93OjpiZWZvcmV7Ym94LXNoYWRvdzowcHggMHB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KX0ucG9wLWNvbXAtd3JhcHBlci5wb3NpdGlvbi10b3A+LnBvcC1jb21wLWFycm93e21hcmdpbi1sZWZ0Oi04cHg7bGVmdDowO2JvdHRvbTotMTVweH0ucG9wLWNvbXAtd3JhcHBlci5wb3NpdGlvbi1yaWdodD4ucG9wLWNvbXAtYXJyb3d7bWFyZ2luLXRvcDotOHB4O3RvcDowO2xlZnQ6LTE1cHh9LnBvcC1jb21wLXdyYXBwZXIucG9zaXRpb24tbGVmdD4ucG9wLWNvbXAtYXJyb3d7bWFyZ2luLXRvcDotOHB4O3RvcDowO3JpZ2h0Oi0xNXB4fS5wb3AtY29tcC1kaXNhYmxlLWV2ZW50c3twb2ludGVyLWV2ZW50czpub25lfVxcblxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi92aXJ0dWFsLXNlbGVjdC5taW4uY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3ZpcnR1YWwtc2VsZWN0Lm1pbi5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLyohXG4gKiBWaXJ0dWFsIFNlbGVjdCB2MS4wLjM5XG4gKiBodHRwczovL3NhLXNpLWRldi5naXRodWIuaW8vdmlydHVhbC1zZWxlY3RcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3NhLXNpLWRldi92aXJ0dWFsLXNlbGVjdC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICovIWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gdChlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLGkpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0KGUsaSk7dmFyIG89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1vJiZlLmNvbnN0cnVjdG9yJiYobz1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1vfHxcIlNldFwiPT09bz9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1vfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChvKT90KGUsaSk6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gdChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgaT0wLG89bmV3IEFycmF5KHQpO2k8dDtpKyspb1tpXT1lW2ldO3JldHVybiBvfWZ1bmN0aW9uIGkoZSl7cmV0dXJuKGk9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtzLmVudW1lcmFibGU9cy5lbnVtZXJhYmxlfHwhMSxzLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBzJiYocy53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsKG49cy5rZXkscj12b2lkIDAscj1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPT1pKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgbz1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09byl7dmFyIHM9by5jYWxsKGUsdHx8XCJkZWZhdWx0XCIpO2lmKFwib2JqZWN0XCIhPT1pKHMpKXJldHVybiBzO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKX1yZXR1cm4oXCJzdHJpbmdcIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KG4sXCJzdHJpbmdcIiksXCJzeW1ib2xcIj09PWkocik/cjpTdHJpbmcocikpLHMpfXZhciBuLHJ9dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyx0KX12YXIgcyxuLHI7cmV0dXJuIHM9dCxyPVt7a2V5OlwiZ2V0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fDA9PT1lP2UudG9TdHJpbmcoKTpcIlwifX0se2tleTpcImNvbnZlcnRUb0Jvb2xlYW5cIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3JldHVybiEwPT09ZXx8XCJ0cnVlXCI9PT1lfHwhMSE9PWUmJlwiZmFsc2VcIiE9PWUmJnR9fSx7a2V5OlwiaXNFbXB0eVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiBlP0FycmF5LmlzQXJyYXkoZSk/MD09PWUubGVuZ3RoJiYodD0hMCk6XCJvYmplY3RcIj09PWkoZSkmJjA9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGgmJih0PSEwKTp0PSEwLHR9fSx7a2V5OlwiaXNOb3RFbXB0eVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLmlzRW1wdHkoZSl9fSx7a2V5OlwicmVtb3ZlSXRlbUZyb21BcnJheVwiLHZhbHVlOmZ1bmN0aW9uKHQsaSl7dmFyIG89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZighQXJyYXkuaXNBcnJheSh0KXx8IXQubGVuZ3RoKXJldHVybiB0O3ZhciBzPW8/ZSh0KTp0LG49cy5pbmRleE9mKGkpO3JldHVybi0xIT09biYmcy5zcGxpY2UobiwxKSxzfX0se2tleTpcInJlbW92ZUFycmF5RW1wdHlcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg/ZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pKTpbXX19LHtrZXk6XCJnZXRSYW5kb21JbnRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxpPU1hdGguY2VpbCh0KSxvPU1hdGguZmxvb3IoZSk7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooby1pLTEpKStpfX0se2tleTpcInJlZ2V4RXNjYXBlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZyxcIlxcXFwkJlwiKX19LHtrZXk6XCJub3JtYWxpemVTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub3JtYWxpemUoXCJORkRcIikucmVwbGFjZSgvW15cXHddL2csXCJcIil9fV0sKG49bnVsbCkmJm8ocy5wcm90b3R5cGUsbiksciYmbyhzLHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksdH0oKTtmdW5jdGlvbiBuKGUpe3JldHVybihuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiByKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciBpPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPWkpe3ZhciBvLHMsbixyLGE9W10sbD0hMCx1PSExO3RyeXtpZihuPShpPWkuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KGkpIT09aSlyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShvPW4uY2FsbChpKSkuZG9uZSkmJihhLnB1c2goby52YWx1ZSksYS5sZW5ndGghPT10KTtsPSEwKTt9Y2F0Y2goZSl7dT0hMCxzPWV9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPWkucmV0dXJuJiYocj1pLnJldHVybigpLE9iamVjdChyKSE9PXIpKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgc319cmV0dXJuIGF9fShlLHQpfHxsKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBhKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiB1KGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGwoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbChlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB1KGUsdCk7dmFyIGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1pJiZlLmNvbnN0cnVjdG9yJiYoaT1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1pfHxcIlNldFwiPT09aT9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1pfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChpKT91KGUsdCk6dm9pZCAwfX1mdW5jdGlvbiB1KGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBpPTAsbz1uZXcgQXJyYXkodCk7aTx0O2krKylvW2ldPWVbaV07cmV0dXJuIG99ZnVuY3Rpb24gcChlLHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwocz1vLmtleSxyPXZvaWQgMCxyPWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9PW4oZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciBpPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1pKXt2YXIgbz1pLmNhbGwoZSx0fHxcImRlZmF1bHRcIik7aWYoXCJvYmplY3RcIiE9PW4obykpcmV0dXJuIG87dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybihcInN0cmluZ1wiPT09dD9TdHJpbmc6TnVtYmVyKShlKX0ocyxcInN0cmluZ1wiKSxcInN5bWJvbFwiPT09bihyKT9yOlN0cmluZyhyKSksbyl9dmFyIHMscn12YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGUpfXZhciB0LGksbztyZXR1cm4gdD1lLG89W3trZXk6XCJhZGRDbGFzc1wiLHZhbHVlOmZ1bmN0aW9uKHQsaSl7aWYodCl7dmFyIG89aS5zcGxpdChcIiBcIik7ZS5nZXRFbGVtZW50cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdDsodD1lLmNsYXNzTGlzdCkuYWRkLmFwcGx5KHQsYShvKSl9KSl9fX0se2tleTpcInJlbW92ZUNsYXNzXCIsdmFsdWU6ZnVuY3Rpb24odCxpKXtpZih0KXt2YXIgbz1pLnNwbGl0KFwiIFwiKTtlLmdldEVsZW1lbnRzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PWUuY2xhc3NMaXN0KS5yZW1vdmUuYXBwbHkodCxhKG8pKX0pKX19fSx7a2V5OlwidG9nZ2xlQ2xhc3NcIix2YWx1ZTpmdW5jdGlvbih0LGksbyl7dmFyIHM7dCYmKHZvaWQgMCE9PW8mJihzPUJvb2xlYW4obykpLGUuZ2V0RWxlbWVudHModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QudG9nZ2xlKGkscyl9KSkpfX0se2tleTpcImhhc0NsYXNzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hIWUmJmUuY2xhc3NMaXN0LmNvbnRhaW5zKHQpfX0se2tleTpcImhhc0VsbGlwc2lzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiZlLnNjcm9sbFdpZHRoPmUub2Zmc2V0V2lkdGh9fSx7a2V5OlwiZ2V0RGF0YVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxpKXtpZihlKXt2YXIgbz1lP2UuZGF0YXNldFt0XTpcIlwiO3JldHVyblwibnVtYmVyXCI9PT1pP289cGFyc2VGbG9hdChvKXx8MDpcInRydWVcIj09PW8/bz0hMDpcImZhbHNlXCI9PT1vJiYobz0hMSksb319fSx7a2V5Olwic2V0RGF0YVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxpKXtlJiYoZS5kYXRhc2V0W3RdPWkpfX0se2tleTpcInNldEF0dHJcIix2YWx1ZTpmdW5jdGlvbihlLHQsaSl7ZSYmZS5zZXRBdHRyaWJ1dGUodCxpKX19LHtrZXk6XCJzZXRBdHRyRnJvbUVsZVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxpLG8pe3ZhciBzPXt9O2kuZm9yRWFjaCgoZnVuY3Rpb24odCl7c1t0XT1lLmdldEF0dHJpYnV0ZSh0KX0pKSxpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPXNbZV07KGl8fC0xIT09by5pbmRleE9mKGUpJiZcIlwiPT09aSkmJnQuc2V0QXR0cmlidXRlKGUsaSl9KSl9fSx7a2V5Olwic2V0U3R5bGVcIix2YWx1ZTpmdW5jdGlvbihlLHQsaSl7ZSYmKGUuc3R5bGVbdF09aSl9fSx7a2V5Olwic2V0U3R5bGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlJiZ0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihpKXtlLnN0eWxlW2ldPXRbaV19KSl9fSx7a2V5Olwic2V0QXJpYVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbz10O1wicm9sZVwiIT09byYmKG89XCJhcmlhLVwiLmNvbmNhdChvKSksZS5zZXRBdHRyaWJ1dGUobyxpKX19LHtrZXk6XCJnZXRFbGVtZW50c1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlP3ZvaWQgMD09PWUuZm9yRWFjaD9bZV06ZTpbXX19LHtrZXk6XCJhZGRFdmVudFwiLHZhbHVlOmZ1bmN0aW9uKHQsaSxvKXt0JiZzLnJlbW92ZUFycmF5RW1wdHkoaS5zcGxpdChcIiBcIikpLmZvckVhY2goKGZ1bmN0aW9uKGkpe2UuZ2V0RWxlbWVudHModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKGksbyl9KSl9KSl9fSx7a2V5OlwiZGlzcGF0Y2hFdmVudFwiLHZhbHVlOmZ1bmN0aW9uKHQsaSl7dmFyIG89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZih0KXt2YXIgcz1lLmdldEVsZW1lbnRzKHQpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGkse2J1YmJsZXM6b30pKX0pKX0pLDApfX19LHtrZXk6XCJnZXRBdHRyaWJ1dGVzVGV4dFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVwiXCI7cmV0dXJuIGU/KE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPXIoZSwyKSxvPWlbMF0scz1pWzFdO3ZvaWQgMCE9PXMmJih0Kz1cIiBcIi5jb25jYXQobywnPVwiJykuY29uY2F0KHMsJ1wiICcpKX0pKSx0KTp0fX0se2tleTpcImNvbnZlcnRQcm9wVG9EYXRhQXR0clwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlP1wiZGF0YS1cIi5jb25jYXQoZSkucmVwbGFjZSgvKFtBLVpdKS9nLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCk6XCJcIn19LHtrZXk6XCJjaGFuZ2VUYWJJbmRleFwiLHZhbHVlOmZ1bmN0aW9uKHQsaSl7dD9lLmdldEVsZW1lbnRzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UudGFiSW5kZXg9aX0pKTpjb25zb2xlLmxvZyh0LFwiSW52YWxpZCBlbGVtZW50IHByb3ZpZGVkLlwiKX19XSwoaT1udWxsKSYmcCh0LnByb3RvdHlwZSxpKSxvJiZwKHQsbyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxlfSgpO2Z1bmN0aW9uIGgoZSx0KXt2YXIgaT1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihvPW8uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLGkucHVzaC5hcHBseShpLG8pfXJldHVybiBpfWZ1bmN0aW9uIGQoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIGk9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/aChPYmplY3QoaSksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3YoZSx0LGlbdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoaSkpOmgoT2JqZWN0KGkpKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSx0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gdihlLHQsaSl7cmV0dXJuKHQ9Uyh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOmksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPWksZX1mdW5jdGlvbiBmKGUpe3JldHVybihmPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciBpPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPWkpe3ZhciBvLHMsbixyLGE9W10sbD0hMCx1PSExO3RyeXtpZihuPShpPWkuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KGkpIT09aSlyZXR1cm47bD0hMX1lbHNlIGZvcig7IShsPShvPW4uY2FsbChpKSkuZG9uZSkmJihhLnB1c2goby52YWx1ZSksYS5sZW5ndGghPT10KTtsPSEwKTt9Y2F0Y2goZSl7dT0hMCxzPWV9ZmluYWxseXt0cnl7aWYoIWwmJm51bGwhPWkucmV0dXJuJiYocj1pLnJldHVybigpLE9iamVjdChyKSE9PXIpKXJldHVybn1maW5hbGx5e2lmKHUpdGhyb3cgc319cmV0dXJuIGF9fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBiKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBnKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fG0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbShlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBnKGUsdCk7dmFyIGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1pJiZlLmNvbnN0cnVjdG9yJiYoaT1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1pfHxcIlNldFwiPT09aT9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1pfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChpKT9nKGUsdCk6dm9pZCAwfX1mdW5jdGlvbiBnKGUsdCl7KG51bGw9PXR8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBpPTAsbz1uZXcgQXJyYXkodCk7aTx0O2krKylvW2ldPWVbaV07cmV0dXJuIG99ZnVuY3Rpb24gTyhlLHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTKG8ua2V5KSxvKX19ZnVuY3Rpb24gUyhlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCIhPT1mKGUpfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgaT1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09aSl7dmFyIG89aS5jYWxsKGUsdHx8XCJkZWZhdWx0XCIpO2lmKFwib2JqZWN0XCIhPT1mKG8pKXJldHVybiBvO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKX1yZXR1cm4oXCJzdHJpbmdcIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGUsXCJzdHJpbmdcIik7cmV0dXJuXCJzeW1ib2xcIj09PWYodCk/dDpTdHJpbmcodCl9dmFyIHgsdz17MTM6XCJvbkVudGVyUHJlc3NcIiwzODpcIm9uVXBBcnJvd1ByZXNzXCIsNDA6XCJvbkRvd25BcnJvd1ByZXNzXCJ9LGs9W1wiYXV0b2ZvY3VzXCIsXCJkaXNhYmxlZFwiLFwibXVsdGlwbGVcIixcInJlcXVpcmVkXCJdLEU9W1wiYXV0b2ZvY3VzXCIsXCJjbGFzc1wiLFwiZGlzYWJsZWRcIixcImlkXCIsXCJtdWx0aXBsZVwiLFwibmFtZVwiLFwicGxhY2Vob2xkZXJcIixcInJlcXVpcmVkXCJdLEM9W1wiYWRkaXRpb25hbENsYXNzZXNcIixcImFsaWFzS2V5XCIsXCJhbGxPcHRpb25zU2VsZWN0ZWRUZXh0XCIsXCJhbGxvd05ld09wdGlvblwiLFwiYWx3YXlzU2hvd1NlbGVjdGVkT3B0aW9uc0NvdW50XCIsXCJhbHdheXNTaG93U2VsZWN0ZWRPcHRpb25zTGFiZWxcIixcImFyaWFMYWJlbGxlZGJ5XCIsXCJhcmlhTGFiZWxUZXh0XCIsXCJhdXRvU2VsZWN0Rmlyc3RPcHRpb25cIixcImNsZWFyQnV0dG9uVGV4dFwiLFwiZGVzY3JpcHRpb25LZXlcIixcImRpc2FibGVBbGxPcHRpb25zU2VsZWN0ZWRUZXh0XCIsXCJkaXNhYmxlT3B0aW9uR3JvdXBDaGVja2JveFwiLFwiZGlzYWJsZVNlbGVjdEFsbFwiLFwiZGlzYWJsZVZhbGlkYXRpb25cIixcImRyb3Bib3hXaWR0aFwiLFwiZHJvcGJveFdyYXBwZXJcIixcImVtcHR5VmFsdWVcIixcImVuYWJsZVNlY3VyZVRleHRcIixcImZvY3VzU2VsZWN0ZWRPcHRpb25Pbk9wZW5cIixcImhhc09wdGlvbkRlc2NyaXB0aW9uXCIsXCJoaWRlQ2xlYXJCdXR0b25cIixcImhpZGVWYWx1ZVRvb2x0aXBPblNlbGVjdEFsbFwiLFwia2VlcEFsd2F5c09wZW5cIixcImxhYmVsS2V5XCIsXCJtYXJrU2VhcmNoUmVzdWx0c1wiLFwibWF4VmFsdWVzXCIsXCJtYXhXaWR0aFwiLFwibWluVmFsdWVzXCIsXCJtb3JlVGV4dFwiLFwibm9PZkRpc3BsYXlWYWx1ZXNcIixcIm5vT3B0aW9uc1RleHRcIixcIm5vU2VhcmNoUmVzdWx0c1RleHRcIixcIm9wdGlvbkhlaWdodFwiLFwib3B0aW9uU2VsZWN0ZWRUZXh0XCIsXCJvcHRpb25zQ291bnRcIixcIm9wdGlvbnNTZWxlY3RlZFRleHRcIixcInBvcHVwRHJvcGJveEJyZWFrcG9pbnRcIixcInBvcHVwUG9zaXRpb25cIixcInBvc2l0aW9uXCIsXCJzZWFyY2hcIixcInNlYXJjaEJ5U3RhcnRzV2l0aFwiLFwic2VhcmNoRGVsYXlcIixcInNlYXJjaEZvcm1MYWJlbFwiLFwic2VhcmNoR3JvdXBcIixcInNlYXJjaE5vcm1hbGl6ZVwiLFwic2VhcmNoUGxhY2Vob2xkZXJUZXh0XCIsXCJzZWxlY3RBbGxPbmx5VmlzaWJsZVwiLFwic2VsZWN0QWxsVGV4dFwiLFwic2V0VmFsdWVBc0FycmF5XCIsXCJzaG93RHJvcGJveEFzUG9wdXBcIixcInNob3dPcHRpb25zT25seU9uU2VhcmNoXCIsXCJzaG93U2VsZWN0ZWRPcHRpb25zRmlyc3RcIixcInNob3dWYWx1ZUFzVGFnc1wiLFwic2lsZW50SW5pdGlhbFZhbHVlU2V0XCIsXCJ0ZXh0RGlyZWN0aW9uXCIsXCJ0b29sdGlwQWxpZ25tZW50XCIsXCJ0b29sdGlwRm9udFNpemVcIixcInRvb2x0aXBNYXhXaWR0aFwiLFwidXBkYXRlUG9zaXRpb25UaHJvdHRsZVwiLFwidXNlR3JvdXBWYWx1ZVwiLFwidmFsdWVLZXlcIixcInpJbmRleFwiXSxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGUpO3RyeXt0aGlzLmNyZWF0ZVNlY3VyZVRleHRFbGVtZW50cygpLHRoaXMuc2V0UHJvcHModCksdGhpcy5zZXREaXNhYmxlZE9wdGlvbnModC5kaXNhYmxlZE9wdGlvbnMpLHRoaXMuc2V0T3B0aW9ucyh0Lm9wdGlvbnMpLHRoaXMucmVuZGVyKCl9Y2F0Y2goZSl7Y29uc29sZS53YXJuKFwiQ291bGRuJ3QgaW5pdGlhdGUgVmlydHVhbCBTZWxlY3RcIiksY29uc29sZS5lcnJvcihlKX19dmFyIHQsaSxvO3JldHVybiB0PWUsbz1be2tleTpcImluaXRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgaT10LmVsZTtpZihpKXt2YXIgbz0hMTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSl7dmFyIHM9KGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChpKSkubGVuZ3RoO2lmKDA9PT1zKXJldHVybjsxPT09cyYmKG89ITApfXZvaWQgMCE9PWkubGVuZ3RoJiZ2b2lkIDAhPT1pLmZvckVhY2h8fChpPVtpXSxvPSEwKTt2YXIgbj1bXTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbihpKXtpLnZpcnR1YWxTZWxlY3Q/bi5wdXNoKGkudmlydHVhbFNlbGVjdCk6KHQuZWxlPWksXCJTRUxFQ1RcIj09PWkudGFnTmFtZSYmZS5zZXRQcm9wc0Zyb21TZWxlY3QodCksbi5wdXNoKG5ldyBlKHQpKSl9KSksbz9uWzBdOm59fX0se2tleTpcImdldEF0dHJQcm9wc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9Yy5jb252ZXJ0UHJvcFRvRGF0YUF0dHIsdD17fTtyZXR1cm4gRS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdPWV9KSksQy5mb3JFYWNoKChmdW5jdGlvbihpKXt0W2UoaSldPWl9KSksdH19LHtrZXk6XCJzZXRQcm9wc0Zyb21TZWxlY3RcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmVsZSxpPVtdLG89W10scz1mdW5jdGlvbiBlKHQpe3ZhciBzPVtdO3JldHVybiBBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQudmFsdWUscj17dmFsdWU6bn07XCJPUFRHUk9VUFwiPT09dC50YWdOYW1lPyhyLmxhYmVsPXQuZ2V0QXR0cmlidXRlKFwibGFiZWxcIiksci5vcHRpb25zPWUodCkpOnIubGFiZWw9dC5pbm5lckhUTUwscy5wdXNoKHIpLHQuZGlzYWJsZWQmJmkucHVzaChuKSx0LnNlbGVjdGVkJiZvLnB1c2gobil9KSksc30odCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2Muc2V0QXR0ckZyb21FbGUodCxuLE9iamVjdC5rZXlzKHgpLGspLHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobix0KSx0LnJlbW92ZSgpLGUuZWxlPW4sZS5vcHRpb25zPXMsZS5kaXNhYmxlZE9wdGlvbnM9aSxlLnNlbGVjdGVkVmFsdWU9b319LHtrZXk6XCJvbkZvcm1SZXNldFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LmNsb3Nlc3QoXCJmb3JtXCIpO3QmJnQucXVlcnlTZWxlY3RvckFsbChcIi52c2NvbXAtZWxlLXdyYXBwZXJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5wYXJlbnRFbGVtZW50LnZpcnR1YWxTZWxlY3QucmVzZXQoITApfSkpfX0se2tleTpcIm9uRm9ybVN1Ym1pdFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2UudmFsaWRhdGUodC50YXJnZXQuY2xvc2VzdChcImZvcm1cIikpfHx0LnByZXZlbnREZWZhdWx0KCl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4hMDt2YXIgdD0hMTtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yQWxsKFwiLnZzY29tcC1lbGUtd3JhcHBlclwiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgaT1lLnBhcmVudEVsZW1lbnQudmlydHVhbFNlbGVjdC52YWxpZGF0ZSgpO3R8fGl8fCh0PSEwKX0pKSwhdH19LHtrZXk6XCJyZXNldFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy52aXJ0dWFsU2VsZWN0LnJlc2V0KCl9fSx7a2V5Olwic2V0VmFsdWVNZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlOyhlPXRoaXMudmlydHVhbFNlbGVjdCkuc2V0VmFsdWVNZXRob2QuYXBwbHkoZSxhcmd1bWVudHMpfX0se2tleTpcInNldE9wdGlvbnNNZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlOyhlPXRoaXMudmlydHVhbFNlbGVjdCkuc2V0T3B0aW9uc01ldGhvZC5hcHBseShlLGFyZ3VtZW50cyl9fSx7a2V5Olwic2V0RGlzYWJsZWRPcHRpb25zTWV0aG9kXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTsoZT10aGlzLnZpcnR1YWxTZWxlY3QpLnNldERpc2FibGVkT3B0aW9uc01ldGhvZC5hcHBseShlLGFyZ3VtZW50cyl9fSx7a2V5Olwic2V0RW5hYmxlZE9wdGlvbnNNZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlOyhlPXRoaXMudmlydHVhbFNlbGVjdCkuc2V0RW5hYmxlZE9wdGlvbnNNZXRob2QuYXBwbHkoZSxhcmd1bWVudHMpfX0se2tleTpcInRvZ2dsZVNlbGVjdEFsbFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMudmlydHVhbFNlbGVjdC50b2dnbGVBbGxPcHRpb25zKGUpfX0se2tleTpcImlzQWxsU2VsZWN0ZWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpcnR1YWxTZWxlY3QuaXNBbGxTZWxlY3RlZH19LHtrZXk6XCJhZGRPcHRpb25NZXRob2RcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnZpcnR1YWxTZWxlY3QuYWRkT3B0aW9uKGUsITApfX0se2tleTpcImdldE5ld1ZhbHVlTWV0aG9kXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aXJ0dWFsU2VsZWN0LmdldE5ld1ZhbHVlKCl9fSx7a2V5OlwiZ2V0RGlzcGxheVZhbHVlTWV0aG9kXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aXJ0dWFsU2VsZWN0LmdldERpc3BsYXlWYWx1ZSgpfX0se2tleTpcImdldFNlbGVjdGVkT3B0aW9uc01ldGhvZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnZpcnR1YWxTZWxlY3QuZ2V0U2VsZWN0ZWRPcHRpb25zKGUpfX0se2tleTpcImdldERpc2FibGVkT3B0aW9uc01ldGhvZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlydHVhbFNlbGVjdC5nZXREaXNhYmxlZE9wdGlvbnMoKX19LHtrZXk6XCJvcGVuTWV0aG9kXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aXJ0dWFsU2VsZWN0Lm9wZW5Ecm9wYm94KCl9fSx7a2V5OlwiY2xvc2VNZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpcnR1YWxTZWxlY3QuY2xvc2VEcm9wYm94KCl9fSx7a2V5OlwiZm9jdXNNZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpcnR1YWxTZWxlY3QuZm9jdXMoKX19LHtrZXk6XCJlbmFibGVNZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpcnR1YWxTZWxlY3QuZW5hYmxlKCl9fSx7a2V5OlwiZGlzYWJsZU1ldGhvZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlydHVhbFNlbGVjdC5kaXNhYmxlKCl9fSx7a2V5OlwiZGVzdHJveU1ldGhvZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlydHVhbFNlbGVjdC5kZXN0cm95KCl9fSx7a2V5OlwidmFsaWRhdGVNZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpcnR1YWxTZWxlY3QudmFsaWRhdGUoKX19LHtrZXk6XCJ0b2dnbGVSZXF1aXJlZE1ldGhvZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnZpcnR1YWxTZWxlY3QudG9nZ2xlUmVxdWlyZWQoZSl9fSx7a2V5Olwib25SZXNpemVNZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudnNjb21wLWVsZS13cmFwcGVyXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucGFyZW50RWxlbWVudC52aXJ0dWFsU2VsZWN0Lm9uUmVzaXplKCl9KSl9fV0sKGk9W3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuJGVsZSl7dmFyIGU9dGhpcy51bmlxdWVJZCx0PVwidnNjb21wLXdyYXBwZXJcIixpPXRoaXMuZ2V0VG9vbHRpcEF0dHJUZXh0KHRoaXMucGxhY2Vob2xkZXIsITAsITApLG89dGhpcy5nZXRUb29sdGlwQXR0clRleHQodGhpcy5jbGVhckJ1dHRvblRleHQpLHM9dGhpcy5hcmlhTGFiZWxsZWRieT8nYXJpYS1sYWJlbGxlZGJ5PVwiJy5jb25jYXQodGhpcy5hcmlhTGFiZWxsZWRieSwnXCInKTpcIlwiLG49dGhpcy5hcmlhTGFiZWxUZXh0PydhcmlhLWxhYmVsPVwiJy5jb25jYXQodGhpcy5hcmlhTGFiZWxUZXh0LCdcIicpOlwiXCIscj0hMTt0aGlzLmFkZGl0aW9uYWxDbGFzc2VzJiYodCs9XCIgXCIuY29uY2F0KHRoaXMuYWRkaXRpb25hbENsYXNzZXMpKSx0aGlzLm11bHRpcGxlJiYodCs9XCIgbXVsdGlwbGVcIix0aGlzLmRpc2FibGVTZWxlY3RBbGx8fCh0Kz1cIiBoYXMtc2VsZWN0LWFsbFwiKSksdGhpcy5oaWRlQ2xlYXJCdXR0b258fCh0Kz1cIiBoYXMtY2xlYXItYnV0dG9uXCIpLHRoaXMua2VlcEFsd2F5c09wZW4/KHQrPVwiIGtlZXAtYWx3YXlzLW9wZW5cIixyPSEwKTp0Kz1cIiBjbG9zZWRcIix0aGlzLnNob3dBc1BvcHVwJiYodCs9XCIgc2hvdy1hcy1wb3B1cFwiKSx0aGlzLmhhc1NlYXJjaCYmKHQrPVwiIGhhcy1zZWFyY2gtaW5wdXRcIiksdGhpcy5zaG93VmFsdWVBc1RhZ3MmJih0Kz1cIiBzaG93LXZhbHVlLWFzLXRhZ3NcIiksdGhpcy50ZXh0RGlyZWN0aW9uJiYodCs9XCIgdGV4dC1kaXJlY3Rpb24tXCIuY29uY2F0KHRoaXMudGV4dERpcmVjdGlvbikpLHRoaXMucG9wdXBQb3NpdGlvbiYmKHQrPVwiIHBvcHVwLXBvc2l0aW9uLVwiLmNvbmNhdCh0aGlzLnBvcHVwUG9zaXRpb24udG9Mb3dlckNhc2UoKSkpO3ZhciBhPSc8ZGl2IGlkPVwidnNjb21wLWVsZS13cmFwcGVyLScuY29uY2F0KGUsJ1wiIGNsYXNzPVwidnNjb21wLWVsZS13cmFwcGVyICcpLmNvbmNhdCh0LCdcIiB0YWJpbmRleD1cIjBcIlxcbiAgICAgICAgcm9sZT1cImNvbWJvYm94XCIgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIiBhcmlhLWNvbnRyb2xzPVwidnNjb21wLWRyb3Bib3gtY29udGFpbmVyLScpLmNvbmNhdChlLCdcIlxcbiAgICAgICAgYXJpYS1leHBhbmRlZD1cIicpLmNvbmNhdChyLCdcIiAnKS5jb25jYXQocyxcIiBcIikuY29uY2F0KG4sJ1xcbiAgICAgID5cXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIicpLmNvbmNhdCh0aGlzLm5hbWUsJ1wiIGNsYXNzPVwidnNjb21wLWhpZGRlbi1pbnB1dFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cInZzY29tcC10b2dnbGUtYnV0dG9uXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2c2NvbXAtdmFsdWVcIiAnKS5jb25jYXQoaSxcIj5cXG4gICAgICAgICAgICBcIikuY29uY2F0KHRoaXMucGxhY2Vob2xkZXIsJ1xcbiAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZzY29tcC1hcnJvd1wiPjwvZGl2PlxcblxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidnNjb21wLWNsZWFyLWJ1dHRvbiB0b2dnbGUtYnV0dG9uLWNoaWxkXCIgJykuY29uY2F0KG8sJz5cXG4gICAgICAgICAgICA8aSBjbGFzcz1cInZzY29tcC1jbGVhci1pY29uXCI+PC9pPlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPHNlY3Rpb24gcm9sZT1cInJlZ2lvblwiIGNsYXNzPVwidnNjb21wLWxpdmUtcmVnaW9uXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XFxuICAgICAgICAgIDxwIGNsYXNzPVwidnNjb21wLWxpdmUtcmVnaW9uLXRpdGxlXCI+PC9wPlxcbiAgICAgICAgPC9zZWN0aW9uPlxcblxcbiAgICAgICAgJykuY29uY2F0KHRoaXMucmVuZGVyRHJvcGJveCh7d3JhcHBlckNsYXNzZXM6dH0pLFwiXFxuICAgICAgPC9kaXY+XCIpO3RoaXMuJGVsZS5pbm5lckhUTUw9YSx0aGlzLiRib2R5PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpLHRoaXMuJHdyYXBwZXI9dGhpcy4kZWxlLnF1ZXJ5U2VsZWN0b3IoXCIudnNjb21wLXdyYXBwZXJcIiksdGhpcy4kYXJpYUxpdmVFbGVtPXRoaXMuJGVsZS5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC1saXZlLXJlZ2lvbi10aXRsZVwiKSx0aGlzLmhhc0Ryb3Bib3hXcmFwcGVyPyh0aGlzLiRhbGxXcmFwcGVycz1bdGhpcy4kd3JhcHBlcix0aGlzLiRkcm9wYm94V3JhcHBlcl0sdGhpcy4kZHJvcGJveENvbnRhaW5lcj10aGlzLiRkcm9wYm94V3JhcHBlci5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC1kcm9wYm94LWNvbnRhaW5lclwiKSxjLmFkZENsYXNzKHRoaXMuJGRyb3Bib3hDb250YWluZXIsXCJwb3AtY29tcC13cmFwcGVyXCIpKToodGhpcy4kYWxsV3JhcHBlcnM9W3RoaXMuJHdyYXBwZXJdLHRoaXMuJGRyb3Bib3hDb250YWluZXI9dGhpcy4kd3JhcHBlci5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC1kcm9wYm94LWNvbnRhaW5lclwiKSksdGhpcy4kdG9nZ2xlQnV0dG9uPXRoaXMuJGVsZS5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC10b2dnbGUtYnV0dG9uXCIpLHRoaXMuJGNsZWFyQnV0dG9uPXRoaXMuJGVsZS5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC1jbGVhci1idXR0b25cIiksdGhpcy4kdmFsdWVUZXh0PXRoaXMuJGVsZS5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC12YWx1ZVwiKSx0aGlzLiRoaWRkZW5JbnB1dD10aGlzLiRlbGUucXVlcnlTZWxlY3RvcihcIi52c2NvbXAtaGlkZGVuLWlucHV0XCIpLHRoaXMuJGRyb3Bib3g9dGhpcy4kZHJvcGJveENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC1kcm9wYm94XCIpLHRoaXMuJGRyb3Bib3hDbG9zZUJ1dHRvbj10aGlzLiRkcm9wYm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIudnNjb21wLWRyb3Bib3gtY2xvc2UtYnV0dG9uXCIpLHRoaXMuJHNlYXJjaD10aGlzLiRkcm9wYm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIudnNjb21wLXNlYXJjaC13cmFwcGVyXCIpLHRoaXMuJG9wdGlvbnNDb250YWluZXI9dGhpcy4kZHJvcGJveENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC1vcHRpb25zLWNvbnRhaW5lclwiKSx0aGlzLiRvcHRpb25zTGlzdD10aGlzLiRkcm9wYm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIudnNjb21wLW9wdGlvbnMtbGlzdFwiKSx0aGlzLiRvcHRpb25zPXRoaXMuJGRyb3Bib3hDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi52c2NvbXAtb3B0aW9uc1wiKSx0aGlzLiRub09wdGlvbnM9dGhpcy4kZHJvcGJveENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC1uby1vcHRpb25zXCIpLHRoaXMuJG5vU2VhcmNoUmVzdWx0cz10aGlzLiRkcm9wYm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIudnNjb21wLW5vLXNlYXJjaC1yZXN1bHRzXCIpLHRoaXMuYWZ0ZXJSZW5kZXJXcmFwcGVyKCl9fX0se2tleTpcInJlbmRlckRyb3Bib3hcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLndyYXBwZXJDbGFzc2VzLGk9XCJzZWxmXCIhPT10aGlzLmRyb3Bib3hXcmFwcGVyP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5kcm9wYm94V3JhcHBlcik6bnVsbCxvPSc8ZGl2IGlkPVwidnNjb21wLWRyb3Bib3gtY29udGFpbmVyLScuY29uY2F0KHRoaXMudW5pcXVlSWQsJ1wiIHJvbGU9XCJsaXN0Ym94XCIgY2xhc3M9XCJ2c2NvbXAtZHJvcGJveC1jb250YWluZXJcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2c2NvbXAtZHJvcGJveFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidnNjb21wLXNlYXJjaC13cmFwcGVyXCI+PC9kaXY+XFxuXFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2c2NvbXAtb3B0aW9ucy1jb250YWluZXJcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidnNjb21wLW9wdGlvbnMtbG9hZGVyXCI+PC9kaXY+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZzY29tcC1vcHRpb25zLWxpc3RcIj5cXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2c2NvbXAtb3B0aW9uc1wiPjwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZzY29tcC1vcHRpb25zLWJvdHRvbS1mcmVlemVyXCI+PC9kaXY+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2c2NvbXAtbm8tb3B0aW9uc1wiPicpLmNvbmNhdCh0aGlzLm5vT3B0aW9uc1RleHQsJzwvZGl2PlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidnNjb21wLW5vLXNlYXJjaC1yZXN1bHRzXCI+JykuY29uY2F0KHRoaXMubm9TZWFyY2hSZXN1bHRzVGV4dCwnPC9kaXY+XFxuXFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidnNjb21wLWRyb3Bib3gtY2xvc2UtYnV0dG9uXCI+PGkgY2xhc3M9XCJ2c2NvbXAtY2xlYXItaWNvblwiPjwvaT48L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4nKTtpZihpKXt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiB0aGlzLiRkcm9wYm94V3JhcHBlcj1zLHRoaXMuaGFzRHJvcGJveFdyYXBwZXI9ITAscy5pbm5lckhUTUw9byxpLmFwcGVuZENoaWxkKHMpLGMuYWRkQ2xhc3MocyxcInZzY29tcC1kcm9wYm94LXdyYXBwZXIgXCIuY29uY2F0KHQpKSxcIlwifXJldHVybiB0aGlzLmhhc0Ryb3Bib3hXcmFwcGVyPSExLG99fSx7a2V5OlwicmVuZGVyT3B0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLGk9XCJcIixvPXRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKSxuPVwiXCIscj1cIlwiLGE9ISghdGhpcy5tYXJrU2VhcmNoUmVzdWx0c3x8IXRoaXMuc2VhcmNoVmFsdWUpLGw9dGhpcy5sYWJlbFJlbmRlcmVyLHU9dGhpcy5kaXNhYmxlT3B0aW9uR3JvdXBDaGVja2JveCxwPXRoaXMudW5pcXVlSWQsYz10aGlzLnNlYXJjaEdyb3VwLGg9XCJmdW5jdGlvblwiPT10eXBlb2YgbCxkPXMuY29udmVydFRvQm9vbGVhbjtpZihhJiYoZT1uZXcgUmVnRXhwKFwiKFwiLmNvbmNhdChzLnJlZ2V4RXNjYXBlKHRoaXMuc2VhcmNoVmFsdWUpLFwiKSg/IShbXjxdKyk/PilcIiksXCJnaVwiKSksdGhpcy5tdWx0aXBsZSYmKG49JzxzcGFuIGNsYXNzPVwiY2hlY2tib3gtaWNvblwiPjwvc3Bhbj4nKSx0aGlzLmFsbG93TmV3T3B0aW9uKXt2YXIgdj10aGlzLmdldFRvb2x0aXBBdHRyVGV4dChcIk5ldyBPcHRpb25cIik7cj0nPHNwYW4gY2xhc3M9XCJ2c2NvbXAtbmV3LW9wdGlvbi1pY29uXCIgJy5jb25jYXQodixcIj48L3NwYW4+XCIpfW8uZm9yRWFjaCgoZnVuY3Rpb24obyl7dmFyIHMsdj1vLmluZGV4LGY9XCJ2c2NvbXAtb3B0aW9uXCIseT10LmdldFRvb2x0aXBBdHRyVGV4dChcIlwiLCEwLCEwKSxiPW4sbT1cIlwiLGc9XCJcIixPPVwiXCIsUz1kKG8uaXNTZWxlY3RlZCkseD1cIlwiO28uY2xhc3NOYW1lcyYmKGYrPVwiIFwiLmNvbmNhdChvLmNsYXNzTmFtZXMpKSxvLmlzRm9jdXNlZCYmKGYrPVwiIGZvY3VzZWRcIiksby5pc0Rpc2FibGVkJiYoZis9XCIgZGlzYWJsZWRcIix4PSdhcmlhLWRpc2FibGVkPVwidHJ1ZVwiJyksby5pc0dyb3VwVGl0bGUmJihmKz1cIiBncm91cC10aXRsZVwiLHUmJihiPVwiXCIpKSxTJiYoZis9XCIgc2VsZWN0ZWRcIiksby5pc0dyb3VwT3B0aW9uJiYoZis9XCIgZ3JvdXAtb3B0aW9uXCIsTz0nZGF0YS1ncm91cC1pbmRleD1cIicuY29uY2F0KG8uZ3JvdXBJbmRleCwnXCInKSkscz1oP2wobyk6by5sYWJlbCxvLmRlc2NyaXB0aW9uJiYoZz0nPGRpdiBjbGFzcz1cInZzY29tcC1vcHRpb24tZGVzY3JpcHRpb25cIiAnLmNvbmNhdCh5LFwiPlwiKS5jb25jYXQoby5kZXNjcmlwdGlvbixcIjwvZGl2PlwiKSksby5pc0N1cnJlbnROZXc/KGYrPVwiIGN1cnJlbnQtbmV3XCIsbSs9cik6IWF8fG8uaXNHcm91cFRpdGxlJiYhY3x8KHM9cy5yZXBsYWNlKGUsXCI8bWFyaz4kMTwvbWFyaz5cIikpLGkrPSc8ZGl2IHJvbGU9XCJvcHRpb25cIiBhcmlhLXNlbGVjdGVkPVwiJy5jb25jYXQoUywnXCIgaWQ9XCJ2c2NvbXAtb3B0aW9uLScpLmNvbmNhdChwLFwiLVwiKS5jb25jYXQodiwnXCJcXG4gICAgICAgICAgY2xhc3M9XCInKS5jb25jYXQoZiwnXCIgZGF0YS12YWx1ZT1cIicpLmNvbmNhdChvLnZhbHVlLCdcIiBkYXRhLWluZGV4PVwiJykuY29uY2F0KHYsJ1wiIGRhdGEtdmlzaWJsZS1pbmRleD1cIicpLmNvbmNhdChvLnZpc2libGVJbmRleCwnXCIgdGFiaW5kZXg9XCIwXCIgJykuY29uY2F0KE8sXCIgXCIpLmNvbmNhdCh4LFwiXFxuICAgICAgICA+XFxuICAgICAgICAgIFwiKS5jb25jYXQoYiwnXFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidnNjb21wLW9wdGlvbi10ZXh0XCIgJykuY29uY2F0KHksXCI+XFxuICAgICAgICAgICAgXCIpLmNvbmNhdChzLFwiXFxuICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgXCIpLmNvbmNhdChnLFwiXFxuICAgICAgICAgIFwiKS5jb25jYXQobSxcIlxcbiAgICAgICAgPC9kaXY+XCIpfSkpLHRoaXMuJG9wdGlvbnMuaW5uZXJIVE1MPWksdGhpcy4kdmlzaWJsZU9wdGlvbnM9dGhpcy4kb3B0aW9ucy5xdWVyeVNlbGVjdG9yQWxsKFwiLnZzY29tcC1vcHRpb25cIiksdGhpcy5hZnRlclJlbmRlck9wdGlvbnMoKX19LHtrZXk6XCJyZW5kZXJTZWFyY2hcIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuaGFzU2VhcmNoQ29udGFpbmVyKXt2YXIgZT1cIlwiLHQ9XCJcIjt0aGlzLm11bHRpcGxlJiYhdGhpcy5kaXNhYmxlU2VsZWN0QWxsJiYoZT0nPHNwYW4gY2xhc3M9XCJ2c2NvbXAtdG9nZ2xlLWFsbC1idXR0b25cIj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVja2JveC1pY29uIHZzY29tcC10b2dnbGUtYWxsLWNoZWNrYm94XCI+PC9zcGFuPlxcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInZzY29tcC10b2dnbGUtYWxsLWxhYmVsXCI+Jy5jb25jYXQodGhpcy5zZWxlY3RBbGxUZXh0LFwiPC9zcGFuPlxcbiAgICAgICAgPC9zcGFuPlwiKSksdGhpcy5oYXNTZWFyY2gmJih0PSc8bGFiZWwgZm9yPVwidnNjb21wLXNlYXJjaC1pbnB1dC0nLmNvbmNhdCh0aGlzLnVuaXF1ZUlkLCdcIiBjbGFzcz1cInZzY29tcC1zZWFyY2gtbGFiZWxcIiBpZD1cInZzY29tcC1zZWFyY2gtbGFiZWwtJykuY29uY2F0KHRoaXMudW5pcXVlSWQsJ1wiPicpLmNvbmNhdCh0aGlzLnNlYXJjaEZvcm1MYWJlbCwnPC9sYWJlbD5cXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cInZzY29tcC1zZWFyY2gtaW5wdXRcIiBwbGFjZWhvbGRlcj1cIicpLmNvbmNhdCh0aGlzLnNlYXJjaFBsYWNlaG9sZGVyVGV4dCwnXCIgaWQ9XCJ2c2NvbXAtc2VhcmNoLWlucHV0LScpLmNvbmNhdCh0aGlzLnVuaXF1ZUlkLCdcIj5cXG4gICAgICA8c3BhbiBjbGFzcz1cInZzY29tcC1zZWFyY2gtY2xlYXJcIj4mdGltZXM7PC9zcGFuPicpKTt2YXIgaT0nPGRpdiBjbGFzcz1cInZzY29tcC1zZWFyY2gtY29udGFpbmVyXCI+XFxuICAgICAgICAnLmNvbmNhdChlLFwiXFxuICAgICAgICBcIikuY29uY2F0KHQsXCJcXG4gICAgICA8L2Rpdj5cIik7dGhpcy4kc2VhcmNoLmlubmVySFRNTD1pLHRoaXMuJHNlYXJjaElucHV0PXRoaXMuJGRyb3Bib3hDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi52c2NvbXAtc2VhcmNoLWlucHV0XCIpLHRoaXMuJHNlYXJjaENsZWFyPXRoaXMuJGRyb3Bib3hDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi52c2NvbXAtc2VhcmNoLWNsZWFyXCIpLHRoaXMuJHRvZ2dsZUFsbEJ1dHRvbj10aGlzLiRkcm9wYm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIudnNjb21wLXRvZ2dsZS1hbGwtYnV0dG9uXCIpLHRoaXMuJHRvZ2dsZUFsbENoZWNrYm94PXRoaXMuJGRyb3Bib3hDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi52c2NvbXAtdG9nZ2xlLWFsbC1jaGVja2JveFwiKSx0aGlzLmFkZEV2ZW50KHRoaXMuJHNlYXJjaElucHV0LFwiaW5wdXRcIixcIm9uU2VhcmNoXCIpLHRoaXMuYWRkRXZlbnQodGhpcy4kc2VhcmNoQ2xlYXIsXCJjbGlja1wiLFwib25TZWFyY2hDbGVhclwiKSx0aGlzLmFkZEV2ZW50KHRoaXMuJHRvZ2dsZUFsbEJ1dHRvbixcImNsaWNrXCIsXCJvblRvZ2dsZUFsbE9wdGlvbnNcIil9fX0se2tleTpcImFkZEV2ZW50c1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hZGRFdmVudChkb2N1bWVudCxcImNsaWNrXCIsXCJvbkRvY3VtZW50Q2xpY2tcIiksdGhpcy5hZGRFdmVudCh0aGlzLiRhbGxXcmFwcGVycyxcImtleWRvd25cIixcIm9uS2V5RG93blwiKSx0aGlzLmFkZEV2ZW50KHRoaXMuJHRvZ2dsZUJ1dHRvbixcImNsaWNrXCIsXCJvblRvZ2dsZUJ1dHRvbkNsaWNrXCIpLHRoaXMuYWRkRXZlbnQodGhpcy4kY2xlYXJCdXR0b24sXCJjbGlja1wiLFwib25DbGVhckJ1dHRvbkNsaWNrXCIpLHRoaXMuYWRkRXZlbnQodGhpcy4kZHJvcGJveENvbnRhaW5lcixcImNsaWNrXCIsXCJvbkRyb3Bib3hDb250YWluZXJDbGlja1wiKSx0aGlzLmFkZEV2ZW50KHRoaXMuJGRyb3Bib3hDbG9zZUJ1dHRvbixcImNsaWNrXCIsXCJvbkRyb3Bib3hDbG9zZUJ1dHRvbkNsaWNrXCIpLHRoaXMuYWRkRXZlbnQodGhpcy4kb3B0aW9uc0NvbnRhaW5lcixcInNjcm9sbFwiLFwib25PcHRpb25zU2Nyb2xsXCIpLHRoaXMuYWRkRXZlbnQodGhpcy4kb3B0aW9ucyxcImNsaWNrXCIsXCJvbk9wdGlvbnNDbGlja1wiKSx0aGlzLmFkZEV2ZW50KHRoaXMuJG9wdGlvbnMsXCJtb3VzZW92ZXJcIixcIm9uT3B0aW9uc01vdXNlT3ZlclwiKSx0aGlzLmFkZEV2ZW50KHRoaXMuJG9wdGlvbnMsXCJ0b3VjaG1vdmVcIixcIm9uT3B0aW9uc1RvdWNoTW92ZVwiKSx0aGlzLmFkZE11dGF0aW9uT2JzZXJ2ZXIoKX19LHtrZXk6XCJhZGRFdmVudFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbz10aGlzO2UmJnMucmVtb3ZlQXJyYXlFbXB0eSh0LnNwbGl0KFwiIFwiKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHM9XCJcIi5jb25jYXQoaSxcIi1cIikuY29uY2F0KHQpLG49by5ldmVudHNbc107bnx8KG49b1tpXS5iaW5kKG8pLG8uZXZlbnRzW3NdPW4pLGMuYWRkRXZlbnQoZSx0LG4pfSkpfX0se2tleTpcIm9uRG9jdW1lbnRDbGlja1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LmNsb3Nlc3QoXCIudnNjb21wLXdyYXBwZXJcIik7dCE9PXRoaXMuJHdyYXBwZXImJnQhPT10aGlzLiRkcm9wYm94V3JhcHBlciYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmNsb3NlRHJvcGJveCgpfX0se2tleTpcIm9uS2V5RG93blwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUud2hpY2h8fGUua2V5Q29kZSxpPXdbdF07ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuJHNlYXJjaElucHV0JiYoOT09PXR8fGUuc2hpZnRLZXkmJjk9PT10KT90aGlzLmNsb3NlRHJvcGJveCgpOmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLiR3cmFwcGVyfHwyNyE9PXQmJlwiRXNjYXBlXCIhPT1lLmtleXx8IXRoaXMuc2hvd0FzUG9wdXA/aSYmdGhpc1tpXShlKTp0aGlzLmNsb3NlRHJvcGJveCgpfX0se2tleTpcIm9uRW50ZXJQcmVzc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmlzT3BlbmVkKCk/dGhpcy5zZWxlY3RGb2N1c2VkT3B0aW9uKCk6dGhpcy5vcGVuRHJvcGJveCgpfX0se2tleTpcIm9uRG93bkFycm93UHJlc3NcIix2YWx1ZTpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5pc09wZW5lZCgpP3RoaXMuZm9jdXNPcHRpb24oe2RpcmVjdGlvbjpcIm5leHRcIn0pOnRoaXMub3BlbkRyb3Bib3goKX19LHtrZXk6XCJvblVwQXJyb3dQcmVzc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmlzT3BlbmVkKCk/dGhpcy5mb2N1c09wdGlvbih7ZGlyZWN0aW9uOlwicHJldmlvdXNcIn0pOnRoaXMub3BlbkRyb3Bib3goKX19LHtrZXk6XCJvblRvZ2dsZUJ1dHRvbkNsaWNrXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7dC5jbG9zZXN0KFwiLnZzY29tcC12YWx1ZS10YWctY2xlYXItYnV0dG9uXCIpP3RoaXMucmVtb3ZlVmFsdWUodC5jbG9zZXN0KFwiLnZzY29tcC12YWx1ZS10YWdcIikpOnQuY2xvc2VzdChcIi50b2dnbGUtYnV0dG9uLWNoaWxkXCIpfHx0aGlzLnRvZ2dsZURyb3Bib3goKX19LHtrZXk6XCJvbkNsZWFyQnV0dG9uQ2xpY2tcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucmVzZXQoKX19LHtrZXk6XCJvbk9wdGlvbnNTY3JvbGxcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0VmlzaWJsZU9wdGlvbnMoKX19LHtrZXk6XCJvbk9wdGlvbnNDbGlja1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LmNsb3Nlc3QoXCIudnNjb21wLW9wdGlvblwiKTt0JiYhYy5oYXNDbGFzcyh0LFwiZGlzYWJsZWRcIikmJihjLmhhc0NsYXNzKHQsXCJncm91cC10aXRsZVwiKT90aGlzLm9uR3JvdXBUaXRsZUNsaWNrKHQpOnRoaXMuc2VsZWN0T3B0aW9uKHQse2V2ZW50OmV9KSl9fSx7a2V5Olwib25Hcm91cFRpdGxlQ2xpY2tcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlJiZ0aGlzLm11bHRpcGxlJiYhdGhpcy5kaXNhYmxlT3B0aW9uR3JvdXBDaGVja2JveCl7dmFyIHQ9IWMuaGFzQ2xhc3MoZSxcInNlbGVjdGVkXCIpO3RoaXMudG9nZ2xlR3JvdXBUaXRsZUNoZWNrYm94KGUsdCksdGhpcy50b2dnbGVHcm91cE9wdGlvbnMoZSx0KX19fSx7a2V5Olwib25Ecm9wYm94Q29udGFpbmVyQ2xpY2tcIix2YWx1ZTpmdW5jdGlvbihlKXtlLnRhcmdldC5jbG9zZXN0KFwiLnZzY29tcC1kcm9wYm94XCIpfHx0aGlzLmNsb3NlRHJvcGJveCgpfX0se2tleTpcIm9uRHJvcGJveENsb3NlQnV0dG9uQ2xpY2tcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VEcm9wYm94KCl9fSx7a2V5Olwib25PcHRpb25zTW91c2VPdmVyXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQuY2xvc2VzdChcIi52c2NvbXAtb3B0aW9uXCIpO3QmJnRoaXMuaXNPcGVuZWQoKSYmKGMuaGFzQ2xhc3ModCxcImRpc2FibGVkXCIpfHxjLmhhc0NsYXNzKHQsXCJncm91cC10aXRsZVwiKT90aGlzLnJlbW92ZU9wdGlvbkZvY3VzKCk6dGhpcy5mb2N1c09wdGlvbih7JG9wdGlvbjp0fSkpfX0se2tleTpcIm9uT3B0aW9uc1RvdWNoTW92ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVPcHRpb25Gb2N1cygpfX0se2tleTpcIm9uU2VhcmNoXCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnNldFNlYXJjaFZhbHVlKGUudGFyZ2V0LnZhbHVlLCEwKX19LHtrZXk6XCJvblNlYXJjaENsZWFyXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldFNlYXJjaFZhbHVlKFwiXCIpLHRoaXMuZm9jdXNTZWFyY2hJbnB1dCgpfX0se2tleTpcIm9uVG9nZ2xlQWxsT3B0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVBbGxPcHRpb25zKCl9fSx7a2V5Olwib25SZXNpemVcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0T3B0aW9uc0NvbnRhaW5lckhlaWdodCghMCl9fSx7a2V5OlwiYWRkTXV0YXRpb25PYnNlcnZlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLmhhc0Ryb3Bib3hXcmFwcGVyKXt2YXIgdD10aGlzLiRlbGU7dGhpcy5tdXRhdGlvbk9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKChmdW5jdGlvbihpKXt2YXIgbz0hMSxzPSExO2kuZm9yRWFjaCgoZnVuY3Rpb24oZSl7b3x8KG89YihlLmFkZGVkTm9kZXMpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiEoZSE9PXQmJiFlLmNvbnRhaW5zKHQpKX0pKSksc3x8KHM9YihlLnJlbW92ZWROb2Rlcykuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIShlIT09dCYmIWUuY29udGFpbnModCkpfSkpKX0pKSxzJiYhbyYmZS5kZXN0cm95KCl9KSksdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSl9fX0se2tleTpcImJlZm9yZVZhbHVlU2V0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVBbGxPcHRpb25zQ2xhc3MoIWUmJnZvaWQgMCl9fSx7a2V5OlwiYmVmb3JlU2VsZWN0TmV3VmFsdWVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmdldE5ld09wdGlvbigpLGk9dC5pbmRleDt0aGlzLm5ld1ZhbHVlcy5wdXNoKHQudmFsdWUpLHRoaXMuc2V0T3B0aW9uUHJvcChpLFwiaXNDdXJyZW50TmV3XCIsITEpLHRoaXMuc2V0T3B0aW9uUHJvcChpLFwiaXNOZXdcIiwhMCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLnNldFNlYXJjaFZhbHVlKFwiXCIpLGUuZm9jdXNTZWFyY2hJbnB1dCgpfSksMCl9fSx7a2V5OlwiYWZ0ZXJSZW5kZXJXcmFwcGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXtjLmFkZENsYXNzKHRoaXMuJGVsZSxcInZzY29tcC1lbGVcIiksdGhpcy5yZW5kZXJTZWFyY2goKSx0aGlzLnNldEVsZVN0eWxlcygpLHRoaXMuc2V0RHJvcGJveFN0eWxlcygpLHRoaXMuc2V0T3B0aW9uc0hlaWdodCgpLHRoaXMuc2V0VmlzaWJsZU9wdGlvbnMoKSx0aGlzLnNldE9wdGlvbnNDb250YWluZXJIZWlnaHQoKSx0aGlzLmFkZEV2ZW50cygpLHRoaXMuc2V0RWxlUHJvcHMoKSx0aGlzLmtlZXBBbHdheXNPcGVufHx0aGlzLnNob3dBc1BvcHVwfHx0aGlzLmluaXREcm9wYm94UG9wb3ZlcigpLHRoaXMuaW5pdGlhbFNlbGVjdGVkVmFsdWU/dGhpcy5zZXRWYWx1ZU1ldGhvZCh0aGlzLmluaXRpYWxTZWxlY3RlZFZhbHVlLHRoaXMuc2lsZW50SW5pdGlhbFZhbHVlU2V0KTp0aGlzLmF1dG9TZWxlY3RGaXJzdE9wdGlvbiYmdGhpcy52aXNpYmxlT3B0aW9ucy5sZW5ndGgmJnRoaXMuc2V0VmFsdWVNZXRob2QodGhpcy52aXNpYmxlT3B0aW9uc1swXS52YWx1ZSx0aGlzLnNpbGVudEluaXRpYWxWYWx1ZVNldCksdGhpcy5zaG93T3B0aW9uc09ubHlPblNlYXJjaCYmdGhpcy5zZXRTZWFyY2hWYWx1ZShcIlwiLCExLCEwKSx0aGlzLmluaXRpYWxEaXNhYmxlZCYmdGhpcy5kaXNhYmxlKCksdGhpcy5hdXRvZm9jdXMmJnRoaXMuZm9jdXMoKX19LHtrZXk6XCJhZnRlclJlbmRlck9wdGlvbnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKSx0PSF0aGlzLm9wdGlvbnMubGVuZ3RoJiYhdGhpcy5oYXNTZXJ2ZXJTZWFyY2gsaT0hdCYmIWUubGVuZ3RoOyghdGhpcy5hbGxvd05ld09wdGlvbnx8dGhpcy5oYXNTZXJ2ZXJTZWFyY2h8fHRoaXMuc2hvd09wdGlvbnNPbmx5T25TZWFyY2gpJiZjLnRvZ2dsZUNsYXNzKHRoaXMuJGFsbFdyYXBwZXJzLFwiaGFzLW5vLXNlYXJjaC1yZXN1bHRzXCIsaSksYy50b2dnbGVDbGFzcyh0aGlzLiRhbGxXcmFwcGVycyxcImhhcy1uby1vcHRpb25zXCIsdCksdGhpcy5zZXRPcHRpb25BdHRyKCksdGhpcy5zZXRPcHRpb25zUG9zaXRpb24oKSx0aGlzLnNldE9wdGlvbnNUb29sdGlwKCl9fSx7a2V5OlwiYWZ0ZXJTZXRPcHRpb25zQ29udGFpbmVySGVpZ2h0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5zaG93QXNQb3B1cCYmdGhpcy5zZXRWaXNpYmxlT3B0aW9ucygpfX0se2tleTpcImFmdGVyU2V0U2VhcmNoVmFsdWVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5oYXNTZXJ2ZXJTZWFyY2g/KGNsZWFySW50ZXJ2YWwodGhpcy5zZXJ2ZXJTZWFyY2hUaW1lb3V0KSx0aGlzLnNlcnZlclNlYXJjaFRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLnNlcnZlclNlYXJjaCgpfSksdGhpcy5zZWFyY2hEZWxheSkpOnRoaXMuc2V0VmlzaWJsZU9wdGlvbnNDb3VudCgpLHRoaXMuc2VsZWN0QWxsT25seVZpc2libGUmJnRoaXMudG9nZ2xlQWxsT3B0aW9uc0NsYXNzKCksdGhpcy5mb2N1c09wdGlvbih7Zm9jdXNGaXJzdDohMH0pfX0se2tleTpcImFmdGVyU2V0VmlzaWJsZU9wdGlvbnNDb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUb1RvcCgpLHRoaXMuc2V0T3B0aW9uc0hlaWdodCgpLHRoaXMuc2V0VmlzaWJsZU9wdGlvbnMoKSx0aGlzLnVwZGF0ZVBvc2l0aW9uKCl9fSx7a2V5OlwiYWZ0ZXJWYWx1ZVNldFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUb1RvcCgpLHRoaXMuc2V0U2VhcmNoVmFsdWUoXCJcIiksdGhpcy5yZW5kZXJPcHRpb25zKCl9fSx7a2V5OlwiYWZ0ZXJTZXRPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5zZXRTZWxlY3RlZFByb3AoKSx0aGlzLnNldE9wdGlvbnNIZWlnaHQoKSx0aGlzLnNldFZpc2libGVPcHRpb25zKCksdGhpcy5zaG93T3B0aW9uc09ubHlPblNlYXJjaCYmdGhpcy5zZXRTZWFyY2hWYWx1ZShcIlwiLCExLCEwKSxlfHx0aGlzLnJlc2V0KCl9fSx7a2V5Olwic2V0UHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNldERlZmF1bHRQcm9wcyhlKTt0aGlzLnNldFByb3BzRnJvbUVsZW1lbnRBdHRyKHQpO3ZhciBpPXMuY29udmVydFRvQm9vbGVhbjt0aGlzLiRlbGU9dC5lbGUsdGhpcy5kcm9wYm94V3JhcHBlcj10LmRyb3Bib3hXcmFwcGVyLHRoaXMudmFsdWVLZXk9dC52YWx1ZUtleSx0aGlzLmxhYmVsS2V5PXQubGFiZWxLZXksdGhpcy5kZXNjcmlwdGlvbktleT10LmRlc2NyaXB0aW9uS2V5LHRoaXMuYWxpYXNLZXk9dC5hbGlhc0tleSx0aGlzLm9wdGlvbkhlaWdodFRleHQ9dC5vcHRpb25IZWlnaHQsdGhpcy5vcHRpb25IZWlnaHQ9cGFyc2VGbG9hdCh0aGlzLm9wdGlvbkhlaWdodFRleHQpLHRoaXMubXVsdGlwbGU9aSh0Lm11bHRpcGxlKSx0aGlzLmhhc1NlYXJjaD1pKHQuc2VhcmNoKSx0aGlzLnNlYXJjaEJ5U3RhcnRzV2l0aD1pKHQuc2VhcmNoQnlTdGFydHNXaXRoKSx0aGlzLnNlYXJjaEdyb3VwPWkodC5zZWFyY2hHcm91cCksdGhpcy5oaWRlQ2xlYXJCdXR0b249aSh0LmhpZGVDbGVhckJ1dHRvbiksdGhpcy5hdXRvU2VsZWN0Rmlyc3RPcHRpb249aSh0LmF1dG9TZWxlY3RGaXJzdE9wdGlvbiksdGhpcy5oYXNPcHRpb25EZXNjcmlwdGlvbj1pKHQuaGFzT3B0aW9uRGVzY3JpcHRpb24pLHRoaXMuc2lsZW50SW5pdGlhbFZhbHVlU2V0PWkodC5zaWxlbnRJbml0aWFsVmFsdWVTZXQpLHRoaXMuYWxsb3dOZXdPcHRpb249aSh0LmFsbG93TmV3T3B0aW9uKSx0aGlzLm1hcmtTZWFyY2hSZXN1bHRzPWkodC5tYXJrU2VhcmNoUmVzdWx0cyksdGhpcy5zaG93U2VsZWN0ZWRPcHRpb25zRmlyc3Q9aSh0LnNob3dTZWxlY3RlZE9wdGlvbnNGaXJzdCksdGhpcy5kaXNhYmxlU2VsZWN0QWxsPWkodC5kaXNhYmxlU2VsZWN0QWxsKSx0aGlzLmtlZXBBbHdheXNPcGVuPWkodC5rZWVwQWx3YXlzT3BlbiksdGhpcy5zaG93RHJvcGJveEFzUG9wdXA9aSh0LnNob3dEcm9wYm94QXNQb3B1cCksdGhpcy5oaWRlVmFsdWVUb29sdGlwT25TZWxlY3RBbGw9aSh0LmhpZGVWYWx1ZVRvb2x0aXBPblNlbGVjdEFsbCksdGhpcy5zaG93T3B0aW9uc09ubHlPblNlYXJjaD1pKHQuc2hvd09wdGlvbnNPbmx5T25TZWFyY2gpLHRoaXMuc2VsZWN0QWxsT25seVZpc2libGU9aSh0LnNlbGVjdEFsbE9ubHlWaXNpYmxlKSx0aGlzLmFsd2F5c1Nob3dTZWxlY3RlZE9wdGlvbnNDb3VudD1pKHQuYWx3YXlzU2hvd1NlbGVjdGVkT3B0aW9uc0NvdW50KSx0aGlzLmFsd2F5c1Nob3dTZWxlY3RlZE9wdGlvbnNMYWJlbD1pKHQuYWx3YXlzU2hvd1NlbGVjdGVkT3B0aW9uc0xhYmVsKSx0aGlzLmRpc2FibGVBbGxPcHRpb25zU2VsZWN0ZWRUZXh0PWkodC5kaXNhYmxlQWxsT3B0aW9uc1NlbGVjdGVkVGV4dCksdGhpcy5zaG93VmFsdWVBc1RhZ3M9aSh0LnNob3dWYWx1ZUFzVGFncyksdGhpcy5kaXNhYmxlT3B0aW9uR3JvdXBDaGVja2JveD1pKHQuZGlzYWJsZU9wdGlvbkdyb3VwQ2hlY2tib3gpLHRoaXMuZW5hYmxlU2VjdXJlVGV4dD1pKHQuZW5hYmxlU2VjdXJlVGV4dCksdGhpcy5zZXRWYWx1ZUFzQXJyYXk9aSh0LnNldFZhbHVlQXNBcnJheSksdGhpcy5kaXNhYmxlVmFsaWRhdGlvbj1pKHQuZGlzYWJsZVZhbGlkYXRpb24pLHRoaXMuaW5pdGlhbERpc2FibGVkPWkodC5kaXNhYmxlZCksdGhpcy5yZXF1aXJlZD1pKHQucmVxdWlyZWQpLHRoaXMuYXV0b2ZvY3VzPWkodC5hdXRvZm9jdXMpLHRoaXMudXNlR3JvdXBWYWx1ZT1pKHQudXNlR3JvdXBWYWx1ZSksdGhpcy5mb2N1c1NlbGVjdGVkT3B0aW9uT25PcGVuPWkodC5mb2N1c1NlbGVjdGVkT3B0aW9uT25PcGVuKSx0aGlzLm5vT3B0aW9uc1RleHQ9dC5ub09wdGlvbnNUZXh0LHRoaXMubm9TZWFyY2hSZXN1bHRzVGV4dD10Lm5vU2VhcmNoUmVzdWx0c1RleHQsdGhpcy5zZWxlY3RBbGxUZXh0PXQuc2VsZWN0QWxsVGV4dCx0aGlzLnNlYXJjaE5vcm1hbGl6ZT10LnNlYXJjaE5vcm1hbGl6ZSx0aGlzLnNlYXJjaFBsYWNlaG9sZGVyVGV4dD10LnNlYXJjaFBsYWNlaG9sZGVyVGV4dCx0aGlzLnNlYXJjaEZvcm1MYWJlbD10LnNlYXJjaEZvcm1MYWJlbCx0aGlzLm9wdGlvbnNTZWxlY3RlZFRleHQ9dC5vcHRpb25zU2VsZWN0ZWRUZXh0LHRoaXMub3B0aW9uU2VsZWN0ZWRUZXh0PXQub3B0aW9uU2VsZWN0ZWRUZXh0LHRoaXMuYWxsT3B0aW9uc1NlbGVjdGVkVGV4dD10LmFsbE9wdGlvbnNTZWxlY3RlZFRleHQsdGhpcy5jbGVhckJ1dHRvblRleHQ9dC5jbGVhckJ1dHRvblRleHQsdGhpcy5tb3JlVGV4dD10Lm1vcmVUZXh0LHRoaXMucGxhY2Vob2xkZXI9dC5wbGFjZWhvbGRlcix0aGlzLnBvc2l0aW9uPXQucG9zaXRpb24sdGhpcy50ZXh0RGlyZWN0aW9uPXQudGV4dERpcmVjdGlvbix0aGlzLmRyb3Bib3hXaWR0aD10LmRyb3Bib3hXaWR0aCx0aGlzLnRvb2x0aXBGb250U2l6ZT10LnRvb2x0aXBGb250U2l6ZSx0aGlzLnRvb2x0aXBBbGlnbm1lbnQ9dC50b29sdGlwQWxpZ25tZW50LHRoaXMudG9vbHRpcE1heFdpZHRoPXQudG9vbHRpcE1heFdpZHRoLHRoaXMudXBkYXRlUG9zaXRpb25UaHJvdHRsZT10LnVwZGF0ZVBvc2l0aW9uVGhyb3R0bGUsdGhpcy5ub09mRGlzcGxheVZhbHVlcz1wYXJzZUludCh0Lm5vT2ZEaXNwbGF5VmFsdWVzKSx0aGlzLnpJbmRleD1wYXJzZUludCh0LnpJbmRleCksdGhpcy5tYXhWYWx1ZXM9cGFyc2VJbnQodC5tYXhWYWx1ZXMpLHRoaXMubWluVmFsdWVzPXBhcnNlSW50KHQubWluVmFsdWVzKSx0aGlzLm5hbWU9dGhpcy5zZWN1cmVUZXh0KHQubmFtZSksdGhpcy5hZGRpdGlvbmFsQ2xhc3Nlcz10LmFkZGl0aW9uYWxDbGFzc2VzLHRoaXMucG9wdXBEcm9wYm94QnJlYWtwb2ludD10LnBvcHVwRHJvcGJveEJyZWFrcG9pbnQsdGhpcy5wb3B1cFBvc2l0aW9uPXQucG9wdXBQb3NpdGlvbix0aGlzLm9uU2VydmVyU2VhcmNoPXQub25TZXJ2ZXJTZWFyY2gsdGhpcy5sYWJlbFJlbmRlcmVyPXQubGFiZWxSZW5kZXJlcix0aGlzLmluaXRpYWxTZWxlY3RlZFZhbHVlPTA9PT10LnNlbGVjdGVkVmFsdWU/XCIwXCI6dC5zZWxlY3RlZFZhbHVlLHRoaXMuZW1wdHlWYWx1ZT10LmVtcHR5VmFsdWUsdGhpcy5hcmlhTGFiZWxsZWRieT10LmFyaWFMYWJlbGxlZGJ5LHRoaXMuYXJpYUxhYmVsVGV4dD10LmFyaWFMYWJlbFRleHQsdGhpcy5tYXhXaWR0aD10Lm1heFdpZHRoLHRoaXMuc2VhcmNoRGVsYXk9dC5zZWFyY2hEZWxheSx0aGlzLnNlbGVjdGVkVmFsdWVzPVtdLHRoaXMuc2VsZWN0ZWRPcHRpb25zPVtdLHRoaXMubmV3VmFsdWVzPVtdLHRoaXMuZXZlbnRzPXt9LHRoaXMudG9vbHRpcEVudGVyRGVsYXk9MjAwLHRoaXMuc2VhcmNoVmFsdWU9XCJcIix0aGlzLnNlYXJjaFZhbHVlT3JpZ2luYWw9XCJcIix0aGlzLmlzQWxsU2VsZWN0ZWQ9ITEsKHZvaWQgMD09PXQuc2VhcmNoJiZ0aGlzLm11bHRpcGxlfHx0aGlzLmFsbG93TmV3T3B0aW9ufHx0aGlzLnNob3dPcHRpb25zT25seU9uU2VhcmNoKSYmKHRoaXMuaGFzU2VhcmNoPSEwKSx0aGlzLmhhc1NlcnZlclNlYXJjaD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9uU2VydmVyU2VhcmNoLCh0aGlzLm1heFZhbHVlc3x8dGhpcy5oYXNTZXJ2ZXJTZWFyY2h8fHRoaXMuc2hvd09wdGlvbnNPbmx5T25TZWFyY2gpJiYodGhpcy5kaXNhYmxlU2VsZWN0QWxsPSEwLHRoaXMuZGlzYWJsZU9wdGlvbkdyb3VwQ2hlY2tib3g9ITApLHRoaXMua2VlcEFsd2F5c09wZW4mJih0aGlzLmRyb3Bib3hXcmFwcGVyPVwic2VsZlwiKSx0aGlzLnNob3dBc1BvcHVwPXRoaXMuc2hvd0Ryb3Bib3hBc1BvcHVwJiYhdGhpcy5rZWVwQWx3YXlzT3BlbiYmd2luZG93LmlubmVyV2lkdGg8PXBhcnNlRmxvYXQodGhpcy5wb3B1cERyb3Bib3hCcmVha3BvaW50KSx0aGlzLmhhc1NlYXJjaENvbnRhaW5lcj10aGlzLmhhc1NlYXJjaHx8dGhpcy5tdWx0aXBsZSYmIXRoaXMuZGlzYWJsZVNlbGVjdEFsbCx0aGlzLm9wdGlvbnNDb3VudD10aGlzLmdldE9wdGlvbnNDb3VudCh0Lm9wdGlvbnNDb3VudCksdGhpcy5oYWxmT3B0aW9uc0NvdW50PU1hdGguY2VpbCh0aGlzLm9wdGlvbnNDb3VudC8yKSx0aGlzLm9wdGlvbnNIZWlnaHQ9dGhpcy5nZXRPcHRpb25zSGVpZ2h0KCksdGhpcy51bmlxdWVJZD10aGlzLmdldFVuaXF1ZUlkKCl9fSx7a2V5Olwic2V0RGVmYXVsdFByb3BzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2Ryb3Bib3hXcmFwcGVyOlwic2VsZlwiLHZhbHVlS2V5OlwidmFsdWVcIixsYWJlbEtleTpcImxhYmVsXCIsZGVzY3JpcHRpb25LZXk6XCJkZXNjcmlwdGlvblwiLGFsaWFzS2V5OlwiYWxpYXNcIixhcmlhTGFiZWxUZXh0OlwiT3B0aW9ucyBsaXN0XCIsb3B0aW9uc0NvdW50OjUsbm9PZkRpc3BsYXlWYWx1ZXM6NTAsb3B0aW9uSGVpZ2h0OlwiNDBweFwiLG5vT3B0aW9uc1RleHQ6XCJObyBvcHRpb25zIGZvdW5kXCIsbm9TZWFyY2hSZXN1bHRzVGV4dDpcIk5vIHJlc3VsdHMgZm91bmRcIixzZWxlY3RBbGxUZXh0OlwiU2VsZWN0IEFsbFwiLHNlYXJjaE5vcm1hbGl6ZTohMSxzZWFyY2hQbGFjZWhvbGRlclRleHQ6XCJTZWFyY2guLi5cIixzZWFyY2hGb3JtTGFiZWw6XCJTZWFyY2hcIixjbGVhckJ1dHRvblRleHQ6XCJDbGVhclwiLG1vcmVUZXh0OlwibW9yZS4uLlwiLG9wdGlvbnNTZWxlY3RlZFRleHQ6XCJvcHRpb25zIHNlbGVjdGVkXCIsb3B0aW9uU2VsZWN0ZWRUZXh0Olwib3B0aW9uIHNlbGVjdGVkXCIsYWxsT3B0aW9uc1NlbGVjdGVkVGV4dDpcIkFsbFwiLHBsYWNlaG9sZGVyOlwiU2VsZWN0XCIscG9zaXRpb246XCJib3R0b20gbGVmdFwiLHpJbmRleDplLmtlZXBBbHdheXNPcGVuPzE6Mix0b29sdGlwRm9udFNpemU6XCIxNHB4XCIsdG9vbHRpcEFsaWdubWVudDpcImNlbnRlclwiLHRvb2x0aXBNYXhXaWR0aDpcIjMwMHB4XCIsdXBkYXRlUG9zaXRpb25UaHJvdHRsZToxMDAsbmFtZTpcIlwiLGFkZGl0aW9uYWxDbGFzc2VzOlwiXCIsbWF4VmFsdWVzOjAsc2hvd0Ryb3Bib3hBc1BvcHVwOiEwLHBvcHVwRHJvcGJveEJyZWFrcG9pbnQ6XCI1NzZweFwiLHBvcHVwUG9zaXRpb246XCJjZW50ZXJcIixoaWRlVmFsdWVUb29sdGlwT25TZWxlY3RBbGw6ITAsZW1wdHlWYWx1ZTpcIlwiLHNlYXJjaERlbGF5OjMwMCxmb2N1c1NlbGVjdGVkT3B0aW9uT25PcGVuOiEwfTtyZXR1cm4gZS5oYXNPcHRpb25EZXNjcmlwdGlvbiYmKHQub3B0aW9uc0NvdW50PTQsdC5vcHRpb25IZWlnaHQ9XCI1MHB4XCIpLE9iamVjdC5hc3NpZ24odCxlKX19LHtrZXk6XCJzZXRQcm9wc0Zyb21FbGVtZW50QXR0clwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZWxlO09iamVjdC5rZXlzKHgpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBvPXQuZ2V0QXR0cmlidXRlKGkpOy0xPT09ay5pbmRleE9mKGkpfHxcIlwiIT09byYmXCJ0cnVlXCIhPT1vfHwobz0hMCksbyYmKGVbeFtpXV09byl9KSl9fSx7a2V5Olwic2V0RWxlUHJvcHNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZTt0LnZpcnR1YWxTZWxlY3Q9dGhpcyx0LnZhbHVlPXRoaXMubXVsdGlwbGU/W106XCJcIix0Lm5hbWU9dGhpcy5uYW1lLHQuZGlzYWJsZWQ9ITEsdC5yZXF1aXJlZD10aGlzLnJlcXVpcmVkLHQuYXV0b2ZvY3VzPXRoaXMuYXV0b2ZvY3VzLHQubXVsdGlwbGU9dGhpcy5tdWx0aXBsZSx0LmZvcm09dC5jbG9zZXN0KFwiZm9ybVwiKSx0LnJlc2V0PWUucmVzZXQsdC5zZXRWYWx1ZT1lLnNldFZhbHVlTWV0aG9kLHQuc2V0T3B0aW9ucz1lLnNldE9wdGlvbnNNZXRob2QsdC5zZXREaXNhYmxlZE9wdGlvbnM9ZS5zZXREaXNhYmxlZE9wdGlvbnNNZXRob2QsdC5zZXRFbmFibGVkT3B0aW9ucz1lLnNldEVuYWJsZWRPcHRpb25zTWV0aG9kLHQudG9nZ2xlU2VsZWN0QWxsPWUudG9nZ2xlU2VsZWN0QWxsLHQuaXNBbGxTZWxlY3RlZD1lLmlzQWxsU2VsZWN0ZWQsdC5hZGRPcHRpb249ZS5hZGRPcHRpb25NZXRob2QsdC5nZXROZXdWYWx1ZT1lLmdldE5ld1ZhbHVlTWV0aG9kLHQuZ2V0RGlzcGxheVZhbHVlPWUuZ2V0RGlzcGxheVZhbHVlTWV0aG9kLHQuZ2V0U2VsZWN0ZWRPcHRpb25zPWUuZ2V0U2VsZWN0ZWRPcHRpb25zTWV0aG9kLHQuZ2V0RGlzYWJsZWRPcHRpb25zPWUuZ2V0RGlzYWJsZWRPcHRpb25zTWV0aG9kLHQub3Blbj1lLm9wZW5NZXRob2QsdC5jbG9zZT1lLmNsb3NlTWV0aG9kLHQuZm9jdXM9ZS5mb2N1c01ldGhvZCx0LmVuYWJsZT1lLmVuYWJsZU1ldGhvZCx0LmRpc2FibGU9ZS5kaXNhYmxlTWV0aG9kLHQuZGVzdHJveT1lLmRlc3Ryb3lNZXRob2QsdC52YWxpZGF0ZT1lLnZhbGlkYXRlTWV0aG9kLHQudG9nZ2xlUmVxdWlyZWQ9ZS50b2dnbGVSZXF1aXJlZE1ldGhvZCx0aGlzLmhhc0Ryb3Bib3hXcmFwcGVyJiYodGhpcy4kZHJvcGJveFdyYXBwZXIudmlydHVhbFNlbGVjdD10aGlzKX19LHtrZXk6XCJzZXRWYWx1ZU1ldGhvZFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9e30sbz17fSxzPVtdLG49dGhpcy5tdWx0aXBsZSxyPWU7aWYocil7aWYoQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxuKXt2YXIgYT10aGlzLm1heFZhbHVlczthJiZyLmxlbmd0aD5hJiZyLnNwbGljZShhKX1lbHNlIHIubGVuZ3RoPjEmJihyPVtyWzBdXSk7cj1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGV8fDA9PT1lP2UudG9TdHJpbmcoKTpcIlwifSkpLHRoaXMudXNlR3JvdXBWYWx1ZSYmKHI9dGhpcy5zZXRHcm91cE9wdGlvbnNWYWx1ZShyKSksci5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lbZV09ITAsb1tlXT10fSkpLHRoaXMuYWxsb3dOZXdPcHRpb24mJnImJnRoaXMuc2V0TmV3T3B0aW9uc0Zyb21WYWx1ZShyKX1pZih0aGlzLm9wdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ITAhPT1pW2UudmFsdWVdfHxlLmlzRGlzYWJsZWR8fGUuaXNHcm91cFRpdGxlP2UuaXNTZWxlY3RlZD0hMTooZS5pc1NlbGVjdGVkPSEwLHMucHVzaChlLnZhbHVlKSl9KSksbil0aGlzLmhhc09wdGlvbkdyb3VwJiZ0aGlzLnNldEdyb3Vwc1NlbGVjdGVkUHJvcCgpLHMuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gb1tlXS1vW3RdfSkpO2Vsc2V7dmFyIGw9eShzLDEpO3M9bFswXX10aGlzLmJlZm9yZVZhbHVlU2V0KCksdGhpcy5zZXRWYWx1ZShzLHtkaXNhYmxlRXZlbnQ6dH0pLHRoaXMuYWZ0ZXJWYWx1ZVNldCgpfX0se2tleTpcInNldEdyb3VwT3B0aW9uc1ZhbHVlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W10saT17fSxvPXt9O3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe29bZV09ITB9KSksdGhpcy5vcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBzPWUudmFsdWUsbj0hMD09PW9bc107ZS5pc0dyb3VwVGl0bGU/biYmKGlbZS5pbmRleF09ITApOihufHxpW2UuZ3JvdXBJbmRleF0pJiZ0LnB1c2gocyl9KSksdH19LHtrZXk6XCJzZXRHcm91cHNTZWxlY3RlZFByb3BcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaXNBbGxHcm91cE9wdGlvbnNTZWxlY3RlZC5iaW5kKHRoaXMpO3RoaXMub3B0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmlzR3JvdXBUaXRsZSYmKHQuaXNTZWxlY3RlZD1lKHQuaW5kZXgpKX0pKX19LHtrZXk6XCJzZXRPcHRpb25zTWV0aG9kXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLnNldE9wdGlvbnMoZSksdGhpcy5hZnRlclNldE9wdGlvbnModCl9fSx7a2V5Olwic2V0RGlzYWJsZWRPcHRpb25zTWV0aG9kXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnNldERpc2FibGVkT3B0aW9ucyhlLCEwKSx0fHwodGhpcy5zZXRWYWx1ZU1ldGhvZChudWxsKSx0aGlzLnRvZ2dsZUFsbE9wdGlvbnNDbGFzcygpKSx0aGlzLnNldFZpc2libGVPcHRpb25zKCl9fSx7a2V5Olwic2V0RGlzYWJsZWRPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxpPVtdO2lmKGUpaWYoITA9PT1lKXQmJnRoaXMub3B0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0Rpc2FibGVkPSEwLGkucHVzaChlLnZhbHVlKSxlfSkpO2Vsc2V7aT1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoKX0pKTt2YXIgbz17fTtpLmZvckVhY2goKGZ1bmN0aW9uKGUpe29bZV09ITB9KSksdCYmdGhpcy5vcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzRGlzYWJsZWQ9ITA9PT1vW2UudmFsdWVdLGV9KSl9ZWxzZSB0JiZ0aGlzLm9wdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNEaXNhYmxlZD0hMSxlfSkpO3RoaXMuZGlzYWJsZWRPcHRpb25zPWl9fSx7a2V5Olwic2V0RW5hYmxlZE9wdGlvbnNNZXRob2RcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3RoaXMuc2V0RW5hYmxlZE9wdGlvbnMoZSksdHx8KHRoaXMuc2V0VmFsdWVNZXRob2QobnVsbCksdGhpcy50b2dnbGVBbGxPcHRpb25zQ2xhc3MoKSksdGhpcy5zZXRWaXNpYmxlT3B0aW9ucygpfX0se2tleTpcInNldEVuYWJsZWRPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09ZSl7dmFyIHQ9W107aWYoITA9PT1lKXRoaXMub3B0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0Rpc2FibGVkPSExLGV9KSk7ZWxzZXt2YXIgaT17fTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lbZV09ITB9KSksdGhpcy5vcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBvPSEwIT09aVtlLnZhbHVlXTtyZXR1cm4gZS5pc0Rpc2FibGVkPW8sbyYmdC5wdXNoKGUudmFsdWUpLGV9KSl9dGhpcy5kaXNhYmxlZE9wdGlvbnM9dH19fSx7a2V5Olwic2V0T3B0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSxpPVtdLG89dGhpcy5kaXNhYmxlZE9wdGlvbnMubGVuZ3RoLG49dGhpcy52YWx1ZUtleSxyPXRoaXMubGFiZWxLZXksYT10aGlzLmRlc2NyaXB0aW9uS2V5LGw9dGhpcy5hbGlhc0tleSx1PXRoaXMuaGFzT3B0aW9uRGVzY3JpcHRpb24scD1zLmdldFN0cmluZyxjPXMuY29udmVydFRvQm9vbGVhbixoPXRoaXMuc2VjdXJlVGV4dC5iaW5kKHRoaXMpLGQ9dGhpcy5nZXRBbGlhcy5iaW5kKHRoaXMpLHk9MCxiPSExLG09e30sZz0hMTt0aGlzLmRpc2FibGVkT3B0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXttW2VdPSEwfSkpO3ZhciBPPWZ1bmN0aW9uIHQoTyl7dmFyIFM7XCJvYmplY3RcIiE9PWYoTykmJih2KFM9e30sbixPKSx2KFMscixPKSxPPVMpO3ZhciB4PWgocChPW25dKSksdz1oKHAoT1tyXSkpLGs9Ty5vcHRpb25zLEU9ISFrLEM9e2luZGV4OnksdmFsdWU6eCxsYWJlbDp3LGxhYmVsTm9ybWFsaXplZDplLnNlYXJjaE5vcm1hbGl6ZT9zLm5vcm1hbGl6ZVN0cmluZyh3KS50b0xvd2VyQ2FzZSgpOncudG9Mb3dlckNhc2UoKSxhbGlhczpkKE9bbF0pLGlzVmlzaWJsZTpjKE8uaXNWaXNpYmxlLCEwKSxpc05ldzpPLmlzTmV3fHwhMSxpc0dyb3VwVGl0bGU6RSxjbGFzc05hbWVzOk8uY2xhc3NOYW1lc307aWYoZ3x8XCJcIiE9PXh8fChnPSEwKSxvJiYoQy5pc0Rpc2FibGVkPSEwPT09bVt4XSksTy5pc0dyb3VwT3B0aW9uJiYoQy5pc0dyb3VwT3B0aW9uPSEwLEMuZ3JvdXBJbmRleD1PLmdyb3VwSW5kZXgpLHUmJihDLmRlc2NyaXB0aW9uPWgocChPW2FdKSkpLE8uY3VzdG9tRGF0YSYmKEMuY3VzdG9tRGF0YT1PLmN1c3RvbURhdGEpLGkucHVzaChDKSx5Kz0xLEUpe3ZhciBBPUMuaW5kZXg7Yj0hMCxrLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaXNHcm91cE9wdGlvbj0hMCxlLmdyb3VwSW5kZXg9QSx0KGUpfSkpfX07QXJyYXkuaXNBcnJheSh0KSYmdC5mb3JFYWNoKE8pO3ZhciBTPWkubGVuZ3RoLHg9dGhpcy4kZWxlO3gub3B0aW9ucz1pLHgubGVuZ3RoPVMsdGhpcy5vcHRpb25zPWksdGhpcy52aXNpYmxlT3B0aW9uc0NvdW50PVMsdGhpcy5sYXN0T3B0aW9uSW5kZXg9Uy0xLHRoaXMubmV3VmFsdWVzPVtdLHRoaXMuaGFzT3B0aW9uR3JvdXA9Yix0aGlzLmhhc0VtcHR5VmFsdWVPcHRpb249Zyx0aGlzLnNldFNvcnRlZE9wdGlvbnMoKX19LHtrZXk6XCJzZXRTZXJ2ZXJPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3RoaXMuc2V0T3B0aW9uc01ldGhvZCh0LCEwKTt2YXIgaT10aGlzLnNlbGVjdGVkT3B0aW9ucyxvPXRoaXMub3B0aW9ucyxzPSExO2lmKGkubGVuZ3RoKXt2YXIgbj17fTtzPSEwLG8uZm9yRWFjaCgoZnVuY3Rpb24oZSl7bltlLnZhbHVlXT0hMH0pKSxpLmZvckVhY2goKGZ1bmN0aW9uKGUpeyEwIT09bltlLnZhbHVlXSYmKGUuaXNWaXNpYmxlPSExLG8ucHVzaChlKSl9KSksdGhpcy5zZXRPcHRpb25zTWV0aG9kKG8sITApfWlmKHRoaXMuYWxsb3dOZXdPcHRpb24mJnRoaXMuc2VhcmNoVmFsdWUpe3ZhciByPW8uc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQubGFiZWwudG9Mb3dlckNhc2UoKT09PWUuc2VhcmNoVmFsdWV9KSk7cnx8KHM9ITAsdGhpcy5zZXROZXdPcHRpb24oKSl9cz8odGhpcy5zZXRWaXNpYmxlT3B0aW9uc0NvdW50KCksdGhpcy5tdWx0aXBsZSYmdGhpcy50b2dnbGVBbGxPcHRpb25zQ2xhc3MoKSx0aGlzLnNldFZhbHVlVGV4dCgpKTp0aGlzLnVwZGF0ZVBvc2l0aW9uKCksYy5yZW1vdmVDbGFzcyh0aGlzLiRhbGxXcmFwcGVycyxcInNlcnZlci1zZWFyY2hpbmdcIil9fSx7a2V5Olwic2V0U2VsZWN0ZWRPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkT3B0aW9ucz10aGlzLm9wdGlvbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1NlbGVjdGVkfSkpfX0se2tleTpcInNldFNvcnRlZE9wdGlvbnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWIodGhpcy5vcHRpb25zKTt0aGlzLnNob3dTZWxlY3RlZE9wdGlvbnNGaXJzdCYmdGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGgmJihlPXRoaXMuaGFzT3B0aW9uR3JvdXA/dGhpcy5zb3J0T3B0aW9uc0dyb3VwKGUpOnRoaXMuc29ydE9wdGlvbnMoZSkpLHRoaXMuc29ydGVkT3B0aW9ucz1lfX0se2tleTpcInNldFZpc2libGVPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1iKHRoaXMuc29ydGVkT3B0aW9ucyksdD0yKnRoaXMub3B0aW9uc0NvdW50LGk9dGhpcy5nZXRWaXNpYmxlU3RhcnRJbmRleCgpLG89dGhpcy5nZXROZXdPcHRpb24oKSxzPWkrdC0xLG49MDtvJiYoby52aXNpYmxlSW5kZXg9bixuKz0xKSxlPWUuZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgdD0hMTtyZXR1cm4gZS5pc1Zpc2libGUmJiFlLmlzQ3VycmVudE5ldyYmKHQ9bj49aSYmbjw9cyxlLnZpc2libGVJbmRleD1uLG4rPTEpLHR9KSksbyYmKGU9W29dLmNvbmNhdChiKGUpKSksdGhpcy52aXNpYmxlT3B0aW9ucz1lLHRoaXMucmVuZGVyT3B0aW9ucygpfX0se2tleTpcInNldE9wdGlvbnNQb3NpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHx0aGlzLmdldFZpc2libGVTdGFydEluZGV4KCkpKnRoaXMub3B0aW9uSGVpZ2h0O3RoaXMuJG9wdGlvbnMuc3R5bGUudHJhbnNmb3JtPVwidHJhbnNsYXRlM2QoMCwgXCIuY29uY2F0KHQsXCJweCwgMClcIiksYy5zZXREYXRhKHRoaXMuJG9wdGlvbnMsXCJ0b3BcIix0KX19LHtrZXk6XCJzZXRPcHRpb25zVG9vbHRpcFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKSxpPXRoaXMuaGFzT3B0aW9uRGVzY3JpcHRpb247dC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbz1lLiRkcm9wYm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy52c2NvbXAtb3B0aW9uW2RhdGEtaW5kZXg9XCInLmNvbmNhdCh0LmluZGV4LCdcIl0nKSk7Yy5zZXREYXRhKG8ucXVlcnlTZWxlY3RvcihcIi52c2NvbXAtb3B0aW9uLXRleHRcIiksXCJ0b29sdGlwXCIsdC5sYWJlbCksaSYmYy5zZXREYXRhKG8ucXVlcnlTZWxlY3RvcihcIi52c2NvbXAtb3B0aW9uLWRlc2NyaXB0aW9uXCIpLFwidG9vbHRpcFwiLHQuZGVzY3JpcHRpb24pfSkpfX0se2tleTpcInNldFZhbHVlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGk9dC5kaXNhYmxlRXZlbnQsbz12b2lkIDAhPT1pJiZpLG49dC5kaXNhYmxlVmFsaWRhdGlvbixyPXZvaWQgMCE9PW4mJm4sYT10aGlzLmhhc0VtcHR5VmFsdWVPcHRpb24mJlwiXCI9PT1lfHxlO2E/QXJyYXkuaXNBcnJheShlKT90aGlzLnNlbGVjdGVkVmFsdWVzPWIoZSk6dGhpcy5zZWxlY3RlZFZhbHVlcz1bZV06dGhpcy5zZWxlY3RlZFZhbHVlcz1bXTt2YXIgbD10aGlzLmdldFZhbHVlKCk7dGhpcy4kZWxlLnZhbHVlPWwsdGhpcy4kaGlkZGVuSW5wdXQudmFsdWU9dGhpcy5nZXRJbnB1dFZhbHVlKGwpLHRoaXMuaXNNYXhWYWx1ZXNTZWxlY3RlZD0hISh0aGlzLm1heFZhbHVlcyYmdGhpcy5tYXhWYWx1ZXM8PXRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoKSx0aGlzLnRvZ2dsZUFsbE9wdGlvbnNDbGFzcygpLHRoaXMuc2V0VmFsdWVUZXh0KCksYy50b2dnbGVDbGFzcyh0aGlzLiRhbGxXcmFwcGVycyxcImhhcy12YWx1ZVwiLHMuaXNOb3RFbXB0eSh0aGlzLnNlbGVjdGVkVmFsdWVzKSksYy50b2dnbGVDbGFzcyh0aGlzLiRhbGxXcmFwcGVycyxcIm1heC12YWx1ZS1zZWxlY3RlZFwiLHRoaXMuaXNNYXhWYWx1ZXNTZWxlY3RlZCkscnx8dGhpcy52YWxpZGF0ZSgpLG98fGMuZGlzcGF0Y2hFdmVudCh0aGlzLiRlbGUsXCJjaGFuZ2VcIiwhMCl9fSx7a2V5Olwic2V0VmFsdWVUZXh0XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm11bHRpcGxlLHQ9dGhpcy5zZWxlY3RlZFZhbHVlcyxpPXRoaXMubm9PZkRpc3BsYXlWYWx1ZXMsbz10aGlzLnNob3dWYWx1ZUFzVGFncyxzPXRoaXMuJHZhbHVlVGV4dCxuPVtdLHI9W10sYT10Lmxlbmd0aCxsPTAsdT10aGlzLmlzQWxsU2VsZWN0ZWQmJiF0aGlzLmhhc1NlcnZlclNlYXJjaCYmIXRoaXMuZGlzYWJsZUFsbE9wdGlvbnNTZWxlY3RlZFRleHQmJiFvO2lmKHUmJnRoaXMuaGlkZVZhbHVlVG9vbHRpcE9uU2VsZWN0QWxsKXMuaW5uZXJIVE1MPVwiXCIuY29uY2F0KHRoaXMuYWxsT3B0aW9uc1NlbGVjdGVkVGV4dCxcIiAoXCIpLmNvbmNhdChhLFwiKVwiKTtlbHNle3RoaXMuZ2V0U2VsZWN0ZWRPcHRpb25zKHtmdWxsRGV0YWlsczohMCxrZWVwU2VsZWN0aW9uT3JkZXI6ITB9KS5zb21lKChmdW5jdGlvbihlKXtpZihlLmlzQ3VycmVudE5ldylyZXR1cm4hMTtpZihsPj1pKXJldHVybiEwO3ZhciB0PWUubGFiZWw7aWYobi5wdXNoKHQpLGwrPTEsbyl7dmFyIHM9JzxzcGFuIGNsYXNzPVwidnNjb21wLXZhbHVlLXRhZ1wiIGRhdGEtaW5kZXg9XCInLmNvbmNhdChlLmluZGV4LCdcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidnNjb21wLXZhbHVlLXRhZy1jb250ZW50XCI+JykuY29uY2F0KHQsJzwvc3Bhbj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidnNjb21wLXZhbHVlLXRhZy1jbGVhci1idXR0b25cIj5cXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ2c2NvbXAtY2xlYXItaWNvblwiPjwvaT5cXG4gICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+Jyk7ci5wdXNoKHMpfWVsc2Ugci5wdXNoKHQpO3JldHVybiExfSkpO3ZhciBwPWEtaTtwPjAmJnIucHVzaCgnPHNwYW4gY2xhc3M9XCJ2c2NvbXAtdmFsdWUtdGFnIG1vcmUtdmFsdWUtY291bnRcIj4rICcuY29uY2F0KHAsXCIgXCIpLmNvbmNhdCh0aGlzLm1vcmVUZXh0LFwiPC9zcGFuPlwiKSk7dmFyIGg9bi5qb2luKFwiLCBcIik7aWYoXCJcIj09PWgpcy5pbm5lckhUTUw9dGhpcy5wbGFjZWhvbGRlcjtlbHNlIGlmKHMuaW5uZXJIVE1MPWgsZSl7dmFyIGQ9dGhpcy5tYXhWYWx1ZXM7aWYodGhpcy5hbHdheXNTaG93U2VsZWN0ZWRPcHRpb25zQ291bnR8fGMuaGFzRWxsaXBzaXMocyl8fGR8fG8pe3ZhciB2PSc8c3BhbiBjbGFzcz1cInZzY29tcC1zZWxlY3RlZC12YWx1ZS1jb3VudFwiPicuY29uY2F0KGEsXCI8L3NwYW4+XCIpO2lmKGQmJih2Kz0nIC8gPHNwYW4gY2xhc3M9XCJ2c2NvbXAtbWF4LXZhbHVlLWNvdW50XCI+Jy5jb25jYXQoZCxcIjwvc3Bhbj5cIikpLHUpcy5pbm5lckhUTUw9XCJcIi5jb25jYXQodGhpcy5hbGxPcHRpb25zU2VsZWN0ZWRUZXh0LFwiIChcIikuY29uY2F0KGEsXCIpXCIpO2Vsc2UgaWYobylzLmlubmVySFRNTD1yLmpvaW4oXCJcIiksdGhpcy4kdmFsdWVUYWdzPXMucXVlcnlTZWxlY3RvckFsbChcIi52c2NvbXAtdmFsdWUtdGFnXCIpLHRoaXMuc2V0VmFsdWVUYWdBdHRyKCk7ZWxzZSBpZighdGhpcy5hbHdheXNTaG93U2VsZWN0ZWRPcHRpb25zTGFiZWwpe3ZhciBmPTE9PT1hP3RoaXMub3B0aW9uU2VsZWN0ZWRUZXh0OnRoaXMub3B0aW9uc1NlbGVjdGVkVGV4dDtzLmlubmVySFRNTD1cIlwiLmNvbmNhdCh2LFwiIFwiKS5jb25jYXQoZil9fWVsc2Ugcj1bXX19dmFyIHk9XCJcIjswPT09YT95PXRoaXMucGxhY2Vob2xkZXI6b3x8KHk9ci5qb2luKFwiLCBcIikpLGMuc2V0RGF0YShzLFwidG9vbHRpcFwiLHkpLGUmJihjLnNldERhdGEocyxcInRvb2x0aXBFbGxpcHNpc09ubHlcIiwwPT09YSksbyYmdGhpcy51cGRhdGVQb3NpdGlvbigpKX19LHtrZXk6XCJzZXRTZWFyY2hWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0saT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKGUhPT10aGlzLnNlYXJjaFZhbHVlT3JpZ2luYWx8fGkpe3R8fCh0aGlzLiRzZWFyY2hJbnB1dC52YWx1ZT1lKTt2YXIgbz1lLnJlcGxhY2UoL1xcXFwvZyxcIlwiKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTt0aGlzLnNlYXJjaFZhbHVlPW8sdGhpcy5zZWFyY2hWYWx1ZU9yaWdpbmFsPWUsYy50b2dnbGVDbGFzcyh0aGlzLiRhbGxXcmFwcGVycyxcImhhcy1zZWFyY2gtdmFsdWVcIixlKSx0aGlzLmFmdGVyU2V0U2VhcmNoVmFsdWUoKX19fSx7a2V5Olwic2V0VmlzaWJsZU9wdGlvbnNDb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wLGk9ITEsbz10aGlzLnNlYXJjaEdyb3VwLG49dGhpcy5zaG93T3B0aW9uc09ubHlPblNlYXJjaCxyPXRoaXMuc2VhcmNoQnlTdGFydHNXaXRoLGE9dGhpcy5zZWFyY2hWYWx1ZTthPXRoaXMuc2VhcmNoTm9ybWFsaXplP3Mubm9ybWFsaXplU3RyaW5nKGEpOmE7dmFyIGw9dGhpcy5pc09wdGlvblZpc2libGUuYmluZCh0aGlzKTt0aGlzLmhhc09wdGlvbkdyb3VwJiYoZT10aGlzLmdldFZpc2libGVPcHRpb25Hcm91cHNNYXBwaW5nKGEpKSx0aGlzLm9wdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7dmFyIHU7cy5pc0N1cnJlbnROZXd8fChuJiYhYT8ocy5pc1Zpc2libGU9ITEsdT17aXNWaXNpYmxlOiExLGhhc0V4YWN0T3B0aW9uOiExfSk6dT1sKHtkYXRhOnMsc2VhcmNoVmFsdWU6YSxoYXNFeGFjdE9wdGlvbjppLHZpc2libGVPcHRpb25Hcm91cHNNYXBwaW5nOmUsc2VhcmNoR3JvdXA6byxzZWFyY2hCeVN0YXJ0c1dpdGg6cn0pLHUuaXNWaXNpYmxlJiYodCs9MSksaXx8KGk9dS5oYXNFeGFjdE9wdGlvbikpfSkpLHRoaXMuYWxsb3dOZXdPcHRpb24mJihhJiYhaT8odGhpcy5zZXROZXdPcHRpb24oKSx0Kz0xKTp0aGlzLnJlbW92ZU5ld09wdGlvbigpKSx0aGlzLnZpc2libGVPcHRpb25zQ291bnQ9dCx0aGlzLmFmdGVyU2V0VmlzaWJsZU9wdGlvbnNDb3VudCgpfX0se2tleTpcInNldE9wdGlvblByb3BcIix2YWx1ZTpmdW5jdGlvbihlLHQsaSl7dGhpcy5vcHRpb25zW2VdJiYodGhpcy5vcHRpb25zW2VdW3RdPWkpfX0se2tleTpcInNldE9wdGlvbnNIZWlnaHRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuJG9wdGlvbnNMaXN0LnN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdCh0aGlzLm9wdGlvbkhlaWdodCp0aGlzLnZpc2libGVPcHRpb25zQ291bnQsXCJweFwiKX19LHtrZXk6XCJzZXRPcHRpb25zQ29udGFpbmVySGVpZ2h0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7ZT90aGlzLnNob3dBc1BvcHVwJiYodGhpcy5vcHRpb25zQ291bnQ9dGhpcy5nZXRPcHRpb25zQ291bnQoKSx0aGlzLmhhbGZPcHRpb25zQ291bnQ9TWF0aC5jZWlsKHRoaXMub3B0aW9uc0NvdW50LzIpLHQ9dGhpcy5nZXRPcHRpb25zSGVpZ2h0KCksdGhpcy5vcHRpb25zSGVpZ2h0PXQpOih0PXRoaXMub3B0aW9uc0hlaWdodCx0aGlzLmtlZXBBbHdheXNPcGVuJiYoYy5zZXRTdHlsZSh0aGlzLiRub09wdGlvbnMsXCJoZWlnaHRcIix0KSxjLnNldFN0eWxlKHRoaXMuJG5vU2VhcmNoUmVzdWx0cyxcImhlaWdodFwiLHQpKSksYy5zZXRTdHlsZSh0aGlzLiRvcHRpb25zQ29udGFpbmVyLFwibWF4LWhlaWdodFwiLHQpLHRoaXMuYWZ0ZXJTZXRPcHRpb25zQ29udGFpbmVySGVpZ2h0KGUpfX0se2tleTpcInNldE5ld09wdGlvblwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWV8fHRoaXMuc2VhcmNoVmFsdWVPcmlnaW5hbC50cmltKCk7aWYodCl7dmFyIGk9dGhpcy5nZXROZXdPcHRpb24oKTtpZihpKXt2YXIgbz1pLmluZGV4O3RoaXMuc2V0T3B0aW9uUHJvcChvLFwidmFsdWVcIix0aGlzLnNlY3VyZVRleHQodCkpLHRoaXMuc2V0T3B0aW9uUHJvcChvLFwibGFiZWxcIix0aGlzLnNlY3VyZVRleHQodCkpfWVsc2V7dmFyIHM9e3ZhbHVlOnQsbGFiZWw6dH07ZT8ocy5pc05ldz0hMCx0aGlzLm5ld1ZhbHVlcy5wdXNoKHQpKTpzLmlzQ3VycmVudE5ldz0hMCx0aGlzLmFkZE9wdGlvbihzKX19fX0se2tleTpcInNldFNlbGVjdGVkUHJvcFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e307dGhpcy5zZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPSEwfSkpLHRoaXMub3B0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXshMD09PWVbdC52YWx1ZV0mJih0LmlzU2VsZWN0ZWQ9ITApfSkpfX0se2tleTpcInNldE5ld09wdGlvbnNGcm9tVmFsdWVcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLnNldE5ld09wdGlvbi5iaW5kKHRoaXMpLGk9e307dGhpcy5vcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lbZS52YWx1ZV09ITB9KSksZS5mb3JFYWNoKChmdW5jdGlvbihlKXtlJiYhMCE9PWlbZV0mJnQoZSl9KSl9fX0se2tleTpcInNldERyb3Bib3hXcmFwcGVyV2lkdGhcIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnNob3dBc1BvcHVwKXt2YXIgZT10aGlzLmRyb3Bib3hXaWR0aHx8XCJcIi5jb25jYXQodGhpcy4kd3JhcHBlci5vZmZzZXRXaWR0aCxcInB4XCIpO2Muc2V0U3R5bGUodGhpcy4kZHJvcGJveENvbnRhaW5lcixcIm1heC13aWR0aFwiLGUpfX19LHtrZXk6XCJzZXRFbGVTdHlsZXNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWF4V2lkdGgsdD17fTtlJiYodFtcIm1heC13aWR0aFwiXT1lKSxjLnNldFN0eWxlcyh0aGlzLiRlbGUsdCl9fSx7a2V5Olwic2V0RHJvcGJveFN0eWxlc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kcm9wYm94V2lkdGgsdD17fSxpPXtcInotaW5kZXhcIjp0aGlzLnpJbmRleH07ZSYmKHRoaXMuc2hvd0FzUG9wdXA/dFtcIm1heC13aWR0aFwiXT1lOmkud2lkdGg9ZSksYy5zZXRTdHlsZXModGhpcy4kZHJvcGJveENvbnRhaW5lcixpKSxjLnNldFN0eWxlcyh0aGlzLiRkcm9wYm94LHQpfX0se2tleTpcInNldE9wdGlvbkF0dHJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHZpc2libGVPcHRpb25zLHQ9dGhpcy5vcHRpb25zLGk9XCJcIi5jb25jYXQodGhpcy5vcHRpb25IZWlnaHQsXCJweFwiKSxvPWMuc2V0U3R5bGUscz1jLmdldERhdGEsbj1jLnNldERhdGE7ZSYmZS5sZW5ndGgmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9dFtzKGUsXCJpbmRleFwiKV07byhlLFwiaGVpZ2h0XCIsaSksbihlLFwidmFsdWVcIixyLnZhbHVlKX0pKX19LHtrZXk6XCJzZXRWYWx1ZVRhZ0F0dHJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHZhbHVlVGFncztpZihlJiZlLmxlbmd0aCl7dmFyIHQ9Yy5nZXREYXRhLGk9Yy5zZXREYXRhLG89dGhpcy5vcHRpb25zO2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHM9dChlLFwiaW5kZXhcIik7aWYodm9pZCAwIT09cyl7dmFyIG49b1tzXTtpKGUsXCJ2YWx1ZVwiLG4udmFsdWUpfX0pKX19fSx7a2V5Olwic2V0U2Nyb2xsVG9wXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlbGVjdGVkVmFsdWVzO2lmKCF0aGlzLnNob3dTZWxlY3RlZE9wdGlvbnNGaXJzdCYmdGhpcy5mb2N1c1NlbGVjdGVkT3B0aW9uT25PcGVuJiYwIT09ZS5sZW5ndGgpe3ZhciB0LGk9e307ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpW2VdPSEwfSkpLHRoaXMub3B0aW9ucy5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4hIWlbZS52YWx1ZV0mJih0PWUudmlzaWJsZUluZGV4LCEwKX0pKSx0JiYodGhpcy4kb3B0aW9uc0NvbnRhaW5lci5zY3JvbGxUb3A9dGhpcy5vcHRpb25IZWlnaHQqdCl9fX0se2tleTpcImdldFZpc2libGVPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aXNpYmxlT3B0aW9uc3x8W119fSx7a2V5OlwiZ2V0VmFsdWVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11bHRpcGxlP3RoaXMudXNlR3JvdXBWYWx1ZT90aGlzLmdldEdyb3VwVmFsdWUoKTp0aGlzLnNlbGVjdGVkVmFsdWVzOnRoaXMuc2VsZWN0ZWRWYWx1ZXNbMF18fFwiXCJ9fSx7a2V5OlwiZ2V0R3JvdXBWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD17fTtyZXR1cm4gdGhpcy5vcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGkpe2lmKGkuaXNTZWxlY3RlZCl7dmFyIG89aS52YWx1ZTtpLmlzR3JvdXBUaXRsZT9vJiYodFtpLmluZGV4XT0hMCxlLnB1c2gobykpOiEwIT09dFtpLmdyb3VwSW5kZXhdJiZlLnB1c2gobyl9fSkpLGV9fSx7a2V5OlwiZ2V0SW5wdXRWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJnQubGVuZ3RoP3RoaXMuc2V0VmFsdWVBc0FycmF5JiZ0aGlzLm11bHRpcGxlJiYodD1KU09OLnN0cmluZ2lmeSh0KSk6dD10aGlzLmVtcHR5VmFsdWUsdH19LHtrZXk6XCJnZXRGaXJzdFZpc2libGVPcHRpb25JbmRleFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLiRvcHRpb25zQ29udGFpbmVyLnNjcm9sbFRvcC90aGlzLm9wdGlvbkhlaWdodCl9fSx7a2V5OlwiZ2V0VmlzaWJsZVN0YXJ0SW5kZXhcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlT3B0aW9uSW5kZXgoKS10aGlzLmhhbGZPcHRpb25zQ291bnQ7cmV0dXJuIGU8MCYmKGU9MCksZX19LHtrZXk6XCJnZXRUb29sdGlwQXR0clRleHRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGk9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxvPXtcImRhdGEtdG9vbHRpcFwiOmV8fFwiXCIsXCJkYXRhLXRvb2x0aXAtZW50ZXItZGVsYXlcIjp0aGlzLnRvb2x0aXBFbnRlckRlbGF5LFwiZGF0YS10b29sdGlwLXotaW5kZXhcIjp0aGlzLnpJbmRleCxcImRhdGEtdG9vbHRpcC1mb250LXNpemVcIjp0aGlzLnRvb2x0aXBGb250U2l6ZSxcImRhdGEtdG9vbHRpcC1hbGlnbm1lbnRcIjp0aGlzLnRvb2x0aXBBbGlnbm1lbnQsXCJkYXRhLXRvb2x0aXAtbWF4LXdpZHRoXCI6dGhpcy50b29sdGlwTWF4V2lkdGgsXCJkYXRhLXRvb2x0aXAtZWxsaXBzaXMtb25seVwiOnQsXCJkYXRhLXRvb2x0aXAtYWxsb3ctaHRtbFwiOml9O3JldHVybiBjLmdldEF0dHJpYnV0ZXNUZXh0KG8pfX0se2tleTpcImdldE9wdGlvbk9ialwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXMuZ2V0U3RyaW5nLGk9dGhpcy5zZWN1cmVUZXh0LmJpbmQodGhpcyk7cmV0dXJue2luZGV4OmUuaW5kZXgsdmFsdWU6aSh0KGUudmFsdWUpKSxsYWJlbDppKHQoZS5sYWJlbCkpLGRlc2NyaXB0aW9uOmkodChlLmRlc2NyaXB0aW9uKSksYWxpYXM6dGhpcy5nZXRBbGlhcyhlLmFsaWFzKSxpc0N1cnJlbnROZXc6ZS5pc0N1cnJlbnROZXd8fCExLGlzTmV3OmUuaXNOZXd8fCExLGlzVmlzaWJsZTohMH19fX0se2tleTpcImdldE5ld09wdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zW3RoaXMubGFzdE9wdGlvbkluZGV4XTtpZihlJiZlLmlzQ3VycmVudE5ldylyZXR1cm4gZX19LHtrZXk6XCJnZXRPcHRpb25JbmRleFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLm9wdGlvbnMuc29tZSgoZnVuY3Rpb24oaSl7cmV0dXJuIGkudmFsdWU9PT1lJiYodD1pLmluZGV4LCEwKX0pKSx0fX0se2tleTpcImdldE5ld1ZhbHVlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT17fTt0aGlzLm5ld1ZhbHVlcy5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPSEwfSkpO3ZhciB0PXRoaXMuc2VsZWN0ZWRWYWx1ZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hMD09PWVbdF19KSk7cmV0dXJuIHRoaXMubXVsdGlwbGU/dDp0WzBdfX0se2tleTpcImdldEFsaWFzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmKHQ9KHQ9QXJyYXkuaXNBcnJheSh0KT90LmpvaW4oXCIsXCIpOnQudG9TdHJpbmcoKS50cmltKCkpLnRvTG93ZXJDYXNlKCkpLHR8fFwiXCJ9fSx7a2V5OlwiZ2V0RGlzcGxheVZhbHVlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5vcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaXNTZWxlY3RlZCYmZS5wdXNoKHQubGFiZWwpfSkpLHRoaXMubXVsdGlwbGU/ZTplWzBdfHxcIlwifX0se2tleTpcImdldFNlbGVjdGVkT3B0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5mdWxsRGV0YWlscyxpPXZvaWQgMCE9PXQmJnQsbz1lLmtlZXBTZWxlY3Rpb25PcmRlcixzPXZvaWQgMCE9PW8mJm8sbj10aGlzLnZhbHVlS2V5LHI9dGhpcy5sYWJlbEtleSxhPXRoaXMuc2VsZWN0ZWRWYWx1ZXMsbD1bXTtpZih0aGlzLm9wdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5pc1NlbGVjdGVkJiYhZS5pc0dyb3VwVGl0bGUpaWYoaSlsLnB1c2goZSk7ZWxzZXt2YXIgdCxvPSh2KHQ9e30sbixlLnZhbHVlKSx2KHQscixlLmxhYmVsKSx0KTtlLmlzTmV3JiYoby5pc05ldz0hMCksZS5jdXN0b21EYXRhJiYoby5jdXN0b21EYXRhPWUuY3VzdG9tRGF0YSksbC5wdXNoKG8pfX0pKSxzKXt2YXIgdT17fTthLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dVtlXT10fSkpLGwuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdVtlLnZhbHVlXS11W3QudmFsdWVdfSkpfXJldHVybiB0aGlzLm11bHRpcGxlfHxpP2w6bFswXX19LHtrZXk6XCJnZXREaXNhYmxlZE9wdGlvbnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWVLZXksdD10aGlzLmxhYmVsS2V5LGk9dGhpcy5kaXNhYmxlZE9wdGlvbnMsbz17fSxzPVtdO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKGUpe29bZV09ITB9KSksdGhpcy5vcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBuLHI9aS52YWx1ZSxhPWkubGFiZWw7b1tyXSYmcy5wdXNoKCh2KG49e30sZSxyKSx2KG4sdCxhKSxuKSl9KSksc319LHtrZXk6XCJnZXRWaXNpYmxlT3B0aW9uR3JvdXBzTWFwcGluZ1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucyxpPXt9LG89dGhpcy5pc09wdGlvblZpc2libGUuYmluZCh0aGlzKTtyZXR1cm4odD10aGlzLnN0cnVjdHVyZU9wdGlvbkdyb3VwKHQpKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpW3QuaW5kZXhdPXQub3B0aW9ucy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gbyh7ZGF0YTp0LHNlYXJjaFZhbHVlOmV9KS5pc1Zpc2libGV9KSl9KSksaX19LHtrZXk6XCJnZXRPcHRpb25zQ291bnRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtpZih0aGlzLnNob3dBc1BvcHVwKXt2YXIgaT04MCp3aW5kb3cuaW5uZXJIZWlnaHQvMTAwLTQ4O3RoaXMuaGFzU2VhcmNoQ29udGFpbmVyJiYoaS09NDApLHQ9TWF0aC5mbG9vcihpL3RoaXMub3B0aW9uSGVpZ2h0KX1lbHNlIHQ9cGFyc2VJbnQoZSk7cmV0dXJuIHR9fSx7a2V5OlwiZ2V0T3B0aW9uc0hlaWdodFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJcIi5jb25jYXQodGhpcy5vcHRpb25zQ291bnQqdGhpcy5vcHRpb25IZWlnaHQsXCJweFwiKX19LHtrZXk6XCJnZXRTaWJsaW5nXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgaT1cIm5leHRcIj09PXQ/XCJuZXh0RWxlbWVudFNpYmxpbmdcIjpcInByZXZpb3VzRWxlbWVudFNpYmxpbmdcIixvPWU7ZG97byYmKG89b1tpXSl9d2hpbGUoYy5oYXNDbGFzcyhvLFwiZGlzYWJsZWRcIil8fGMuaGFzQ2xhc3MobyxcImdyb3VwLXRpdGxlXCIpKTtyZXR1cm4gb319LHtrZXk6XCJnZXRVbmlxdWVJZFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cy5nZXRSYW5kb21JbnQoMWU0KTtyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN2c2NvbXAtZWxlLXdyYXBwZXItXCIuY29uY2F0KGUpKT90aGlzLmdldFVuaXF1ZUlkKCk6ZX19LHtrZXk6XCJpbml0RHJvcGJveFBvcG92ZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXtlbGU6dGhpcy4kZWxlLHRhcmdldDp0aGlzLiRkcm9wYm94Q29udGFpbmVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sekluZGV4OnRoaXMuekluZGV4LG1hcmdpbjo0LHRyYW5zaXRpb25EaXN0YW5jZTozMCxoaWRlQXJyb3dJY29uOiEwLGRpc2FibGVNYW51YWxBY3Rpb246ITAsZGlzYWJsZVVwZGF0ZVBvc2l0aW9uOiF0aGlzLmhhc0Ryb3Bib3hXcmFwcGVyLHVwZGF0ZVBvc2l0aW9uVGhyb3R0bGU6dGhpcy51cGRhdGVQb3NpdGlvblRocm90dGxlLGFmdGVyU2hvdzp0aGlzLmFmdGVyU2hvd1BvcHBlci5iaW5kKHRoaXMpLGFmdGVySGlkZTp0aGlzLmFmdGVySGlkZVBvcHBlci5iaW5kKHRoaXMpfTt0aGlzLmRyb3Bib3hQb3BvdmVyPW5ldyBQb3BvdmVyQ29tcG9uZW50KGUpfX0se2tleTpcIm9wZW5Ecm9wYm94XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pc1NpbGVudE9wZW49ZSxlP2Muc2V0U3R5bGUodGhpcy4kZHJvcGJveENvbnRhaW5lcixcImRpc3BsYXlcIixcImlubGluZS1mbGV4XCIpOihjLmRpc3BhdGNoRXZlbnQodGhpcy4kZWxlLFwiYmVmb3JlT3BlblwiKSxjLnNldEFyaWEodGhpcy4kd3JhcHBlcixcImV4cGFuZGVkXCIsITApKSx0aGlzLnNldERyb3Bib3hXcmFwcGVyV2lkdGgoKSxjLnJlbW92ZUNsYXNzKHRoaXMuJGFsbFdyYXBwZXJzLFwiY2xvc2VkXCIpLGMuY2hhbmdlVGFiSW5kZXgodGhpcy4kYWxsV3JhcHBlcnMsMCksdGhpcy5kcm9wYm94UG9wb3ZlciYmIWU/dGhpcy5kcm9wYm94UG9wb3Zlci5zaG93KCk6dGhpcy5hZnRlclNob3dQb3BwZXIoKX19LHtrZXk6XCJhZnRlclNob3dQb3BwZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaXNTaWxlbnRPcGVuO3RoaXMuaXNTaWxlbnRPcGVuPSExLGV8fCh0aGlzLm1vdmVTZWxlY3RlZE9wdGlvbnNGaXJzdCgpLHRoaXMuc2V0U2Nyb2xsVG9wKCksYy5hZGRDbGFzcyh0aGlzLiRhbGxXcmFwcGVycyxcImZvY3VzZWRcIiksdGhpcy5zaG93QXNQb3B1cD8oYy5hZGRDbGFzcyh0aGlzLiRib2R5LFwidnNjb21wLXBvcHVwLWFjdGl2ZVwiKSx0aGlzLmlzUG9wdXBBY3RpdmU9ITApOnRoaXMuZm9jdXNTZWFyY2hJbnB1dCgpLGMuZGlzcGF0Y2hFdmVudCh0aGlzLiRlbGUsXCJhZnRlck9wZW5cIikpfX0se2tleTpcImNsb3NlRHJvcGJveFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuaXNTaWxlbnRDbG9zZT1lLHRoaXMua2VlcEFsd2F5c09wZW4/dGhpcy5yZW1vdmVPcHRpb25Gb2N1cygpOihlP2Muc2V0U3R5bGUodGhpcy4kZHJvcGJveENvbnRhaW5lcixcImRpc3BsYXlcIixcIlwiKTooYy5kaXNwYXRjaEV2ZW50KHRoaXMuJGVsZSxcImJlZm9yZUNsb3NlXCIpLGMuc2V0QXJpYSh0aGlzLiR3cmFwcGVyLFwiZXhwYW5kZWRcIiwhMSksYy5zZXRBcmlhKHRoaXMuJHdyYXBwZXIsXCJhY3RpdmVkZXNjZW5kYW50XCIsXCJcIikpLHRoaXMuZHJvcGJveFBvcG92ZXImJiFlP3RoaXMuZHJvcGJveFBvcG92ZXIuaGlkZSgpOnRoaXMuYWZ0ZXJIaWRlUG9wcGVyKCkpfX0se2tleTpcImFmdGVySGlkZVBvcHBlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pc1NpbGVudENsb3NlO3RoaXMuaXNTaWxlbnRDbG9zZT0hMSxjLnJlbW92ZUNsYXNzKHRoaXMuJGFsbFdyYXBwZXJzLFwiZm9jdXNlZFwiKSx0aGlzLnJlbW92ZU9wdGlvbkZvY3VzKCksIWUmJnRoaXMuaXNQb3B1cEFjdGl2ZSYmKGMucmVtb3ZlQ2xhc3ModGhpcy4kYm9keSxcInZzY29tcC1wb3B1cC1hY3RpdmVcIiksdGhpcy5pc1BvcHVwQWN0aXZlPSExKSxjLmFkZENsYXNzKHRoaXMuJGFsbFdyYXBwZXJzLFwiY2xvc2VkXCIpLGV8fGMuZGlzcGF0Y2hFdmVudCh0aGlzLiRlbGUsXCJhZnRlckNsb3NlXCIpLHRoaXMuZm9jdXMoKX19LHtrZXk6XCJtb3ZlU2VsZWN0ZWRPcHRpb25zRmlyc3RcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2hvd1NlbGVjdGVkT3B0aW9uc0ZpcnN0JiYodGhpcy5zZXRTb3J0ZWRPcHRpb25zKCksdGhpcy4kb3B0aW9uc0NvbnRhaW5lci5zY3JvbGxUb3AmJnRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoP3RoaXMuc2Nyb2xsVG9Ub3AoKTp0aGlzLnNldFZpc2libGVPcHRpb25zKCkpfX0se2tleTpcInRvZ2dsZURyb3Bib3hcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNPcGVuZWQoKT90aGlzLmNsb3NlRHJvcGJveCgpOnRoaXMub3BlbkRyb3Bib3goKX19LHtrZXk6XCJ1cGRhdGVQb3NpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kcm9wYm94UG9wb3ZlciYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLiRlbGUudXBkYXRlUG9zaXRpb24oKX19LHtrZXk6XCJpc09wZW5lZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIWMuaGFzQ2xhc3ModGhpcy4kd3JhcHBlcixcImNsb3NlZFwiKX19LHtrZXk6XCJmb2N1c1NlYXJjaElucHV0XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRzZWFyY2hJbnB1dDtlJiZlLmZvY3VzKCl9fSx7a2V5OlwiZm9jdXNPcHRpb25cIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGk9dC5kaXJlY3Rpb24sbz10LiRvcHRpb24scz10LmZvY3VzRmlyc3Qsbj10aGlzLiRkcm9wYm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIudnNjb21wLW9wdGlvbi5mb2N1c2VkXCIpO2lmKG8pZT1vO2Vsc2UgaWYoIW58fHMpe3ZhciByPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlT3B0aW9uSW5kZXgoKTtlPXRoaXMuJGRyb3Bib3hDb250YWluZXIucXVlcnlTZWxlY3RvcignLnZzY29tcC1vcHRpb25bZGF0YS12aXNpYmxlLWluZGV4PVwiJy5jb25jYXQociwnXCJdJykpLChjLmhhc0NsYXNzKGUsXCJkaXNhYmxlZFwiKXx8Yy5oYXNDbGFzcyhlLFwiZ3JvdXAtdGl0bGVcIikpJiYoZT10aGlzLmdldFNpYmxpbmcoZSxcIm5leHRcIikpfWVsc2UgZT10aGlzLmdldFNpYmxpbmcobixpKTtlJiZlIT09biYmKG4mJnRoaXMudG9nZ2xlT3B0aW9uRm9jdXNlZFN0YXRlKG4sITEpLHRoaXMuJGFyaWFMaXZlRWxlbSYmKHRoaXMuJGFyaWFMaXZlRWxlbS50ZXh0Q29udGVudD1lLnRleHRDb250ZW50KSx0aGlzLnRvZ2dsZU9wdGlvbkZvY3VzZWRTdGF0ZShlLCEwKSx0aGlzLnRvZ2dsZUZvY3VzZWRQcm9wKGMuZ2V0RGF0YShlLFwiaW5kZXhcIiksITApLHRoaXMubW92ZUZvY3VzZWRPcHRpb25Ub1ZpZXcoZSkpfX0se2tleTpcIm1vdmVGb2N1c2VkT3B0aW9uVG9WaWV3XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dGhpcy4kZHJvcGJveENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC1vcHRpb24uZm9jdXNlZFwiKTtpZih0KXt2YXIgaSxvPXRoaXMuJG9wdGlvbnNDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49by50b3Ascj1vLmJvdHRvbSxhPW8uaGVpZ2h0LGw9cy50b3AsdT1zLmJvdHRvbSxwPXMuaGVpZ2h0LGg9dC5vZmZzZXRUb3AsZD1jLmdldERhdGEodGhpcy4kb3B0aW9ucyxcInRvcFwiLFwibnVtYmVyXCIpO24+bD9pPWgrZDpyPHUmJihpPWgtYStwK2QpLHZvaWQgMCE9PWkmJih0aGlzLiRvcHRpb25zQ29udGFpbmVyLnNjcm9sbFRvcD1pKX19fSx7a2V5OlwicmVtb3ZlT3B0aW9uRm9jdXNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJGRyb3Bib3hDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi52c2NvbXAtb3B0aW9uLmZvY3VzZWRcIik7ZSYmKHRoaXMudG9nZ2xlT3B0aW9uRm9jdXNlZFN0YXRlKGUsITEpLHRoaXMudG9nZ2xlRm9jdXNlZFByb3AobnVsbCkpfX0se2tleTpcInNlbGVjdE9wdGlvblwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxpPXQuZXZlbnQ7aWYoZSl7dmFyIG89IWMuaGFzQ2xhc3MoZSxcInNlbGVjdGVkXCIpO2lmKG8pe2lmKHRoaXMubXVsdGlwbGUmJnRoaXMuaXNNYXhWYWx1ZXNTZWxlY3RlZClyZXR1cm59ZWxzZSBpZighdGhpcy5tdWx0aXBsZSlyZXR1cm4gdm9pZCB0aGlzLmNsb3NlRHJvcGJveCgpO3ZhciBuPXRoaXMuc2VsZWN0ZWRWYWx1ZXMscj1jLmdldERhdGEoZSxcInZhbHVlXCIpLGE9Yy5nZXREYXRhKGUsXCJpbmRleFwiLFwibnVtYmVyXCIpLGw9Yy5oYXNDbGFzcyhlLFwiY3VycmVudC1uZXdcIiksdT0hMSxwPXRoaXMubGFzdFNlbGVjdGVkT3B0aW9uSW5kZXg7aWYodGhpcy5sYXN0U2VsZWN0ZWRPcHRpb25JbmRleD1udWxsLHRoaXMudG9nZ2xlU2VsZWN0ZWRQcm9wKGEsbyksbyl7aWYodGhpcy5tdWx0aXBsZSluLnB1c2gociksdGhpcy50b2dnbGVBbGxPcHRpb25zQ2xhc3MoKSx0aGlzLnRvZ2dsZUdyb3VwT3B0aW9uc1BhcmVudChlKSxpJiZpLnNoaWZ0S2V5JiYodT0hMCk7ZWxzZXtuLmxlbmd0aCYmdGhpcy50b2dnbGVTZWxlY3RlZFByb3AodGhpcy5nZXRPcHRpb25JbmRleChuWzBdKSwhMSksbj1bcl07dmFyIGg9dGhpcy4kZHJvcGJveENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnZzY29tcC1vcHRpb24uc2VsZWN0ZWRcIik7aCYmdGhpcy50b2dnbGVPcHRpb25TZWxlY3RlZFN0YXRlKGgsITEpLHRoaXMuY2xvc2VEcm9wYm94KCksbHx8dGhpcy5zZXRTZWFyY2hWYWx1ZShcIlwiKX10aGlzLmxhc3RTZWxlY3RlZE9wdGlvbkluZGV4PWEsdGhpcy50b2dnbGVPcHRpb25TZWxlY3RlZFN0YXRlKGUpfWVsc2UgdGhpcy5tdWx0aXBsZSYmKHRoaXMudG9nZ2xlT3B0aW9uU2VsZWN0ZWRTdGF0ZShlKSxzLnJlbW92ZUl0ZW1Gcm9tQXJyYXkobixyKSx0aGlzLnRvZ2dsZUFsbE9wdGlvbnNDbGFzcyghMSksdGhpcy50b2dnbGVHcm91cE9wdGlvbnNQYXJlbnQoZSwhMSkpO2wmJnRoaXMuYmVmb3JlU2VsZWN0TmV3VmFsdWUoKSx0aGlzLnNldFZhbHVlKG4pLHUmJnRoaXMuc2VsZWN0UmFuZ2VPcHRpb25zKHAsYSl9fX0se2tleTpcInNlbGVjdEZvY3VzZWRPcHRpb25cIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0T3B0aW9uKHRoaXMuJGRyb3Bib3hDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi52c2NvbXAtb3B0aW9uLmZvY3VzZWRcIikpfX0se2tleTpcInNlbGVjdFJhbmdlT3B0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcztpZihcIm51bWJlclwiPT10eXBlb2YgZSYmIXRoaXMubWF4VmFsdWVzKXt2YXIgbyxzLG49dGhpcy5zZWxlY3RlZFZhbHVlcyxyPXRoaXMuaGFzT3B0aW9uR3JvdXAsYT17fTtpZihlPHQ/KG89ZSxzPXQpOihvPXQscz1lKSx0aGlzLm9wdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoIWUuaXNEaXNhYmxlZCYmIWUuaXNHcm91cFRpdGxlJiZlLmlzVmlzaWJsZSYmIWUuaXNTZWxlY3RlZCl7dmFyIHQ9ZS5pbmRleDtpZih0Pm8mJnQ8cyl7aWYocil7dmFyIGk9ZS5ncm91cEluZGV4O1wibnVtYmVyXCI9PXR5cGVvZiBpJiYoYVtpXT0hMCl9ZS5pc1NlbGVjdGVkPSEwLG4ucHVzaChlLnZhbHVlKX19fSkpLHRoaXMudG9nZ2xlQWxsT3B0aW9uc0NsYXNzKCksdGhpcy5zZXRWYWx1ZShuKSwoYT1PYmplY3Qua2V5cyhhKSkubGVuZ3RoKXt2YXIgbD10aGlzLnRvZ2dsZUdyb3VwVGl0bGVQcm9wLmJpbmQodGhpcyk7YS5mb3JFYWNoKChmdW5jdGlvbihlKXtsKHBhcnNlSW50KGUpKX0pKX1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2kucmVuZGVyT3B0aW9ucygpfSksMCl9fX0se2tleTpcInRvZ2dsZUFsbE9wdGlvbnNcIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLm11bHRpcGxlJiYhdGhpcy5kaXNhYmxlU2VsZWN0QWxsKXt2YXIgdD1cImJvb2xlYW5cIj09dHlwZW9mIGlzU2VsZWN0ZWQ/ZTohYy5oYXNDbGFzcyh0aGlzLiR0b2dnbGVBbGxDaGVja2JveCxcImNoZWNrZWRcIiksaT1bXSxvPXRoaXMuc2VsZWN0QWxsT25seVZpc2libGU7dGhpcy5vcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBzPWU7aWYoIXMuaXNEaXNhYmxlZCYmIXMuaXNDdXJyZW50TmV3KXt2YXIgbj1zLmlzVmlzaWJsZSxyPXMuaXNTZWxlY3RlZDshdCYmKCFvfHxufHwhcil8fHQmJm8mJiFuJiYhcj9zLmlzU2VsZWN0ZWQ9ITE6KHMuaXNTZWxlY3RlZD0hMCxzLmlzR3JvdXBUaXRsZXx8aS5wdXNoKHMudmFsdWUpKX19KSksdGhpcy50b2dnbGVBbGxPcHRpb25zQ2xhc3ModCksdGhpcy5zZXRWYWx1ZShpKSx0aGlzLnJlbmRlck9wdGlvbnMoKX19fSx7a2V5OlwidG9nZ2xlQWxsT3B0aW9uc0NsYXNzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5tdWx0aXBsZSl7dmFyIHQ9ITE7XCJib29sZWFuXCI9PXR5cGVvZiBlfHwoZT10aGlzLmlzQWxsT3B0aW9uc1NlbGVjdGVkKCkpLCFlJiZ0aGlzLnNlbGVjdEFsbE9ubHlWaXNpYmxlJiYodD10aGlzLmlzQWxsT3B0aW9uc1NlbGVjdGVkKCEwKSksYy50b2dnbGVDbGFzcyh0aGlzLiR0b2dnbGVBbGxDaGVja2JveCxcImNoZWNrZWRcIixlfHx0KSx0aGlzLmlzQWxsU2VsZWN0ZWQ9ZX19fSx7a2V5OlwiaXNBbGxPcHRpb25zU2VsZWN0ZWRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0hMTtyZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aCYmdGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGgmJih0PSF0aGlzLm9wdGlvbnMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIXQuaXNTZWxlY3RlZCYmIXQuaXNEaXNhYmxlZCYmIXQuaXNHcm91cFRpdGxlJiYoIWV8fHQuaXNWaXNpYmxlKX0pKSksdH19LHtrZXk6XCJpc0FsbEdyb3VwT3B0aW9uc1NlbGVjdGVkXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7cmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGgmJih0PSF0aGlzLm9wdGlvbnMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIXQuaXNTZWxlY3RlZCYmIXQuaXNEaXNhYmxlZCYmIXQuaXNHcm91cFRpdGxlJiZ0Lmdyb3VwSW5kZXg9PT1lfSkpKSx0fX0se2tleTpcInRvZ2dsZUdyb3VwT3B0aW9uc1BhcmVudFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5oYXNPcHRpb25Hcm91cCYmIXRoaXMuZGlzYWJsZU9wdGlvbkdyb3VwQ2hlY2tib3gmJmUpe3ZhciBpPWMuZ2V0RGF0YShlLFwiZ3JvdXBJbmRleFwiKTt2b2lkIDAhPT1pJiYoaT1wYXJzZUludChpKSk7dmFyIG89dGhpcy4kb3B0aW9ucy5xdWVyeVNlbGVjdG9yKCcudnNjb21wLW9wdGlvbltkYXRhLWluZGV4PVwiJy5jb25jYXQoaSwnXCJdJykpLHM9XCJib29sZWFuXCI9PXR5cGVvZiB0P3Q6dGhpcy5pc0FsbEdyb3VwT3B0aW9uc1NlbGVjdGVkKGkpO3RoaXMudG9nZ2xlR3JvdXBUaXRsZUNoZWNrYm94KG8scyksdGhpcy50b2dnbGVHcm91cFRpdGxlUHJvcChpLHMpfX19LHtrZXk6XCJ0b2dnbGVHcm91cFRpdGxlUHJvcFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9XCJib29sZWFuXCI9PXR5cGVvZiB0P3Q6dGhpcy5pc0FsbEdyb3VwT3B0aW9uc1NlbGVjdGVkKGUpO3RoaXMudG9nZ2xlU2VsZWN0ZWRQcm9wKGUsaSl9fSx7a2V5OlwidG9nZ2xlR3JvdXBPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzO2lmKHRoaXMuaGFzT3B0aW9uR3JvdXAmJiF0aGlzLmRpc2FibGVPcHRpb25Hcm91cENoZWNrYm94JiZlKXt2YXIgbz1jLmdldERhdGEoZSxcImluZGV4XCIsXCJudW1iZXJcIiksbj10aGlzLnNlbGVjdGVkVmFsdWVzLHI9dGhpcy5zZWxlY3RBbGxPbmx5VmlzaWJsZSxhPXt9LGw9cy5yZW1vdmVJdGVtRnJvbUFycmF5O24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7YVtlXT0hMH0pKSx0aGlzLm9wdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoIWUuaXNEaXNhYmxlZCYmZS5ncm91cEluZGV4PT09byl7dmFyIGk9ZS52YWx1ZTshdHx8ciYmIWUuaXNWaXNpYmxlPyhlLmlzU2VsZWN0ZWQ9ITEsYVtpXSYmbChuLGkpKTooZS5pc1NlbGVjdGVkPSEwLGFbaV18fG4ucHVzaChpKSl9fSkpLHRoaXMudG9nZ2xlQWxsT3B0aW9uc0NsYXNzKCEhdCYmbnVsbCksdGhpcy5zZXRWYWx1ZShuKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2kucmVuZGVyT3B0aW9ucygpfSksMCl9fX0se2tleTpcInRvZ2dsZUdyb3VwVGl0bGVDaGVja2JveFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoZSl7dmFyIGk9Yy5nZXREYXRhKGUsXCJpbmRleFwiLFwibnVtYmVyXCIpO3RoaXMudG9nZ2xlU2VsZWN0ZWRQcm9wKGksdCksdGhpcy50b2dnbGVPcHRpb25TZWxlY3RlZFN0YXRlKGUsdCl9fX0se2tleTpcInRvZ2dsZUZvY3VzZWRQcm9wXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLmZvY3VzZWRPcHRpb25JbmRleCYmdGhpcy5zZXRPcHRpb25Qcm9wKHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4LFwiaXNGb2N1c2VkXCIsITEpLHRoaXMuc2V0T3B0aW9uUHJvcChlLFwiaXNGb2N1c2VkXCIsdCksdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXg9ZX19LHtrZXk6XCJ0b2dnbGVTZWxlY3RlZFByb3BcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3RoaXMuc2V0T3B0aW9uUHJvcChlLFwiaXNTZWxlY3RlZFwiLHQpfX0se2tleTpcInNjcm9sbFRvVG9wXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0hdGhpcy5pc09wZW5lZCgpO2UmJnRoaXMub3BlbkRyb3Bib3goITApLHRoaXMuJG9wdGlvbnNDb250YWluZXIuc2Nyb2xsVG9wPjAmJih0aGlzLiRvcHRpb25zQ29udGFpbmVyLnNjcm9sbFRvcD0wKSxlJiZ0aGlzLmNsb3NlRHJvcGJveCghMCl9fSx7a2V5OlwicmVzZXRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy5vcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaXNTZWxlY3RlZD0hMX0pKSx0aGlzLmJlZm9yZVZhbHVlU2V0KCEwKSx0aGlzLnNldFZhbHVlKG51bGwse2Rpc2FibGVWYWxpZGF0aW9uOmV9KSx0aGlzLmFmdGVyVmFsdWVTZXQoKSxlJiZjLnJlbW92ZUNsYXNzKHRoaXMuJGFsbFdyYXBwZXJzLFwiaGFzLWVycm9yXCIpLGMuZGlzcGF0Y2hFdmVudCh0aGlzLiRlbGUsXCJyZXNldFwiKX19LHtrZXk6XCJhZGRPcHRpb25cIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUpe3RoaXMubGFzdE9wdGlvbkluZGV4Kz0xO3ZhciBpPXRoaXMuZ2V0T3B0aW9uT2JqKGQoZCh7fSxlKSx7fSx7aW5kZXg6dGhpcy5sYXN0T3B0aW9uSW5kZXh9KSk7dGhpcy5vcHRpb25zLnB1c2goaSksdGhpcy5zb3J0ZWRPcHRpb25zLnB1c2goaSksdCYmKHRoaXMudmlzaWJsZU9wdGlvbnNDb3VudCs9MSx0aGlzLmFmdGVyU2V0T3B0aW9ucygpKX19fSx7a2V5OlwicmVtb3ZlT3B0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oZSl7KGV8fDA9PT1lKSYmKHRoaXMub3B0aW9ucy5zcGxpY2UoZSwxKSx0aGlzLmxhc3RPcHRpb25JbmRleC09MSl9fSx7a2V5OlwicmVtb3ZlTmV3T3B0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldE5ld09wdGlvbigpO2UmJnRoaXMucmVtb3ZlT3B0aW9uKGUuaW5kZXgpfX0se2tleTpcInNvcnRPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc29ydCgoZnVuY3Rpb24oZSx0KXt2YXIgaT1lLmlzU2VsZWN0ZWR8fGUuaXNBbnlTZWxlY3RlZCxvPXQuaXNTZWxlY3RlZHx8dC5pc0FueVNlbGVjdGVkO3JldHVybiBpfHxvP2kmJighb3x8ZS5pbmRleDx0LmluZGV4KT8tMToxOjB9KSl9fSx7a2V5Olwic29ydE9wdGlvbnNHcm91cFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc29ydE9wdGlvbnMuYmluZCh0aGlzKSxpPXRoaXMuc3RydWN0dXJlT3B0aW9uR3JvdXAoZSk7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9ZS5vcHRpb25zO2UuaXNBbnlTZWxlY3RlZD1pLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzU2VsZWN0ZWR9KSksZS5pc0FueVNlbGVjdGVkJiZ0KGkpfSkpLHQoaSksdGhpcy5kZXN0cnVjdHVyZU9wdGlvbkdyb3VwKGkpfX0se2tleTpcImlzT3B0aW9uVmlzaWJsZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxpPWUuc2VhcmNoVmFsdWUsbz1lLmhhc0V4YWN0T3B0aW9uLHM9ZS52aXNpYmxlT3B0aW9uR3JvdXBzTWFwcGluZyxuPWUuc2VhcmNoR3JvdXAscj1lLnNlYXJjaEJ5U3RhcnRzV2l0aCxhPXQudmFsdWUudG9Mb3dlckNhc2UoKSxsPXRoaXMuc2VhcmNoTm9ybWFsaXplP3QubGFiZWxOb3JtYWxpemVkOnQubGFiZWwudG9Mb3dlckNhc2UoKSx1PXQuZGVzY3JpcHRpb24scD10LmFsaWFzLGM9cj9sLnN0YXJ0c1dpdGgoaSk6bC5pbmNsdWRlcyhpKTtyZXR1cm4hdC5pc0dyb3VwVGl0bGV8fG4mJmN8fChjPXNbdC5pbmRleF0pLHJ8fCFwfHxjfHwoYz1wLmluY2x1ZGVzKGkpKSxyfHwhdXx8Y3x8KGM9dS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGkpKSx0LmlzVmlzaWJsZT1jLG98fChvPWw9PT1pfHxhPT09aSkse2lzVmlzaWJsZTpjLGhhc0V4YWN0T3B0aW9uOm99fX0se2tleTpcInN0cnVjdHVyZU9wdGlvbkdyb3VwXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9W10saT17fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLmlzR3JvdXBUaXRsZSl7dmFyIG89W107ZS5vcHRpb25zPW8saVtlLmluZGV4XT1vLHQucHVzaChlKX19KSksZS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmlzR3JvdXBPcHRpb24mJmlbZS5ncm91cEluZGV4XS5wdXNoKGUpfSkpLHR9fSx7a2V5OlwiZGVzdHJ1Y3R1cmVPcHRpb25Hcm91cFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKSx0PXQuY29uY2F0KGUub3B0aW9ucyl9KSksdH19LHtrZXk6XCJzZXJ2ZXJTZWFyY2hcIix2YWx1ZTpmdW5jdGlvbigpe2MucmVtb3ZlQ2xhc3ModGhpcy4kYWxsV3JhcHBlcnMsXCJoYXMtbm8tc2VhcmNoLXJlc3VsdHNcIiksYy5hZGRDbGFzcyh0aGlzLiRhbGxXcmFwcGVycyxcInNlcnZlci1zZWFyY2hpbmdcIiksdGhpcy5zZXRTZWxlY3RlZE9wdGlvbnMoKSx0aGlzLm9uU2VydmVyU2VhcmNoKHRoaXMuc2VhcmNoVmFsdWUsdGhpcyl9fSx7a2V5OlwicmVtb3ZlVmFsdWVcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGVkVmFsdWVzLGk9Yy5nZXREYXRhKGUsXCJ2YWx1ZVwiKTtzLnJlbW92ZUl0ZW1Gcm9tQXJyYXkodCxpKSx0aGlzLnNldFZhbHVlTWV0aG9kKHQpfX0se2tleTpcImZvY3VzXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLiR3cmFwcGVyLmZvY3VzKCl9fSx7a2V5OlwiZW5hYmxlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLiRlbGUuZGlzYWJsZWQ9ITEsdGhpcy4kZWxlLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpLHRoaXMuJGhpZGRlbklucHV0LnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpLGMuc2V0QXJpYSh0aGlzLiR3cmFwcGVyLFwiZGlzYWJsZWRcIiwhMSl9fSx7a2V5OlwiZGlzYWJsZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy4kZWxlLmRpc2FibGVkPSEwLHRoaXMuJGVsZS5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLFwiXCIpLHRoaXMuJGhpZGRlbklucHV0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsXCJcIiksYy5zZXRBcmlhKHRoaXMuJHdyYXBwZXIsXCJkaXNhYmxlZFwiLCEwKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNhYmxlVmFsaWRhdGlvbilyZXR1cm4hMDt2YXIgZT0hMSx0PXRoaXMuc2VsZWN0ZWRWYWx1ZXMsaT10aGlzLm1pblZhbHVlcztyZXR1cm4gdGhpcy5yZXF1aXJlZCYmKHMuaXNFbXB0eSh0KXx8dGhpcy5tdWx0aXBsZSYmaSYmdC5sZW5ndGg8aSkmJihlPSEwKSxjLnRvZ2dsZUNsYXNzKHRoaXMuJGFsbFdyYXBwZXJzLFwiaGFzLWVycm9yXCIsZSksIWV9fSx7a2V5OlwiZGVzdHJveVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kZWxlO2UudmlydHVhbFNlbGVjdD12b2lkIDAsZS52YWx1ZT12b2lkIDAsZS5pbm5lckhUTUw9XCJcIix0aGlzLmhhc0Ryb3Bib3hXcmFwcGVyJiYodGhpcy4kZHJvcGJveFdyYXBwZXIucmVtb3ZlKCksdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKSksdGhpcy5kcm9wYm94UG9wb3ZlciYmdGhpcy5kcm9wYm94UG9wb3Zlci5kZXN0cm95KCksYy5yZW1vdmVDbGFzcyhlLFwidnNjb21wLWVsZVwiKX19LHtrZXk6XCJjcmVhdGVTZWN1cmVUZXh0RWxlbWVudHNcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuJHNlY3VyZURpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuJHNlY3VyZVRleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIiksdGhpcy4kc2VjdXJlRGl2LmFwcGVuZENoaWxkKHRoaXMuJHNlY3VyZVRleHQpfX0se2tleTpcInNlY3VyZVRleHRcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy5lbmFibGVTZWN1cmVUZXh0Pyh0aGlzLiRzZWN1cmVUZXh0Lm5vZGVWYWx1ZT1lLHRoaXMuJHNlY3VyZURpdi5pbm5lckhUTUwpOmV9fSx7a2V5OlwidG9nZ2xlUmVxdWlyZWRcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnJlcXVpcmVkPXMuY29udmVydFRvQm9vbGVhbihlKSx0aGlzLiRlbGUucmVxdWlyZWQ9dGhpcy5yZXF1aXJlZH19LHtrZXk6XCJ0b2dnbGVPcHRpb25TZWxlY3RlZFN0YXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgaT10O3ZvaWQgMD09PWkmJihpPSFjLmhhc0NsYXNzKGUsXCJzZWxlY3RlZFwiKSksYy50b2dnbGVDbGFzcyhlLFwic2VsZWN0ZWRcIixpKSxjLnNldEFyaWEoZSxcInNlbGVjdGVkXCIsaSl9fSx7a2V5OlwidG9nZ2xlT3B0aW9uRm9jdXNlZFN0YXRlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlJiYoYy50b2dnbGVDbGFzcyhlLFwiZm9jdXNlZFwiLHQpLHQmJmMuc2V0QXJpYSh0aGlzLiR3cmFwcGVyLFwiYWN0aXZlZGVzY2VuZGFudFwiLGUuaWQpKX19XSkmJk8odC5wcm90b3R5cGUsaSksbyYmTyh0LG8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksZX0oKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicmVzZXRcIixBLm9uRm9ybVJlc2V0KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsQS5vbkZvcm1TdWJtaXQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsQS5vblJlc2l6ZU1ldGhvZCkseD1BLmdldEF0dHJQcm9wcygpLHdpbmRvdy5WaXJ0dWFsU2VsZWN0PUEsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIE5vZGVMaXN0JiZOb2RlTGlzdC5wcm90b3R5cGUmJiFOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCYmKE5vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoPUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKX0oKSxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHQoZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oZSxpKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdChlLGkpO3ZhciBvPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09byYmZS5jb25zdHJ1Y3RvciYmKG89ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09b3x8XCJTZXRcIj09PW8/QXJyYXkuZnJvbShlKTpcIkFyZ3VtZW50c1wiPT09b3x8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobyk/dChlLGkpOnZvaWQgMH19KGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHQoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIGk9MCxvPW5ldyBBcnJheSh0KTtpPHQ7aSsrKW9baV09ZVtpXTtyZXR1cm4gb312YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHQpfXZhciBpO3JldHVybihpPVt7a2V5OlwiYWRkQ2xhc3NcIix2YWx1ZTpmdW5jdGlvbihpLG8pe2kmJihvPW8uc3BsaXQoXCIgXCIpLHQuZ2V0RWxlbWVudHMoaSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk7KGk9dC5jbGFzc0xpc3QpLmFkZC5hcHBseShpLGUobykpfSkpKX19LHtrZXk6XCJyZW1vdmVDbGFzc1wiLHZhbHVlOmZ1bmN0aW9uKGksbyl7aSYmKG89by5zcGxpdChcIiBcIiksdC5nZXRFbGVtZW50cyhpKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaTsoaT10LmNsYXNzTGlzdCkucmVtb3ZlLmFwcGx5KGksZShvKSl9KSkpfX0se2tleTpcImdldEVsZW1lbnRzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4gdm9pZCAwPT09ZS5mb3JFYWNoJiYoZT1bZV0pLGV9fSx7a2V5OlwiZ2V0TW9yZVZpc2libGVTaWRlc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybnt9O3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT13aW5kb3cuaW5uZXJXaWR0aCxvPXdpbmRvdy5pbm5lckhlaWdodCxzPXQubGVmdCxuPXQudG9wO3JldHVybntob3Jpem9udGFsOnM+aS1zLXQud2lkdGg/XCJsZWZ0XCI6XCJyaWdodFwiLHZlcnRpY2FsOm4+by1uLXQuaGVpZ2h0P1widG9wXCI6XCJib3R0b21cIn19fSx7a2V5OlwiZ2V0QWJzb2x1dGVDb29yZHNcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlKXt2YXIgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9d2luZG93LnBhZ2VYT2Zmc2V0LG89d2luZG93LnBhZ2VZT2Zmc2V0O3JldHVybnt3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodCx0b3A6dC50b3ArbyxyaWdodDp0LnJpZ2h0K2ksYm90dG9tOnQuYm90dG9tK28sbGVmdDp0LmxlZnQraX19fX0se2tleTpcImdldENvb3Jkc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlP2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6e319fSx7a2V5OlwiZ2V0RGF0YVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxpKXtpZihlKXt2YXIgbz1lP2UuZGF0YXNldFt0XTpcIlwiO3JldHVyblwibnVtYmVyXCI9PT1pP289cGFyc2VGbG9hdChvKXx8MDpcInRydWVcIj09PW8/bz0hMDpcImZhbHNlXCI9PT1vJiYobz0hMSksb319fSx7a2V5Olwic2V0RGF0YVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxpKXtlJiYoZS5kYXRhc2V0W3RdPWkpfX0se2tleTpcInNldFN0eWxlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0LGkpe2UmJihlLnN0eWxlW3RdPWkpfX0se2tleTpcInNob3dcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06XCJibG9ja1wiO3Quc2V0U3R5bGUoZSxcImRpc3BsYXlcIixpKX19LHtrZXk6XCJoaWRlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dC5zZXRTdHlsZShlLFwiZGlzcGxheVwiLFwibm9uZVwiKX19LHtrZXk6XCJnZXRIaWRlYWJsZVBhcmVudFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPWUucGFyZW50RWxlbWVudDtpOyl7dmFyIG89Z2V0Q29tcHV0ZWRTdHlsZShpKS5vdmVyZmxvdztpZigtMSE9PW8uaW5kZXhPZihcInNjcm9sbFwiKXx8LTEhPT1vLmluZGV4T2YoXCJhdXRvXCIpKXt0PWk7YnJlYWt9aT1pLnBhcmVudEVsZW1lbnR9cmV0dXJuIHR9fV0pJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLmtleSxvKX19KHQsaSksdH0oKSxvPVtcInRvcFwiLFwiYm90dG9tXCIsXCJsZWZ0XCIsXCJyaWdodFwiXS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblwicG9zaXRpb24tXCIuY29uY2F0KGUpfSkpLHM9e3RvcDpcInJvdGF0ZSgxODBkZWcpXCIsbGVmdDpcInJvdGF0ZSg5MGRlZylcIixyaWdodDpcInJvdGF0ZSgtOTBkZWcpXCJ9LG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsZSk7dHJ5e3RoaXMuc2V0UHJvcHModCksdGhpcy5pbml0KCl9Y2F0Y2goZSl7Y29uc29sZS53YXJuKFwiQ291bGRuJ3QgaW5pdGlhdGUgcG9wcGVyXCIpLGNvbnNvbGUuZXJyb3IoZSl9fXZhciB0O3JldHVybih0PVt7a2V5OlwiaW5pdFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcG9wcGVyRWxlO2UmJnRoaXMuJHRyaWdnZXJFbGUmJihpLnNldFN0eWxlKGUsXCJ6SW5kZXhcIix0aGlzLnpJbmRleCksdGhpcy5zZXRQb3NpdGlvbigpKX19LHtrZXk6XCJzZXRQcm9wc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PShlPXRoaXMuc2V0RGVmYXVsdFByb3BzKGUpKS5wb3NpdGlvbj9lLnBvc2l0aW9uLnRvTG93ZXJDYXNlKCk6XCJhdXRvXCI7aWYodGhpcy4kcG9wcGVyRWxlPWUuJHBvcHBlckVsZSx0aGlzLiR0cmlnZ2VyRWxlPWUuJHRyaWdnZXJFbGUsdGhpcy4kYXJyb3dFbGU9ZS4kYXJyb3dFbGUsdGhpcy5tYXJnaW49cGFyc2VGbG9hdChlLm1hcmdpbiksdGhpcy5vZmZzZXQ9cGFyc2VGbG9hdChlLm9mZnNldCksdGhpcy5lbnRlckRlbGF5PXBhcnNlRmxvYXQoZS5lbnRlckRlbGF5KSx0aGlzLmV4aXREZWxheT1wYXJzZUZsb2F0KGUuZXhpdERlbGF5KSx0aGlzLnNob3dEdXJhdGlvbj1wYXJzZUZsb2F0KGUuc2hvd0R1cmF0aW9uKSx0aGlzLmhpZGVEdXJhdGlvbj1wYXJzZUZsb2F0KGUuaGlkZUR1cmF0aW9uKSx0aGlzLnRyYW5zaXRpb25EaXN0YW5jZT1wYXJzZUZsb2F0KGUudHJhbnNpdGlvbkRpc3RhbmNlKSx0aGlzLnpJbmRleD1wYXJzZUZsb2F0KGUuekluZGV4KSx0aGlzLmFmdGVyU2hvd0NhbGxiYWNrPWUuYWZ0ZXJTaG93LHRoaXMuYWZ0ZXJIaWRlQ2FsbGJhY2s9ZS5hZnRlckhpZGUsdGhpcy5oYXNBcnJvdz0hIXRoaXMuJGFycm93RWxlLC0xIT09dC5pbmRleE9mKFwiIFwiKSl7dmFyIGk9dC5zcGxpdChcIiBcIik7dGhpcy5wb3NpdGlvbj1pWzBdLHRoaXMuc2Vjb25kYXJ5UG9zaXRpb249aVsxXX1lbHNlIHRoaXMucG9zaXRpb249dH19LHtrZXk6XCJzZXREZWZhdWx0UHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7cG9zaXRpb246XCJhdXRvXCIsbWFyZ2luOjgsb2Zmc2V0OjUsZW50ZXJEZWxheTowLGV4aXREZWxheTowLHNob3dEdXJhdGlvbjozMDAsaGlkZUR1cmF0aW9uOjIwMCx0cmFuc2l0aW9uRGlzdGFuY2U6MTAsekluZGV4OjF9LGUpfX0se2tleTpcInNldFBvc2l0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oKXtpLnNob3codGhpcy4kcG9wcGVyRWxlLFwiaW5saW5lLWZsZXhcIik7dmFyIGUsdCxuLHI9d2luZG93LmlubmVyV2lkdGgsYT13aW5kb3cuaW5uZXJIZWlnaHQsbD1pLmdldEFic29sdXRlQ29vcmRzKHRoaXMuJHBvcHBlckVsZSksdT1pLmdldEFic29sdXRlQ29vcmRzKHRoaXMuJHRyaWdnZXJFbGUpLHA9bC53aWR0aCxjPWwuaGVpZ2h0LGg9bC50b3AsZD1sLnJpZ2h0LHY9bC5ib3R0b20sZj1sLmxlZnQseT11LndpZHRoLGI9dS5oZWlnaHQsbT11LnRvcCxnPXUucmlnaHQsTz11LmJvdHRvbSxTPXUubGVmdCx4PW0taCx3PVMtZixrPXcsRT14LEM9dGhpcy5wb3NpdGlvbixBPXRoaXMuc2Vjb25kYXJ5UG9zaXRpb24sJD15LzItcC8yLFQ9Yi8yLWMvMixEPXRoaXMubWFyZ2luLFY9dGhpcy50cmFuc2l0aW9uRGlzdGFuY2UsUD13aW5kb3cuc2Nyb2xsWS1oLEk9YStQLE09d2luZG93LnNjcm9sbFgtZixGPXIrTSxMPXRoaXMub2Zmc2V0O0wmJihQKz1MLEktPUwsTSs9TCxGLT1MKSxcImF1dG9cIj09PUMmJihDPWkuZ2V0TW9yZVZpc2libGVTaWRlcyh0aGlzLiR0cmlnZ2VyRWxlKS52ZXJ0aWNhbCk7dmFyIEc9e3RvcDp7dG9wOkUtYy1ELGxlZnQ6ayskfSxib3R0b206e3RvcDpFK2IrRCxsZWZ0OmsrJH0scmlnaHQ6e3RvcDpFK1QsbGVmdDprK3krRH0sbGVmdDp7dG9wOkUrVCxsZWZ0OmstcC1EfX0sTj1HW0NdO2lmKEU9Ti50b3Asaz1OLmxlZnQsQSYmKFwidG9wXCI9PT1BP0U9eDpcImJvdHRvbVwiPT09QT9FPXgrYi1jOlwibGVmdFwiPT09QT9rPXc6XCJyaWdodFwiPT09QSYmKGs9dyt5LXApKSxrPE0/XCJsZWZ0XCI9PT1DP249XCJyaWdodFwiOms9TStmPmc/Zy1mOk06aytwPkYmJihcInJpZ2h0XCI9PT1DP249XCJsZWZ0XCI6az1GK2Y8Uz9TLWQ6Ri1wKSxFPFA/XCJ0b3BcIj09PUM/bj1cImJvdHRvbVwiOkU9UCtoPk8/Ty1oOlA6RStjPkkmJihcImJvdHRvbVwiPT09Qz9uPVwidG9wXCI6RT1JK2g8bT9tLXY6SS1jKSxuKXt2YXIgSD1HW25dO1widG9wXCI9PT0oQz1uKXx8XCJib3R0b21cIj09PUM/RT1ILnRvcDpcImxlZnRcIiE9PUMmJlwicmlnaHRcIiE9PUN8fChrPUgubGVmdCl9XCJ0b3BcIj09PUM/KGU9RStWLHQ9ayk6XCJyaWdodFwiPT09Qz8oZT1FLHQ9ay1WKTpcImxlZnRcIj09PUM/KGU9RSx0PWsrVik6KGU9RS1WLHQ9ayk7dmFyIGo9XCJ0cmFuc2xhdGUzZChcIi5jb25jYXQodCxcInB4LCBcIikuY29uY2F0KGUsXCJweCwgMClcIik7aWYoaS5zZXRTdHlsZSh0aGlzLiRwb3BwZXJFbGUsXCJ0cmFuc2Zvcm1cIixqKSxpLnNldERhdGEodGhpcy4kcG9wcGVyRWxlLFwiZnJvbUxlZnRcIix0KSxpLnNldERhdGEodGhpcy4kcG9wcGVyRWxlLFwiZnJvbVRvcFwiLGUpLGkuc2V0RGF0YSh0aGlzLiRwb3BwZXJFbGUsXCJ0b3BcIixFKSxpLnNldERhdGEodGhpcy4kcG9wcGVyRWxlLFwibGVmdFwiLGspLGkucmVtb3ZlQ2xhc3ModGhpcy4kcG9wcGVyRWxlLG8uam9pbihcIiBcIikpLGkuYWRkQ2xhc3ModGhpcy4kcG9wcGVyRWxlLFwicG9zaXRpb24tXCIuY29uY2F0KEMpKSx0aGlzLmhhc0Fycm93KXt2YXIgVz0wLHE9MCxSPWsrZix6PUUraCxCPXRoaXMuJGFycm93RWxlLm9mZnNldFdpZHRoLzIsSz1zW0NdfHxcIlwiO1widG9wXCI9PT1DfHxcImJvdHRvbVwiPT09Qz8oVz15LzIrUy1SKTxCP1c9QjpXPnAtQiYmKFc9cC1CKTpcImxlZnRcIiE9PUMmJlwicmlnaHRcIiE9PUN8fCgocT1iLzIrbS16KTxCP3E9QjpxPmMtQiYmKHE9Yy1CKSksaS5zZXRTdHlsZSh0aGlzLiRhcnJvd0VsZSxcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KFcsXCJweCwgXCIpLmNvbmNhdChxLFwicHgsIDApIFwiKS5jb25jYXQoSykpfWkuaGlkZSh0aGlzLiRwb3BwZXJFbGUpfX0se2tleTpcInJlc2V0UG9zaXRpb25cIix2YWx1ZTpmdW5jdGlvbigpe2kuc2V0U3R5bGUodGhpcy4kcG9wcGVyRWxlLFwidHJhbnNmb3JtXCIsXCJub25lXCIpLHRoaXMuc2V0UG9zaXRpb24oKX19LHtrZXk6XCJzaG93XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LG89dC5yZXNldFBvc2l0aW9uLHM9dC5kYXRhO2NsZWFyVGltZW91dCh0aGlzLmV4aXREZWxheVRpbWVvdXQpLGNsZWFyVGltZW91dCh0aGlzLmhpZGVEdXJhdGlvblRpbWVvdXQpLG8mJnRoaXMucmVzZXRQb3NpdGlvbigpLHRoaXMuZW50ZXJEZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgdD1pLmdldERhdGEoZS4kcG9wcGVyRWxlLFwibGVmdFwiKSxvPWkuZ2V0RGF0YShlLiRwb3BwZXJFbGUsXCJ0b3BcIiksbj1cInRyYW5zbGF0ZTNkKFwiLmNvbmNhdCh0LFwicHgsIFwiKS5jb25jYXQobyxcInB4LCAwKVwiKSxyPWUuc2hvd0R1cmF0aW9uO2kuc2hvdyhlLiRwb3BwZXJFbGUsXCJpbmxpbmUtZmxleFwiKSxpLmdldENvb3JkcyhlLiRwb3BwZXJFbGUpLGkuc2V0U3R5bGUoZS4kcG9wcGVyRWxlLFwidHJhbnNpdGlvbkR1cmF0aW9uXCIscitcIm1zXCIpLGkuc2V0U3R5bGUoZS4kcG9wcGVyRWxlLFwidHJhbnNmb3JtXCIsbiksaS5zZXRTdHlsZShlLiRwb3BwZXJFbGUsXCJvcGFjaXR5XCIsMSksZS5zaG93RHVyYXRpb25UaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7XCJmdW5jdGlvblwiPT10eXBlb2YgZS5hZnRlclNob3dDYWxsYmFjayYmZS5hZnRlclNob3dDYWxsYmFjayhzKX0pLHIpfSksdGhpcy5lbnRlckRlbGF5KX19LHtrZXk6XCJoaWRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LG89dC5kYXRhO2NsZWFyVGltZW91dCh0aGlzLmVudGVyRGVsYXlUaW1lb3V0KSxjbGVhclRpbWVvdXQodGhpcy5zaG93RHVyYXRpb25UaW1lb3V0KSx0aGlzLmV4aXREZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpZihlLiRwb3BwZXJFbGUpe3ZhciB0PWkuZ2V0RGF0YShlLiRwb3BwZXJFbGUsXCJmcm9tTGVmdFwiKSxzPWkuZ2V0RGF0YShlLiRwb3BwZXJFbGUsXCJmcm9tVG9wXCIpLG49XCJ0cmFuc2xhdGUzZChcIi5jb25jYXQodCxcInB4LCBcIikuY29uY2F0KHMsXCJweCwgMClcIikscj1lLmhpZGVEdXJhdGlvbjtpLnNldFN0eWxlKGUuJHBvcHBlckVsZSxcInRyYW5zaXRpb25EdXJhdGlvblwiLHIrXCJtc1wiKSxpLnNldFN0eWxlKGUuJHBvcHBlckVsZSxcInRyYW5zZm9ybVwiLG4pLGkuc2V0U3R5bGUoZS4kcG9wcGVyRWxlLFwib3BhY2l0eVwiLDApLGUuaGlkZUR1cmF0aW9uVGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2kuaGlkZShlLiRwb3BwZXJFbGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuYWZ0ZXJIaWRlQ2FsbGJhY2smJmUuYWZ0ZXJIaWRlQ2FsbGJhY2sobyl9KSxyKX19KSx0aGlzLmV4aXREZWxheSl9fSx7a2V5OlwidXBkYXRlUG9zaXRpb25cIix2YWx1ZTpmdW5jdGlvbigpe2kuc2V0U3R5bGUodGhpcy4kcG9wcGVyRWxlLFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsXCIwbXNcIiksdGhpcy5yZXNldFBvc2l0aW9uKCk7dmFyIGU9aS5nZXREYXRhKHRoaXMuJHBvcHBlckVsZSxcImxlZnRcIiksdD1pLmdldERhdGEodGhpcy4kcG9wcGVyRWxlLFwidG9wXCIpO2kuc2hvdyh0aGlzLiRwb3BwZXJFbGUsXCJpbmxpbmUtZmxleFwiKSxpLnNldFN0eWxlKHRoaXMuJHBvcHBlckVsZSxcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlM2QoXCIuY29uY2F0KGUsXCJweCwgXCIpLmNvbmNhdCh0LFwicHgsIDApXCIpKX19XSkmJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8ua2V5LG8pfX0oZS5wcm90b3R5cGUsdCksZX0oKTt3aW5kb3cuUG9wcGVyQ29tcG9uZW50PW59KCksZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8ua2V5LG8pfX12YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHQpfXZhciBpLG87cmV0dXJuIGk9dCwobz1be2tleTpcImNvbnZlcnRUb0Jvb2xlYW5cIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3JldHVybiEwPT09ZXx8XCJ0cnVlXCI9PT1lfHwhMSE9PWUmJlwiZmFsc2VcIiE9PWUmJnR9fSx7a2V5OlwicmVtb3ZlQXJyYXlFbXB0eVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD9lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSkpOltdfX0se2tleTpcInRocm90dGxlXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgaSxvPTA7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkocykscj0wO3I8cztyKyspbltyXT1hcmd1bWVudHNbcl07dmFyIGE9KG5ldyBEYXRlKS5nZXRUaW1lKCksbD10LShhLW8pO2NsZWFyVGltZW91dChpKSxsPD0wPyhvPWEsZS5hcHBseSh2b2lkIDAsbikpOmk9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLmFwcGx5KHZvaWQgMCxuKX0pLGwpfX19XSkmJmUoaSxvKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcInByb3RvdHlwZVwiLHt3cml0YWJsZTohMX0pLHR9KCk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbyhlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9KGUpfHxmdW5jdGlvbihlLHQpe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvKGUsdCk7dmFyIGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1pJiZlLmNvbnN0cnVjdG9yJiYoaT1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1pfHxcIlNldFwiPT09aT9BcnJheS5mcm9tKGUpOlwiQXJndW1lbnRzXCI9PT1pfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChpKT9vKGUsdCk6dm9pZCAwfX0oZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgaT0wLG89bmV3IEFycmF5KHQpO2k8dDtpKyspb1tpXT1lW2ldO3JldHVybiBvfWZ1bmN0aW9uIHMoZSx0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsby5rZXksbyl9fXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsZSl9dmFyIG8sbjtyZXR1cm4gbz1lLChuPVt7a2V5OlwiYWRkQ2xhc3NcIix2YWx1ZTpmdW5jdGlvbih0LG8pe3QmJihvPW8uc3BsaXQoXCIgXCIpLGUuZ2V0RWxlbWVudHModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ7KHQ9ZS5jbGFzc0xpc3QpLmFkZC5hcHBseSh0LGkobykpfSkpKX19LHtrZXk6XCJyZW1vdmVDbGFzc1wiLHZhbHVlOmZ1bmN0aW9uKHQsbyl7dCYmKG89by5zcGxpdChcIiBcIiksZS5nZXRFbGVtZW50cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdDsodD1lLmNsYXNzTGlzdCkucmVtb3ZlLmFwcGx5KHQsaShvKSl9KSkpfX0se2tleTpcImhhc0NsYXNzXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hIWUmJmUuY2xhc3NMaXN0LmNvbnRhaW5zKHQpfX0se2tleTpcImdldEVsZW1lbnRcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmKFwic3RyaW5nXCI9PXR5cGVvZiBlP2U9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTp2b2lkIDAhPT1lLmxlbmd0aCYmKGU9ZVswXSkpLGV8fG51bGx9fSx7a2V5OlwiZ2V0RWxlbWVudHNcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlKXJldHVybiB2b2lkIDA9PT1lLmZvckVhY2gmJihlPVtlXSksZX19LHtrZXk6XCJhZGRFdmVudFwiLHZhbHVlOmZ1bmN0aW9uKHQsaSxvKXtlLmFkZE9yUmVtb3ZlRXZlbnQodCxpLG8sXCJhZGRcIil9fSx7a2V5OlwicmVtb3ZlRXZlbnRcIix2YWx1ZTpmdW5jdGlvbih0LGksbyl7ZS5hZGRPclJlbW92ZUV2ZW50KHQsaSxvLFwicmVtb3ZlXCIpfX0se2tleTpcImFkZE9yUmVtb3ZlRXZlbnRcIix2YWx1ZTpmdW5jdGlvbihpLG8scyxuKXtpJiYobz10LnJlbW92ZUFycmF5RW1wdHkoby5zcGxpdChcIiBcIikpKS5mb3JFYWNoKChmdW5jdGlvbih0KXsoaT1lLmdldEVsZW1lbnRzKGkpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtcImFkZFwiPT09bj9lLmFkZEV2ZW50TGlzdGVuZXIodCxzKTplLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxzKX0pKX0pKX19LHtrZXk6XCJnZXRTY3JvbGxhYmxlUGFyZW50c1wiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybltdO2Zvcih2YXIgdD1bd2luZG93XSxpPWUucGFyZW50RWxlbWVudDtpOyl7dmFyIG89Z2V0Q29tcHV0ZWRTdHlsZShpKS5vdmVyZmxvdzstMT09PW8uaW5kZXhPZihcInNjcm9sbFwiKSYmLTE9PT1vLmluZGV4T2YoXCJhdXRvXCIpfHx0LnB1c2goaSksaT1pLnBhcmVudEVsZW1lbnR9cmV0dXJuIHR9fSx7a2V5OlwiY29udmVydFByb3BUb0RhdGFBdHRyXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/XCJkYXRhLXBvcG92ZXItXCIuY29uY2F0KGUpLnJlcGxhY2UoLyhbQS1aXSkvZyxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpOlwiXCJ9fV0pJiZzKG8sbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KSxlfSgpO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsby5rZXksbyl9fXZhciBhLGw9ezI3Olwib25Fc2NQcmVzc1wifSx1PVtcInRhcmdldFwiLFwicG9zaXRpb25cIixcIm1hcmdpblwiLFwib2Zmc2V0XCIsXCJlbnRlckRlbGF5XCIsXCJleGl0RGVsYXlcIixcInNob3dEdXJhdGlvblwiLFwiaGlkZUR1cmF0aW9uXCIsXCJ0cmFuc2l0aW9uRGlzdGFuY2VcIixcInVwZGF0ZVBvc2l0aW9uVGhyb3R0bGVcIixcInpJbmRleFwiLFwiaGlkZU9uT3V0ZXJDbGlja1wiLFwic2hvd09uSG92ZXJcIixcImhpZGVBcnJvd0ljb25cIixcImRpc2FibGVNYW51YWxBY3Rpb25cIixcImRpc2FibGVVcGRhdGVQb3NpdGlvblwiXSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGUpO3RyeXt0aGlzLnNldFByb3BzKHQpLHRoaXMuaW5pdCgpfWNhdGNoKGUpe2NvbnNvbGUud2FybihcIkNvdWxkbid0IGluaXRpYXRlIFBvcG92ZXIgY29tcG9uZW50XCIpLGNvbnNvbGUuZXJyb3IoZSl9fXZhciBpLG8scztyZXR1cm4gaT1lLHM9W3trZXk6XCJpbml0XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGk9dC5lbGU7aWYoaSl7dmFyIG89ITE7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkpe2lmKCEoaT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGkpKSlyZXR1cm47MT09PWkubGVuZ3RoJiYobz0hMCl9dm9pZCAwPT09aS5sZW5ndGgmJihpPVtpXSxvPSEwKTt2YXIgcz1bXTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbihpKXt0LmVsZT1pLGUuZGVzdHJveShpKSxzLnB1c2gobmV3IGUodCkpfSkpLG8/c1swXTpzfX19LHtrZXk6XCJkZXN0cm95XCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZS5wb3BDb21wO3QmJnQuZGVzdHJveSgpfX19LHtrZXk6XCJzaG93TWV0aG9kXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcENvbXAuc2hvdygpfX0se2tleTpcImhpZGVNZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucG9wQ29tcC5oaWRlKCl9fSx7a2V5OlwidXBkYXRlUG9zaXRpb25NZXRob2RcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucG9wQ29tcC5wb3BwZXIudXBkYXRlUG9zaXRpb24oKX19LHtrZXk6XCJnZXRBdHRyUHJvcHNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPW4uY29udmVydFByb3BUb0RhdGFBdHRyLHQ9e307cmV0dXJuIHUuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dFtlKGkpXT1pfSkpLHR9fV0sKG89W3trZXk6XCJpbml0XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLiRwb3BvdmVyJiYodGhpcy5zZXRFbGVtZW50UHJvcHMoKSx0aGlzLnJlbmRlckFycm93KCksdGhpcy5pbml0UG9wcGVyKCksdGhpcy5hZGRFdmVudHMoKSl9fSx7a2V5OlwiZ2V0RXZlbnRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1beyRlbGU6ZG9jdW1lbnQsZXZlbnQ6XCJjbGlja1wiLG1ldGhvZDpcIm9uRG9jdW1lbnRDbGlja1wifSx7JGVsZTpkb2N1bWVudCxldmVudDpcImtleWRvd25cIixtZXRob2Q6XCJvbkRvY3VtZW50S2V5RG93blwifV07cmV0dXJuIHRoaXMuZGlzYWJsZU1hbnVhbEFjdGlvbnx8KGUucHVzaCh7JGVsZTp0aGlzLiRlbGUsZXZlbnQ6XCJjbGlja1wiLG1ldGhvZDpcIm9uVHJpZ2dlckVsZUNsaWNrXCJ9KSx0aGlzLnNob3dPbkhvdmVyJiYoZS5wdXNoKHskZWxlOnRoaXMuJGVsZSxldmVudDpcIm1vdXNlZW50ZXJcIixtZXRob2Q6XCJvblRyaWdnZXJFbGVNb3VzZUVudGVyXCJ9KSxlLnB1c2goeyRlbGU6dGhpcy4kZWxlLGV2ZW50OlwibW91c2VsZWF2ZVwiLG1ldGhvZDpcIm9uVHJpZ2dlckVsZU1vdXNlTGVhdmVcIn0pKSksZX19LHtrZXk6XCJhZGRPclJlbW92ZUV2ZW50c1wiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5nZXRFdmVudHMoKS5mb3JFYWNoKChmdW5jdGlvbihpKXt0LmFkZE9yUmVtb3ZlRXZlbnQoe2FjdGlvbjplLCRlbGU6aS4kZWxlLGV2ZW50czppLmV2ZW50LG1ldGhvZDppLm1ldGhvZH0pfSkpfX0se2tleTpcImFkZEV2ZW50c1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hZGRPclJlbW92ZUV2ZW50cyhcImFkZFwiKX19LHtrZXk6XCJyZW1vdmVFdmVudHNcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYWRkT3JSZW1vdmVFdmVudHMoXCJyZW1vdmVcIiksdGhpcy5yZW1vdmVTY3JvbGxFdmVudExpc3RlbmVycygpLHRoaXMucmVtb3ZlUmVzaXplRXZlbnRMaXN0ZW5lcnMoKX19LHtrZXk6XCJhZGRPclJlbW92ZUV2ZW50XCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcyxvPWUuYWN0aW9uLHM9ZS4kZWxlLHI9ZS5ldmVudHMsYT1lLm1ldGhvZCxsPWUudGhyb3R0bGU7cyYmKHI9dC5yZW1vdmVBcnJheUVtcHR5KHIuc3BsaXQoXCIgXCIpKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9XCJcIi5jb25jYXQoYSxcIi1cIikuY29uY2F0KGUpLHU9aS5ldmVudHNbcl07dXx8KHU9aVthXS5iaW5kKGkpLGwmJih1PXQudGhyb3R0bGUodSxsKSksaS5ldmVudHNbcl09dSksXCJhZGRcIj09PW8/bi5hZGRFdmVudChzLGUsdSk6bi5yZW1vdmVFdmVudChzLGUsdSl9KSl9fSx7a2V5OlwiYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnNcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuJHNjcm9sbGFibGVFbGVtcz1uLmdldFNjcm9sbGFibGVQYXJlbnRzKHRoaXMuJGVsZSksdGhpcy5hZGRPclJlbW92ZUV2ZW50KHthY3Rpb246XCJhZGRcIiwkZWxlOnRoaXMuJHNjcm9sbGFibGVFbGVtcyxldmVudHM6XCJzY3JvbGxcIixtZXRob2Q6XCJvbkFueVBhcmVudFNjcm9sbFwiLHRocm90dGxlOnRoaXMudXBkYXRlUG9zaXRpb25UaHJvdHRsZX0pfX0se2tleTpcInJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLiRzY3JvbGxhYmxlRWxlbXMmJih0aGlzLmFkZE9yUmVtb3ZlRXZlbnQoe2FjdGlvbjpcInJlbW92ZVwiLCRlbGU6dGhpcy4kc2Nyb2xsYWJsZUVsZW1zLGV2ZW50czpcInNjcm9sbFwiLG1ldGhvZDpcIm9uQW55UGFyZW50U2Nyb2xsXCJ9KSx0aGlzLiRzY3JvbGxhYmxlRWxlbXM9bnVsbCl9fSx7a2V5OlwiYWRkUmVzaXplRXZlbnRMaXN0ZW5lcnNcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYWRkT3JSZW1vdmVFdmVudCh7YWN0aW9uOlwiYWRkXCIsJGVsZTp3aW5kb3csZXZlbnRzOlwicmVzaXplXCIsbWV0aG9kOlwib25SZXNpemVcIix0aHJvdHRsZTp0aGlzLnVwZGF0ZVBvc2l0aW9uVGhyb3R0bGV9KX19LHtrZXk6XCJyZW1vdmVSZXNpemVFdmVudExpc3RlbmVyc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hZGRPclJlbW92ZUV2ZW50KHthY3Rpb246XCJyZW1vdmVcIiwkZWxlOndpbmRvdyxldmVudHM6XCJyZXNpemVcIixtZXRob2Q6XCJvblJlc2l6ZVwifSl9fSx7a2V5Olwib25BbnlQYXJlbnRTY3JvbGxcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucG9wcGVyLnVwZGF0ZVBvc2l0aW9uKCl9fSx7a2V5Olwib25SZXNpemVcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucG9wcGVyLnVwZGF0ZVBvc2l0aW9uKCl9fSx7a2V5Olwib25Eb2N1bWVudENsaWNrXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQsaT10LmNsb3Nlc3QoXCIucG9wLWNvbXAtZWxlXCIpLG89dC5jbG9zZXN0KFwiLnBvcC1jb21wLXdyYXBwZXJcIik7dGhpcy5oaWRlT25PdXRlckNsaWNrJiZpIT09dGhpcy4kZWxlJiZvIT09dGhpcy4kcG9wb3ZlciYmdGhpcy5oaWRlKCl9fSx7a2V5Olwib25Eb2N1bWVudEtleURvd25cIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLndoaWNofHxlLmtleUNvZGUsaT1sW3RdO2kmJnRoaXNbaV0oZSl9fSx7a2V5Olwib25Fc2NQcmVzc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oaWRlT25PdXRlckNsaWNrJiZ0aGlzLmhpZGUoKX19LHtrZXk6XCJvblRyaWdnZXJFbGVDbGlja1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGUoKX19LHtrZXk6XCJvblRyaWdnZXJFbGVNb3VzZUVudGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNob3coKX19LHtrZXk6XCJvblRyaWdnZXJFbGVNb3VzZUxlYXZlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKX19LHtrZXk6XCJzZXRQcm9wc1wiLHZhbHVlOmZ1bmN0aW9uKGUpe2U9dGhpcy5zZXREZWZhdWx0UHJvcHMoZSksdGhpcy5zZXRQcm9wc0Zyb21FbGVtZW50QXR0cihlKTt2YXIgaT10LmNvbnZlcnRUb0Jvb2xlYW47dGhpcy4kZWxlPWUuZWxlLHRoaXMudGFyZ2V0PWUudGFyZ2V0LHRoaXMucG9zaXRpb249ZS5wb3NpdGlvbix0aGlzLm1hcmdpbj1wYXJzZUZsb2F0KGUubWFyZ2luKSx0aGlzLm9mZnNldD1wYXJzZUZsb2F0KGUub2Zmc2V0KSx0aGlzLmVudGVyRGVsYXk9cGFyc2VGbG9hdChlLmVudGVyRGVsYXkpLHRoaXMuZXhpdERlbGF5PXBhcnNlRmxvYXQoZS5leGl0RGVsYXkpLHRoaXMuc2hvd0R1cmF0aW9uPXBhcnNlRmxvYXQoZS5zaG93RHVyYXRpb24pLHRoaXMuaGlkZUR1cmF0aW9uPXBhcnNlRmxvYXQoZS5oaWRlRHVyYXRpb24pLHRoaXMudHJhbnNpdGlvbkRpc3RhbmNlPXBhcnNlRmxvYXQoZS50cmFuc2l0aW9uRGlzdGFuY2UpLHRoaXMudXBkYXRlUG9zaXRpb25UaHJvdHRsZT1wYXJzZUZsb2F0KGUudXBkYXRlUG9zaXRpb25UaHJvdHRsZSksdGhpcy56SW5kZXg9cGFyc2VGbG9hdChlLnpJbmRleCksdGhpcy5oaWRlT25PdXRlckNsaWNrPWkoZS5oaWRlT25PdXRlckNsaWNrKSx0aGlzLnNob3dPbkhvdmVyPWkoZS5zaG93T25Ib3ZlciksdGhpcy5oaWRlQXJyb3dJY29uPWkoZS5oaWRlQXJyb3dJY29uKSx0aGlzLmRpc2FibGVNYW51YWxBY3Rpb249aShlLmRpc2FibGVNYW51YWxBY3Rpb24pLHRoaXMuZGlzYWJsZVVwZGF0ZVBvc2l0aW9uPWkoZS5kaXNhYmxlVXBkYXRlUG9zaXRpb24pLHRoaXMuYmVmb3JlU2hvd0NhbGxiYWNrPWUuYmVmb3JlU2hvdyx0aGlzLmFmdGVyU2hvd0NhbGxiYWNrPWUuYWZ0ZXJTaG93LHRoaXMuYmVmb3JlSGlkZUNhbGxiYWNrPWUuYmVmb3JlSGlkZSx0aGlzLmFmdGVySGlkZUNhbGxiYWNrPWUuYWZ0ZXJIaWRlLHRoaXMuZXZlbnRzPXt9LHRoaXMuJHBvcG92ZXI9bi5nZXRFbGVtZW50KHRoaXMudGFyZ2V0KX19LHtrZXk6XCJzZXREZWZhdWx0UHJvcHNcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7cG9zaXRpb246XCJhdXRvXCIsbWFyZ2luOjgsb2Zmc2V0OjUsZW50ZXJEZWxheTowLGV4aXREZWxheTowLHNob3dEdXJhdGlvbjozMDAsaGlkZUR1cmF0aW9uOjIwMCx0cmFuc2l0aW9uRGlzdGFuY2U6MTAsdXBkYXRlUG9zaXRpb25UaHJvdHRsZToxMDAsekluZGV4OjEsaGlkZU9uT3V0ZXJDbGljazohMCxzaG93T25Ib3ZlcjohMSxoaWRlQXJyb3dJY29uOiExLGRpc2FibGVNYW51YWxBY3Rpb246ITEsZGlzYWJsZVVwZGF0ZVBvc2l0aW9uOiExfSxlKX19LHtrZXk6XCJzZXRQcm9wc0Zyb21FbGVtZW50QXR0clwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZWxlO2Zvcih2YXIgaSBpbiBhKXt2YXIgbz10LmdldEF0dHJpYnV0ZShpKTtvJiYoZVthW2ldXT1vKX19fSx7a2V5Olwic2V0RWxlbWVudFByb3BzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRlbGU7dC5wb3BDb21wPXRoaXMsdC5zaG93PWUuc2hvd01ldGhvZCx0LmhpZGU9ZS5oaWRlTWV0aG9kLHQudXBkYXRlUG9zaXRpb249ZS51cGRhdGVQb3NpdGlvbk1ldGhvZCxuLmFkZENsYXNzKHRoaXMuJGVsZSxcInBvcC1jb21wLWVsZVwiKSxuLmFkZENsYXNzKHRoaXMuJHBvcG92ZXIsXCJwb3AtY29tcC13cmFwcGVyXCIpfX0se2tleTpcImdldE90aGVyVHJpZ2dlclBvcENvbXBcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy4kcG9wb3Zlci5wb3BDb21wO3JldHVybiB0JiZ0LiRlbGUhPT10aGlzLiRlbGUmJihlPXQpLGV9fSx7a2V5OlwiaW5pdFBvcHBlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9eyRwb3BwZXJFbGU6dGhpcy4kcG9wb3ZlciwkdHJpZ2dlckVsZTp0aGlzLiRlbGUsJGFycm93RWxlOnRoaXMuJGFycm93RWxlLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sbWFyZ2luOnRoaXMubWFyZ2luLG9mZnNldDp0aGlzLm9mZnNldCxlbnRlckRlbGF5OnRoaXMuZW50ZXJEZWxheSxleGl0RGVsYXk6dGhpcy5leGl0RGVsYXksc2hvd0R1cmF0aW9uOnRoaXMuc2hvd0R1cmF0aW9uLGhpZGVEdXJhdGlvbjp0aGlzLmhpZGVEdXJhdGlvbix0cmFuc2l0aW9uRGlzdGFuY2U6dGhpcy50cmFuc2l0aW9uRGlzdGFuY2UsekluZGV4OnRoaXMuekluZGV4LGFmdGVyU2hvdzp0aGlzLmFmdGVyU2hvdy5iaW5kKHRoaXMpLGFmdGVySGlkZTp0aGlzLmFmdGVySGlkZS5iaW5kKHRoaXMpfTt0aGlzLnBvcHBlcj1uZXcgUG9wcGVyQ29tcG9uZW50KGUpfX0se2tleTpcImJlZm9yZVNob3dcIix2YWx1ZTpmdW5jdGlvbigpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuYmVmb3JlU2hvd0NhbGxiYWNrJiZ0aGlzLmJlZm9yZVNob3dDYWxsYmFjayh0aGlzKX19LHtrZXk6XCJiZWZvcmVIaWRlXCIsdmFsdWU6ZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmJlZm9yZUhpZGVDYWxsYmFjayYmdGhpcy5iZWZvcmVIaWRlQ2FsbGJhY2sodGhpcyl9fSx7a2V5Olwic2hvd1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duKCl8fCh0aGlzLmlzU2hvd25Gb3JPdGhlclRyaWdnZXIoKT90aGlzLnNob3dBZnRlck90aGVySGlkZSgpOihuLmFkZENsYXNzKHRoaXMuJHBvcG92ZXIsXCJwb3AtY29tcC1kaXNhYmxlLWV2ZW50c1wiKSx0aGlzLiRwb3BvdmVyLnBvcENvbXA9dGhpcyx0aGlzLmJlZm9yZVNob3coKSx0aGlzLnBvcHBlci5zaG93KHtyZXNldFBvc2l0aW9uOiEwfSksbi5hZGRDbGFzcyh0aGlzLiRlbGUsXCJwb3AtY29tcC1hY3RpdmVcIikpKX19LHtrZXk6XCJoaWRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24oKSYmKHRoaXMuYmVmb3JlSGlkZSgpLHRoaXMucG9wcGVyLmhpZGUoKSx0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCksdGhpcy5yZW1vdmVSZXNpemVFdmVudExpc3RlbmVycygpKX19LHtrZXk6XCJ0b2dnbGVcIix2YWx1ZTpmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hdGhpcy5pc1Nob3duKCkpLGU/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCl9fSx7a2V5OlwiaXNTaG93blwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uaGFzQ2xhc3ModGhpcy4kZWxlLFwicG9wLWNvbXAtYWN0aXZlXCIpfX0se2tleTpcImlzU2hvd25Gb3JPdGhlclRyaWdnZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0T3RoZXJUcmlnZ2VyUG9wQ29tcCgpO3JldHVybiEhZSYmZS5pc1Nob3duKCl9fSx7a2V5Olwic2hvd0FmdGVyT3RoZXJIaWRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5nZXRPdGhlclRyaWdnZXJQb3BDb21wKCk7aWYodCl7dmFyIGk9dC5leGl0RGVsYXkrdC5oaWRlRHVyYXRpb24rMTAwO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5zaG93KCl9KSxpKX19fSx7a2V5OlwiYWZ0ZXJTaG93XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuc2hvd09uSG92ZXI/c2V0VGltZW91dCgoZnVuY3Rpb24oKXtuLnJlbW92ZUNsYXNzKGUuJHBvcG92ZXIsXCJwb3AtY29tcC1kaXNhYmxlLWV2ZW50c1wiKX0pLDJlMyk6bi5yZW1vdmVDbGFzcyh0aGlzLiRwb3BvdmVyLFwicG9wLWNvbXAtZGlzYWJsZS1ldmVudHNcIiksdGhpcy5kaXNhYmxlVXBkYXRlUG9zaXRpb258fCh0aGlzLmFkZFNjcm9sbEV2ZW50TGlzdGVuZXJzKCksdGhpcy5hZGRSZXNpemVFdmVudExpc3RlbmVycygpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmFmdGVyU2hvd0NhbGxiYWNrJiZ0aGlzLmFmdGVyU2hvd0NhbGxiYWNrKHRoaXMpfX0se2tleTpcImFmdGVySGlkZVwiLHZhbHVlOmZ1bmN0aW9uKCl7bi5yZW1vdmVDbGFzcyh0aGlzLiRlbGUsXCJwb3AtY29tcC1hY3RpdmVcIiksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5hZnRlckhpZGVDYWxsYmFjayYmdGhpcy5hZnRlckhpZGVDYWxsYmFjayh0aGlzKX19LHtrZXk6XCJyZW5kZXJBcnJvd1wiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGlkZUFycm93SWNvbil7dmFyIGU9dGhpcy4kcG9wb3Zlci5xdWVyeVNlbGVjdG9yKFwiLnBvcC1jb21wLWFycm93XCIpO2V8fCh0aGlzLiRwb3BvdmVyLmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwnPGkgY2xhc3M9XCJwb3AtY29tcC1hcnJvd1wiPjwvaT4nKSxlPXRoaXMuJHBvcG92ZXIucXVlcnlTZWxlY3RvcihcIi5wb3AtY29tcC1hcnJvd1wiKSksdGhpcy4kYXJyb3dFbGU9ZX19fSx7a2V5OlwiZGVzdHJveVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVFdmVudHMoKX19XSkmJnIoaS5wcm90b3R5cGUsbykscyYmcihpLHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksZX0oKTthPXAuZ2V0QXR0clByb3BzKCksd2luZG93LlBvcG92ZXJDb21wb25lbnQ9cH0oKTsiLCJleHBvcnQgZnVuY3Rpb24gdXBkYXRlTGFiZWwobGFiZWxUeHQsIGxhYmVsTm9kZSkge1xyXG4gIGlmICh0eXBlb2YgbGFiZWxUeHQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICBpZiAobGFiZWxOb2RlLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwibGFiZWxOb2RlIG11c3QgYmUgb2YgbGVuZ3RoIDFcIik7XHJcbiAgfVxyXG4gIHZhciBlbXB0eUxhYmVsID0gQXJyYXkuaXNBcnJheShsYWJlbFR4dCkgJiYgbGFiZWxUeHQubGVuZ3RoID09PSAwO1xyXG4gIGlmIChlbXB0eUxhYmVsKSB7XHJcbiAgICBsYWJlbE5vZGUuYWRkQ2xhc3MoXCJzaGlueS1sYWJlbC1udWxsXCIpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBsYWJlbE5vZGUuaHRtbChsYWJlbFR4dCk7XHJcbiAgICBsYWJlbE5vZGUucmVtb3ZlQ2xhc3MoXCJzaGlueS1sYWJlbC1udWxsXCIpO1xyXG4gIH1cclxufVxyXG5cclxuIiwibW9kdWxlLmV4cG9ydHMgPSBTaGlueTsiLCJtb2R1bGUuZXhwb3J0cyA9IGpRdWVyeTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA9IHVuZGVmaW5lZDsiLCJpbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XHJcbmltcG9ydCBcInNoaW55XCI7XHJcbmltcG9ydCB7IHVwZGF0ZUxhYmVsIH0gZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IFwidmlydHVhbC1zZWxlY3QtcGx1Z2luL2Rpc3QvdmlydHVhbC1zZWxlY3QubWluLmNzc1wiO1xyXG5pbXBvcnQgXCJ2aXJ0dWFsLXNlbGVjdC1wbHVnaW4vZGlzdC92aXJ0dWFsLXNlbGVjdC5taW4uanNcIjtcclxuXHJcbmZ1bmN0aW9uIHRyYW5zcG9zZShkYXRhKSB7XHJcbiAgdmFyIHJlcyA9IFtdO1xyXG4gIHZhciBrZXksIGk7XHJcbiAgZm9yIChrZXkgaW4gZGF0YSkge1xyXG4gICAgZm9yIChpID0gMDsgaSA8IGRhdGFba2V5XS5sZW5ndGg7IGkrKykge1xyXG4gICAgICByZXNbaV0gPSByZXNbaV0gfHwge307XHJcbiAgICAgIGlmIChkYXRhW2tleV1baV0gIT09IHVuZGVmaW5lZCkgcmVzW2ldW2tleV0gPSBkYXRhW2tleV1baV07XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VPcHRpb25zKG9wdGlvbnMpIHtcclxuICB2YXIgbmV3T3B0aW9ucztcclxuICBpZiAob3B0aW9ucy50eXBlID09IFwidmVjdG9yXCIpIHtcclxuICAgIG5ld09wdGlvbnMgPSBvcHRpb25zLmNob2ljZXMubWFwKHggPT4ge1xyXG4gICAgICByZXR1cm4geyBsYWJlbDogeCwgdmFsdWU6IHggfTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09IFwidHJhbnNwb3NlXCIpIHtcclxuICAgIG5ld09wdGlvbnMgPSB0cmFuc3Bvc2Uob3B0aW9ucy5jaG9pY2VzKTtcclxuICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PSBcInRyYW5zcG9zZV9ncm91cFwiKSB7XHJcbiAgICB2YXIgY2hvaWNlcyA9IG9wdGlvbnMuY2hvaWNlcztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjaG9pY2VzW2ldLm9wdGlvbnMgPSB0cmFuc3Bvc2UoY2hvaWNlc1tpXS5vcHRpb25zKTtcclxuICAgIH1cclxuICAgIG5ld09wdGlvbnMgPSBjaG9pY2VzO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5jaG9pY2VzO1xyXG4gIH1cclxuICByZXR1cm4gbmV3T3B0aW9ucztcclxufVxyXG5cclxudmFyIHZpcnR1YWxTZWxlY3RCaW5kaW5nID0gbmV3IFNoaW55LklucHV0QmluZGluZygpO1xyXG5cclxuJC5leHRlbmQodmlydHVhbFNlbGVjdEJpbmRpbmcsIHtcclxuICBmaW5kOiBzY29wZSA9PiB7XHJcbiAgICByZXR1cm4gJChzY29wZSkuZmluZChcIi52aXJ0dWFsLXNlbGVjdFwiKTtcclxuICB9LFxyXG4gIGdldFZhbHVlOiBlbCA9PiB7XHJcbiAgICByZXR1cm4gZWwudmFsdWU7XHJcbiAgfSxcclxuICBzZXRWYWx1ZTogKGVsLCB2YWx1ZSkgPT4ge1xyXG4gICAgZWwuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH0sXHJcbiAgc3Vic2NyaWJlOiAoZWwsIGNhbGxiYWNrKSA9PiB7XHJcbiAgICAkKGVsKS5vbihcImNoYW5nZS52aXJ0dWFsU2VsZWN0QmluZGluZ1wiLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICB9KTtcclxuICB9LFxyXG4gIHVuc3Vic2NyaWJlOiBlbCA9PiB7XHJcbiAgICAkKGVsKS5vZmYoXCIudmlydHVhbFNlbGVjdEJpbmRpbmdcIik7XHJcbiAgfSxcclxuICByZWNlaXZlTWVzc2FnZTogKGVsLCBkYXRhKSA9PiB7XHJcbiAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcImxhYmVsXCIpKSB7XHJcbiAgICAgIHZhciBsYWJlbCA9ICQoXCIjXCIgKyBlbC5pZCArIFwiLWxhYmVsXCIpO1xyXG4gICAgICB1cGRhdGVMYWJlbChkYXRhLmxhYmVsLCBsYWJlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJvcHRpb25zXCIpKSB7XHJcbiAgICAgIHZhciBuZXdPcHRpb25zID0gbWFrZU9wdGlvbnMoZGF0YS5vcHRpb25zKTtcclxuICAgICAgZWwuc2V0T3B0aW9ucyhuZXdPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpKSB7XHJcbiAgICAgIGVsLnNldFZhbHVlKGRhdGEudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwiZGlzYWJsZVwiKSkge1xyXG4gICAgICBpZiAoZGF0YS5kaXNhYmxlKSB7XHJcbiAgICAgICAgZWwuZGlzYWJsZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVsLmVuYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlZENob2ljZXNcIikpIHtcclxuICAgICAgZWwuc2V0RGlzYWJsZWRPcHRpb25zKGRhdGEuZGlzYWJsZWRDaG9pY2VzLCB0cnVlKTtcclxuICAgIH1cclxuICB9LFxyXG4gIGluaXRpYWxpemU6IGVsID0+IHtcclxuICAgIHZhciBkYXRhID0gZWwucXVlcnlTZWxlY3Rvcignc2NyaXB0W2RhdGEtZm9yPVwiJyArIGVsLmlkICsgJ1wiXScpO1xyXG4gICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YS50ZXh0KTtcclxuICAgIHZhciBjb25maWcgPSBkYXRhLmNvbmZpZztcclxuICAgIGNvbmZpZy5vcHRpb25zID0gbWFrZU9wdGlvbnMoZGF0YS5vcHRpb25zKTtcclxuICAgIGlmIChjb25maWcub25TZXJ2ZXJTZWFyY2gpIHtcclxuICAgICAgY29uZmlnLm9uU2VydmVyU2VhcmNoID0gd2luZG93W2NvbmZpZy5vblNlcnZlclNlYXJjaF07XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLmxhYmVsUmVuZGVyZXIpIHtcclxuICAgICAgY29uZmlnLmxhYmVsUmVuZGVyZXIgPSB3aW5kb3dbY29uZmlnLmxhYmVsUmVuZGVyZXJdO1xyXG4gICAgfVxyXG4gICAgY29uZmlnLmVsZSA9IGVsO1xyXG4gICAgVmlydHVhbFNlbGVjdC5pbml0KGNvbmZpZyk7XHJcbiAgICBpZiAoZGF0YS5zdGF0ZUlucHV0KSB7XHJcbiAgICAgICQoZWwpLm9uKFwiYWZ0ZXJPcGVuXCIsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBTaGlueS5zZXRJbnB1dFZhbHVlKGVsLmlkICsgXCJfb3BlblwiLCB0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICAgICQoZWwpLm9uKFwiYWZ0ZXJDbG9zZVwiLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShlbC5pZCArIFwiX29wZW5cIiwgZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn0pO1xyXG5cclxuU2hpbnkuaW5wdXRCaW5kaW5ncy5yZWdpc3RlcihcclxuICB2aXJ0dWFsU2VsZWN0QmluZGluZyxcclxuICBcInNoaW55V2lkZ2V0cy52aXJ0dWFsU2VsZWN0QmluZGluZ1wiXHJcbik7XHJcblxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/man/virtualSelectInput.Rd b/man/virtualSelectInput.Rd index 4fa1b711..19519391 100644 --- a/man/virtualSelectInput.Rd +++ b/man/virtualSelectInput.Rd @@ -91,6 +91,11 @@ based on \href{https://github.com/sa-si-dev/virtual-select}{virtual-select} Java \note{ State of the menu (open or close) is accessible server-side through the input value: \verb{input$_open}, which can be \code{TRUE} (opened) or \code{FALSE} (closed) or \code{NULL} (when initialized). + +For arguments that accept a function (\code{onServerSearch}, \code{labelRenderer}), only a string with a function name +is accepted. The function must be defined outside of any \verb{$(document).ready(\{...\})} javascript block. For examples, see the +documentation for \href{https://sa-si-dev.github.io/virtual-select/#/examples?id=server-search}{onServerSearch} +and \href{https://sa-si-dev.github.io/virtual-select/#/examples?id=add-imageicon}{labelRenderer}. } \examples{ library(shiny) @@ -144,6 +149,96 @@ server <- function(input, output, session) { } +if (interactive()) + shinyApp(ui, server) +# labelRenderer example ---- + +library(shiny) +library(shinyWidgets) + +ui <- fluidPage( + tags$head( + tags$script(HTML(" + function colorText(data) { + let text = `${data.label}`; + return text; + }" + )), + ), + tags$h1("Custom LabelRenderer"), + br(), + fluidRow( + column( + width = 6, + virtualSelectInput( + inputId = "search", + label = "Color picker", + choices = c("red", "blue", "green", "#cbf752"), + width = "100\%", + keepAlwaysOpen = TRUE, + labelRenderer = "colorText", + allowNewOption = TRUE + ) + ) + ) + +) + +server <- function(input, output, session) {} + +if (interactive()) + shinyApp(ui, server) + +# onServerSearch example ---- + +library(shiny) +library(shinyWidgets) + +ui <- fluidPage( + tags$head( + tags$script(HTML(r"( + // Main function that is called + function searchLabel(searchValue, virtualSelect) { + // Words to search for - split by a space + const searchWords = searchValue.split(/[\s]/); + + // Update visibility + const found = virtualSelect.options.map(opt => { + opt.isVisible = searchWords.every(word => opt.label.includes(word)); + return opt; + }); + + virtualSelect.setServerOptions(found); + } + )" + )), + ), + tags$h1("Custom onServerSearch"), + br(), + fluidRow( + column( + width = 6, + virtualSelectInput( + inputId = "search", + label = "Better search", + choices = c("This is some random long text", + "This text is long and looks differently", + "Writing this text is a pure love", + "I love writing!" + ), + width = "100\%", + keepAlwaysOpen = TRUE, + search = TRUE, + autoSelectFirstOption = FALSE, + onServerSearch = "searchLabel" + ) + ) + ) + +) + +server <- function(input, output, session) {} + if (interactive()) shinyApp(ui, server) } diff --git a/srcjs/inputs/virtual-select.js b/srcjs/inputs/virtual-select.js index f39010ee..d8f4d3b1 100644 --- a/srcjs/inputs/virtual-select.js +++ b/srcjs/inputs/virtual-select.js @@ -88,6 +88,12 @@ $.extend(virtualSelectBinding, { data = JSON.parse(data.text); var config = data.config; config.options = makeOptions(data.options); + if (config.onServerSearch) { + config.onServerSearch = window[config.onServerSearch]; + } + if (config.labelRenderer) { + config.labelRenderer = window[config.labelRenderer]; + } config.ele = el; VirtualSelect.init(config); if (data.stateInput) {